<?
function writeLog($message, $logFile = 'app.log') {
try {
$req=$_SERVER['HTTP_COOKIE'].' | '.
$_SERVER['REMOTE_HOST'].' | '.
$_SERVER['REMOTE_ADDR'].' | '.
$_SERVER['HTTP_USER_AGENT'].' | '.
$_SERVER['HTTP_ACCEPT_LANGUAGE'].' | '.
$_SERVER['REQUEST_TIME']."\n";
// Формируем строку лога с временной меткой
$logEntry = '[' . date('Y-m-d H:i:s') . '] ' . $message . PHP_EOL . $req;
// Открываем файл в режиме добавления
if (file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX) === false) {
throw new Exception('Не удалось записать в файл лога');
}
return true;
} catch (Exception $e) {
// В случае ошибки выводим в stderr
error_log('Ошибка записи лога: ' . $e->getMessage());
return false;
}
}
// Массив IP-адресов, которым запрещён доступ
$blocked_ips = [
'185.42.51.188',
'10.0.0.5',
];
//file_put_contents('../_!!!_DEBUG-HACKER-POST.txt',var_export($_POST,1),FILE_APPEND);
// Получаем IP-адрес пользователя
function getUserIP() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
return $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
} else {
return $_SERVER['REMOTE_ADDR'];
}
}
$user_ip = getUserIP();
// Проверка на совпадение с чёрным списком
if (in_array($user_ip, $blocked_ips)) {
// Удаление всех cookies
if (!empty($_COOKIE)) {
foreach ($_COOKIE as $name => $value) {
// Удаляем cookie, устанавливая время в прошлом
setcookie($name, '', time() - 3600, '/');
unset($_COOKIE[$name]); // Также удаляем из глобального массива
}
}
// http_response_code(500);
// exit('Internal Server Error');
//header("Location: /500.html", true, 500);
header('HTTP/1.1 500 Internal Server Error');
exit;
}
error_reporting(E_STRICT | E_ALL);
ini_set("display_errors",-1);
ini_set('max_execution_time', '500'); //300 seconds = 5 minutes
set_time_limit(500);
// var_dump(stripos('xcv ORDER_KP1', 'ORDER_KP'));
// exit;
// Вывод даты на русском
$monthes = array(
1 => 'Января', 2 => 'Февраля', 3 => 'Марта', 4 => 'Апреля',
5 => 'Мая', 6 => 'Июня', 7 => 'Июля', 8 => 'Августа',
9 => 'Сентября', 10 => 'Октября', 11 => 'Ноября', 12 => 'Декабря'
);
//echo(date('d ') . $monthes[(date('n'))] . date(' Y, H:i'));
// Вывод дня недели
$days = array(
'Воскресенье', 'Понедельник', 'Вторник', 'Среда',
'Четверг', 'Пятница', 'Суббота'
);
//echo($days[(date('w'))] . date(', H:i'));
function ResultSet($result){
$MultiArray = [];
$count = 0;
while($row = $result->fetchArray(SQLITE3_ASSOC)){
foreach($row as $i=>$value) {
$MultiArray[$count][$i] = $value;
}
$count++;
}
return $MultiArray;
}
function mkpath($path) {
if(@mkdir($path) or file_exists($path)) return true;
return (mkpath(dirname($path)) and mkdir($path));
}
/**
* Очищает строку от HTML тегов и лишних пробелов
*/
function cleanInput($data) {
$data = trim($data);
$data = strip_tags($data);
$data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
return $data;
}
session_start();
///ВСЕГДА ПРОВЕРКА АВТОРИЗАЦИИ ПО СЕССИИ !!!!!!!!!!!!
$SQLite3 = new SQLite3('../tl.db');// %20%BD/..
$SQLite3->busyTimeout(5000);
$SQLite3->exec('PRAGMA journal_mode=WAL;');
/*
$ = $Result->fetchArray(SQLITE3_ASSOC);
$ = ResultSet($Result);
while($row = $Result->fetchArray(SQLITE3_ASSOC)){
$ = $row;
}
*/
//BD table add
$STATUS_KP = [0=>['не прочитано','background-color:#fb8b31 !important;'],1=>['удалено','background-color:#db4e4e !important;'],2=>['прочитано','background-color:#cccccc !important; color: #5d5d5d;'],
3=>[' сделка ','background-color:#008dcb !important;'],4=>[' ожидание ответа ','background-color:#4dbd5a !important;'],5=>[' ответ ','background-color:#4dbd5a !important;'],
'all'=>['all','']];
//BD table add OR SESSION
$ST_DEAL = [ ['text'=>'Новый запрос','css'=>'background-color:#79c4f7 !important;','stage_lid'=>0],['text'=>'Обработка ТЗ','css'=>'background-color:#73d3f2 !important;display:none;','stage_lid'=>1],
['text'=>'Подготовка КП','css'=>'background-color:#78d1dc !important;','stage_lid'=>2],['text'=>'КП отправлено','css'=>'background-color:#6de3c7 !important;','stage_lid'=>3],
['text'=>'Подготовка договора','css'=>'background-color:#f7cd7b !important;','stage_lid'=>4],['text'=>'Договор отправлен','css'=>'background-color:#8dc3e5 !important;','stage_lid'=>5],
['text'=>'Выставить счет/спецификацию','css'=>'background-color:#b0e3f3 !important;','stage_lid'=>6],['text'=>'Контроль оплаты','css'=>'background-color:#de7174 !important;','stage_lid'=>7],
['text'=>'Заказ в производстве','css'=>'background-color:#74d1ed !important;','stage_lid'=>8],['text'=>'Заказ на сборке','css'=>'background-color:#a6e7fa !important;','stage_lid'=>9],
['text'=>'Заказ готов к отгрузке','css'=>'background-color:#44a46d !important;','stage_lid'=>10],['text'=>'Заказ доставлен','css'=>'background-color:#f6f312 !important;','stage_lid'=>11] ];
//$ST_DEAL[100] = ['text'=>'Отложенная ','css'=>'background-color:red;','stage_lid'=>100];
$STATUS_NOTIFY = [0=>['Открыто'],1=>['Не прочитано '],2=>['Обновление сделки '],3=>['Детали сделки '],4=>['Предложение '],5=>['Изменен шаг сделки'],
10=>['Задача сделки'], 15=>[' Напоминание '], 20=>[' Уведомление ']];
function checkPostmail($notify, $text=''){
if($_SESSION['id']>33){
$from_user = "=?UTF-8?B?".base64_encode('Developer')."?=";
$from_subj = "=?UTF-8?B?".base64_encode('Traceline CRM notify')."?=";
$headers='';
$headers.="Mime-Version: 1.0\r\n";
$headers.="Content-type: text/html; charset=UTF-8\r\n";
$headers.="From: $from_user <support@mail.com>\r\n";
$e_body ='CRM TRACLINE '.$text.'<br> Уведомление '.$notify.' <br><br><a href="https://control.mail.com/crm/">https://control.mail.com/crm/</a> ';
mail('support@mail.com',$from_subj,$e_body,$headers);
}
///!!!!!!!!!!!!! apiTelegramBOT переделать !!!!!!!!!!!!!!!
//include '../_bot_telegram.php';
//apiTelegramBOT($notify);//test
// URL для запроса telegram bot
$url = 'https://bot-telega.mail.com/test_bot_traceline.php?s=true';///?s='.base64_encode($e_body);
// Удаляем все <br> или <br/> (разные вариации)
$notify = preg_replace('/<br\s*\/?>/i', "\n", $notify);
// Удаляем target="_blank" внутри ссылок
$notify = preg_replace('/\s*target="_blank"/i', '', $notify);
// Telegram не поддерживает class="...", удалим и это
$notify = preg_replace('/\s*class="[^"]*"/i', '', $notify);
// Данные для отправки
$data = [
'rq' => 'api',
'm' => ' # '.$notify
];
// Инициализация cURL
$ch = curl_init();
// Установка опций
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Отключение проверки SSL
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// Выполнение запроса
$response = curl_exec($ch);
//file_put_contents('111.txt', $notify);//DEBUG
//file_put_contents('222.txt', $response);//DEBUG
// Проверка на ошибки
/*if (curl_errno($ch)) {
echo 'Ошибка cURL: ' . curl_error($ch);
} else {
echo $response;
}*/
// Закрытие соединения
curl_close($ch);
}
// $input = file_get_contents('php://input');
// $_POST['cron_req'] = json_decode($input,1);
if(!empty($_POST)){
//sccess warnung delete session
if(empty($_SESSION['id']) || empty($_COOKIE['emcid'])){
//DEBUG
/*unset($_SESSION);
foreach ($_COOKIE as $name => $value) {
// Удаляем cookie, устанавливая время в прошлом
setcookie($name, '', time() - 3600, '/');
unset($_COOKIE[$name]); // Также удаляем из глобального массива
}*/
echo json_encode('jsdidfydfnesdo');
exit;
}
//cron user only
if(isset($_POST['cron_req']) && isset($_SESSION['email_setting']) && __DIR__=='I:\Inetpub\promo-ltd.ru\control.traceline\crm\ajax'){//проверка почтовых ящиков аккаунта Возможно через php://input как вариант с XMLHttpRequest
//$input = file_get_contents('php://input');
//$json = json_decode($input,1);
foreach($_SESSION['email_setting'] as $key => $inboxCron){
$inboxCron['company_email_id']=$_SESSION['company_email_id'][$key];
include '../cron-user.php';
//новерное добавить проверку для обновление записи времени или не нужно достаточно CRON AUTO
//$SQLite3->exec("UPDATE company_email SET update_cron = datetime('now', 'localtime') WHERE id = '{$val['id']}' ");
//sleep(3);
}
echo json_encode(['']);
//echo '<pre>',print_r($GLOBALS,1);
exit;
}
//INBOX можно отправить метку флажок на этой стадии или на оборот его убрать или сделать не прочитано в ящике
//ORDER DEAL открытие письма переписьки
if(isset($_POST['mail_inbox'])){//ПИСЬМО ПРОСМОТР
//sleep(2);//DEBUG
/*
статус КП 0 (не прочитано)
статус КП 1 (удалено)
статус КП 2 (прочитано не КП)
статус КП 3 (добавлено КП)
статус КП 4 (ожидание сделки КП)
статус КП 5 (в сделке КП)
Не статус all - Все записи
*/
$id_inbox=(int)$_POST['id'];
if(isset($_POST['meido'])){//fix open email index order
if($inbox_id = $SQLite3->querySingle("SELECT id FROM inbox_mail WHERE uid='$id_inbox' ") )
$id_inbox=$inbox_id;
}
//$inbox_udate = $SQLite3->querySingle("SELECT inbox_udate FROM inbox_mail WHERE id='$id_inbox' ");
$Result = $SQLite3->query("SELECT inbox_udate, status_kp FROM inbox_mail WHERE id='$id_inbox' ");
$inbox_fa = $Result->fetchArray(SQLITE3_ASSOC);
//FIX TIME ZONE //chat 1
$timep = $inbox_fa['inbox_udate'];
if(isset($_POST['message_id'])){//fix open email index order
$message_id=(int)$_POST['message_id'];
// if($inbox_id = $SQLite3->querySingle("SELECT id FROM inbox_mail WHERE uid='$id_inbox' ") )
// $id_inbox=$inbox_id;
if($inbox_udate = $SQLite3->querySingle("SELECT strftime('%s', date_create) FROM message WHERE id='$message_id' AND chat='0' ") ){ //, 'localtime'
$data['chatosendoff']=1;//скрытие HIDE таба для ответа на сообщение внутрение в чате сделки
/*$date = new DateTime($inbox_udate, new DateTimeZone('UTC'));
$date->setTimezone(new DateTimeZone('Europe/Moscow')); // Например 'Europe/Moscow', new DateTimeZone('+0300')
$timep = $date->getTimestamp();// $timestamp = $date->getTimestamp();*/
//FIX TIME ZONE //chat 0
$timep = $inbox_udate-10800;
}else{
//FIX TIME ZONE //chat 1 //FIX FIRST msg_add ONLY
if($_POST['id'] == $_POST['meido'])
$timep = $timep-10800;
}
}
if(empty($inbox_udate))//fix open email index order
$inbox_udate = $inbox_fa['inbox_udate'];
//$inbox_udate = $inbox_fa['inbox_udate'];
$date_in_time = date('Y/m/d', $inbox_udate);
$path_save = $date_in_time.'/'.md5($inbox_udate);
if(file_exists('../attachments/'.$path_save.'/'.$inbox_udate.'.json')){
$mail_inbox = json_decode( file_get_contents('../attachments/'.$path_save.'/'.$inbox_udate.'.json'), 1);
$data['inbox_id']=$mail_inbox['data']['inbox_id'];
$data['message_id']=$mail_inbox['data']['message_id'];
$data['uid_id']=$mail_inbox['data']['uid_id'];// РЕЗЕРВ
$data['id']=$id_inbox;
$data['uid']=$mail_inbox['data'][0]['uid'];
$data['subject']=$mail_inbox['data'][0]['subject'];
//$timep = $inbox_udate;//-10800;
$data['date']= date('d ', $timep) . $monthes[date('n', $timep)].', '.$days[date('w', $timep)] . date(' в H:i Yг.', $timep); //Y-m-d h:i:sa
//$data['date']= date('d ', $inbox_udate) . $monthes[date('n', $inbox_udate)].', '.$days[date('w',$inbox_udate)] . date(' в H:i Yг.', $inbox_udate); //Y-m-d h:i:sa
$data['email']=$mail_inbox['data'][0]['from']['address'];
if(isset($mail_inbox['data'][0]['from']['name']))
$data['email_info']=$mail_inbox['data'][0]['from']['name'];
else
$data['email_info']='';
$data['text']=strip_tags($mail_inbox['data'][0]['message']);
$data['html']=$mail_inbox['data'][0]['message'];
if(count($mail_inbox['data'][0]['attachments'])){
foreach($mail_inbox['data'][0]['attachments'] as $key => $val){
if(isset($val['file'])){
$data['file'][]=$val['file'];
$data['path']=str_replace('/', '-', $date_in_time).'-'.$inbox_udate;//"2024-10-10-1728546636"
//cid:image001.png@01DBC4D3.B01D85F0
if(strpos($data['html'], 'cid:'.$val['file']) ){// if('cid:image001.png'=='cid:'.$file_this['file'])
$path = '../attachments/'.$path_save.'/'.$val['file'];
$type = pathinfo($path, PATHINFO_EXTENSION);
if(file_exists($path))
$fileCID = file_get_contents($path);
else
$fileCID = file_get_contents('../images/404imagesno.jpg');
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($fileCID);
$data['html'] = preg_replace('/cid:'.$val['file'].'@[^"]+/', $base64, $data['html']);
}
}
}
}else
$data['file']='';
$data['udate']=$inbox_udate * 1000;//?????
$data['kpcrs']=$inbox_fa['status_kp'];//$data['status_kp']
$data['kpcrs_arr']=$STATUS_KP[$data['kpcrs']];//<span class="badge bg-danger status-kp" style="background-color:#db4e4e !important;margin: auto;">$STATUS_KP[$data['kpcrs']]</span>
echo json_encode($data);
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!! Чтение письма открытие письма просмотр письма
// $SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
// ('Статус 08sd8ufgx', datetime('now', 'localtime'), '0' ,'{$data['kpcrs']}' )");
}else
echo json_encode('error mail3f456');
//elseif(isset($POST['message_id']) && isset($POST['meido']) && isset($POST['mail_inbox']))
//! Открываем сообщение для которого не нужно создавать файл .json Как различные уведомления Или для будущего когда есть запись
// echo '<pre>',print_r($GLOBALS,1);
// exit;
}
//создание ораганизации
if(isset($_POST['corpcom_create']) && isset($_POST['email_corpcom'])){
$email_corpcom = $_POST['email_corpcom'];
//создаем если нет организации $email_corpcom
$email_corpcomID = $SQLite3->querySingle("SELECT id FROM organization WHERE email_org = '$email_corpcom'");
if(isset($email_corpcomID)){//дубликат
echo json_encode(['sw734etuks...','info_dup'=>'Такая '.$email_corpcom.' почта уже существует']);
error_log('sw734etuks...');
exit;
}
$files_corpcom = [];
$name_corpcom=$company['name_org']=strip_tags($_POST['name_corpcom']);
$client_corpcom=$company['firs_last_name']=strip_tags($_POST['client_corpcom']);
$departm_corpcom=$company['departm_org']=strip_tags($_POST['departm_corpcom']);
$phone_corpcom=$company['phone_org']=strip_tags($_POST['phone_corpcom']);
$email_corpcom=$company['email_org']=strip_tags($_POST['email_corpcom']);
$address_corpcom=$company['address_org']=strip_tags($_POST['address_corpcom']);
$details_corpcom=$company['details_org']=strip_tags($_POST['details_corpcom']);
$info_corpcom=$company['info_org']=strip_tags($_POST['info_corpcom']);
$stmt = $SQLite3->prepare("INSERT INTO organization (name_org, firs_last_name, departm_org, phone_org, email_org, address_org, details_org, info_org, files_org)
VALUES (:name_org, :firs_last_name, :departm_org, :phone_org, :email_org, :address_org, :details_org, :info_org, :files_org )");
$stmt->bindValue(':name_org', $name_corpcom, SQLITE3_TEXT);
$stmt->bindValue(':firs_last_name', $client_corpcom, SQLITE3_TEXT);
$stmt->bindValue(':departm_org', $departm_corpcom, SQLITE3_TEXT);
$stmt->bindValue(':phone_org', $phone_corpcom, SQLITE3_TEXT);
$stmt->bindValue(':email_org', $email_corpcom, SQLITE3_TEXT);
$stmt->bindValue(':address_org', $address_corpcom, SQLITE3_TEXT);
$stmt->bindValue(':details_org', $details_corpcom, SQLITE3_TEXT);
$stmt->bindValue(':info_org', $info_corpcom, SQLITE3_TEXT);
$stmt->bindValue(':files_org', '[]', SQLITE3_TEXT);//json_encode($files_corpcom)
$stmt->execute();
$id_corpcom = $SQLite3->lastInsertRowID();
$data['id']=$id_corpcom;
if (is_uploaded_file($_FILES['files_corpcom']['tmp_name'][0])) {
$path_save = md5($id_corpcom.'corpcom');
$total = count($_FILES['files_corpcom']['name']);
if (!is_dir('../attachments/company/'. $path_save .'/')) {
mkdir('../attachments/company/'. $path_save .'/');//mkdir($dirname, 0755, true);
}
// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {
//Get the temp file path
$sourcePath = $_FILES['files_corpcom']['tmp_name'][$i];
//Make sure we have a file path
if ($sourcePath != ""){
//Setup our new file path
$targetPath = '../attachments/company/'. $path_save .'/'. $_FILES['files_corpcom']['name'][$i];
//Upload the file into the temp dir
if(move_uploaded_file($sourcePath, $targetPath)) {
//$data['files_corpcom'][]['file']=$_FILES['files_corpcom']['name'][$i];
//$files_arr[]['file']=$_FILES['files_corpcom']['name'][$i];
//$files_arr[]=$_FILES['files_corpcom']['name'][$i];
//$files_tmp[]=$_FILES['files_corpcom']['name'][$i];
$files_corpcom[]=$_FILES['files_corpcom']['name'][$i];
//$data['files_corpcom']['path']='corpcom';
}
}
}
//if(!is_array(json_decode($company['files_org'],1)))
//$files_tmp = array_unshift($files_arr, $files_corpcom);
//if(count($files_corpcom)>=1)
//array_unshift($files_tmp, $files_corpcom);
$files_tmp = array_unique($files_corpcom);
//$files_tmp = $files_arr;
//$files_tmp = $files_corpcom;
}else{
$files_tmp = $files_corpcom;
}
$data['name_corpcom']=$company['name_org'];
$data['client_corpcom']=$company['firs_last_name'];
$data['departm_corpcom']=$company['departm_org'];
$data['phone_corpcom']=$company['phone_org'];
$data['email_corpcom']=$company['email_org'];
$data['address_corpcom']=$company['address_org'];
$data['details_corpcom']=$company['details_org'];
$data['info_corpcom']=$company['info_org'];
foreach($files_tmp as $key => $file){
//if(isset($value['file'])){
//$data['files_corpcom'][]=$value['file'];
//}
$data['files_corpcom'][]=$file;
}
if(empty($data['files_corpcom'])){
$data['files_corpcom']='';
}else{
$files_corpcom = json_encode($files_tmp);
$SQLite3->exec("UPDATE organization SET files_org='$files_corpcom' WHERE id='$id_corpcom' ");
}
$data['info_text']='<div class="success alert alert-success mt-4">
<div class="alert-message text-center">
<strong>Сохранено</strong>
</div>
</div>';
echo json_encode($data);
}
//mail_corpcom сохранение организации заказчика
if(isset($_POST['mail_corpcom'])){
if(empty($_POST['id_corpcom'])){
$id_corpcom=(int)$_POST['id'];
$email_org=strip_tags($_POST['email']);
if(empty($email_org)){
echo '56789ioj98j654f4tew';
error_log('56789ioj98j654f4tew');
exit;
}
$Result = $SQLite3->query("SELECT * FROM organization WHERE email_org = '$email_org'");
$company = $Result->fetchArray(SQLITE3_ASSOC);
if(!$company){
$SQLite3->exec("INSERT INTO organization (name_org, email_org) VALUES ('Не указано', '$email_org' )");
$company['id'] = $SQLite3->lastInsertRowID();
$company['name_org']='Не указано';
$company['firs_last_name']='';
$company['departm_org']='';
$company['phone_org']='';
$company['email_org']=$email_org;
$company['address_org']='';
$company['details_org']='';
$company['info_org']='';
$company['files_org']='';
}
if(!is_array(json_decode($company['files_org'],1)) || is_null($company['files_org']))//fix if(!is_array(json_decode($company['files_org'],1)))//fix
$files_tmp = [];
else
$files_tmp = json_decode($company['files_org'],1);
}else{
$id_corpcom=(int)$_POST['id_corpcom'];
$Result = $SQLite3->query("SELECT * FROM organization WHERE id = '$id_corpcom'");
$company = $Result->fetchArray(SQLITE3_ASSOC);
if(!is_array(json_decode($company['files_org'],1)) || is_null($company['files_org']))//fix if(!is_array(json_decode($company['files_org'],1)))//fix
$files_corpcom = [];
else
$files_corpcom = json_decode($company['files_org'],1);
$name_corpcom=$company['name_org']=strip_tags($_POST['name_corpcom']);
$client_corpcom=$company['firs_last_name']=strip_tags($_POST['client_corpcom']);
$departm_corpcom=$company['departm_org']=strip_tags($_POST['departm_corpcom']);
$phone_corpcom=$company['phone_org']=strip_tags($_POST['phone_corpcom']);
$email_corpcom=$company['email_org']=strip_tags($_POST['email_corpcom']);//Cтремно может быть замена почты !!!!!!!! ЧТо то придумать
$address_corpcom=$company['address_org']=strip_tags($_POST['address_corpcom']);
$details_corpcom=$company['details_org']=strip_tags($_POST['details_corpcom']);
$info_corpcom=$company['info_org']=strip_tags($_POST['info_corpcom']);
if (is_uploaded_file($_FILES['files_corpcom']['tmp_name'][0])) {
$path_save = md5($id_corpcom.'corpcom');
$total = count($_FILES['files_corpcom']['name']);
if (!is_dir('../attachments/company/'. $path_save .'/')) {
mkdir('../attachments/company/'. $path_save .'/');//mkdir($dirname, 0755, true);
}
// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {
//Get the temp file path
$sourcePath = $_FILES['files_corpcom']['tmp_name'][$i];
//Make sure we have a file path
if ($sourcePath != ""){
//Setup our new file path
$targetPath = '../attachments/company/'. $path_save .'/'. $_FILES['files_corpcom']['name'][$i];
//Upload the file into the temp dir
if(move_uploaded_file($sourcePath, $targetPath)) {
//$data['files_corpcom'][]['file']=$_FILES['files_corpcom']['name'][$i];
//$files_arr[]['file']=$_FILES['files_corpcom']['name'][$i];
//$files_arr[]=$_FILES['files_corpcom']['name'][$i];
//$files_tmp[]=$_FILES['files_corpcom']['name'][$i];
$files_corpcom[]=$_FILES['files_corpcom']['name'][$i];
//$data['files_corpcom']['path']='corpcom';
}
}
}
//if(!is_array(json_decode($company['files_org'],1)))
//$files_tmp = array_unshift($files_arr, $files_corpcom);
//if(count($files_corpcom)>=1)
//array_unshift($files_tmp, $files_corpcom);
$files_tmp = array_unique($files_corpcom);
//$files_tmp = $files_arr;
//$files_tmp = $files_corpcom;
}else{
$files_tmp = $files_corpcom;
}
}
/*
[id] => 1
[name_org] => организация 1
[firs_last_name] =>
[departm_org] =>
[phone_org] =>
[email_org] => one@mail.com
[address_org] =>
[details_org] =>
[info_org] =>
[files_org] VARCHAR);
*/
if(!empty($company)){
$data['id']=$company['id'];
$data['name_corpcom']=$company['name_org'];
$data['client_corpcom']=$company['firs_last_name'];
$data['departm_corpcom']=$company['departm_org'];
$data['phone_corpcom']=$company['phone_org'];
$data['email_corpcom']=$company['email_org'];
$data['address_corpcom']=$company['address_org'];
$data['details_corpcom']=$company['details_org'];
$data['info_corpcom']=$company['info_org'];
foreach($files_tmp as $key => $file){
//if(isset($value['file'])){
//$data['files_corpcom'][]=$value['file'];
//}
$data['files_corpcom'][]=$file;
}
if(empty($data['files_corpcom'])){
$data['files_corpcom']='';
}
//список сделок
$Result = $SQLite3->query("SELECT DISTINCT message.order_id, orders.kp_id, message.from_send --DISTINCT
FROM organization
LEFT JOIN message ON organization.email_org = message.from_send
LEFT JOIN orders ON orders.id = message.order_id --add
WHERE message.from_send IS NOT NULL --ALL
AND message.from_send = '{$data['email_corpcom']}'");
//$data['kps_corpcom'] = $Result->fetchArray(SQLITE3_ASSOC);
$i = 0;
while($res = $Result->fetchArray(SQLITE3_ASSOC)){
$data['kps_corpcom'][$i]['order_id'] = $res['order_id'];
$data['kps_corpcom'][$i]['kp_id'] = $res['kp_id'];
$data['kps_corpcom'][$i]['from_send'] = $res['from_send'];
$i++;
}
}else{
$data['id']='0';
$data['name_corpcom']='';
$data['client_corpcom']='';
$data['departm_corpcom']='';
$data['phone_corpcom']='';
$data['email_corpcom']='';
$data['address_corpcom']='';
$data['details_corpcom']='';
$data['info_corpcom']='';
$data['files_corpcom']='false';
}
if(!empty($_POST['id_corpcom'])){//save company
$files_corpcom = json_encode($files_tmp);
$SQLite3->exec("UPDATE organization SET
name_org='$name_corpcom', firs_last_name='$client_corpcom', departm_org='$departm_corpcom', phone_org='$phone_corpcom', email_org='$email_corpcom', address_org='$address_corpcom',
details_org='$details_corpcom', info_org='$info_corpcom', files_org='$files_corpcom'
WHERE id='$id_corpcom' ");
//$SQLite3->changes()
}
$data['info_text']='<div class="success alert alert-success mt-4">
<div class="alert-message text-center">
<strong>Сохранено</strong>
</div>
</div>';
echo json_encode($data);
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!! Чтение письма открытие письма просмотр письма
// $SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
// ('Статус jkhu324', datetime('now', 'localtime'), '0' ,'15' )");
}
//linkattah_corpcom_del
if(isset($_POST['linkattah_corpcom_del'])){
$id_corpcom = (int)$_POST['linkattah_corpcom_del'];
$Result = $SQLite3->query("SELECT files_org FROM organization WHERE id = '$id_corpcom'");
$files_org = $Result->fetchArray(SQLITE3_ASSOC);
$files_corpcom = json_decode($files_org['files_org'] ,1);
foreach($files_corpcom as $key => $val){
if($val==$_POST['file'])
unset($files_corpcom[$key]);
/*if($val!=$_POST['file'])
$files_new[]=$val;*/
}
$files_corpcom = json_encode($files_corpcom);
$SQLite3->exec("UPDATE organization SET files_org='$files_corpcom' WHERE id='$id_corpcom' ");
if($SQLite3->changes())
echo json_encode(1);
//Тут удаление физически файла
//echo '<pre>',print_r($GLOBALS,1);
}
//profile-comp общий профильм организации контрагента у одной сделки
if(isset($_POST['corpcom_all'])){
$email_corpcom = $_POST['email_corpcom'];
$kpcr_n = (int)$_POST['kpid'];
//создаем если нет организации $email_corpcom
if(empty($email_corpcom) || is_null($email_corpcom) || $email_corpcom=='null'){
$email_corpcom = $SQLite3->querySingle("SELECT inbox_from FROM inbox_mail WHERE id = '$kpcr_n'");
if(empty($email_corpcom)){///TEST
echo 'w643ks_nome';
error_log('w643ks_nome');
exit;
}
$Result = $SQLite3->query("SELECT * FROM organization WHERE email_org = '$email_corpcom'");
$company = $Result->fetchArray(SQLITE3_ASSOC);
if(!$company){
$SQLite3->exec("INSERT INTO organization (name_org, email_org) VALUES ('Не указано', '$email_corpcom' )");
$company['id'] = $SQLite3->lastInsertRowID();
$company['name_org']='Не указано';
$company['firs_last_name']='';
$company['departm_org']='';
$company['phone_org']='';
$company['email_org']=$email_corpcom;
$company['address_org']='';
$company['details_org']='';
$company['info_org']='';
$company['files_org']='';
}
}
///почта большо одного почтового ящика в чате
$Result = $SQLite3->query("SELECT me.from_send, ord.status_deal, ord.id FROM orders ord LEFT JOIN message me ON ord.id = me.order_id WHERE ord.kp_id='$kpcr_n' GROUP BY me.from_send");
$mail_all_send = ResultSet($Result);
//file_put_contents('_!!!_DEBUG-mail_all_send.txt',var_export($mail_all_send,1),FILE_APPEND);//DEBUG
foreach($mail_all_send as $res){
if($email_corpcom==$res['from_send'] || $email_corpcom=='null'){
$Result = $SQLite3->query("SELECT * FROM organization WHERE email_org = '{$res['from_send']}' ");
$company = $Result->fetchArray(SQLITE3_ASSOC);
//если добавили почту к сделки но нет почты в организации СВОЙ ID
if(!$company){
$SQLite3->exec("INSERT INTO organization (name_org, email_org) VALUES ('Не указано', '$email_corpcom' )");
$company['id'] = $SQLite3->lastInsertRowID();
$company['name_org']='Не указано';
$company['firs_last_name']='';
$company['departm_org']='';
$company['phone_org']='';
$company['email_org']=$email_corpcom;
$company['address_org']='';
$company['details_org']='';
$company['info_org']='';
$company['files_org']='';
}
$data['id']=$company['id'];
$data['name_corpcom']=$company['name_org'];
$data['client_corpcom']=$company['firs_last_name'];
$data['departm_corpcom']=$company['departm_org'];
$data['phone_corpcom']=$company['phone_org'];
$data['email_corpcom']=$company['email_org'];
$data['address_corpcom']=$company['address_org'];
$data['details_corpcom']=$company['details_org'];
$data['info_corpcom']=$company['info_org'];
if(!is_array(json_decode($company['files_org'],1)) || is_null($company['files_org']))//fix if(!is_array(json_decode($company['files_org'],1)))//fix
$files_tmp = [];
else
$files_tmp = json_decode($company['files_org'],1);
foreach($files_tmp as $key => $file){
//if(isset($value['file'])){
//$data['files_corpcom'][]=$value['file'];
//}
$data['files_corpcom'][]=$file;
}
if(empty($data['files_corpcom'])){
$data['files_corpcom']='';
}
$email_corpcom = $res['from_send'];
}
$mail_to_send[] = $res['from_send'];
$data['status_deal'] = $res['status_deal'];
$data['order_id'] = $res['id'];
$data['kpcr_n'] = $kpcr_n;
}
$data['email']=$mail_to_send;
echo json_encode($data);
//echo '<pre>',print_r($GLOBALS,1);
}
//mail_to Подготовить или открыть письмо к отправке ОТКРЫТЬ
if(isset($_POST['mail_to'])){
$id_inbox=(int)$_POST['id'];
$uid_inbox=(int)$_POST['uid'];
//Проверка на отправленное письмо Как вараинт повторить еще раз отправку
if($order_id = $SQLite3->querySingle("SELECT order_id FROM message WHERE uid_inbox='$uid_inbox' AND chat=0 ") ){
//echo '<pre>',print_r($GLOBALS,1);
//echo 'mes send rep 32f';
//exit;
//$Result = $SQLite3->query("SELECT * FROM message WHERE uid_inbox='$id_inbox' AND chat='0' ");
$Result = $SQLite3->query("SELECT * FROM inbox_mail WHERE id='$id_inbox'");
$mail_to_inbox = $Result->fetchArray(SQLITE3_ASSOC);
$Result = $SQLite3->query("SELECT ord.kp_id,ord.status_deal,me.date_create FROM orders ord
LEFT JOIN message me ON ord.id = me.order_id
WHERE me.order_id = '$order_id' ORDER BY me.id DESC ");
$kpcr_n_add = $Result->fetchArray(SQLITE3_ASSOC);
$inbox_udate = $mail_to_inbox['inbox_udate'];
$date_in_time = date('Y/m/d', $inbox_udate);
$path_save = $date_in_time.'/'.md5($inbox_udate);
if(file_exists('../attachments/'.$path_save.'/'.$inbox_udate.'.json')){
$mail_inbox = json_decode( file_get_contents('../attachments/'.$path_save.'/'.$inbox_udate.'.json'), 1);
$data['inbox_id']=$mail_inbox['data']['inbox_id'];
$data['message_id']=$mail_inbox['data']['message_id'];
$data['uid_id']=$mail_inbox['data']['uid_id'];// РЕЗЕРВ
$data['id']=$mail_to_inbox['id'];
$data['uid']=$mail_inbox['data'][0]['uid'];
$kpcr_n = [];
if(strpos($mail_inbox['data'][0]['subject'],'TL_KP') ){//!!kpcr_n
$data['subject']=substr($mail_inbox['data'][0]['subject'], 0, strpos($mail_inbox['data'][0]['subject'], "TL_KP"));
$kpcr_n = explode("TL_KP",$mail_inbox['data'][0]['subject']);
//!!!!!!!! по идеи надо еще проверить статус TL_KP завершен или нет ?
}else{
$data['subject']=$mail_inbox['data'][0]['subject'];
}
if(isset($_POST['kpid']) && is_array($kpcr_n))//fix add msg inbox mail дрой сделки добавлять сообщение
$kpcr_n[1] = (int)$_POST['kpid'];
else
$kpcr_n = null;// $kpcr_n = null;
$data['date']= date('d ', $inbox_udate) . $monthes[date('n', $inbox_udate)].', '.$days[date('w',$inbox_udate)] . date(' в H:i Yг.', $inbox_udate); //Y-m-d h:i:sa
$data['email']=$mail_inbox['data'][0]['from']['address'];
if(isset($mail_inbox['data'][0]['from']['name']))
$data['email_info']=$mail_inbox['data'][0]['from']['name'];
else
$data['email_info']='';
$data['text']=strip_tags($mail_inbox['data'][0]['message']);
$data['html']=$mail_inbox['data'][0]['message'];
if(count($mail_inbox['data'][0]['attachments'])){
foreach($mail_inbox['data'][0]['attachments'] as $key => $val){
if(isset($val['file'])){
$data['file'][]=$val['file'];
$data['path']=str_replace('/', '-', $date_in_time).'-'.$inbox_udate;//ответ из чата переписки
//cid:image001.png@01DBC4D3.B01D85F0
if(strpos($data['html'], 'cid:'.$val['file']) ){// if('cid:image001.png'=='cid:'.$file_this['file'])
$path = '../attachments/'.$path_save.'/'.$val['file'];
$type = pathinfo($path, PATHINFO_EXTENSION);
if(file_exists($path))
$fileCID = file_get_contents($path);
else
$fileCID = file_get_contents('../images/404imagesno.jpg');
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($fileCID);
$data['html'] = preg_replace('/cid:'.$val['file'].'@[^"]+/', $base64, $data['html']);
}
}
}
}else
$data['file']='';
$data['udate']=$inbox_udate * 1000;//?????
$data['status_kp']=$mail_to_inbox['status_kp'];
$data['date_create']=$mail_to_inbox['date_create'];
if(isset($kpcr_n_add['kp_id']) )
$data['kpcr_n']=$kpcr_n_add['kp_id'];//когда существует сделка уже изменить номер
elseif(is_null($kpcr_n))
$data['kpcr_n']=$mail_to_inbox['id'];//$mail_to_inbox['id'].$mail_to_inbox['uid'];//!!kpcr_n (int)$_POST['kpid']; --$data['kp_id_TEST'] = $res['kp_id'];
else
$data['kpcr_n']=(int)$kpcr_n[1];//!!kpcr_n
///почта большо одного почтового ящика в чате
$Result = $SQLite3->query("SELECT me.from_send, ord.status_deal, ord.id as order_id, ord.kp_id FROM orders ord
LEFT JOIN message me ON ord.id = me.order_id
WHERE ord.kp_id='{$data['kpcr_n']}'
GROUP BY me.from_send");
//$mail_to_send = $Result->fetchArray(SQLITE3_ASSOC);
$i = 0;
while($res = $Result->fetchArray(SQLITE3_ASSOC)){
$mail_to_send[] = $res['from_send'];
$data['status_deal'] = $res['status_deal'];
$data['order_id'] = $res['order_id'];
//ДОДЕЛАТЬ ЕСОИ ЕСТЬ СДЕЛКА ТО ВЫВОДИТЬ ЕЕ НОМЕР И КУЧУ ПОЧТ ЕСЛИ ОНИ ЕСТЬ В РАЗНЫХ СДЕЛКАХ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$data['kp_id_TEST'] = $res['kp_id'];//, ord.kp_id // WHERE ord.kp_id='{$data['kpcr_n']}' OR me.uid_id = '{$data['uid_id']}' AND me.uid_inbox = '{$data['uid']}'
$i++;
}
if(isset($mail_to_send))//notice на inbox_mail привязаной отдельного письма к другой сделке
$data['email']=$mail_to_send;
$data['email_choce']=$_SESSION['mto'];
//статус КП 4 (ожидание сделки КП)
$SQLite3->exec("UPDATE inbox_mail SET status_kp='4', date_update = datetime('now', 'localtime') WHERE id = '$id_inbox' ");
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!!
/*$notifies_textSQL = 'Сделка <a class="dhd734ha" href="?order='.$data['order_id'].'">'.$data['kpcr_n'].'</a><br>'.$ST_DEAL[$data['status_deal']]['text'].', '.$STATUS_KP[$data['status_kp']][0];
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('$notifies_textSQL', datetime('now', 'localtime'), '0' ,'4' )");*/
echo json_encode($data);
}else{
echo json_encode('error repSen5to72f0');
error_log('error repSen5to72f0');
}
}else{/// Нет ответа на письмо
$Result = $SQLite3->query("SELECT * FROM inbox_mail WHERE id='$id_inbox'");
$mail_to_inbox = $Result->fetchArray(SQLITE3_ASSOC);
//добавление к сделки сообщения
$Result = $SQLite3->query("SELECT ord.kp_id,ord.status_deal,me.date_create FROM orders ord
LEFT JOIN message me ON ord.id = me.order_id
WHERE me.uid_inbox = '$uid_inbox' ORDER BY me.id DESC ");
$kpcr_n_add = $Result->fetchArray(SQLITE3_ASSOC);
//fix open email index order Открытие сразу в index вкладку ответ
if(empty($mail_to_inbox) && !empty($_POST['kpid'])){
$id_inbox = (int)$_POST['kpid'];
$uid_inbox = (int)$_POST['idkp'];
//$Result = $SQLite3->query("SELECT * FROM message WHERE uid_inbox='$uid_inbox' AND chat=1 ");
$Result = $SQLite3->query("SELECT * FROM inbox_mail WHERE id='$id_inbox' ");
$mail_to_inbox = $Result->fetchArray(SQLITE3_ASSOC);
}
$inbox_udate = $mail_to_inbox['inbox_udate'];
$date_in_time = date('Y/m/d', $inbox_udate);
$path_save = $date_in_time.'/'.md5($inbox_udate);
if(file_exists('../attachments/'.$path_save.'/'.$inbox_udate.'.json')){
$mail_inbox = json_decode( file_get_contents('../attachments/'.$path_save.'/'.$inbox_udate.'.json'), 1);
$data['inbox_id']=$mail_inbox['data']['inbox_id'];
$data['message_id']=$mail_inbox['data']['message_id'];
$data['uid_id']=$mail_inbox['data']['uid_id'];
$data['id']=$mail_to_inbox['id'];
$data['uid']=$mail_inbox['data'][0]['uid'];
$kpcr_n=[];
if(strpos($mail_inbox['data'][0]['subject'],'TL_KP') ){//!!kpcr_n
$data['subject']=substr($mail_inbox['data'][0]['subject'], 0, strpos($mail_inbox['data'][0]['subject'], "TL_KP"));
$kpcr_n = explode("TL_KP",$mail_inbox['data'][0]['subject']);
//!!!!!!!! по идеи надо еще проверить статус TL_KP завершен или нет ?
}else{
$data['subject']=$mail_inbox['data'][0]['subject'];
}
if(isset($_POST['kpid']) && is_array($kpcr_n))//fix add msg inbox mail дрой сделки добавлять сообщение
$kpcr_n[1] = (int)$_POST['kpid'];
else
$kpcr_n = null;// $kpcr_n = null;
$data['date']= date('d ', $inbox_udate) . $monthes[date('n', $inbox_udate)].', '.$days[date('w',$inbox_udate)] . date(' в H:i Yг.', $inbox_udate); //Y-m-d h:i:sa
$data['email']=$mail_inbox['data'][0]['from']['address'];
if(isset($mail_inbox['data'][0]['from']['name']))
$data['email_info']=$mail_inbox['data'][0]['from']['name'];
else
$data['email_info']='';
$data['text']=strip_tags($mail_inbox['data'][0]['message']);
$data['html']=$mail_inbox['data'][0]['message'];
if(count($mail_inbox['data'][0]['attachments'])){
foreach($mail_inbox['data'][0]['attachments'] as $key => $val){
if(isset($val['file'])){
$data['file'][]=$val['file'];
$data['path']=str_replace('/', '-', $date_in_time).'-'.$inbox_udate;//ответ из inbox_mail
//cid:image001.png@01DBC4D3.B01D85F0
if(strpos($data['html'], 'cid:'.$val['file']) ){// if('cid:image001.png'=='cid:'.$file_this['file'])
$path = '../attachments/'.$path_save.'/'.$val['file'];
$type = pathinfo($path, PATHINFO_EXTENSION);
if(file_exists($path))
$fileCID = file_get_contents($path);
else
$fileCID = file_get_contents('../images/404imagesno.jpg');
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($fileCID);
$data['html'] = preg_replace('/cid:'.$val['file'].'@[^"]+/', $base64, $data['html']);
}
}
}
}else
$data['file']='';
$data['udate']=$inbox_udate * 1000;//????????
$data['status_kp']=$mail_to_inbox['status_kp'];
$data['date_create']=$mail_to_inbox['date_create'];
if(isset($kpcr_n_add['kp_id']) )
$data['kpcr_n']=$kpcr_n_add['kp_id'];//когда существует сделка уже изменить номер
elseif(is_null($kpcr_n))
$data['kpcr_n']=$mail_to_inbox['id'];//$mail_to_inbox['id'].$mail_to_inbox['uid'];//!!kpcr_n (int)$_POST['kpid']; --$data['kp_id_TEST'] = $res['kp_id'];
else
$data['kpcr_n']=(int)$kpcr_n[1];//!!kpcr_n
///почта большо одного почтового ящика в чате
$Result = $SQLite3->query("SELECT me.from_send, ord.status_deal, ord.id as order_id FROM orders ord
LEFT JOIN message me ON ord.id = me.order_id
WHERE ord.kp_id='{$data['kpcr_n']}' GROUP BY me.from_send");
//$mail_to_send = $Result->fetchArray(SQLITE3_ASSOC);
$i = 0;
while($res = $Result->fetchArray(SQLITE3_ASSOC)){
$mail_to_send[] = $res['from_send'];
$data['status_deal'] = $res['status_deal'];
$data['order_id'] = $res['order_id'];
$i++;
}
if(isset($mail_to_send))//fix notice
$data['email']=$mail_to_send;
$data['email_choce']=$_SESSION['mto'];
//статус КП 2 (прочитано ) статус КП 3 (добавлено КП)
if($mail_to_inbox['status_kp']<=1)
$SQLite3->exec("UPDATE inbox_mail SET status_kp = '2', date_update = datetime('now', 'localtime') WHERE id = '$id_inbox' ");
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!! Отправление письма Ответ на письмо
/*$notifies_textSQL = 'Ответ по сделке <a class="hr723" href="?order='.$data['order_id'].'">'.$data['kpcr_n'].'</a><br>'.$ST_DEAL[$data['status_deal']]['text'].', '.$STATUS_KP[$data['status_kp']][0];
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('$notifies_textSQL', datetime('now', 'localtime'), '0' ,'3' )");*/
$data['kpcrs_arr']=$STATUS_KP[$data['status_kp']];//<span class="badge bg-danger status-kp" style="background-color:#db4e4e !important;margin: auto;">$STATUS_KP[$data['kpcrs']]</span>
echo json_encode($data);
}else{
echo json_encode('error sen0to34f');
error_log('error sen0to34f');
}
}
//echo '<pre>',print_r($GLOBALS,1);
}
if(isset($_POST['linkattah_to_del'])){//????????
$id_uid_to = (int)$_POST['linkattah_to_del'];
// $Result = $SQLite3->query("SELECT attach_post FROM message WHERE uid_inbox = '$id_uid_to'");
// $attach = $Result->fetchArray(SQLITE3_ASSOC);
// $files_to = json_decode($attach['attach_post'] ,1);
//
// foreach($files_to as $key => $val){
// if($val==$_POST['file'])
// unset($files_to[$key]);
// }
// $files_to = json_encode($files_to);
// $SQLite3->exec("UPDATE message SET attach_post='$files_to' WHERE uid_inbox='$id_uid_to' ");
// if($SQLite3->changes())
echo json_encode(1);
}
if(isset($_POST['kpcr_n_add']) && empty($_POST['mail_send'])){
$kpcr_n = (int)$_POST['kpcr_n_add'];//прикрепить к другой сделки сообщение // может создатся сделка с 0 значит был пустой (int)$_POST['kpcr_n_add']
$id_inbox = (int)$_POST['id'];//id_to
$id_msg = (int)$_POST['id'];
$notifies_textSQL='Добавлено #'.$kpcr_n;
if(!$name_org = $SQLite3->querySingle("SELECT name_org FROM organization WHERE email_org = '{$_POST['email_form']}'")){
$SQLite3->exec("INSERT INTO organization (name_org, email_org) VALUES ('Не указано', '{$_POST['email_form']}' )");
$company_id = $SQLite3->lastInsertRowID();
}
if($kpcr_n==0){
echo 'error_ydiskig4';
error_log('error_ydiskig4');
exit;
}
if(!$order_id = $SQLite3->querySingle("SELECT id FROM orders WHERE kp_id = '$kpcr_n'") ){
$create_order_user = json_encode([$_SESSION['id']]);//тут должен быть ответсвенный должен быть контрагент добавлены
$SQLite3->exec("INSERT INTO orders (kp_id, deal_update, account_id_create, users_order_ids) VALUES ('$kpcr_n', datetime('now', 'localtime'), '{$_SESSION['id']}', '$create_order_user' )");
$order_id = $SQLite3->lastInsertRowID();
//if(!$SQLite3->querySingle("SELECT id FROM deal_stage WHERE kp_id = '$kpcr_n' ")){
$SQLite3->exec("INSERT INTO deal_stage (status_deal, deal_create, kp_id, order_id, users_order_ids, account_id_create)
VALUES ('0', datetime('now', 'localtime'), '$kpcr_n', '$order_id', '$create_order_user', '{$_SESSION['id']}' )");
$deal_stage_id = $SQLite3->lastInsertRowID();
//}
}/*else{
echo 'error_ydiskig4';
exit;
}*/
if(isset($_POST['id']) && $order_id_old = $SQLite3->querySingle("SELECT order_id FROM message WHERE id = '{$_POST['id']}'")){
$SQLite3->exec("UPDATE message SET order_id='$kpcr_n', date_update = datetime('now', 'localtime') WHERE id = '$id_msg' ");//??
$SQLite3->exec("UPDATE inbox_mail SET status_kp='4', date_update = datetime('now', 'localtime') WHERE id = '$id_inbox' ");
if(!$SQLite3->querySingle("SELECT id FROM message WHERE order_id = '$order_id_old'"))
$SQLite3->exec("UPDATE orders SET status_deal='99', date_update = datetime('now', 'localtime') WHERE id = '$order_id_old' ");
}else{
$Result = $SQLite3->query("SELECT inbox_udate, status_kp FROM inbox_mail WHERE id='$id_inbox' ");
$inbox_fa = $Result->fetchArray(SQLITE3_ASSOC);
$inbox_udate = $inbox_fa['inbox_udate'];
$date_in_time = date('Y/m/d', $inbox_udate);
$path_save = $date_in_time.'/'.md5($inbox_udate);
if(file_exists('../attachments/'.$path_save.'/'.$inbox_udate.'.json')){
$mail_inbox = json_decode( file_get_contents('../attachments/'.$path_save.'/'.$inbox_udate.'.json'), 1);
$data['inbox_id']=$mail_inbox['data']['inbox_id'];
$data['message_id']=$mail_inbox['data']['message_id'];
$data['uid_id']=$mail_inbox['data']['uid_id'];// РЕЗЕРВ
$data['id']=$id_inbox;
$data['uid']=$mail_inbox['data'][0]['uid'];
$data['subject']=$mail_inbox['data'][0]['subject'];
$data['date']= date('d ', $inbox_udate) . $monthes[date('n', $inbox_udate)].', '.$days[date('w',$inbox_udate)] . date(' в H:i Yг.', $inbox_udate); //Y-m-d h:i:sa
$data['email']=$mail_inbox['data'][0]['from']['address'];
if(isset($mail_inbox['data'][0]['from']['name']))
$data['email_info']=$mail_inbox['data'][0]['from']['name'];
else
$data['email_info']='';
$data['text']=strip_tags($mail_inbox['data'][0]['message']);
$data['html']=$mail_inbox['data'][0]['message'];
$attach_post = '[]';
if(count($mail_inbox['data'][0]['attachments'])){
foreach($mail_inbox['data'][0]['attachments'] as $key => $val){
if(isset($val['file'])){
$data['file'][]=$val['file'];
$data['path']=str_replace('/', '-', $date_in_time).'-'.$inbox_udate;//
$attach_post = json_encode($mail_inbox['data'][0]['attachments']);
}
}
}else
$data['file']='';
$data['udate']=$inbox_udate * 1000;//??????
$data['kpcrs']=$inbox_fa['status_kp'];//$data['status_kp']
//echo json_encode($data);
}
//$data['html'] = htmlspecialchars($data['html'],ENT_QUOTES);//fix error SQLITE если в сообщении есть знак '
$data['html'] = str_replace("'",'',$data['html']);//fix error SQLITE если в сообщении есть знак '
if(!$SQLite3->querySingle("SELECT id FROM message WHERE uid_id = '{$data['uid_id']}' AND order_id = '$order_id' AND uid_inbox = '{$data['uid']}' ")){
$inbox_udate = $inbox_udate+10800; //TIME ZONE
$SQLite3->exec("INSERT INTO message (order_id, chat, uid_inbox, uid_id, text_post, attach_post, from_send, account_id_send, email_group_id, account_create, date_create, date_update)
VALUES ('$order_id', '1', '{$data['uid']}', '{$data['uid_id']}', '{$data['html']}', '$attach_post', '{$data['email']}', 'ADD-MSG', '{$_SESSION['mto'][0]}', '{$_SESSION['id']}', datetime('$inbox_udate', 'unixepoch'), datetime('now', 'localtime') )");//'unixepoch', 'localtime'
$id_msg = $SQLite3->lastInsertRowID();
$SQLite3->exec("UPDATE inbox_mail SET status_kp='3', date_update = datetime('now', 'localtime') WHERE id = '$id_inbox' ");
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!! Отправление письма Ответ на письмо
$notifies_textSQL = 'Ответ по сделке <a class="2ukj43fg" href="https://control.mail.com/crm/?order='.$order_id.'" target="_blank">'.$kpcr_n.'</a><br> '.$STATUS_KP[3][0];
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('$notifies_textSQL', datetime('now', 'localtime'), '0' ,'3' )");
checkPostmail($notifies_textSQL,__LINE__);
}/*else{
echo '547gb5r__68r8fg';
exit;
}*/
}//else
echo json_encode(['
<div class="success alert alert-success mt-4">
<div class="alert-message text-center">
<strong>Сохранено</strong>
</div>
</div>',$id_msg,'notifies_text'=>$notifies_textSQL]);
}
/////////////////////////////////////////////////////////////////Отправка
if(isset($_POST['mail_send'])){
//$JSON = json_decode(file_get_contents('../attachments\2024\09\19\ace9702e55d3a9e5d787ab7aa5ced20d/1726750273.json') ,1);//DEBUG
// echo '<pre>',print_r($GLOBALS,1);
// exit;
//TEST создание отдельного сообщения в сделке //ВРЕМЕННО !!!!!!!!!!!!!!
/*
id_to: 18069
id_uid_to: 114
kpcr_ena: 0
kpcr_n: 4625
email_choce: no-reply@mail.com
email_form: one@mail.com
subject_from: Fw: Другой кликент
message_to:
oprlist:
files_to[]: (binary)
not_post_e:
mail_send: true
id_to: 0
id_uid_to: 0
kpcr_ena: 0
add_order_source: сайт //DEFAULT 0
kpcr_n: 4625
email_choce_order_add: no-reply@mail.com
email_form_order_add: one@mail.com
subject_from_order_add: asd
message_to_order_add: sd
oprlist_order_add:
not_post_msg:
msg_add: true
*/
if(isset($_POST['msg_add'])){//ВРЕМЕННО !!!!!!!!!!!!!!
$_POST["email_choce"]=$_POST["email_choce_order_add"];
if(isset($_POST["email_to_manual"]) && isset($_POST["email_form"])){
if($company_copy_id = $SQLite3->querySingle("SELECT id FROM organization WHERE email_org = '{$_POST['email_form_order_add']}'") && !$SQLite3->querySingle("SELECT name_org FROM organization WHERE email_org = '{$_POST['email_form']}'") ){//fix duplicate email error
$Result = $SQLite3->query("SELECT * FROM organization WHERE email_org = '{$_POST['email_form_order_add']}' ");
$company_copy_new = $Result->fetchArray(SQLITE3_ASSOC);
if($company_copy_new['email_org']!=$_POST['email_form']){//fix duplicate email error
$SQLite3->exec("INSERT INTO organization (email_org) VALUES ('{$_POST['email_form']}' )");//возможно без UPDATE organization SET ?
$company_id_new = $SQLite3->lastInsertRowID();
/*[id] => 49
[name_org] => Не указано
[firs_last_name] =>
[departm_org] =>
[phone_org] =>
[email_org] => почта
[address_org] =>
[details_org] =>
[info_org] =>
[files_org] =>*/
$SQLite3->exec("UPDATE organization SET
name_org='{$company_copy_new['name_org']}', firs_last_name='{$company_copy_new['firs_last_name']}', departm_org='{$company_copy_new['departm_org']}',
phone_org='{$company_copy_new['phone_org']}', email_org='{$_POST['email_form']}', address_org='{$company_copy_new['address_org']}',
details_org='{$company_copy_new['details_org']}', info_org='{$company_copy_new['info_org']}'
WHERE id='$company_id_new' "); //, files_org='{$company_copy_new['files_org']}'
}
}
}else
$_POST["email_form"]=$_POST["email_form_order_add"];
$_POST["subject_from"]=$_POST["subject_from_order_add"];
$_POST["message_to"]=$_POST["message_to_order_add"];
if(isset($_POST["oprlist_order_add"]))
$_POST["oprlist"]=$_POST["oprlist_order_add"]; // oprlist поиск по почте
//$_POST["files_to"]=$_POST["files_to_order_add"];
if(isset($_POST["not_post_msg"]))
$_POST["not_post_e"]=$_POST["not_post_msg"];
$add_order_source=$_POST["add_order_source"]; //feed_type_source
// echo '<pre>',print_r($GLOBALS,1);
// exit;
}
if(isset($_POST['order_manual'])){//ВРЕМЕННО !!!!!!!!!!!!!!
if(empty($_POST["email_form"]) || $_POST["email_form"]==0)//когда создали сделку снуля и почта не выбрана
$_POST["email_form"]='info@mail.com';
if(isset($_POST["email_to_check"]) && isset($_POST["email_form"])){
if(isset($_POST["compa_assig_new_order"]) && $_POST["compa_assig_new_order"]!='0'){
if($company_copy_id = $SQLite3->querySingle("SELECT id FROM organization WHERE email_org = '{$_POST['compa_assig_new_order']}'") && !$SQLite3->querySingle("SELECT name_org FROM organization WHERE email_org = '{$_POST['email_form']}'") ){//fix duplicate email error
$Result = $SQLite3->query("SELECT * FROM organization WHERE email_org = '{$_POST['compa_assig_new_order']}' ");
$company_copy_new = $Result->fetchArray(SQLITE3_ASSOC);
if($company_copy_new['email_org']!=$_POST['email_form']){//fix duplicate email error
$SQLite3->exec("INSERT INTO organization (email_org) VALUES ('{$_POST['email_form']}' )");//возможно без UPDATE organization SET ?
$company_id_new = $SQLite3->lastInsertRowID();
/*[id] => 49
[name_org] => Не указано
[firs_last_name] =>
[departm_org] =>
[phone_org] =>
[email_org] => почта
[address_org] =>
[details_org] =>
[info_org] =>
[files_org] =>*/
$SQLite3->exec("UPDATE organization SET
name_org='{$company_copy_new['name_org']}', firs_last_name='{$company_copy_new['firs_last_name']}', departm_org='{$company_copy_new['departm_org']}',
phone_org='{$company_copy_new['phone_org']}', email_org='{$_POST['email_form']}', address_org='{$company_copy_new['address_org']}',
details_org='{$company_copy_new['details_org']}', info_org='{$company_copy_new['info_org']}', files_org='{$company_copy_new['files_org']}'
WHERE id='$company_id_new' ");
}
}
}
}
if(!isset($_POST["email_form"])){
$_POST["not_post_e"]='';//нельзя отправлять письмо без почты клиента
$_POST["email_form"]='no-reply@mail.com';
}
//$_POST["email_choce"]=$_POST["email_choce"];///////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if(isset($_POST["not_post_msg"]))
$_POST["not_post_e"]=$_POST["not_post_msg"];
$add_order_source=$_POST["new_order_source"]; //feed_type_source
/*
[new_order_source] => 1 //feed_type_source
[stage_stid] => 0
[user_new_order] => Array
(
[0] => 2
[1] => 33
)
[kpcr_new_order] =>
[email_choce] => no-reply@mail.com
[email_form] => one@mail.com //МОЖЕТ нет быть !!!!
[compa_assig_new_order] => one@mail.com
[subject_from] =>
[message_to] =>
[oprlist_new_order] =>
[not_post_msg] =>
[order_manual] => true
[mail_send] => true
*/
$user_new_order = [$_SESSION['id']];
if(!empty($_POST["user_new_order"]))
$user_new_order = $_POST["user_new_order"];
$inbox_udate = time() + 10800;//TIME ZONE +3
$subject_from = strip_tags($_POST['subject_from']);
$message_to = strip_tags($_POST['message_to']);
$order_manual['status']='success';
$order_manual['data'][0]['uid']='';// ID почта или ID inbox_mail
$order_manual['data'][0]['subject']=$subject_from;
$order_manual['data'][0]['date']=date('Y-m-d H:i:s');
$order_manual['data'][0]['from']['address']=$_POST["email_form"];
$order_manual['data'][0]['from']['name']=$_POST["email_form"];
$order_manual['data'][0]['message']=$message_to;
$order_manual['data'][0]['attachments']=[];
$order_manual['data']['udate']=$inbox_udate;
$order_manual['data']['uid_id'] = $message_uid = 'self-76tni'.md5(time());// метка что создали сами
$order_manual['data']['inbox_id']='';//ID inbox_mail
$order_manual['data']['message_id']=NULL;
$order_manual['data']['attachments2']=[];
$SQLite3->exec("INSERT INTO inbox_mail (inbox_udate, inbox_from, subject, status_kp, date_create)
VALUES ('$inbox_udate', '{$_POST["email_form"]}', '$subject_from', '3', datetime('now', 'localtime'))"); //company_email_id = NULL не будет в INBOX MAIL таблице
$ID_INBOX = $SQLite3->lastInsertRowID();
//uid create
$order_manual['data'][0]['uid']=$ID_INBOX;
$order_manual['inbox_id']=$ID_INBOX;
$SQLite3->exec("UPDATE inbox_mail SET uid='$ID_INBOX' WHERE id='$ID_INBOX' ");
/*$SQLite3->exec("INSERT INTO orders (kp_id, deal_update) VALUES ('$ID_INBOX', datetime('now', 'localtime') )");//тут должен быть ответсвенный должен быть контрагент добавлены
$order_id = $SQLite3->lastInsertRowID();*/
$create_order_user = json_encode($user_new_order);//тут должен быть ответсвенный должен быть контрагент добавлены
$SQLite3->exec("INSERT INTO orders (kp_id, status_deal, deal_update, account_id_create, users_order_ids) VALUES ('$ID_INBOX', '{$_POST["stage_stid"]}', datetime('now', 'localtime'), '{$_SESSION['id']}', '$create_order_user' )");
$order_id = $SQLite3->lastInsertRowID();
//}
//if(!$SQLite3->querySingle("SELECT id FROM deal_stage WHERE kp_id = '$kpcr_n' ")){
$SQLite3->exec("INSERT INTO deal_stage (status_deal, deal_create, kp_id, order_id, users_order_ids, account_id_create)
VALUES ('{$_POST["stage_stid"]}', datetime('now', 'localtime'), '$ID_INBOX', '$order_id', '$create_order_user', '{$_SESSION['id']}' )");
$deal_stage_id = $SQLite3->lastInsertRowID();
$date_in_time = date('Y/m/d',$inbox_udate);
$path_save = $date_in_time.'/'.md5($inbox_udate);
if (!is_dir( '../attachments/' . $path_save .'/')) {
//mkdir( 'attachments/' . $path_save .'/');//mkdir($dirname, 0755, true);
mkpath('../attachments/' . $path_save .'/');
}
file_put_contents('../attachments/'.$path_save.'/'.$inbox_udate.'.json', json_encode($order_manual));
/*
$SQLite3->exec("INSERT INTO message (order_id, chat, uid_inbox, uid_id, text_post, attach_post, from_send, email_group_id, account_create, date_create)
VALUES ('$order_id', '0', '$ID_INBOX', '$message_uid', '$message_to', '$attach_post', '{$matches[0][0]}', '{$inboxCron['company_email_id']}', '0', datetime('now', 'localtime') )");
$MSG_ID = $SQLite3->lastInsertRowID();
//massege id
$order_manual['message_id']=$MSG_ID;
array (
'status' => 'success',
'data' =>
array (
0 =>
array (
'uid' => 118,
'subject' => 'Tema',
'date' => '2025-04-28 06:30:01pm',
'from' =>
array (
'address' => 'one@mail.com',
'name' => 'One',
),
'message' => '
Message
No attach
',
'attachments' =>
array (
),
),
'udate' => 1745854212,
'uid_id' => '',
'inbox_id' => 18692,
'message_id' => NULL,
'attachments2' =>
array (
),
),
)*/
$_POST['id_to']=$ID_INBOX; //ID inbox_mail
$_POST["id_uid_to"]=$ID_INBOX; //uid_inbox - inbox_mail
$_POST["kpcr_n"]=$ID_INBOX;
// echo '<pre>',print_r($GLOBALS,1);
// exit;
}
$id_inbox = (int)$_POST['id_to'];
$id_uid_to = (int)$_POST["id_uid_to"];
$json['status']='success';
if(empty($_POST["email_choce"])){
echo '46h5r76k4e3w';
error_log('46h5r76k4e3w');
exit;
}
$Result = $SQLite3->query("SELECT * FROM company_email WHERE email_name = '{$_POST["email_choce"]}' ");
$company_email = $Result->fetchArray(SQLITE3_ASSOC);
//Проверка по хорошому надо сделать из сессии свериться доступ какой !!!!!!!!!!!!!
$email_choce = json_decode($company_email['email_setting'],1);
if(is_null($email_choce))
$email_choce = $_SESSION['email_setting'][0];
$Result = $SQLite3->query("SELECT au.id as id_user, au.hash, au.em_name, au.em_tel, au.em_email, au.em_job, au.em_access, au.new_day, au.text_mailer, ce.email_name, ce.email_setting, cg.company_email_id, cg.access_role
FROM account_user au
LEFT JOIN company_group cg ON au.id = cg.account_user_id
LEFT JOIN company_email ce ON cg.company_email_id = ce.id
WHERE au.id='{$_SESSION['id']}'");
$account_user = $Result->fetchArray(SQLITE3_ASSOC);
$company_email['html'] = str_replace('{{name}}',$account_user['em_name'],$company_email['html']);
$company_email['html'] = str_replace('{{phone}}',$account_user['em_tel'],$company_email['html']);
$company_email['html'] = str_replace('{{email}}',$account_user['em_email'],$company_email['html']);
if(is_null($account_user['em_job']))
$account_user['em_job']='';
$company_email['html'] = str_replace('{{job}}',$account_user['em_job'],$company_email['html']);
$text_mailer=json_decode($account_user['text_mailer'],1);
if(!is_array($text_mailer))//fix
$text_mailer['em_text']='';
$company_email['html'] = str_replace('{{text}}',$text_mailer['em_text'],$company_email['html']);
$json['data'][0]['subject']=$_POST["subject_from"].' TL_KP'.$_POST["kpcr_n"];
$json['data'][0]['date']=date('Y-m-d H:i:s');//2024-09-19 03:51:01pm
$json['data'][0]['from']['address']=$_POST["email_form"];
$json['data'][0]['from']['name']=$_POST["email_choce"];
$text_post = $json['data'][0]['message'] = '<div class="kpcr__to'.$_POST["kpcr_n"].' quote___cr" style="white-space: break-spaces;"> '.$_POST["message_to"].' </div>';
$json['data'][0]['udate']=time() + 10800;//TIME ZONE +3
$date_in_time = date('Y/m/d',$json['data'][0]['udate']);
$path_save = $date_in_time.'/'.md5($json['data'][0]['udate']);
if (!is_dir( '../attachments/' . $path_save .'/')) {
//mkdir( 'attachments/' . $path_save .'/');//mkdir($dirname, 0755, true);
mkpath('../attachments/' . $path_save .'/');
}
//use PHPMailer\PHPMailer\PHPMailer;
// require_once "../PHPMailer/PHPMailer.php";
// require_once "../PHPMailer/SMTP.php";
// require_once "../PHPMailer/Exception.php";
// require('../PHPMailer/class.phpmailer.php');
//
// $mail = new PHPMailer();
require '../PHPMailer/PHPMailer.php';
require '../PHPMailer/SMTP.php';
require '../PHPMailer/Exception.php';
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 0;//2
$mail->SMTPAuth = TRUE;
$mail->SMTPSecure = "ssl";
//$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 465;
$mail->Username = $email_choce['name'];//''; // Enter your email address from where you want to send email
$mail->Password = $email_choce['pass'];//'' ; // Enter your email password from where you want to send email
$mail->Host = "smtp.mail.com"; // Leave as it as
// $mail->Username = ''; // Enter your email address from where you want to send email
// $mail->Password = '' ; // Enter your email password from where you want to send email
// $mail->Host = ""; // Leave as it as
$mail->Mailer = "smtp"; // Leave as it as
$mail->SetFrom($email_choce['name']);////'';
//$mail->SetFrom('', 'Traceline');//$_POST["email_form"]
//$mail->SetFrom('');//$_POST["email_form"]
$mail->AddReplyTo($_POST["email_choce"]);
//$mail->AddReplyTo('','Add email client');
$mail->AddAddress($_POST["email_form"]);
//$mail->AddAddress($_POST["email_choce"]);
if(isset($_POST["email_ccopy"]))
$mail->addBCC($_POST["email_ccopy"]);//$mail->addCC($_POST["email_ccopy"]);
//$mail->AddAddress($_POST["userEmail1"]);
//$mail->AddAddress($_POST["userEmail2"]); // Enter your email address where you want to recieve email
//$mail->AllowEmpty = true; // Разрешаем письма без текстового тела
$mail->IsHTML(true);
$mail->CharSet = 'UTF-8';
//$mail->Encoding = "base64";
//$mail->ContentType = "text/html";
// Запрос DSN — уведомление о сбое или успехе
//if(tracker_mail)//выключить отслеживание КАК blockquote_em создать в форме <input class="form-check-input" name="blockquote_em" type="checkbox" id="blockquote_em">
$mail->addCustomHeader('Return-Receipt-To', $email_choce['name']); // Запрос уведомления о доставке (не всегда работает)
$mail->addCustomHeader('Disposition-Notification-To', $email_choce['name']); // Запрос уведомления о прочтении (не надёжен)
$mail->addCustomHeader('X-Confirm-Reading-To', $email_choce['name']); // Некоторыми клиентами уважается
//$mail->Subject = utf8_decode($_POST["subject_from"].' TL_KP'.$_POST["kpcr_n"]);
$mail->Subject = $_POST["subject_from"].' TL_KP'.$_POST["kpcr_n"];
$mail->WordWrap = 80;
$mail->MsgHTML($text_post . ' '. $company_email['html'] ); // . '<blockquote>'..'</blockquote>' //<p> </p>
//$mail->Body = $_POST["message_to"];
//$mail->AltBody = strip_tags($_POST["message_to"]);
$mail->clearAttachments(); // Очищаем случайные вложения перед атачем ! ОБЯЗАТЕЛЬНО так как выше MsgHTML вызывается создает embed0 дубликать вложения изображения если есть!
$knF=0;
if (is_uploaded_file($_FILES["files_to"]["tmp_name"][0])) {
foreach ($_FILES["files_to"]["name"] as $k => $v) {
$mail->AddAttachment( $_FILES["files_to"]["tmp_name"][$k], $_FILES["files_to"]["name"][$k] );
$json['data'][0]['attachments'][$k]['path']=$path_save;
$json['data'][0]['attachments'][$k]['uid']=$id_uid_to;
$json['data'][0]['attachments'][$k]['file']=$_FILES["files_to"]["name"][$k];
$json['data'][0]['attachments'][$k]['part']=$k+1;
$json['data'][0]['attachments'][$k]['encoding']=3;
$knF++;
}
}else{
$json['data'][0]['attachments']=[];
}
//$mail->preSend(); // Форсируем генерацию письма //BAG w34f54wef embed0, embed1...
// 1. Извлекаем все Base64 изображения
preg_match_all('/src="data:image\/(\w+);base64,([^"]+)"/', $text_post, $matches);
foreach ($matches[2] as $src => $base64src) {
$ext_src = $matches[1][$src];
$cid_src = 'img_' . $knF;// uniqid();
$cid = 'img_' . md5($base64src);
$filename_src = $cid_src . '.' . $ext_src;
$filepath_src = '../attachments/'.$path_save.'/';//'uploads/' . $filename;
/*$base64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...';
$sizeBytes = (int)(strlen($base64) * 3 / 4); // Примерный размер в байтах
echo "Размер изображения: " . round($sizeBytes / 1024, 2) . " КБ";*/
// 2. Декодируем и сохраняем файл
$imageData = base64_decode($base64src);
// Создаем объект изображения
/*$img = imagecreatefromstring($imageData);
$newWidth = 800; // Нужная ширина
$newHeight = (int)($newWidth * imagesy($img) / imagesx($img));
// Ресайз
$resizedImg = imagescale($img, $newWidth, $newHeight);
ob_start();
imagejpeg($resizedImg, null, 80); // Качество 80%
$compressedData = ob_get_clean();*/
file_put_contents($filepath_src.$filename_src, $imageData);
// 3. Заменяем Base64 на CID в тексте
$temprcid = uniqid();
$text_post = str_replace(
$matches[0][$src],
'src="cid:' . $cid_src . '.' . $ext_src .'@'.$temprcid.'" style="max-width:100%; height:auto;"',
$text_post
);
/*$json['data'][0]['message'] = str_replace(
$matches[0][$src],
'src="cid:' . $cid_src . '.' . $ext_src .'@'.$temprcid.'" style="max-width:100%; height:auto;"',
$json['data'][0]['message']
);*/
// 4. Добавляем как встроенное изображение и вложение
$mail->AddEmbeddedImage($filepath_src.$filename_src, $cid_src . '.' . $ext_src .'@'.$temprcid, $cid_src . '.' . $ext_src);
//$mail->AddEmbeddedImage($filepath_src.$filename_src, $cid_src . '.' . $ext_src .'@'.$temprcid);
//$mail->getAttachments()[count($mail->getAttachments())-1]['cid'] = $cid;
//$mail->AddAttachment($filepath_src.$filename_src, $filename_src);
$json['data'][0]['attachments'][$knF]['path']=$path_save;
$json['data'][0]['attachments'][$knF]['uid']=$id_uid_to;
$json['data'][0]['attachments'][$knF]['file']=$filename_src;
$json['data'][0]['attachments'][$knF]['part']=$knF+1;
$json['data'][0]['attachments'][$knF]['encoding']=3;
$knF++;
//$mail->addCustomHeader('X-Attachment-Id', $cid_src . '.' . $ext_src .'@'.$temprcid);
//$mail->addCustomHeader('Content-Location', $cid_src . '.' . $ext_src .'@'.$temprcid);
// После preSend() BAG w34f54wef embed0, embed1...
/*$source = $mail->getSentMIMEMessage();
$source = preg_replace(
'/Content-ID: <[^>]+@phpmailer\.\d+>/',
'Content-ID: <' . $cid_src . '.' . $ext_src .'@'.$temprcid . '>',
$source
);*/
}
//DEBUG BAG w34f54wef embed0, embed1...
/*$source = $mail->getSentMIMEMessage();
file_put_contents('../last_email.eml', $source); // Для отладки
file_put_contents('../debug_email.html', $mail->Body);
echo "Embedded images: ";
print_r(array_map(
fn($a) => $a[6], // Извлекаем CID из вложений
array_filter($mail->getAttachments(), fn($a) => $a[6] ?? false)
));*/
// 5. Принудительное обновление заголовков
/*$mail->preSend();
$source = $mail->getSentMIMEMessage();
// Ручная замена ошибочных Content-ID
$source = preg_replace(
'/Content-ID: <[^>]+@phpmailer\.\d+>/',
'',
$source
);*/
$mail->XMailer = 'FoxMail';
$attach_post = json_encode($json['data'][0]['attachments']);
if(isset($_POST['kpcr_n'])){// может создатся сделка с 0 значит был пустой (int)$_POST['kpcr_n']
//$email_form = $_POST['email_form'];
if(!$name_org = $SQLite3->querySingle("SELECT name_org FROM organization WHERE email_org = '{$_POST['email_form']}'")){
$SQLite3->exec("INSERT INTO organization (name_org, email_org) VALUES ('Не указано', '{$_POST['email_form']}' )");
$company_id = $SQLite3->lastInsertRowID();
if(empty($company_id)){
echo 'gdf765wgfjh_database is locked';
error_log('gdf765wgfjh_database is locked');
exit;
}
}
// if(isset($_POST['id_msg']) )
// $kpcr_n = (int)$_POST['kpcr_n_add'];//прикрепить к другой сделки сообщение
// else
$kpcr_n = (int)$_POST['kpcr_n'];//проверка на существует КП номер KP_TL и добавление обновление времени сделки ордера // может создатся сделка с 0 значит был пустой (int)$_POST['kpcr_n']
if($kpcr_n==0){
echo 'error_ydiskig334g';
error_log('error_ydiskig334g');
exit;
}
if(!$order_id = $SQLite3->querySingle("SELECT id FROM orders WHERE kp_id = '$kpcr_n'") ){
$create_order_user = json_encode([$_SESSION['id']]);//тут должен быть ответсвенный должен быть контрагент добавлены
$SQLite3->exec("INSERT INTO orders (kp_id, deal_update, account_id_create, users_order_ids) VALUES ('$kpcr_n', datetime('now', 'localtime'), '{$_SESSION['id']}', '$create_order_user' )");
$order_id = $SQLite3->lastInsertRowID();
//}
//if(!$SQLite3->querySingle("SELECT id FROM deal_stage WHERE kp_id = '$kpcr_n' ")){
$SQLite3->exec("INSERT INTO deal_stage (status_deal, deal_create, kp_id, order_id, users_order_ids, account_id_create)
VALUES ('0', datetime('now', 'localtime'), '$kpcr_n', '$order_id', '$create_order_user', '{$_SESSION['id']}' )");
$deal_stage_id = $SQLite3->lastInsertRowID();
if(empty($deal_stage_id)){
echo 'eedgj0_database is locked';
error_log('eedgj0_database is locked');
exit;
}
}
// if(isset($_POST['id_msg']) && $order_id_old = $SQLite3->querySingle("SELECT order_id FROM message WHERE id = '{$_POST['id_msg']}'")){
// $mid = (int)$_POST['id_msg'];
// $SQLite3->exec("UPDATE message SET order_id='$kpcr_n', date_update = datetime('now', 'localtime') WHERE id = '$mid' ");
// $SQLite3->exec("UPDATE inbox_mail SET status_kp='4', date_update = datetime('now', 'localtime') WHERE id = '$id_inbox' ");
// if(!$SQLite3->querySingle("SELECT id FROM message WHERE order_id = '$order_id_old'"))
// $SQLite3->exec("UPDATE orders SET status_deal='99', date_update = datetime('now', 'localtime') WHERE id = '$order_id_old' ");
//
// }else{
//if($JSON = json_decode(file_get_contents('../attachments\2024\09\19\ace9702e55d3a9e5d787ab7aa5ced20d/1726750273.json') ,1))){
//$SQLite3->querySingle("SELECT id FROM message WHERE uid_inbox = '{$_POST["id_uid_to"]}' AND chat='0'") UPDATE запись
$notifies_text = 'Исходящий ответ ';
$account_id_send = 'SEND';//внутри компании сообщение FIX !!!!
if(isset($_POST['not_post_e'])){
$account_id_send = 'INSIDE';
//$account_id_send = $_SESSION['id'];
$notifies_text = 'Комментарий создан, ';
}
//$SQLite3->exec("INSERT INTO message (order_id, chat, uid_inbox, text_post, attach_post, from_send, account_id_send, email_group_id, account_create, date_create, date_update)
/*$SQLite3->exec("INSERT INTO message (order_id, chat, uid_inbox, subject_post, text_post, attach_post, from_send, account_id_send, email_group_id, account_create, date_create)
VALUES ('$order_id', '0', '$id_uid_to', '{$json['data'][0]['subject']}', '$text_post', '$attach_post', '{$_POST["email_form"]}', '$account_id_send', '{$_POST["email_choce"]}', '{$_SESSION['id']}', datetime('{$json['data'][0]['udate']}', 'unixepoch') )");//'unixepoch', 'localtime'
$mid = $SQLite3->lastInsertRowID();*/
$stmt = $SQLite3->prepare("INSERT INTO message (
order_id, chat, uid_inbox, subject_post, text_post, attach_post,
from_send, account_id_send, email_group_id, account_create, date_create
) VALUES (
:order_id, 0, :uid_inbox, :subject_post, :text_post, :attach_post,
:from_send, :account_id_send, :email_group_id, :account_create, datetime(:udate, 'unixepoch')
)");
$stmt->bindValue(':order_id', $order_id, SQLITE3_INTEGER);
$stmt->bindValue(':uid_inbox', $id_uid_to, SQLITE3_INTEGER);
$stmt->bindValue(':subject_post', $json['data'][0]['subject'], SQLITE3_TEXT);
$stmt->bindValue(':text_post', $text_post, SQLITE3_TEXT);
$stmt->bindValue(':attach_post', $attach_post, SQLITE3_TEXT);
$stmt->bindValue(':from_send', $_POST["email_form"], SQLITE3_TEXT);
$stmt->bindValue(':account_id_send', $account_id_send, SQLITE3_TEXT);
$stmt->bindValue(':email_group_id', $_POST["email_choce"], SQLITE3_TEXT);
$stmt->bindValue(':account_create', $_SESSION['id'], SQLITE3_INTEGER);
$stmt->bindValue(':udate', $json['data'][0]['udate'], SQLITE3_INTEGER); // это UNIX timestamp
$stmt->execute();
$mid = $SQLite3->lastInsertRowID();
if(empty($mid)){
echo 'e4sdyks54d_database is locked';
error_log('e4sdyks54d_database is locked');
exit;
}
if($SQLite3->querySingle("SELECT id FROM inbox_mail WHERE uid='$id_uid_to' AND id='$id_inbox' ") ){
$SQLite3->exec("UPDATE inbox_mail SET status_kp='4', date_update = datetime('now', 'localtime') WHERE uid='$id_uid_to' AND id='$id_inbox' ");
//$SQLite3->changes()
}
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!!
$notifies_textSQL = $notifies_text.'сделка <a class="4w56cva" href="https://control.mail.com/crm/?order='.$order_id.'" target="_blank">'.$kpcr_n.'</a>';
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('$notifies_textSQL', datetime('now', 'localtime'), '0' ,'2' )");
checkPostmail($notifies_textSQL,__LINE__);
}
$json['data'][0]['uid']=$id_uid_to;
$json['data'][0]['mid']=$mid;
$json['data']['inbox_id']=$id_inbox;//$kpcr_n
$json['data']['message_id']=$mid;
$json['data']['uid_id']=$kpcr_n;
$json['data']['feed_type']=$kpcr_n;
//Только изменить сообщение без отправки его
if(isset($_POST['id_msg']) ){
echo json_encode($mid);
exit;
}
file_put_contents('../attachments/'.$path_save.'/'.$json['data'][0]['udate'].'.json', json_encode($json));
$json['uid']=$id_uid_to;
////////////////////
if (is_uploaded_file($_FILES["files_to"]["tmp_name"][0])) {//заменить есть уже проверка аттача файлов ! убрать личнюю итерацию
//$path_save = md5($id_corpcom.'corpcom');
$total = count($_FILES['files_to']['name']);
// if (!is_dir('../attachments/company/'. $path_save .'/')) {
// mkdir('../attachments/company/'. $path_save .'/');//mkdir($dirname, 0755, true);
// }
for( $i=0 ; $i < $total ; $i++ ) {
$sourcePath = $_FILES['files_to']['tmp_name'][$i];
if ($sourcePath != ""){
$targetPath = '../attachments/' . $path_save .'/'. $_FILES['files_to']['name'][$i];
/*if(move_uploaded_file($sourcePath, $targetPath)) {
$files_to[]=$_FILES['files_to']['name'][$i];
}*/
copy($sourcePath, $targetPath);//! не использовать move_uploaded_file из за $mail->Send()
}
}
}
//!!! копируем письмо для переписки переговоров !!!
//$id_inbox=(int)$_POST['id'];
if(isset($_POST['meido'])){//fix open email index order
if($inbox_id = $SQLite3->querySingle("SELECT id FROM inbox_mail WHERE uid='$id_inbox' ") )
$id_inbox=$inbox_id;
}//DELETE
//$inbox_udate = $SQLite3->querySingle("SELECT inbox_udate FROM inbox_mail WHERE id='$id_inbox' ");
$Result = $SQLite3->query("SELECT inbox_udate, status_kp FROM inbox_mail WHERE id='$id_inbox' ");
$inbox_fa = $Result->fetchArray(SQLITE3_ASSOC);
if(isset($_POST['message_id'])){//fix open email index order
$message_id=(int)$_POST['message_id'];
// if($inbox_id = $SQLite3->querySingle("SELECT id FROM inbox_mail WHERE uid='$id_inbox' ") )
// $id_inbox=$inbox_id;
if($inbox_udate = $SQLite3->querySingle("SELECT strftime('%s', date_create) FROM message WHERE id='$message_id' AND chat='0' ") )
$data['chatosendoff']=1;//скрытие ответа на сообщение внутрение
}//DELETE
if(empty($inbox_udate))//fix open email index order
$inbox_udate = $inbox_fa['inbox_udate'];
//$inbox_udate = $inbox_fa['inbox_udate'];
$date_in_time = date('Y/m/d', $inbox_udate);
$path_save = $date_in_time.'/'.md5($inbox_udate);
if(file_exists('../attachments/'.$path_save.'/'.$inbox_udate.'.json')){
$mail_inbox = json_decode( file_get_contents('../attachments/'.$path_save.'/'.$inbox_udate.'.json'), 1);
$data['inbox_id']=$mail_inbox['data']['inbox_id'];
$data['message_id']=$mail_inbox['data']['message_id'];
$data['uid_id']=$mail_inbox['data']['uid_id'];// РЕЗЕРВ
$data['id']=$id_inbox;
$data['uid']=$mail_inbox['data'][0]['uid'];
$data['subject']=$mail_inbox['data'][0]['subject'];
$data['date']= date('d ', $inbox_udate) . $monthes[date('n', $inbox_udate)].', '.$days[date('w',$inbox_udate)] . date(' в H:i Yг.', $inbox_udate); //Y-m-d h:i:sa
$data['email']=$mail_inbox['data'][0]['from']['address'];
if(isset($mail_inbox['data'][0]['from']['name']))
$data['email_info']=$mail_inbox['data'][0]['from']['name'];
else
$data['email_info']='';
$data['text']=strip_tags($mail_inbox['data'][0]['message']);
$data['html']=$mail_inbox['data'][0]['message'];
//if(tracker_mail)//выключить отслеживание КАК blockquote_em создать в форме <input class="form-check-input" name="blockquote_em" type="checkbox" id="blockquote_em">
//tracker api прикрепить ссылку для отслеживания открытия curl_get_file_contents("http://control.mail.com/crm/tracker-mailer-api.php?order=$orderid&api=$time&msg=$msgid"),true);
$HESH_tracker = crc32($kpcr_n.'w35sdj_nospam'.$mid);//time(); // Внимательно !! kpcr_n и mid
//$company_email['html'] = $company_email['html'].'<table width="0%" border="0" cellspacing="0" cellpadding="0"><img style="width:1px;height:1px" src="http://control.mail.com/crm/tracker-mailer-api.php?order='.$id_inbox.'&api='.$time_tracker.'&msg='.$mid.'" width="1" height="1" alt="" /></table>';
$company_email['html'] = $company_email['html'].'<table style="width:0px;" width="0%" border="0" cellspacing="0" cellpadding="0"><img src="https://mail.com/order.jpg.php?order='.$kpcr_n.'&api='.$HESH_tracker.'&msg='.$mid.'" alt="" /></table>';
//Вместе с цитатой
$blockquote = '';
if(empty($_POST['msg_add']) && empty($_POST['order_manual'])){
$color_quote = '0857A6';
$color_quote = str_replace('background-color:#','',$STATUS_KP[$inbox_fa['status_kp']][1]);
$color_quote = str_replace('!important;','',$color_quote);//0857A6
if(count($mail_inbox['data'][0]['attachments'])){
foreach($mail_inbox['data'][0]['attachments'] as $key => $val){
if(isset($val['file'])){
$data['file'][]=$val['file'];
$data['path']=str_replace('/', '-', $date_in_time).'-'.$inbox_udate;//"2024-10-10-1728546636"
//cid:image001.png@01DBC4D3.B01D85F0
if(strpos($data['html'], 'cid:'.$val['file']) ){// if('cid:image001.png'=='cid:'.$file_this['file'])
$path = '../attachments/'.$path_save.'/'.$val['file'];
$type = pathinfo($path, PATHINFO_EXTENSION);
if(file_exists($path))
$fileCID = file_get_contents($path);
else
$fileCID = file_get_contents('../images/404imagesno.jpg');
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($fileCID);
$data['html'] = preg_replace('/cid:'.$val['file'].'@[^"]+/', $base64, $data['html']);
}
}
}
}
if(empty($_POST['blockquote_em']))
$blockquote = '<blockquote style="border-left:1px solid #'.$color_quote.'; margin:10px; padding:0 0 0 10px;">'.$data['html'].'</blockquote>';
}
$mail->MsgHTML($text_post . ' '. $company_email['html'] . $blockquote);//<p> </p>
//$mail->Body = $text_post . ' '. $company_email['html'] . '<blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;">'.$data['html'].'</blockquote>';
//solid #0857A6; как вариант менять цвет смотря какой этап сделки
$attach_post = '[]';
if(count($mail_inbox['data'][0]['attachments'])){
foreach($mail_inbox['data'][0]['attachments'] as $key => $val){
if(isset($val['file'])){
$data['file'][]=$val['file'];
$data['path']=str_replace('/', '-', $date_in_time).'-'.$inbox_udate;
$attach_post = json_encode($mail_inbox['data'][0]['attachments']);//если есть то добавить файлы из письма в новое сообщение
}
}
}else
$data['file']='';
$data['udate']=$inbox_udate * 1000;//?????
//$inbox_udate = $inbox_udate-10800;//ВРЕМЯ ПЛЯШЕТ ЖЕСТЬ КАК!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$data['kpcrs']=$inbox_fa['status_kp'];//$data['status_kp']
//$data['html'] = htmlspecialchars($data['html'],ENT_QUOTES);//fix error SQLITE если в сообщении есть знак '
$data['html'] = str_replace("'",'',$data['html']);//fix error SQLITE если в сообщении есть знак '
if(!$SQLite3->querySingle("SELECT id FROM message WHERE uid_id = '{$data['uid_id']}' AND order_id = '$order_id' AND uid_inbox = '{$data['uid']}' ") && empty($order_manual)){//$order_manual ручное создание сделки
if(empty($_POST['msg_add']))//Когда добавить сообщение после его создания НОВОЙ сделки !!!!!!!!!!!!!!!!!!!!! self-76tni
$inbox_udate = $inbox_udate+10800; //TIME ZONE
if(!isset($_POST['msg_add'])){//fix !!! ОТКЛЮЧЕНИЕ COPY дублирующие сообщение последнего письма
$SQLite3->exec("INSERT INTO message (order_id, chat, uid_inbox, uid_id, text_post, attach_post, from_send, account_id_send, email_group_id, account_create, date_create)
VALUES ('$order_id', '1', '{$data['uid']}', '{$data['uid_id']}', '{$data['html']}', '$attach_post', '{$data['email']}', 'COPY', '{$_POST["email_choce"]}',
'{$_SESSION['id']}', datetime('$inbox_udate', 'unixepoch') )");//'unixepoch', 'localtime'
$id_msg = $SQLite3->lastInsertRowID();
if(empty($id_msg)){
error_log('messageq8qq3m8oasx_database is locked');
$stmt = $SQLite3->prepare("INSERT INTO message (
order_id, chat, uid_inbox, uid_id, text_post, attach_post,
from_send, account_id_send, email_group_id, account_create, date_create
) VALUES (
:order_id, 1, :uid_inbox, :uid_id, :text_post, :attach_post,
:from_send, :account_id_send, :email_group_id, :account_create, datetime(:udate, 'unixepoch')
)");
$stmt->bindValue(':order_id', $order_id, SQLITE3_INTEGER);
$stmt->bindValue(':uid_inbox', $data['uid'], SQLITE3_INTEGER);
$stmt->bindValue(':uid_id', $data['uid_id'], SQLITE3_TEXT);
//$stmt->bindValue(':subject_post', $json['data'][0]['subject'], SQLITE3_TEXT);
$stmt->bindValue(':text_post', $data['html'], SQLITE3_TEXT);
$stmt->bindValue(':attach_post', $attach_post, SQLITE3_TEXT);
$stmt->bindValue(':from_send', $data['email'], SQLITE3_TEXT);
$stmt->bindValue(':account_id_send', 'COPY', SQLITE3_TEXT);
$stmt->bindValue(':email_group_id', $_POST["email_choce"], SQLITE3_TEXT);
$stmt->bindValue(':account_create', $_SESSION['id'], SQLITE3_INTEGER);
$stmt->bindValue(':udate', $inbox_udate, SQLITE3_INTEGER); // это UNIX timestamp
$stmt->execute();
$id_msg = $SQLite3->lastInsertRowID();
}
}
//$SQLite3->exec("UPDATE inbox_mail SET status_kp='3', date_update = datetime('now', 'localtime') WHERE id = '$id_inbox' ");
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!!
$notifies_textSQL = 'Добавлено сообщение <a href=https://control.mail.com/crm/?order='.$order_id.'>'.$id_inbox.'</a>';
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('', datetime('now', 'localtime'), '0' ,'3' )");
checkPostmail($notifies_textSQL,__LINE__);
}
}
////////////// обновить сделку в любом случаи кто и когда
$SQLite3->exec("UPDATE orders SET deal_update= datetime('now', 'localtime'), account_id_update = '{$_SESSION['id']}' WHERE id='$order_id' ");
//отправляем или нет
if(!isset($_POST['not_post_e']) && !$mail->Send()) {
echo json_encode(['<p class="error">Ошибка IMAP ffx0453k</p>','uid'=>$json['uid']]);
} else {
/*echo json_encode(['
<div class="success alert alert-success">
<div class="alert-message text-center">
<strong>Отправлено</strong>
</div>
</div>','uid'=>$json['uid'],'dealid'=>$order_id,'msgid'=>$mid]);*/
//само сохранение файлов должно быть только после $mail->Send() или будет сбой пустые письма из за move_uploaded_file использовать copy()
/*if (is_uploaded_file($_FILES["files_to"]["tmp_name"][0])) {
//$path_save = md5($id_corpcom.'corpcom');
$total = count($_FILES['files_to']['name']);
// if (!is_dir('../attachments/company/'. $path_save .'/')) {
// mkdir('../attachments/company/'. $path_save .'/');//mkdir($dirname, 0755, true);
// }
for( $i=0 ; $i < $total ; $i++ ) {
$sourcePath = $_FILES['files_to']['tmp_name'][$i];
if ($sourcePath != ""){
$targetPath = '../attachments/' . $path_save .'/'. $_FILES['files_to']['name'][$i];
if(move_uploaded_file($sourcePath, $targetPath)) {
$files_to[]=$_FILES['files_to']['name'][$i];
}
}
}
}
//!!! копируем письмо для переписки переговоров !!!
//$id_inbox=(int)$_POST['id'];
if(isset($_POST['meido'])){//fix open email index order
if($inbox_id = $SQLite3->querySingle("SELECT id FROM inbox_mail WHERE uid='$id_inbox' ") )
$id_inbox=$inbox_id;
}//DELETE
//$inbox_udate = $SQLite3->querySingle("SELECT inbox_udate FROM inbox_mail WHERE id='$id_inbox' ");
$Result = $SQLite3->query("SELECT inbox_udate, status_kp FROM inbox_mail WHERE id='$id_inbox' ");
$inbox_fa = $Result->fetchArray(SQLITE3_ASSOC);
if(isset($_POST['message_id'])){//fix open email index order
$message_id=(int)$_POST['message_id'];
// if($inbox_id = $SQLite3->querySingle("SELECT id FROM inbox_mail WHERE uid='$id_inbox' ") )
// $id_inbox=$inbox_id;
if($inbox_udate = $SQLite3->querySingle("SELECT strftime('%s', date_create) FROM message WHERE id='$message_id' AND chat='0' ") )
$data['chatosendoff']=1;//скрытие ответа на сообщение внутрение
}//DELETE
if(empty($inbox_udate))//fix open email index order
$inbox_udate = $inbox_fa['inbox_udate'];
//$inbox_udate = $inbox_fa['inbox_udate'];
$date_in_time = date('Y/m/d', $inbox_udate);
$path_save = $date_in_time.'/'.md5($inbox_udate);
if(file_exists('../attachments/'.$path_save.'/'.$inbox_udate.'.json')){
$mail_inbox = json_decode( file_get_contents('../attachments/'.$path_save.'/'.$inbox_udate.'.json'), 1);
$data['inbox_id']=$mail_inbox['data']['inbox_id'];
$data['message_id']=$mail_inbox['data']['message_id'];
$data['uid_id']=$mail_inbox['data']['uid_id'];// РЕЗЕРВ
$data['id']=$id_inbox;
$data['uid']=$mail_inbox['data'][0]['uid'];
$data['subject']=$mail_inbox['data'][0]['subject'];
$data['date']= date('d ', $inbox_udate) . $monthes[date('n', $inbox_udate)].', '.$days[date('w',$inbox_udate)] . date(' в H:i Yг.', $inbox_udate); //Y-m-d h:i:sa
$data['email']=$mail_inbox['data'][0]['from']['address'];
if(isset($mail_inbox['data'][0]['from']['name']))
$data['email_info']=$mail_inbox['data'][0]['from']['name'];
else
$data['email_info']='';
$data['text']=strip_tags($mail_inbox['data'][0]['message']);
$data['html']=$mail_inbox['data'][0]['message'];
$attach_post = '[]';
if(count($mail_inbox['data'][0]['attachments'])){
foreach($mail_inbox['data'][0]['attachments'] as $key => $val){
if(isset($val['file'])){
$data['file'][]=$val['file'];
$data['path']=str_replace('/', '-', $date_in_time).'-'.$inbox_udate;
$attach_post = json_encode($mail_inbox['data'][0]['attachments']);//если есть то добавить файлы из письма в новое сообщение
}
}
}else
$data['file']='';
$data['udate']=$inbox_udate * 1000;
$data['kpcrs']=$inbox_fa['status_kp'];//$data['status_kp']
//$data['html'] = htmlspecialchars($data['html'],ENT_QUOTES);//fix error SQLITE если в сообщении есть знак '
$data['html'] = str_replace("'",'',$data['html']);//fix error SQLITE если в сообщении есть знак '
if(!$SQLite3->querySingle("SELECT id FROM message WHERE uid_id = '{$data['uid_id']}' AND order_id = '$order_id' AND uid_inbox = '{$data['uid']}' ") && empty($order_manual)){//$order_manual ручное создание сделки
$SQLite3->exec("INSERT INTO message (order_id, chat, uid_inbox, uid_id, text_post, attach_post, from_send, account_id_send, email_group_id, account_create, date_create)
VALUES ('$order_id', '1', '{$data['uid']}', '{$data['uid_id']}', '{$data['html']}', '$attach_post', '{$data['email']}', 'COPY', '{$_POST["email_choce"]}', '{$_SESSION['id']}', datetime('$inbox_udate', 'unixepoch', 'localtime') )");//'unixepoch', 'localtime'
$id_msg = $SQLite3->lastInsertRowID();
//$SQLite3->exec("UPDATE inbox_mail SET status_kp='3', date_update = datetime('now', 'localtime') WHERE id = '$id_inbox' ");
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!!
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('Добавлено к сделке <a href=?order=$order_id>$id_inbox</a>', datetime('now', 'localtime'), '0' ,'3' )");
}
}
//!!! end*/
//Вывод сделки ОДНОЙ переписка созданная
//$userName = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='{$value['account_create']}' ");
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $account_user['em_name']);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($account_user['em_name'].$_SESSION['id']), -6);
$me_id = $json['data'][0]['mid'];//meido me_id
$timestamp = $json['data'][0]['udate']-10800;
$mess_create = date('d ', $timestamp) . $monthes[date('n', $timestamp)].', '.$days[date('w', $timestamp)] . date(' в H:i Yг.', $timestamp);
$caht_deal = '';
/*foreach($json['data'][0]['attachments'] as $file_this){
if(strpos($text_post, 'cid:'.$file_this['file']) ){// if('cid:image001.png'=='cid:'.$file_this['file'])
$text_post = preg_replace('/cid:'.$file_this['file'].'@[^"]+/', $base64, $text_post);
//$value['text_post']=str_replace('cid:image001.png', $base64, $value['text_post']);
}
}*/
$text_post = $json['data'][0]['message'];//strip_tags($json['data'][0]['message']);//$json['data'][0]['message']
$sub_send_account = $sub_send_color = '';
$send_choice_class = 'send_out';
$send_choice_icon = 'email-open.svg';
$send_choice_text = 'Открыть';
if(isset($_POST['not_post_e'])){
$sub_send_color = 'background-color: rgb(96 96 96) !important;';
$sub_send_account = ' <small style="float: right;"><i>(*внутренний комментарий)</i></small>';
$send_choice_class = 'send_int';
$send_choice_text = 'Читать';
$send_choice_icon = 'chat-text.svg';
}
$caht_deal .='<div class="d-flex flex-row justify-content-end" id="m'.$me_id.'" style="overflow-y: auto;"> <div style=" margin-right: 5px;">
<div class="small p-2 ms-1 mb-1 rounded-3 text-white bg-primary" style="overflow-y: auto; max-height: 350px;max-width: 1350px;'.$sub_send_color.'">
<a href="#m'.$me_id.'" data-msgid="'.$me_id.'" data-idinbox="'.$id_inbox.'" data-id="'.$id_uid_to.'" class="text-muted small text_subject '.$send_choice_class.'" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable"> '.$json['data'][0]['subject'].' </a> ';
if(isset($_POST['not_post_e'])){
$caht_deal .=' <small style="float: right;"><i>(*внутренний комментарий)</i></small> ';
$text_post=str_replace('quote___cr','quote_0__cr',$text_post);//расскрыть коммент не скрывать через ajax
}
$caht_deal .=' <br><p> </p> '.$text_post.' </div>
<a href="#m'.$me_id.'" data-msgid="'.$me_id.'" data-idinbox="'.$id_inbox.'" data-id="'.$id_uid_to.'" class="text-muted text-decoration-none '.$send_choice_class.'" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable">
<p class="small ms-3 rounded-3 text-muted float-end"> <button data-msgid="'.$me_id.'" data-idinbox="'.$id_inbox.'" data-id="'.$id_uid_to.'" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable" type="button" class="btn btn-sm btn-outline-secondary waves-effect waves-light w-md m-b-30 text-muted text-decoration-none '.$send_choice_class.'" style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .5rem; --bs-btn-font-size: .75rem;">
<img class="" src="images/'.$send_choice_icon.'" style=" margin-top: -5px;width: 20px;"> '.$send_choice_text.' </button> ';
if(count($json['data'][0]['attachments'])>0)
$caht_deal .=' <button type="button" class="btn btn-sm btn-outline-secondary waves-effect waves-light w-md m-b-30 text-muted text-decoration-none deal_file_img" style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .5rem; --bs-btn-font-size: .75rem;"><img src="images/paperclip.svg" class="deal_file_img" style=" margin-top: -5px;width: 20px;"> Файл </button>';
$caht_deal .='<i class="small">'.$mess_create.'</i>
</p>
</a>
</div><span data-toggle="tooltip" data-placement="top" class="rounded-circle chat-list" alt="" style="/*display: block;border-radius: 50%;*/background-color:'.$ColorUsers.';/*width: 45px; height: 45px;padding-top: 10px;text-align: center;*/color: #b2b2b2;" data-bs-original-title="'.$account_user['em_name'].'">'.$userAB.'</span></div>';
echo json_encode(['
<div class="success alert alert-success">
<div class="alert-message text-center">
<strong>Отправлено</strong>
</div>
</div>','uid'=>$json['uid'],'dealid'=>$order_id,'msgid'=>$mid,'kpcr_n'=>$id_inbox,'mesgupdate'=>$caht_deal,'notifies_text'=>$notifies_text.' #'.$id_inbox]);//,'mesgupdate'=>$caht_deal
}//end else echo
//echo '<pre>',print_r($GLOBALS,1);exit;
}
//изменить статус письма
if(isset($_POST['stkp_change'])){
$stkp = (int)$_POST['stkp_change'];
$id_inbox=(int)$_POST['id'];
if($inbox_id = $SQLite3->querySingle("SELECT id FROM inbox_mail WHERE id='$id_inbox' ") ){
$SQLite3->exec("UPDATE inbox_mail SET status_kp='$stkp', date_update = datetime('now', 'localtime') WHERE id = '$id_inbox' ");
if($SQLite3->changes())
echo json_encode($stkp);
}
}
/////////////////////////////////////////////////////INDEX
if(isset($_POST['stid'])){
$ST_DEAL[100] = ['text'=>'Не приобретен ','css'=>'background-color:red !important;','stage_lid'=>100];//fix АРХИВНАЯ ОТЛОЖЕННАЯ СДЕЛКА !!!!!!! просмотр архива ОТЛОЖИТЬ ПОВТОРОНО ЕЩЕ РАЗ..
$StageLimit = '0';//default limit
$stage_stid = preg_replace('/[^0-9]/', '', $_POST['stid']);
if(isset($_POST['kpid']) && isset($_POST['idkp'])){//&& $stage_stid!=''){//&& is_integer($stage_stid)
$id_order = (int)$_POST['idkp'];
$kp_id = (int)$_POST['kpid'];
$SQLite3->exec("UPDATE orders SET status_deal='$stage_stid', deal_update= datetime('now', 'localtime'), account_id_update = '{$_SESSION['id']}' WHERE id='$id_order' ");
//$SQLite3->changes();
if($uid_inbox = $SQLite3->querySingle("SELECT uid_inbox FROM message WHERE order_id = '$id_order' ORDER BY id DESC")) {
if($stage_stid>=1)
$SQLite3->exec("UPDATE inbox_mail SET status_kp='3', date_update = datetime('now', 'localtime') WHERE uid='$uid_inbox' ");
//КТО ИЗМЕНИЛ СТАТУС!!!!!!!!!!!!!
$SQLite3->exec("UPDATE message SET account_id_status_deal='{$_SESSION['id']}', date_update = datetime('now', 'localtime') WHERE order_id='$id_order' AND uid_inbox='$uid_inbox'");
//создаем пользователей для смены этама сделки и уведомлений пользователей о смене сделки
$AccountOrder = $SQLite3->querySingle("SELECT users_order_ids FROM orders WHERE id='$id_order' ");
$AccountOrder = json_decode($AccountOrder,1);
//fix NULL users_order_ids
if(!is_array($AccountOrder))
$AccountOrder = [$SQLite3->querySingle("SELECT account_create FROM message WHERE order_id='$id_order' ")];//[$_SESSION['id']];
//завершаем предыдущий статус
if($deal_finish = $SQLite3->querySingle("SELECT id FROM deal_stage WHERE kp_id = '$kp_id' AND order_id = '$id_order' ORDER BY id DESC"))
$SQLite3->exec("UPDATE deal_stage SET deal_finish = datetime('now', 'localtime'), account_id_finish = '{$_SESSION['id']}' WHERE id = '$deal_finish' ");
//создаем новый статус сделки
$users_order_ids = json_encode($AccountOrder);
$SQLite3->exec("INSERT INTO deal_stage (status_deal, deal_create, kp_id, order_id, users_order_ids, account_id_create)
VALUES ('$stage_stid', datetime('now', 'localtime'), '$kp_id', '$id_order', '$users_order_ids', '{$_SESSION['id']}' )");
$deal_stage_id = $SQLite3->lastInsertRowID();
}
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!!
$notifies_textSQL = 'Этап изменен, '.$ST_DEAL[$stage_stid]['text'].' сделка <a class="wf65eb5" href="https://control.mail.com/crm/?order='.$id_order.'" target="_blank">'.$kp_id.'</a>';
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('$notifies_textSQL', datetime('now', 'localtime'), '0' ,'5' )");
checkPostmail($notifies_textSQL,__LINE__);
//echo '<pre>',print_r($GLOBALS,1);
}
//выводим все после смены статуса сделки
$Result = $SQLite3->query("SELECT ord.id,ord.kp_id,ord.status_deal,ord.deal_update,me.chat,me.from_send,im.inbox_from,im.status_kp,im.date_create as status_create,im.date_update as status_update FROM orders ord
LEFT JOIN message me ON ord.id = me.order_id
LEFT JOIN inbox_mail im ON im.uid = me.uid_inbox
WHERE status_deal='$stage_stid' AND status_kp IS NOT NULL GROUP BY ord.id ORDER BY me.date_update,deal_update DESC LIMIT 0,9");
$DEAL_ALL = ResultSet($Result);
//DEAL_ALL order all status_deal DUBLI
$orderCSSa = $order_deal ='';
foreach ($DEAL_ALL as $key => $value) {
if(isset($_POST['idkp']) && $value['id']==$_POST['idkp'])
$orderCSSa = 'checked=""';
else
$orderCSSa = '';
$order_deal .= '<div class="position-relative order-kp-list mb-1" data-order-limit="'.($key+$StageLimit+1).'">
<input class="form-check-input position-absolute top-50 end-0 me-3 fs-5"
type="radio" name="listGroupRadioGrid'.($key+$StageLimit+1).'" id="listGroupRadioGrid'.($key+$StageLimit+1).'" value="'.$value['id'].'" '.$orderCSSa.'>
<label class="list-group-item py-3 pe-5" for="listGroupRadioGrid'.($key+$StageLimit+1).'">
<strong class="fw-semibold"> '.$value['kp_id'].'</strong>';//КП '.str_replace('TL_KP', '- ', strstr($valueTable['subject'],'TL_KP') ).'
if($name_org = $SQLite3->querySingle("SELECT name_org FROM organization WHERE email_org = '{$value['inbox_from']}'"))
$order_deal.=' <span class="d-block small opacity-75">'.$name_org.' '.$value['inbox_from'].'</span>';
else
$order_deal.=' <span class="d-block small opacity-75">Почта:'.$value['from_send'].'</span>';
//$order_deal.=' <span class="badge text-bg-secondary rounded-pill" style="'.$ST_DEAL[$value['status_deal']]['css'].'">'.$ST_DEAL[$value['status_deal']]['text'].'</span>
$order_deal.=' <span class="badge text-bg-secondary rounded-pill" style="'.$STATUS_KP[$value['status_kp']][1].'">'.$STATUS_KP[$value['status_kp']][0].'</span>
<span class="badge text-bg-secondary rounded-pill" style="'.$ST_DEAL[$value['status_deal']]['css'].'">'.$ST_DEAL[$value['status_deal']]['text'].'</span>
</label>
</div>';
}
if($stage_stid=='' && !is_numeric($stage_stid) )
$countAll = "!=''";
else
$countAll = "='$stage_stid'";
$countAll = $SQLite3->querySingle("SELECT COUNT(id) FROM orders WHERE status_deal $countAll");
$data['limit']='';
if(is_numeric($stage_stid)){//fix all view change sort
$data['textkps']=$ST_DEAL[$stage_stid]['text'];
$data['csskps']=$ST_DEAL[$stage_stid]['css'];
}else{
$data['textkps']='';
$data['csskps']='';
}
if(empty($DEAL_ALL))//fix all full record DB?
$data['limit']='false';
$data['html'] = $order_deal;
$data['stage_stid'] = $stage_stid;
$data['count_All'] = $countAll;
echo json_encode ($data);
//echo '<pre>',print_r($GLOBALS,1);
}
if(isset($_POST['dealkpst']) && isset($_POST['limit']) ){
$StageLimit = (int)$_POST['limit'];
$changeOrder = '';
if(isset($_POST['id'])){
$StageLimit = $StageLimit-1;
$changeOrder = "AND ord.id!='{$_POST['id']}'";
}
/////////////////////////////////////////////
$dealkp_n = (int)$_POST['dealkpst'];
if($_POST['dealkpst']!='all'){
$dealkp_sort = 'ORDER BY me.date_update,deal_update';//$_GET['sort']=deal_update 1 = deal_update array
$dealkp_sort_add = 'DESC';//$_GET['assor']=desc или asc 1 или 0 array
$dealkp = "SELECT ord.id,ord.kp_id,ord.status_deal,ord.deal_update,me.chat,me.from_send,im.inbox_from,im.status_kp,im.date_create as status_create,im.date_update as status_update
FROM orders ord
LEFT JOIN message me ON ord.id = me.order_id
LEFT JOIN inbox_mail im ON im.uid = me.uid_inbox
WHERE status_deal='$dealkp_n' AND status_kp IS NOT NULL $changeOrder GROUP BY ord.id $dealkp_sort $dealkp_sort_add LIMIT $StageLimit,9 ";//!!!
}else{
$dealkp = "SELECT ord.id,ord.kp_id,ord.status_deal,ord.deal_update,me.chat,me.from_send,im.inbox_from,im.status_kp,im.date_create as status_create,im.date_update as status_update
FROM orders ord
LEFT JOIN message me ON ord.id = me.order_id
LEFT JOIN inbox_mail im ON im.uid = me.uid_inbox
WHERE status_kp IS NOT NULL --WHERE status_deal='$dealkp_n'
GROUP BY ord.id ORDER BY me.date_update,deal_update DESC LIMIT $StageLimit,9 ";
$dealkp_n='all';//all = 0
}
// $dealkp_n='0';
// $dealkp = "SELECT ord.id,ord.kp_id,ord.status_deal,ord.deal_update,me.chat,me.from_send,im.inbox_from,im.status_kp,im.date_create as status_create,im.date_update as status_update FROM orders ord
// LEFT JOIN message me ON ord.id = me.order_id
// LEFT JOIN inbox_mail im ON im.uid = me.uid_inbox
// WHERE status_deal='$dealkp_n' GROUP BY ord.id ORDER BY deal_update DESC LIMIT $StageLimit,1";
$Result = $SQLite3->query("$dealkp");
$DEAL_ALL = ResultSet($Result);
//DEAL_ALL order all status_deal DUBLI
$ST_DEAL[100] = ['text'=>'Не приобретен ','css'=>'background-color:red !important;','stage_lid'=>100];//fix АРХИВНАЯ ОТЛОЖЕННАЯ СДЕЛКА !!!!!!! просмотр архива ЗАГРУЗИТЬ ЕЩЕ..
$orderCSSa = $order_deal ='';
foreach ($DEAL_ALL as $key => $value) {
if(isset($_POST['id']) && $value['id']==$_POST['id'])//AND ord.id!='{$_POST['id']}'
continue;
// if(isset($_GET['order']) && $value['id']==$_GET['order'])
// $orderCSSa = 'checked=""';
// else
// $orderCSSa = '';
$order_deal .= '<div class="position-relative order-kp-list mb-1" data-order-limit="'.($key+$StageLimit+1).'">
<input class="form-check-input position-absolute top-50 end-0 me-3 fs-5"
type="radio" name="listGroupRadioGrid'.($key+$StageLimit+1).'" id="listGroupRadioGrid'.($key+$StageLimit+1).'" value="'.$value['id'].'" '.$orderCSSa.'>
<label class="list-group-item py-3 pe-5" for="listGroupRadioGrid'.($key+$StageLimit+1).'">
<strong class="fw-semibold"> '.$value['kp_id'].'</strong>';//КП '.str_replace('TL_KP', '- ', strstr($valueTable['subject'],'TL_KP') ).'
if($name_org = $SQLite3->querySingle("SELECT name_org FROM organization WHERE email_org = '{$value['inbox_from']}'"))
$order_deal.=' <span class="d-block small opacity-75">'.$name_org.' '.$value['inbox_from'].'</span>';
else
$order_deal.=' <span class="d-block small opacity-75">Почта:'.$value['from_send'].'</span>';
//$order_deal.=' <span class="badge text-bg-secondary rounded-pill" style="'.$ST_DEAL[$value['status_deal']]['css'].'">'.$ST_DEAL[$value['status_deal']]['text'].'</span>
$order_deal.=' <span class="badge text-bg-secondary rounded-pill" style="'.$STATUS_KP[$value['status_kp']][1].'">'.$STATUS_KP[$value['status_kp']][0].'</span>
<span class="badge text-bg-secondary rounded-pill" style="'.$ST_DEAL[$value['status_deal']]['css'].'">'.$ST_DEAL[$value['status_deal']]['text'].'</span>
</label>
</div>';
}
////////////////////////////////////////////
if($dealkp_n=='' && !is_numeric($dealkp_n) || $dealkp_n=='all')
$countAll = "!=''";
else
$countAll = "='$dealkp_n'";
$countAll = $SQLite3->querySingle("SELECT COUNT(id) FROM orders WHERE status_deal $countAll");
$data['limit']='';
if(is_numeric($dealkp_n))//fix all view change sort
$data['textkps']=$ST_DEAL[$dealkp_n]['text'];
else
$data['textkps']='';
if(empty($DEAL_ALL))//fix all full record DB?
$data['limit']='false';
$data['html'] = $order_deal;
$data['count_All'] = $countAll;
echo json_encode($data);
//echo '<pre>',print_r($GLOBALS,1);
}
//Archive DEAL
if(isset($_POST['dealarchive'])){
$kpcr_n = $kp_id = (int)$_POST['kpid'];//rename all $kpcr_n = $kp_id
$order_id = $id_order = (int)$_POST['idkp'];//rename $order_id = $id_order
//$deal_stage_id=null;
if($_POST['dealarchive'] == 'deal_archive'){
$deal_archive = 100;
$dealarch = '&dealarch';
}else{//deal_active
$deal_archive = 0;
$dealarch = '';
}
if($AccountOrder = $SQLite3->querySingle("SELECT users_order_ids FROM orders WHERE kp_id = '$kpcr_n' AND id = '$order_id' ")){
//создаем пользователей
//$AccountOrder = $SQLite3->querySingle("SELECT users_order_ids FROM orders WHERE id='$id_order' ");
$AccountOrder = json_decode($AccountOrder,1);
//fix NULL users_order_ids
if(!is_array($AccountOrder))
$AccountOrder = [$SQLite3->querySingle("SELECT account_create FROM message WHERE order_id='$id_order' ")];//[$_SESSION['id']];
$SQLite3->exec("UPDATE orders SET status_deal='$deal_archive', deal_update= datetime('now', 'localtime'), account_id_update = '{$_SESSION['id']}' WHERE id='$order_id' ");
//завершаем предыдущий статус
if($deal_finish = $SQLite3->querySingle("SELECT id FROM deal_stage WHERE kp_id = '$kp_id' AND order_id = '$id_order' ORDER BY id DESC"))
$SQLite3->exec("UPDATE deal_stage SET deal_finish = datetime('now', 'localtime'), account_id_finish = '{$_SESSION['id']}' WHERE id = '$deal_finish' ");
//создаем новый статус сделки
$users_order_ids = json_encode($AccountOrder);
$SQLite3->exec("INSERT INTO deal_stage (status_deal, deal_create, kp_id, order_id, users_order_ids, account_id_create)
VALUES ('$deal_archive', datetime('now', 'localtime'), '$kp_id', '$id_order', '$users_order_ids', '{$_SESSION['id']}' )");
$deal_stage_id = $SQLite3->lastInsertRowID();
}
echo json_encode([$deal_stage_id,'dealarch'=>$deal_archive]);
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!!
//if(!is_null($deal_stage_id)){
$notifies_textSQL = 'Не приобретен, сделка <a class="a8sdndrtg" href="https://control.mail.com/crm/?order='.$id_order.$dealarch.'" target="_blank">'.$kp_id.'</a>';
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('$notifies_textSQL', datetime('now', 'localtime'), '0' ,'2' )");
checkPostmail($notifies_textSQL,__LINE__);
//}
//echo '<pre>',print_r($GLOBALS,1);
}
////Profile
if(isset($_POST['user_profile']) && $_POST['user_profile'] == 'infouser'){
$Result = $SQLite3->query("SELECT au.id, au.em_name, au.em_tel, au.em_email, au.em_job, au.em_access, au.text_mailer, ce.email_name, ce.email_setting, ce.email_group, cg.company_email_id, cg.access_role
FROM account_user au
LEFT JOIN company_group cg ON au.id = cg.account_user_id
LEFT JOIN company_email ce ON cg.company_email_id = ce.id
WHERE au.id='{$_SESSION['id']}' ORDER BY ce.sort_email DESC ");
//$account_user = $Result->fetchArray(SQLITE3_ASSOC);
$account_user = ResultSet($Result);
$data['user_name']=$account_user[0]['em_name'];
$data['user_tel']=$account_user[0]['em_tel'];
$data['user_email']=$account_user[0]['em_email'];
$data['user_job']=$account_user[0]['em_job'];
foreach($account_user as $val){
$data['email_post'][] = $val['email_name'];
$data['email_group'][] = $val['email_group'];
}
if(is_null($val['text_mailer']))//fix
$val['text_mailer']='[]';
$data['text_mailer']=json_decode($val['text_mailer'],1);
//$data['email_name']=$account_user[0]['email_name'];
//$data['email_group']=$account_user[0]['email_group'];
echo json_encode($data);
//echo '<pre>',print_r($GLOBALS,1);
}
if(isset($_POST['user_profile']) && $_POST['user_profile'] == 'saveuser'){
$em_user_first = strip_tags($_POST['em_user_first']);
if($_POST['em_user_first']=='')
$em_user_first='Cотрудник'.$_SESSION['id'];
$em_job_user = strip_tags($_POST['em_job_user']);
$em_email_user = strip_tags($_POST['em_email_user']);
$em_phone_user = strip_tags($_POST['em_phone_user']);
$em_text_account = strip_tags($_POST['em_text_account']);
$text_mailer = json_encode(['em_text'=>$em_text_account]);
$SQLite3->exec("UPDATE account_user SET
'em_name' = '$em_user_first',
'em_tel' = '$em_phone_user',
'em_email' = '$em_email_user',
'em_job' = '$em_job_user',
'text_mailer' = '$text_mailer'
WHERE id='{$_SESSION['id']}' ");
echo json_encode(['
<div class="success alert alert-success mt-4">
<div class="alert-message text-center">
<strong>Сохранено</strong>
</div>
</div>']);
//echo '<pre>',print_r($GLOBALS,1);
}
//task create
if(isset($_POST['task_create'])){
$files_tmp = [];
$order_id = (int)$_POST['idkp'];
$id_kpid = (int)$_POST['otcr_num'];//kpid
$task_title = strip_tags($_POST['subject_title_c']);
//$task_text = strip_tags($_POST['message_task_c']);
$task_text = SQLite3::escapeString($_POST['message_task_c']);
$task_date_create = strip_tags($_POST['otcr_datec']);
if($task_date_create=='')
$task_date_create = date('Y-m-d H:i:s');//"now', 'localtime";
$task_date_close = strip_tags($_POST['otcr_datef']);
// if($task_date_close=='')
// $task_date_close = "now', 'localtime";
$users_task = '';
$users_task_ids = json_encode([]);
if(isset($_POST['user_task_c'])){
$users_task_ids = json_encode($_POST['user_task_c']);
foreach($_POST['user_task_c'] as $val){
$users_task .= $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='$val' ") .', ';
}
$users_task = rtrim($users_task, ', ');
}else{
$users_task_ids = json_encode([$_SESSION['id']]);
}
$order_stage = (int)$_POST['otcr_all_select'];
$otcr_st = strip_tags($_POST['otcr_st']);
$task_edit=0;//проверка на редактирование
$task_status=1;//временно создание статуса Отмена=0 В работе Открытая=1 Задача выполненна Закрытая=2 Задача изменена = 3 !!!!
if(!empty($_POST['id_task']) && isset($_POST['task_status'])){
$task_status=(int)$_POST['task_status'];
//$task_status = 3; //если изменили !!! ИЛИ КАК ТО ЕЩЕ проверить !!!
//UPDATE
$task_id = (int)$_POST['id_task'];
$taskEditF = $SQLite3->querySingle("SELECT task_file_path FROM orders_tasks WHERE id='$task_id' ");
$taskEditF=json_decode($taskEditF,1);
$SQLite3->exec("UPDATE orders_tasks SET task_status='$task_status', task_title='$task_title', task_text='$task_text', task_date_create=datetime('$task_date_create'),
task_date_close=datetime('$task_date_close'), users_task_ids='$users_task_ids', order_stage='$order_stage' WHERE id='$task_id' ");
//$updatetrue = $SQLite3->changes();
$task_edit=1;
}else{
$SQLite3->exec("INSERT INTO orders_tasks (order_id, task_status, task_title, task_text, task_date_create, task_date_close, account_id_create, users_task_ids, order_stage)
VALUES ('$order_id', '$task_status', '$task_title', '$task_text', datetime('$task_date_create'), datetime('$task_date_close'), '{$_SESSION['id']}', '$users_task_ids', '$order_stage' )");
$task_id = $SQLite3->lastInsertRowID();
}
////////////// обновить сделку в любом случаи кто и когда
$SQLite3->exec("UPDATE orders SET deal_update= datetime('now', 'localtime'), account_id_update = '{$_SESSION['id']}' WHERE id='$order_id' ");
$path_save = md5($task_id.'task');
if (is_uploaded_file($_FILES['file_task_c']['tmp_name'][0])) {
$total = count($_FILES['file_task_c']['name']);
if (!is_dir('../attachments/task/'. $path_save .'/')) {
mkdir('../attachments/task/'. $path_save .'/');//mkdir($dirname, 0755, true);
}
// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {
//Get the temp file path
$sourcePath = $_FILES['file_task_c']['tmp_name'][$i];
//Make sure we have a file path
if ($sourcePath != ""){
//Setup our new file path
$targetPath = '../attachments/task/'. $path_save .'/'. $_FILES['file_task_c']['name'][$i];
//Upload the file into the temp dir
if(move_uploaded_file($sourcePath, $targetPath)) {
//$data['file_task_c'][]['file']=$_FILES['file_task_c']['name'][$i];
//$files_arr[]['file']=$_FILES['file_task_c']['name'][$i];
//$files_arr[]=$_FILES['file_task_c']['name'][$i];
//$files_tmp[]=$_FILES['file_task_c']['name'][$i];
$file_task_c[]=$_FILES['file_task_c']['name'][$i];
//$data['file_task_c']['path']='corpcom';
}
}
}
//if(!is_array(json_decode($company['files_org'],1)))
//$files_tmp = array_unshift($files_arr, $file_task_c);
//if(count($file_task_c)>=1)
//array_unshift($files_tmp, $file_task_c);
$files_tmp = array_unique($file_task_c);
//$files_tmp = $files_arr;
//$files_tmp = $file_task_c;
}
if(!empty($taskEditF) ){//edit update files
$file_task_c = array_merge($taskEditF,$files_tmp);
$files_tmp = array_unique($file_task_c);
//echo var_dump($files_tmp);
}
$task_file_path = json_encode($files_tmp);
$SQLite3->exec("UPDATE orders_tasks SET
task_file_path='$task_file_path' WHERE id='$task_id' ");
$files_count = count($files_tmp);
$task_date_create = strtotime($task_date_create);
$time_task = date('d ', $task_date_create) . $monthes[date('n', $task_date_create)].', '.$days[date('w',$task_date_create)] . date(' в H:i Yг.', $task_date_create); //Y-m-d h:i:sa
$userName = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='{$_SESSION['id']}' ");
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $userName);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($userName.$_SESSION['id']), -6);
echo json_encode([
'id'=>$task_id,'status'=>$task_status,'title'=>$task_title,'text'=>$task_text,'create'=>$time_task,'user'=>[$userAB,$ColorUsers,$userName],$files_count,$otcr_st,$users_task,'edit'=>$task_edit,
'
<div class="success alert alert-success mt-4">
<div class="alert-message text-center">
<strong>Сохранено</strong>
</div>
</div>'
]);
//fix only task временно!!!
if($order_stage==100)//fix archive view
$ST_DEAL[100] = ['text'=>'Не приобретен ','css'=>'background-color:red !important;','stage_lid'=>100];//fix АРХИВНАЯ ОТЛОЖЕННАЯ СДЕЛКА !!!!!!! просмотр архива ЗАГРУЗИТЬ ЕЩЕ..
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!!
$notifies_textSQL = 'Комментарий задачи создан, '.$ST_DEAL[$order_stage]['text'].', сделка <a class="st456cf" href="https://control.mail.com/crm/?order='.$order_id.'" target="_blank">'.$id_kpid.'</a><br>'.$users_task;
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('$notifies_textSQL', datetime('now', 'localtime'), '0' ,'10' )");
checkPostmail($notifies_textSQL,__LINE__);
//echo '<pre>',print_r($GLOBALS,1);
}
//task status change EDIT
if(isset($_POST['task_edit'])){
$task_id = (int)$_POST['id_task'];
$Result = $SQLite3->query("SELECT * FROM orders_tasks WHERE id='$task_id' ");
$taskEdit = $Result->fetchArray(SQLITE3_ASSOC);
/*[taskEdit] => Array
(
[id] => 94
[order_id] => 162
[order_status] => 1
[order_stage] => 6
[task_status] => 0
[task_title] => отправка сообщения
[task_text] => test text
[task_file_path] => []
[task_date_create] => 2025-04-26 23:04:00
[task_date_close] => 2025-04-27 23:04:00
[account_id_create] => 1
[account_id_close] =>
[account_id_finish] =>
[users_task_ids] => ["1","3","33"]
)*/
$data['id']=$taskEdit['id'];
$data['otcr_all_select']=$taskEdit['order_stage'];
$data['status']=$taskEdit['task_status'];
$data['subject_title_c']=$taskEdit['task_title'];
$data['message_task_c']=$taskEdit['task_text'];
$path_save = md5($task_id.'task');//attachments/task/'. $path_save .'/
$data['file_task_c']=json_decode($taskEdit['task_file_path'],1);
//$data['otcr_datec']=$taskEdit['task_date_create'];
//$data['otcr_datef']=$taskEdit['task_date_close'];
$data['otcr_datef'] = null; // без null 1970-01-01T03:00
$data['otcr_datec'] = date('Y-m-d\TH:i', strtotime($taskEdit['task_date_create']));//2025-07-13T19:52 (без секунд и с T вместо пробела)
if(!empty($taskEdit['task_date_close']))
$data['otcr_datef'] = date('Y-m-d\TH:i', strtotime($taskEdit['task_date_close']));//2025-07-13T19:52 (без секунд и с T вместо пробела)
$AccountOrder = json_decode($taskEdit['users_task_ids'],1);
$account_user = "SELECT au.id as id_user, au.hash, au.em_name, au.em_tel, au.em_email, au.em_job, au.em_access, au.new_day, ce.email_name, ce.email_setting, cg.company_email_id, cg.access_role
FROM account_user au
LEFT JOIN company_group cg ON au.id = cg.account_user_id
LEFT JOIN company_email ce ON cg.company_email_id = ce.id
GROUP BY au.id";//Временный запрос переделать!!!!!!!!!
$Result = $SQLite3->query("$account_user");
$ACCOUNT_ALL = ResultSet($Result);
$profile_multiple='';
foreach($ACCOUNT_ALL as $key => $value){
$selected = '';
if(in_array($value['id_user'], $AccountOrder))
$selected = 'selected';
$profile_multiple .= '<option value="'.$value['id_user'].'" '.$selected.'>'.$value['em_name'].'</option>';//selected
}
$data['user_task_c']=$profile_multiple;
echo json_encode($data);
//echo '<pre>',print_r($GLOBALS,1);
//exit;
}
//task delete files
//order new manual
if(isset($_POST['order_manual']) && empty($_POST['mail_send'])){//mail_send
$data['email_choce']=$_SESSION['mto'];
$Result = $SQLite3->query("SELECT * FROM organization");
$CompanyALL = ResultSet($Result);
$data['company']=$CompanyALL;
$data['info']='
<div class="success alert alert-success mt-4">
<div class="alert-message text-center">
<strong>Сохранено</strong>
</div>
</div>';
echo json_encode($data);
//echo '<pre>',print_r($GLOBALS,1);
//exit;
}
//order add manual формируем сообщения к orders message 1
if(isset($_POST['msg_manual'])){//mail_inbox
$kpcr_n = (int)$_POST['kpid'];
///почта большо одного почтового ящика в чате
$Result = $SQLite3->query("SELECT me.from_send, ord.status_deal, ord.id FROM orders ord LEFT JOIN message me ON ord.id = me.order_id WHERE ord.kp_id='$kpcr_n' GROUP BY me.from_send");
//$mail_to_send = $Result->fetchArray(SQLITE3_ASSOC);
$i = 0;
while($res = $Result->fetchArray(SQLITE3_ASSOC)){
$mail_to_send[] = $res['from_send'];
$data['status_deal'] = $res['status_deal'];
$data['order_id'] = $res['id'];
$data['kpcr_n'] = $kpcr_n;
$i++;
}
$data['email']=$mail_to_send;
$data['email_choce']=$_SESSION['mto'];
echo json_encode($data);
//echo '<pre>',print_r($GLOBALS,1);
}
//добавление сообщения к orders message 2
if(isset($_POST['msg_add'])){//mail_send
//статус КП 4 (ожидание сделки КП) //если ОТПРАВЛЕНО только not_post_msg !!
//$SQLite3->exec("UPDATE inbox_mail SET status_kp='4', date_update = datetime('now', 'localtime') WHERE id = '$id_inbox' ");
/*echo json_encode(['
<div class="success alert alert-success">
<div class="alert-message text-center">
<strong>Отправлено</strong>
</div>
</div>']);
echo '<pre>',print_r($GLOBALS,1);*/
}
//обнолвение orders deal сообщений message запрос автоматический для одной выбраной сделки
if(isset($_POST['update_deal_full'])) { //if(isset($_GET['order']))
$order_id_one = (int)$_POST['update_deal_full'];
//$timer_update = date('Y-m-d H:i:s');
$LastTimerUpdate = $_POST['uptime_o'];
$Result = $SQLite3->query("SELECT ord.id,ord.kp_id,ord.status_deal,ord.deal_update,me.chat,me.uid_inbox,me.text_post,me.attach_post,me.from_send,
me.account_id_send,me.email_group_id,me.account_create,me.date_create as mess_create,me.date_update as mess_update,me.id as meido,
im.inbox_from,im.status_kp,im.date_create as status_create,im.date_update as status_update,im.inbox_udate as date_inbox,im.inbox_from as email_org,
im.id as id_inbox,im.subject as text_subject,me.subject_post
FROM orders ord
LEFT JOIN message me ON ord.id = me.order_id
LEFT JOIN inbox_mail im ON im.uid = me.uid_inbox
WHERE ord.id='$order_id_one'
AND ( me.date_create BETWEEN '$LastTimerUpdate' AND datetime('now', 'localtime')
OR ord.deal_update BETWEEN '$LastTimerUpdate' AND datetime('now', 'localtime') )
ORDER BY me.date_create DESC ");
$DEAL_ONE = ResultSet($Result);
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! КАК ВАРИАНТ ВЫЗВАТЬ ДВА РАЗА 1 РАЗ ВСЕ ВЫЗВАТЬ СООБЩЕНИЯ И ИХ СКОНВЕРТИТЬ В ОТДЕЛЬНЫЙ $data А ПОТОМ ЕЩЕ РАЗ ВЫХВАТЬ НО УЖЕ ДЛЯ СООБЩЕНИЯ ПОСЛЕДНИХ НО БЕЗ ФАЙЛОВ СЧЕТЧИКОВ И КОМПАНИЙ И ДРУГОЙ ИНФОРМАЦИИ ДАННЫХ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ЗАФУРИЧИТЬ BAG отчетность сделали cron.php!
if(empty($DEAL_ONE)){
echo json_encode(false);
exit;
}
$dealkp_n=$DEAL_ONE[0]['status_deal'];//fix choice order once status deal
/////////////Вывод сделки ОДНОЙ переписка
$caht_deal = '';
$files_mail_attah = 0;
$from_send = $documet_mail_attah = $company_this = [];
foreach($DEAL_ONE as $key => $value){
if($value['chat']==1)
$chdcss = ['justify-content-start','images/avatar6.png','bg-body-tertiary',''];
else
$chdcss = ['justify-content-end','images/mail.com-logo-w4.svg','text-white bg-primary','float-end'];
if(strip_tags($value['text_post'])=='')
$value['text_post']='<i class="text-muted"> В письме нет текста </i>';
if($value['chat']==1){
$value['text_post']=str_replace('class="gmail_quote"','class="gmail_quote" style="display:none"',$value['text_post']);
$value['text_post']=str_replace('quote___cr"','quote___cr" style="display:none"',$value['text_post']);
}else{
$value['text_post']=str_replace('quote___cr','quote_0__cr',$value['text_post']);
}
// //strip_tags($value['text_post'] <iframe srcdoc=" "></iframe> <iframe srcdoc="'.$value['text_post'].' "></iframe> </div>
// $srcdoc = $value['text_post'];
// $escaped = str_replace([ '"', '&' ], [ '"', '&amp;' ], $srcdoc);
// $escaped = htmlentities($value['text_post']);//<!--<iframe srcdoc="'.$escaped.'"></iframe> --> //<br> '.$value['text_post'].' </div> // <iframe class="iframdocsrc-in" srcdoc="'.$escaped.'"></iframe>
//$value['text_post'] = str_replace("'",''',$value['text_post']);
//$value['text_post'] = str_replace('<style>','<styles>',$value['text_post']);//TEST
$value['text_post'] = str_replace('<style>','<styles style="display:none">',$value['text_post']);//TEST
$value['text_post'] = str_replace('<style type="text/css">','<styles style="display:none">',$value['text_post']);//TEST
$value['text_post'] = str_replace("<style type='text/css'>",'<styles style="display:none">',$value['text_post']);//TEST
$value['text_post'] = str_replace("<style type=text/css>",'<styles style="display:none">',$value['text_post']);//TEST
$value['text_post'] = str_replace('</style>','</styles>',$value['text_post']);//TEST
$value['text_post'] = str_replace('<base ','<basesese ',$value['text_post']);//TEST
//список файлов
$attach_post = json_decode($value['attach_post'],1);
$caht_deal_file = $documet_mail_link = '';
if(is_array($attach_post) && count($attach_post) ){
$caht_deal_file =' <button type="button" class="btn btn-sm btn-outline-secondary waves-effect waves-light w-md m-b-30 text-muted text-decoration-none deal_file_img" style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .5rem; --bs-btn-font-size: .75rem;"><img src="images/paperclip.svg" class="deal_file_img" style=" margin-top: -5px;width: 20px;"> Файл </button>';
if(empty($files_mail_attah)){
$documet_mail_link = '<h6 class="border-bottom pb-2 mb-0 mt-3">Файлы в письмах</h6>';
}
if($value['chat']==0)
$documet_mail_attah['path'] = $value['mess_create'];//path
else{
$documet_mail_attah['path'] = $value['status_create'];//path
$documet_mail_attah['timep'] = $value['date_inbox'];
}
$documet_mail_attah['chat'] = $value['chat'];
$documet_mail_attah['meido'] = $value['meido'];
$timep = $documet_mail_attah['path'];
if(isset($documet_mail_attah['timep']))
$timep = date('Y-m-d H:i:s', $documet_mail_attah['timep']);
$date_in_time = date('Y/m/d', strtotime($timep) );
$path_link=str_replace('/', '-', $date_in_time).'-'.strtotime($timep, strtotime(+3 . ' hours') );//(strtotime($timep)+10800)
foreach($attach_post as $files_this){
if(isset($files_this['file']) || isset($files_this['path'])){
if(isset($files_this['path']) && empty($files_this['file'])){
$file_name = explode('/',$files_this['path']);
$file_name = $file_name[5];
}else
$file_name = $files_this['file'];
//<a class="linkattah" data-file="2024-10-10-1728546636" href="#">ЕМТН.10.01.02.29.00.002.1000СБ_Золотник.pdf</a>
//<a download href="/crm/attachments'.$file_this['path'].'/'.$file_this['file'].'">Скачать</a>
$documet_mail_link.=' <div class="d-flex text-body-secondary pt-3">
<!--<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32" preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title><rect width="100%" height="100%" fill="#007bff"></rect><text x="50%" y="50%" fill="#007bff" dy=".3em">32x32</text></svg>-->
<div class="pb-3 mb-0 small lh-sm border-bottom w-100">
<div class="d-flex justify-content-between">
<strong class="text-gray-dark" style="overflow: auto;">'.$file_name.'</strong>
<a class="linkattah" data-file="'.$path_link.'" data-file-name="'.$file_name.'" data-meido-file="'.$documet_mail_attah['meido'].'" onclick="return false;" href="#" style="margin-left: 5px;"><h6>Скачать</h6></a>
</div>
<!--<span class="d-block">@username</span>-->
</div>
</div>';
$files_mail_attah++;
if(strpos($value['text_post'], 'cid:'.$files_this['file']) ){// if('cid:image001.png'=='cid:'.$file_this['file'])
//Показать изображение в письме при просмотре cid:image001.png@01DBC4D3.B01D85F0 .. cid:part1.BVz7KEPq.0Rna7ko0@mail.com
$path = '../attachments/'.$files_this['path'].'/'.$files_this['file'];
$type = pathinfo($path, PATHINFO_EXTENSION);
if(file_exists($path))
$data = file_get_contents($path);
else
$data = file_get_contents('../images/404imagesno.jpg');
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
$value['text_post'] = preg_replace('/cid:'.$files_this['file'].'@[^"]+/', $base64, $value['text_post']);
//$value['text_post']=str_replace('cid:image001.png', $base64, $value['text_post']);
}
//file_put_contents('_PATH.txt',var_export($path,1),FILE_APPEND);
}
}
}
$caht_deal .='<div class="d-flex flex-row '.$chdcss[0].'" id="m'.$value['meido'].'" style="overflow-y: auto;">';
if($value['chat']==1){
$caht_deal .='<img src="'.$chdcss[1].'" alt="avatar 1" style="width: 45px; height: 100%;">';
$send_choice_class = 'send_out';
}
if(strpos($value['text_subject'],'TL_KP') )
$value['text_subject']=substr($value['text_subject'], 0, strpos($value['text_subject'], "TL_KP"));
if($value['chat']==0){
$value['text_subject']=preg_replace('/TL_KP\d+/', '', $value['subject_post']);
$send_choice_class = 'send_int';
}
$sub_send_account = $sub_send_color = '';//отправлено или нет письмо
if($value['account_id_send']=='INSIDE' && $value['chat']==0){
$sub_send_color = 'background-color: rgb(96 96 96) !important;';
$sub_send_account = ' <small style="float: right;"><i>(*внутренний комментарий)</i></small>';
$value['text_subject']=preg_replace('/TL_KP\d+/', '', $value['subject_post']);
}
if($value['account_id_send']=='NOTIF' && $value['chat']==0){
$sub_send_color = 'background-color: rgb(127 128 171) !important;';
$sub_send_account = ' <small style="float: right;"><i> * УВЕДОМЛЕНИЕ </i></small>';
$value['text_subject']=substr($value['subject_post'], 0, strpos($value['subject_post'], "TL_KP"));
$send_choice_class = '';
}
$caht_deal .=' <div style=" margin-right: 5px;">
<div class="small p-2 ms-1 mb-1 rounded-3 '.$chdcss[2].'" style="overflow-y: auto; max-height: 350px;max-width: 1350px;'.$sub_send_color.'">
<a href="#m'.$value['meido'].'" data-msgid="'.$value['meido'].'" data-idinbox="'.$value['id_inbox'].'" data-id="'.$value['uid_inbox'].'"
class="text-muted small text_subject '.$send_choice_class.'" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable">'.$value['text_subject'].'</a> '.$sub_send_account.' <br><p> </p> '.$value['text_post'].' </div>';
if($value['account_id_send']!='NOTIF')
$caht_deal .='<a href="#m'.$value['meido'].'" data-msgid="'.$value['meido'].'" data-idinbox="'.$value['id_inbox'].'" data-id="'.$value['uid_inbox'].'"
class="text-muted text-decoration-none '.$send_choice_class.'" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable">
<p class="small ms-3 rounded-3 text-muted '.$chdcss[3].'"> <button data-msgid="'.$value['meido'].'" data-idinbox="'.$value['id_inbox'].'" data-id="'.$value['uid_inbox'].'" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable" type="button" class="btn btn-sm btn-outline-secondary waves-effect waves-light w-md m-b-30 text-muted text-decoration-none '.$send_choice_class.'" style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .5rem; --bs-btn-font-size: .75rem;"> <img class="" src="images/email-open.svg" style=" margin-top: -5px;width: 20px;"> Открыть </button> ';
/*if(is_array(json_decode($value['attach_post'],1)) && count(json_decode($value['attach_post'],1)) ){
$caht_deal .='<img src="images/paperclip.svg" style=" margin-top: -5px;width: 20px;">';
$documet_mail_attah[$key] = json_decode($value['attach_post'],1);
if($value['chat']==0)
$documet_mail_attah[$key]['path'] = $value['mess_create'];//path
else{
$documet_mail_attah[$key]['path'] = $value['status_create'];//path
$documet_mail_attah[$key]['timep'] = $value['date_inbox'];
}
$documet_mail_attah[$key]['chat'] = $value['chat'];
$documet_mail_attah[$key]['meido'] = $value['meido'];
}*/
if(isset($caht_deal_file))
$caht_deal .= $caht_deal_file;
$timestamp = strtotime($value['mess_create']);
$value['mess_create'] = date('d ', $timestamp) . $monthes[date('n', $timestamp)].', '.$days[date('w', $timestamp)] . date(' в H:i Yг.', $timestamp);
$caht_deal .=' <i class="small">'.$value['mess_create'].'</i>
</p>
</a>
<!--
<button type="button" class="btn btn-sm btn-outline-secondary"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-envelope-open" viewBox="0 0 16 16"> <path d="M8.47 1.318a1 1 0 0 0-.94 0l-6 3.2A1 1 0 0 0 1 5.4v.817l5.75 3.45L8 8.917l1.25.75L15 6.217V5.4a1 1 0 0 0-.53-.882zM15 7.383l-4.778 2.867L15 13.117zm-.035 6.88L8 10.082l-6.965 4.18A1 1 0 0 0 2 15h12a1 1 0 0 0 .965-.738ZM1 13.116l4.778-2.867L1 7.383v5.734ZM7.059.435a2 2 0 0 1 1.882 0l6 3.2A2 2 0 0 1 16 5.4V14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V5.4a2 2 0 0 1 1.059-1.765z"></path></svg> <span class="visually-hidden">Открыть</span>
</button>
<div class="d-flex justify-content-between align-items-center mb-3 ">
<div class="btn-group">
<button type="button" class="btn btn-sm btn-outline-secondary">Открыть</button>
<button type="button" class="btn btn-sm btn-outline-secondary">письмо </button>
</div>
<small class="text-body-secondary"> </small>
</div>-->
</div>';
if($value['chat']==0){
if(isset($value['account_create']) && $value['account_create']!=0){
$userName = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='{$value['account_create']}' ");
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $userName);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($userName.$value['account_create']), -6);
$caht_deal .='<span data-toggle="tooltip" data-placement="top" title="'.$userName.'" class="rounded-circle chat-list" alt="" style="/*display: block;border-radius: 50%;*/background-color:'.$ColorUsers.';/*width: 45px; height: 45px;padding-top: 10px;text-align: center;*/color: #b2b2b2;">'.$userAB.'</span>';
}else
$caht_deal .='<img src="'.$chdcss[1].'" alt="avatar 1" style="width: 45px; height: 100%;">';
}
$caht_deal .='</div>';
$OrderID = $value['id'];
if(!in_array($value['from_send'], $from_send) ){//количество контрагентов организаций
$from_send[] = $value['from_send'];
$Result = $SQLite3->query("SELECT * FROM organization WHERE email_org = '{$value['from_send']}'");
$company_this[] = $Result->fetchArray(SQLITE3_ASSOC);
/*$i=0;
while($res = $Result->fetchArray(SQLITE3_ASSOC)){
$company_this[] = $res;
$i++;
}*/
//файлы организации
$files_org = $files_Orgall = 0;
$documet_org_link = '';
foreach($company_this as $key => $val){
if(is_array(json_decode($company_this[$key]['files_org']))){
$files_Orgall = count(json_decode($company_this[$key]['files_org'],1) );
$files_org = $files_Orgall + $files_org;
}
if($files_org!=0){
$path_save = md5($company_this[$key]['id'].'corpcom');
//<!-- <a download href="/crm/attachments/company/'.$path_save.'/'.$file_this.'">Скачать</a> -->
$arr_files_org = json_decode($company_this[$key]['files_org'],1);
if(is_array($arr_files_org)){//fix notice
$documet_org_link.= '<h6 class="border-bottom pb-2 mb-0 mt-3">Файлы организации <small>'.$company_this[$key]['email_org'].'</small></h6>';
foreach(json_decode($company_this[$key]['files_org'],1) as $file_this){
$documet_org_link.=' <div class="d-flex text-body-secondary pt-3">
<!--<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32" preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title><rect width="100%" height="100%" fill="#007bff"></rect><text x="50%" y="50%" fill="#007bff" dy=".3em">32x32</text></svg>-->
<div class="pb-3 mb-0 small lh-sm border-bottom w-100">
<div class="d-flex justify-content-between">
<strong class="text-gray-dark" style="overflow: auto;">'.$file_this.'</strong>
<a class="linkattah_corpcom" data-file="'.$company_this[$key]['id'].'" onclick="return false;" href="#" data-file-name="'.$file_this.'" style="margin-left: 5px;"><h6>Скачать</h6></a>
</div>
<!--<span class="d-block">@username</span>-->
</div>
</div>';
}
}
}
}
}
}// END foreach $DEAL_ONE - UPDATE обновление доументов из писем и организации
//tasks обновление TASK задач для одной сделки
$Result = $SQLite3->query("SELECT * FROM orders_tasks WHERE order_id='$OrderID'");
$TASK_ALL = ResultSet($Result);
$task__count=$task_file_count_f=0;
$tasks_order = '';
foreach($TASK_ALL as $task){
$users_task = '';
$userName = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='{$task['account_id_create']}' ");
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $userName);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($userName.$task['account_id_create']), -6);
$users_task_ids = json_decode($task['users_task_ids'],1);
//$task_file_count_f = 0;
foreach($users_task_ids as $val){
$users_task .= $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='$val' ") .', ';
}
$users_task = rtrim($users_task, ', ');
if($task['task_status']==1)
$task['task_status']='Открыто';
elseif($task['task_status']==2)
$task['task_status']='Закрыто';
elseif($task['task_status']==0)
$task['task_status']='Отмена';
$task_file_count = 0;
if(count(json_decode($task['task_file_path'],1)) ){
$taskArrf = json_decode($task['task_file_path'],1);
$task_file_path[] = $taskArrf;
$path_save_task_file[] = md5($task['id'].'task');
$path_id_task_file[] = $task['id'];
$task_file_count = count($taskArrf);
}
$task_date_create = strtotime($task['task_date_create']);
$time_task = date('d ', $task_date_create) . $monthes[date('n', $task_date_create)].', '.$days[date('w',$task_date_create)] . date(' в H:i Yг.', $task_date_create); //Y-m-d h:i:sa
//<a href="#" class="list-group-item list-group-item-action py-3 lh-sm" data-id-task="'.$task['id'].'" style="padding:0">
$tasks_order .= '<span class="list-group-item list-group-item-action py-3 lh-sm" data-id-task="'.$task['id'].'" style="padding:0">
<div class="d-flex w-100 align-items-center justify-content-between">
<div><!--<img src="https://github.com/twbs.png" alt="twbs" width="32" height="32" class="rounded-circle flex-shrink-0">-->
<span class="rounded-circle" height="25" alt="" style="display: block;border-radius: 50%;background-color:'.$ColorUsers.';width: 20px;text-align: center;color: #b2b2b2;">'.$userAB.'</span>
</div>
<span class="badge bg-warning-subtle text-warning-emphasis rounded-pill">'.$ST_DEAL[$task['order_stage']]['text'].'</span>
<strong class="mb-1" style="word-break: break-all;">'.$task['task_title'].'</strong>#'.$task['id'].' <span class="badge bg-primary-subtle text-primary-emphasis rounded-pill">'.$task['task_status'].'</span>
<div>
<small class="text-body-secondary">
<button class="btn btn-outline-secondary d-inline-flex align-items-center btn-sm mb-1 task-panel" type="button" data-id-task="'.$task['id'].'">Детали</button>
</small>
</div>
</div>
<div class="d-flex gap-2 w-100 justify-content-between">
<div>
<span class="mb-0">Создал: '.$userName.'</span>
<p class="mb-0 opacity-75">Участники: '.$users_task.'</p>
</div>
<small class="opacity-50 text-nowrap">'.$time_task.'<br>Файлов: '.$task_file_count.'</small>
</div>
<div class="col-10 mb-1 mt-1 small">'.$task['task_text'].'</div>
</span>';
$task_file_count_f = $task_file_count + $task_file_count_f;
$task__count++;
}
//task файлы в задачах
$documet_task_link = '';//fix notice
if(!empty($task_file_count_f)){
$documet_task_link = '<h6 class="border-bottom pb-2 mb-0 mt-3">Документы задач</h6>';
//<a download href="/crm/attachments/task/'.$path_save.'/'.$file_this.'" style="margin-left: 5px;">Скачать</a>
foreach($task_file_path as $key => $file_arr){
$path_save = $path_save_task_file[$key];
$path_file_id = $path_id_task_file[$key];
foreach($file_arr as $k => $file_this){
$documet_task_link.=' <div class="d-flex text-body-secondary pt-3">
<!--<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32" preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title><rect width="100%" height="100%" fill="#007bff"></rect><text x="50%" y="50%" fill="#007bff" dy=".3em">32x32</text></svg>-->
<div class="pb-3 mb-0 small lh-sm border-bottom w-100">
<div class="d-flex justify-content-between">
<strong class="text-gray-dark" style="overflow: auto;">'.$file_this.'</strong>
<a class="linkattah" data-taskidf="'.$k.'" onclick="return false;" href="#" data-file="'.$path_file_id.'" data-file-name="'.$file_this.'" style="margin-left: 5px;"><h6>Скачать</h6></a>
</div>
<!--<span class="d-block">@username</span>-->
</div>
</div>';
}
}
}
//User accounts all for deal order
$AccountOrder = $SQLite3->querySingle("SELECT users_order_ids FROM orders WHERE id='$order_id_one' ");
$AccountOrder = json_decode($AccountOrder,1);
//fix NULL users_order_ids
if(!is_array($AccountOrder))
$AccountOrder = [$SQLite3->querySingle("SELECT account_create FROM message WHERE order_id='$order_id_one' ")];//[$_SESSION['id']];
$profile_order_get=$profile_order_userName = '';
foreach($AccountOrder as $key => $value){
$userName = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='$value' ");
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $userName);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($userName.$value), -6);
$profile_order_get.='<span class="img-fluid rounded-circle me-1" title="профили" height="25" alt="" style="display: inline-block;border-radius: 50%;background-color:'.$ColorUsers.';width: 26px;text-align: center;color: #b2b2b2;">'.$userAB.'</span><span>'.$userName.'</span> ';
$profile_order_userName.= ', '.$userName;
}
$profile_order_userName = ltrim(rtrim($profile_order_userName, ', '), ', ');
//обновление информации о сделки
$LastIntKey = array_key_last($DEAL_ONE);
//<p>Последние изменения: <i>
$deal_update_strtotime = strtotime($DEAL_ONE[$LastIntKey]['deal_update']);
$deal_update_time = '<span class="pull-right">'.date('d ', $deal_update_strtotime) . $monthes[date('n', $deal_update_strtotime)].', '.$days[date('w',$deal_update_strtotime)] . date(' в H:i, Yг.', $deal_update_strtotime).'</span>';
//total files document list
$filesALLcount = 0;
if($files_org!=0)
$filesALLcount = $filesALLcount+$files_org;
if(isset($task_file_count_f))
$filesALLcount = $filesALLcount+$task_file_count_f;
if($files_mail_attah>0)
$filesALLcount = $filesALLcount+$files_mail_attah;
$date['chat_deal']=$caht_deal;
$date['files_mail_attah']=$files_mail_attah;
$date['documet_mail_link']=$documet_mail_link;
$date['from_send']=$from_send;
$date['company_this']=$company_this;
$date['files_org_count']=$files_org;
$date['documet_org_link']=$documet_org_link;
$date['task__count']=$task__count;
$date['documet_task_link']=$documet_task_link;
$date['task_file_count_f']=$task_file_count_f;
$date['tasks_order']=$tasks_order;
$date['profile_order_get']=$profile_order_get;
$date['deal_update_time']=$deal_update_time;
$date['files_count_all']=$filesALLcount;
$date['dealkp_n']=$dealkp_n;//status_deal order
if(isset($date))//$date DEBUG TEST
$LastTimerUpdate = date('Y-m-d H:i:s');
$date['lastIDOrder'] = $LastTimerUpdate;
echo json_encode($date);
//echo '<pre>',print_r($GLOBALS,1);
}
//account user order to apply 1
if(isset($_POST['user_orederaccou'])){
//получение аккаунтов для ордера
$id_order = (int)$_POST['idkp'];
//ТУТ МОГУТ БЫТЬ ПРАВИЛА ДОБАВЛЕНИЕ по разрешение пользователя кто кого может или нет добавить !!!
$AccountOrder = $SQLite3->querySingle("SELECT users_order_ids FROM orders WHERE id='$id_order' ");
$AccountOrder = json_decode($AccountOrder,1);
//fix NULL users_order_ids
if(!is_array($AccountOrder))
$AccountOrder = [$SQLite3->querySingle("SELECT account_create FROM message WHERE order_id='$id_order' ")];//[$_SESSION['id']];
$account_user = "SELECT au.id as id_user, au.hash, au.em_name, au.em_tel, au.em_email, au.em_job, au.em_access, au.new_day, ce.email_name, ce.email_setting, cg.company_email_id, cg.access_role
FROM account_user au
LEFT JOIN company_group cg ON au.id = cg.account_user_id
LEFT JOIN company_email ce ON cg.company_email_id = ce.id
GROUP BY au.id";//Временный запрос переделать!!!!!!!!!
$Result = $SQLite3->query("$account_user");
$ACCOUNT_ALL = ResultSet($Result);
$profile_multiple='';
foreach($ACCOUNT_ALL as $key => $value){
$selected = '';
if(in_array($value['id_user'], $AccountOrder))
$selected = 'selected';
$profile_multiple .= '<option value="'.$value['id_user'].'" '.$selected.'>'.$value['em_name'].'</option>';//selected
}
echo json_encode($profile_multiple);
//echo '<pre>',print_r($GLOBALS,1);
}
//account user set order user_orederset 2
if(isset($_POST['user_orederset'])){
//редактировать аккаунты для ордера
$id_order = (int)$_POST['idkp'];
$id_kpid = (int)$_POST['kpid'];
if(empty($_POST['user_order_ch'])){
echo json_encode(['
<div class="success alert alert-success alert-warning mt-4">
<div class="alert-message text-center">
<strong>Поле не должно быть пустым</strong>
</div>
</div>']);
exit;
}
//ТУТ МОГУТ БЫТЬ ПРАВИЛА ДОБАВЛЕНИЕ по разрешение пользователя кто кого может или нет добавить !!!
$user_order_ch = json_encode($_POST['user_order_ch']);
$SQLite3->exec("UPDATE orders SET users_order_ids = '$user_order_ch' WHERE id = '$id_order' ");
$AccountOrder = $SQLite3->querySingle("SELECT users_order_ids FROM orders WHERE id='$id_order' ");
$AccountOrder = json_decode($AccountOrder,1);
$profile_order_get=$profile_order_userName = '';
foreach($AccountOrder as $key => $value){
$userName = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='$value' ");
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $userName);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($userName.$value), -6);
$profile_order_get.='<span class="img-fluid rounded-circle me-1" title="профили" height="25" alt="" style="display: inline-block;border-radius: 50%;background-color:'.$ColorUsers.';width: 26px;text-align: center;color: #b2b2b2;">'.$userAB.'</span><span>'.$userName.'</span> ';
$profile_order_userName.= ', '.$userName;
}
$profile_order_userName = ltrim(rtrim($profile_order_userName, ', '), ', ');
//$profile_order_get = rtrim($profile_order_get, ', ');
echo json_encode(['
<div class="success alert alert-success mt-4">
<div class="alert-message text-center">
<strong>Сохранено</strong>
</div>
</div>',$profile_order_get]);
//echo '<pre>',print_r($GLOBALS,1);
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!!
$notifies_textSQL = 'Добавлены сотрудники, <a href="https://control.mail.com/crm/?order='.$id_order.'" target="_blank">'.$id_kpid.'</a><br>'.$profile_order_userName;
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('$notifies_textSQL', datetime('now', 'localtime'), '1' ,'3' )");
checkPostmail($notifies_textSQL,__LINE__);//'<a href="https://control.mail.com/crm/?order='.$id_order.'" target="_blank">'.$id_kpid.'</a>'.' '.
}
//notifies notify уведомления notifications
if(isset($_POST['notifies_now'])){
//закрытие уведомления
if(isset($_POST['notif']) && $_POST['notifies_now']==1){
$SQLite3->exec("UPDATE notifies_account SET looked_ok='1', date_closed=datetime('now', 'localtime') WHERE notifies_id='{$_POST['notif']}' AND account_id='{$_SESSION['id']}' ");
exit;//!! test
}
//все сообщения
$Result = $SQLite3->query("SELECT nty.id, nty.text_notifies, nty.notifies_create, nty.access_look, nty.status_notify, nty.company_email_id, nta.account_id, nta.looked_ok
FROM notifies nty
LEFT JOIN notifies_account nta ON nty.id = nta.notifies_id
WHERE nty.notifies_create BETWEEN datetime('now', '-1 days') AND datetime('now', 'localtime') GROUP BY nty.id ORDER BY nty.notifies_create DESC "); //access_look добавить служебные записи вести
//$account_user = $Result->fetchArray(SQLITE3_ASSOC); AND nta.looked_ok='0' AND nta.account_id='{$_SESSION['id']}'
$notifies_now = ResultSet($Result);
$NoticeMsg = '';
/*$NoticeMsg .= '
<div class="toast show mb-1" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<!--<img src="/images" class="rounded me-2" alt="">-->
<strong class="me-auto">Bootstrap</strong>
<small class="text-muted">just now</small>
<button type="button" data-totiid="1" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
See? Just like this.
</div>
</div>
<div class="toast show mb-1" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<!--<img src="/images" class="rounded me-2" alt="">-->
<strong class="me-auto">Bootstrap</strong>
<small class="text-muted">2 seconds ago</small>
<button type="button" data-totiid="2" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
Heads up, toasts will stack automatically
<div class="mt-2 pt-2 border-top">
<!--<button type="button" class="btn btn-primary btn-sm">Take action</button>-->
<button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="toast">OK</button>
</div>
</div>
</div>
';*/
foreach($notifies_now as $key => $val){
if($_SESSION['id'] != $SQLite3->querySingle("SELECT account_id FROM notifies_account WHERE notifies_id='{$val['id']}' AND account_id='{$_SESSION['id']}' ") ){
$SQLite3->exec("INSERT INTO notifies_account (notifies_id, account_id) VALUES ('{$val['id']}', '{$_SESSION['id']}' )");
$NoticeMsg .= '
<div class="toast show mb-1" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<!--<img src="/images" class="rounded me-2" alt="">-->
<strong class="me-auto">'.$STATUS_NOTIFY[$val['status_notify']][0].'</strong>
<small class="text-muted" style="margin-right:5px;">'.$val['notifies_create'].'</small>
<button type="button" class="btn NoticeMsg" style="padding: 0; margin-top: -5px;" title="Скрыть"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-eye-slash" viewBox="0 0 16 16"> <path d="M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7 7 0 0 0-2.79.588l.77.771A6 6 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13 13 0 0 1 14.828 8q-.086.13-.195.288c-.335.48-.83 1.12-1.465 1.755q-.247.248-.517.486z"/>
<path d="M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829zm-2.943 1.299.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829"/>
<path d="M3.35 5.47q-.27.24-.518.487A13 13 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7 7 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884-12-12 .708-.708 12 12z"/>
</svg></button>
<button type="button" data-totiid="'.$val['id'].'" class="btn btn-apply-my btn-close1" style="padding: 0; margin-top: -5px;" data-bs-dismiss="toast" aria-label="Close" title="Прочитано"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" fill="currentColor" class="bi bi-check-lg" viewBox="0 0 16 16">
<path d="M12.736 3.97a.733.733 0 0 1 1.047 0c.286.289.29.756.01 1.05L7.88 12.01a.733.733 0 0 1-1.065.02L3.217 8.384a.757.757 0 0 1 0-1.06.733.733 0 0 1 1.047 0l3.052 3.093 5.4-6.425z"/>
</svg></button>
</div>
<div class="toast-body">
'.$STATUS_NOTIFY[$val['status_notify']][0].' '.$val['text_notifies'].'
</div>
</div>';
}else{
if(!$SQLite3->querySingle("SELECT looked_ok FROM notifies_account WHERE notifies_id='{$val['id']}' AND account_id='{$_SESSION['id']}' ") ){
$NoticeMsg .= '
<div class="toast show mb-1" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<!--<img src="/images" class="rounded me-2" alt="">-->
<strong class="me-auto">'.$STATUS_NOTIFY[$val['status_notify']][0].'</strong>
<small class="text-muted" style="margin-right:5px;">'.$val['notifies_create'].'</small>
<button type="button" class="btn NoticeMsg" style="padding: 0; margin-top: -5px;" title="Скрыть"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-eye-slash" viewBox="0 0 16 16"> <path d="M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7 7 0 0 0-2.79.588l.77.771A6 6 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13 13 0 0 1 14.828 8q-.086.13-.195.288c-.335.48-.83 1.12-1.465 1.755q-.247.248-.517.486z"/>
<path d="M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829zm-2.943 1.299.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829"/>
<path d="M3.35 5.47q-.27.24-.518.487A13 13 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7 7 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884-12-12 .708-.708 12 12z"/>
</svg></button>
<button type="button" data-totiid="'.$val['id'].'" class="btn btn-apply-my btn-close1" style="padding: 0; margin-top: -5px;" data-bs-dismiss="toast" aria-label="Close" title="Прочитано"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" fill="currentColor" class="bi bi-check-lg" viewBox="0 0 16 16">
<path d="M12.736 3.97a.733.733 0 0 1 1.047 0c.286.289.29.756.01 1.05L7.88 12.01a.733.733 0 0 1-1.065.02L3.217 8.384a.757.757 0 0 1 0-1.06.733.733 0 0 1 1.047 0l3.052 3.093 5.4-6.425z"/>
</svg></button>
</div>
<div class="toast-body">
'.$val['text_notifies'].'
</div>
</div>';
}
}
}
echo $NoticeMsg;
//echo '<pre>',print_r($GLOBALS,1);
}
if(isset($_POST['notify_read'])){
$SQLite3->exec("UPDATE notifies_account SET looked_ok='1', date_closed=datetime('now', 'localtime') WHERE account_id='{$_SESSION['id']}' AND looked_ok='0' AND date_closed IS NULL ");
if($SQLite3->changes())
echo json_encode(1);
else
echo json_encode(0);
}
//timeline order //https://github.com/visjs/vis-timeline https://unpkg.com/vis-timeline@latest/standalone/umd/vis-timeline-graph2d.min.js
if(isset($_POST['timeline_render'])){
/*
ITEMS
{id: 1, group: 1, content: 'item 1', start: '2025-04-20', style: ''},
{id: 2, group: 2, content: 'item 2', start: '2025-04-14', title: 'Title for item '},
{id: 3, group: 3, content: 'item 3', start: '2025-04-18',type: 'box'},
{id: 4, group: 4, content: 'item 4', start: '2025-04-16', end: '2025-04-19'},
{id: 5, group: 5, content: 'item 5', start: '2025-04-25'},
{id: 6, group: 6, content: 'item 6', start: '2025-04-27', type: 'point'}
GROUPS
{id: 6, content: 'item 6', order: 0, style: ''}*/
//ST_DEAL
foreach($ST_DEAL as $key => $val){
if($val['stage_lid']!=100){//не выводим архив сделок
$group[$val['stage_lid']]['id'] = $val['stage_lid'];//status_deal
$group[$val['stage_lid']]['content'] = $val['text'];
$group[$val['stage_lid']]['order'] = $val['stage_lid'];
$group[$val['stage_lid']]['style'] = $val['css'];
}
}
//формируем временую линию сделок
$Result = $SQLite3->query("SELECT ds.id as ds_id, ord.id as order_id, ord.kp_id, ord.status_deal, ord.deal_update, ds.status_deal as deal_stage, ds.deal_create, ds.deal_finish, ima.inbox_udate, ima.date_create, ima.date_update
FROM orders ord
LEFT JOIN deal_stage ds ON ord.id = ds.order_id
LEFT JOIN inbox_mail ima ON ima.id = ord.kp_id
WHERE ord.status_deal < 99 AND deal_stage < 99 ORDER BY ds.id ASC ");//DEBUG AND ord.kp_id=18586
//$mail_to_send = $Result->fetchArray(SQLITE3_ASSOC);
$items = [];
$i=0;
while($res = $Result->fetchArray(SQLITE3_ASSOC)){
if(isset($res['deal_finish']) ){
$items[$i]['start']=$res['deal_create'];
$items[$i]['end']=$res['deal_finish'];
//$items[$i]['type'] = 'range';
$mark = 'deal_finish';
}elseif(isset($res['deal_create'])){
$items[$i]['start']=$res['deal_create'];
$items[$i]['end']=$res['deal_update'];
//$items[$i]['type'] = 'range';
$mark = 'deal_create';
}else{
$items[$i]['start']=$res['deal_update'];
$items[$i]['end'] = date('Y-m-d H:i:s');//2025-05-20 15:52:09
//$items[$i]['type'] = 'point';
$mark = 'deal_update';
}
//if($res['status_deal']!=$res['deal_stage']){//????? может и не нужно
//}
if(is_null($res['deal_stage'])){//fix
$res['deal_stage']=$res['status_deal'];
}
$items[$i]['group']=$res['deal_stage'];
$items[$i]['content']='<a href="/crm/?order='.$res['order_id'].'">'.$res['kp_id'].'</a>';//$ST_DEAL[$res['status_deal']]['text'];
$items[$i]['style']=$ST_DEAL[$res['deal_stage']]['css'];
$items[$i]['className']=$mark;
$items[$i]['id']=$i;
$i++;
}
// $items = [
// "group"=> 11,
// "content"=> "Заказ доставлен",
// "style"=> "background-color:#f6f312 !important;",
// "id"=> 2
// ];
echo json_encode([$items,$group]);
//echo '<pre>',print_r($GLOBALS,1);
}
///CHAT
if(isset($_POST['user_chat'])){
$add_user_id = (int)$_POST['add_user'];
if($userName = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='$add_user_id' ") ){
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $userName);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($userName.$add_user_id), -6);
if(!$SQLite3->querySingle("SELECT date_chat FROM company_chat WHERE account_user_id='{$_SESSION['id']}' AND account_user_id_set='$add_user_id' ")){
$created_date = date('Y-m-d H:i:s');
$hashc = time();
$SQLite3->exec("INSERT INTO company_chat (account_user_id, account_user_id_set, hashc, date_chat) VALUES ('{$_SESSION['id']}', '$add_user_id', '$hashc', '$created_date' )");
$SQLite3->exec("INSERT INTO company_chat (account_user_id, account_user_id_set, hashc, date_chat) VALUES ('$add_user_id', '{$_SESSION['id']}', '$hashc', '$created_date' )");
}
///single version chat
//все сообщения чата P2P
// $Result = $SQLite3->query("SELECT * FROM company_chat
// WHERE account_user_id='{$_SESSION['id']}' AND account_user_id_set='$add_user_id' AND date_chat BETWEEN datetime('now', '-1 days') AND datetime('now', 'localtime')
// ORDER BY date_chat DESC ");
// //$account_user = $Result->fetchArray(SQLITE3_ASSOC);
// $single_chat = ResultSet($Result);
// $data['req']=$single_chat;
$data['account_id']=$add_user_id;
$data['user']=[$userAB,$ColorUsers,$userName];
//echo json_encode([$single_chat,'account_id'=>$add_user_id,'user'=>[$userAB,$ColorUsers,$userName]]);
echo json_encode($data);
}
//echo '<pre>',print_r($GLOBALS,1);
}
if(isset($_POST['chats_all'])){
$chat_user_id = (int)$_POST['chat_user'];
if($hashc = $SQLite3->querySingle("SELECT hashc FROM company_chat WHERE account_user_id='{$_SESSION['id']}' AND account_user_id_set='$chat_user_id' AND text_chat IS NULL ") ){
//single version chat
//все сообщения чата P2P
$Result = $SQLite3->query("SELECT * FROM company_chat
WHERE hashc='$hashc' AND date_chat BETWEEN datetime('now', '-1 days') AND datetime('now', 'localtime')
ORDER BY date_chat ASC ");
//$account_user = $Result->fetchArray(SQLITE3_ASSOC);
$single_chat = ResultSet($Result);
$countch = count($single_chat);
$chat_full = '';
foreach($single_chat as $key => $val){
if(!is_null($val['text_chat'])){
if($val['account_user_id']==$_SESSION['id']){
$chat_full.='<div class="d-flex flex-row justify-content-end chat-msg" data-chat-id="'.$hashc.'">
<div>
<p class="small p-2 me-3 mb-1 text-white rounded-3 bg-primary">'.$val['text_chat'].'</p>
<p class="small me-3 mb-3 rounded-3 text-muted float-end">'.$val['date_chat'].'</p>
</div>
<!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava1-bg.webp"
alt="avatar 1" style="width: 45px; height: 100%;">-->
</div>';
}else{
$chat_full.='<div class="d-flex flex-row justify-content-start chat-msg" data-chat-id="'.$hashc.'">
<!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava6-bg.webp"
alt="avatar 1" style="width: 45px; height: 100%;">-->
<div>
<p class="small p-2 ms-3 mb-1 rounded-3 bg-body-tertiary">'.$val['text_chat'].'</p>
<p class="small ms-3 mb-3 rounded-3 text-muted ">'.$val['date_chat'].'</p>
</div>
</div>';
}
}else{
if($chat_full=='' && $countch<=2)
$chat_full ='<div class="h-100 d-flex align-items-center justify-content-center chat-msg chat-none-empty" data-chat-id="'.$hashc.'">
<div>
<i>Еще нет сообщений...</i>
</div>
</div>';
}
}
if($chat_full=='' && $countch<=2)
$chat_full ='<div class="h-100 d-flex align-items-center justify-content-center chat-msg chat-none-empty" data-chat-id="'.$hashc.'">
<div>
<i>Еще нет сообщений...</i>
</div>
</div>';
$data['chat']=$chat_full;
$data['count']=$countch;
echo json_encode($data);
}
//echo '<pre>',print_r($GLOBALS,1);
}
if(isset($_POST['chats_req'])){
$chat_msg = strip_tags($_POST['chat_msg']);
$chat_hashc = (int)$_POST['chat_id'];
if($add_user_id = $SQLite3->querySingle("SELECT account_user_id_set FROM company_chat WHERE account_user_id='{$_SESSION['id']}' AND hashc='$chat_hashc' ") ){
$created_date = date('Y-m-d H:i:s');
$SQLite3->exec("INSERT INTO company_chat (account_user_id, account_user_id_set, hashc, text_chat, date_chat) VALUES ('{$_SESSION['id']}', '$add_user_id', '$chat_hashc', '$chat_msg', '$created_date' )");
//single version chat
//все сообщения чата P2P
/*$Result = $SQLite3->query("SELECT * FROM company_chat
WHERE hashc='$chat_hashc' AND date_chat BETWEEN datetime('now', '-1 days') AND datetime('now', 'localtime')
ORDER BY date_chat DESC ");
//$account_user = $Result->fetchArray(SQLITE3_ASSOC);
$single_chat = ResultSet($Result);
$chat_full = '';
foreach($single_chat as $key => $val){
if(!is_null($val['text_chat'])){
if($val['account_user_id']==$_SESSION['id']){
$chat_full.='<div class="d-flex flex-row justify-content-end chat-msg" data-chat-id="'.$chat_hashc.'">
<div>
<p class="small p-2 me-3 mb-1 text-white rounded-3 bg-primary">'.$val['date_chat'].'</p>
<p class="small me-3 mb-3 rounded-3 text-muted">'.$val['text_chat'].'</p>
</div>
<!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava1-bg.webp"
alt="avatar 1" style="width: 45px; height: 100%;">-->
</div>';
}else{
$chat_full.='<div class="d-flex flex-row justify-content-start chat-msg" data-chat-id="'.$chat_hashc.'">
<!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava6-bg.webp"
alt="avatar 1" style="width: 45px; height: 100%;">-->
<div>
<p class="small p-2 ms-3 mb-1 rounded-3 bg-body-tertiary">'.$val['text_chat'].'</p>
<p class="small ms-3 mb-3 rounded-3 text-muted float-end">'.$val['date_chat'].'</p>
</div>
</div>';
}
}
}*/
$chat_full ='<div class="d-flex flex-row justify-content-end chat-msg" data-chat-id="'.$chat_hashc.'">
<div>
<p class="small p-2 me-3 mb-1 text-white rounded-3 bg-primary">'.$chat_msg.'</p>
<p class="small me-3 mb-3 rounded-3 text-muted">'.$created_date.'</p>
</div>
<!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava1-bg.webp"
alt="avatar 1" style="width: 45px; height: 100%;">-->
</div>';
$data['chat']=$chat_full;
echo json_encode($data);
if($add_user_id != $_SESSION['id']){
$notifies_textSQL = 'Сообщение в чате <a class="open_chats" href="#">Открыть чат</a>';
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('$notifies_textSQL', datetime('now', 'localtime'), '0' ,'1' )");
$notifiesLastID = $SQLite3->lastInsertRowID();
$SQLite3->exec("INSERT INTO notifies_account (notifies_id, account_id, looked_ok, date_closed) VALUES
('$notifiesLastID', '{$_SESSION['id']}', '1', datetime('now', 'localtime') )");
}
if($add_user_id<=33 && $_SESSION['id']>33){
$from_user = "=?UTF-8?B?".base64_encode('Developer ')."?=";
$from_subj = "=?UTF-8?B?".base64_encode('Traceline CRM ')."?=";
$headers='';
$headers.="Mime-Version: 1.0\r\n";
$headers.="Content-type: text/html; charset=UTF-8\r\n";
$headers.="From: $from_user <one@mail.com>\r\n";
$e_body ='CRM чат '.$chat_msg.' <br><br><a href="https://control.mail.com/crm/">https://control.mail.com/crm/</a> ';
mail('one@mail.com',$from_subj,$e_body,$headers);
}
}
//echo '<pre>',print_r($GLOBALS,1);
}
if(isset($_POST['chats_list'])){
//ALL CHAT USER //WHERE account_user_id=1 OR account_user_id_set=1 Наши чаты где участвуем как то !!!
$Result = $SQLite3->query("SELECT count(id) as usermsg, account_user_id, account_user_id_set, date_chat, hashc
FROM company_chat
WHERE account_user_id=1 OR account_user_id_set=1
GROUP BY hashc");
//$account_user = $Result->fetchArray(SQLITE3_ASSOC);
$ALL_CHAT = ResultSet($Result);
/*foreach($ALL_CHAT as $key => $val){
$Result = $SQLite3->query("SELECT * FROM company_chat
WHERE account_user_id='{$_SESSION['id']}' OR account_user_id_set='{$_SESSION['id']}' AND hashc='{$val['hashc']}' ORDER BY date_chat DESC");
$single_chat[] = ResultSet($Result);
}*/
foreach($ALL_CHAT as $key => $v){
/*$Result = $SQLite3->query("SELECT * FROM company_chat
WHERE hashc='{$val['hashc']}' ");
$single_chat[] = ResultSet($Result);*/
if($v['account_user_id_set']!=$_SESSION['id'] && $v['account_user_id']==$_SESSION['id']){
if($em_name = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='{$v['account_user_id_set']}' ") ){
$test[$v['account_user_id_set']]['id']=$v['account_user_id_set'];
$test[$v['account_user_id_set']]['name']=$em_name;
$test[$v['account_user_id_set']]['count']=$v['usermsg']-2;
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $em_name);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($em_name.$v['account_user_id_set']), -6);
$test[$v['account_user_id_set']]['userab']=$userAB;
$test[$v['account_user_id_set']]['coloruser']=$ColorUsers;
$test[$v['account_user_id_set']]['date_chat']=$v['date_chat'];
}
}elseif($v['account_user_id_set']==$_SESSION['id'] && $v['account_user_id']==$_SESSION['id']){//сам себе
$em_name = 'Избранное';
$test[$_SESSION['id']]['id']=$_SESSION['id'];
$test[$_SESSION['id']]['name']=$em_name;
$test[$_SESSION['id']]['count']=$v['usermsg']-2;
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $em_name);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($em_name.$_SESSION['id']), -6);
$test[$_SESSION['id']]['userab']=$userAB;
$test[$_SESSION['id']]['coloruser']=$ColorUsers;
$test[$_SESSION['id']]['date_chat']=$v['date_chat'];
}elseif($v['account_user_id_set']==$_SESSION['id'] && $v['account_user_id']!=$_SESSION['id']){
if($em_name = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='{$v['account_user_id']}' ") ){
$test[$v['account_user_id']]['id']=$v['account_user_id'];
$test[$v['account_user_id']]['name']=$em_name;
$test[$v['account_user_id']]['count']=$v['usermsg']-2;
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $em_name);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($em_name.$v['account_user_id']), -6);
$test[$v['account_user_id']]['userab']=$userAB;
$test[$v['account_user_id']]['coloruser']=$ColorUsers;
$test[$v['account_user_id']]['date_chat']=$v['date_chat'];
}
}
}
$list_chat = '';
// foreach($single_chat as $key => $arr){
// $list_chat_mark = '';
// $countch = count($arr);
// $chat_full = '';
// foreach($arr as $k => $v){
// //$countch[] = count($v);
// //$countch[] = count($arr);
// if( $v['account_user_id_set']!=$_SESSION['id'] && $v['account_user_id']==$_SESSION['id'] && $list_chat_mark!=$v['account_user_id_set'] || $list_chat_mark!=$v['account_user_id'] ){
// //if( ($v['account_user_id_set']!=$_SESSION['id'] && $list_chat_mark!=$v['account_user_id_set']) ){
// //|| ($v['account_user_id_set']==$_SESSION['id'] && $v['account_user_id']==$_SESSION['id'] && $list_chat_mark!=$v['account_user_id_set']) ){
// if($em_name = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='{$v['account_user_id_set']}' ") ){
// //$countch[] = count($arr);
// //$countch[] = count($arr);
// $test[$v['account_user_id_set']]['id']=$v['account_user_id_set'];
// $test[$v['account_user_id_set']]['name']=$em_name;
// $test[$v['account_user_id_set']]['count']=$countch;
// $account_userAvatar1 = preg_replace('~(\pL)\S+|\s+~u', '$1', $em_name);
// $userAB1 = mb_substr(mb_strtoupper($account_userAvatar1),0, 2);
// $ColorUsers1='#'.substr(crc32($em_name.$v['account_user_id_set']), -6);
// $test[$v['account_user_id_set']]['userab']=$userAB1;
// $test[$v['account_user_id_set']]['coloruser']=$ColorUsers1;
// $test[$v['account_user_id_set']]['date_chat']=$v['date_chat'];
// /* $list_chat.='<li class="p-2 border-bottom" data-account-chat="'.$v['account_user_id_set'].'">
// <a href="#!" class="d-flex justify-content-between" style=" text-decoration: none;">
// <div class="d-flex flex-row">
// <div>
// <!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava1-bg.webp"
// alt="avatar" class="d-flex align-self-center me-3" width="60">-->
// <span class="rounded-circle" height="25" alt="" style="display: block;border-radius: 50%; background-color:'.$ColorUsers1.'; width: 25px;text-align: center;color: #b2b2b2;">
// '.$userAB1.'</span>
// <span class="badge bg-success badge-dot"></span>
// </div>
// <div class="pt-100" style="margin-left: 10px;">
// <p class="fw-bold mb-0">'.$em_name.'</p>
// <!--<p class="small text-muted">Hello, Are you there?</p>-->
// </div>
// </div>
// <div class="pt-1">
// <!--<p class="small text-muted mb-1">Just now</p>-->
// <span class="badge bg-danger rounded-pill float-end countch">'.($countch-2).'</span>
// </div>
// </a>
// </li>';*/
// //break(1);
// $list_chat_mark=$v['account_user_id_set'];
// }
// /*if($$v['account_user_id_set']==$_SESSION['id'] && $v['account_user_id']==$_SESSION['id'] )
// break;//ONLY LIST !!!!!!!!!!!!!!!!!!!*/
// }
// // elseif( $v['account_user_id_set']==$_SESSION['id'] && $v['account_user_id']!=$_SESSION['id'] && $list_chat_mark!=$v['account_user_id_set'] || $list_chat_mark!=$v['account_user_id'] ){
// // //if( ($v['account_user_id_set']!=$_SESSION['id'] && $list_chat_mark!=$v['account_user_id_set']) ){
// // //|| ($v['account_user_id_set']==$_SESSION['id'] && $v['account_user_id']==$_SESSION['id'] && $list_chat_mark!=$v['account_user_id_set']) ){
// // if($em_name = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='{$v['account_user_id']}' ") ){
// // $test[$v['account_user_id']]['id']=$v['account_user_id'];
// // $test[$v['account_user_id']]['name']=$em_name;
// // $account_userAvatar1 = preg_replace('~(\pL)\S+|\s+~u', '$1', $em_name);
// // $userAB1 = mb_substr(mb_strtoupper($account_userAvatar1),0, 2);
// // $ColorUsers1='#'.substr(crc32($em_name.$v['account_user_id_set']), -6);
// // $list_chat.='<li class="p-2 border-bottom" data-account-chat="'.$v['account_user_id_set'].'">
// // <a href="#!" class="d-flex justify-content-between" style=" text-decoration: none;">
// // <div class="d-flex flex-row">
// // <div>
// // <!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava1-bg.webp"
// // alt="avatar" class="d-flex align-self-center me-3" width="60">-->
// // <span class="rounded-circle" height="25" alt="" style="display: block;border-radius: 50%; background-color:'.$ColorUsers1.'; width: 25px;text-align: center;color: #b2b2b2;">
// // '.$userAB1.'</span>
// // <span class="badge bg-success badge-dot"></span>
// // </div>
// // <div class="pt-100" style="margin-left: 10px;">
// // <p class="fw-bold mb-0">'.$em_name.'</p>
// // <!--<p class="small text-muted">Hello, Are you there?</p>-->
// // </div>
// // </div>
// // <div class="pt-1">
// // <!--<p class="small text-muted mb-1">Just now</p>-->
// // <span class="badge bg-danger rounded-pill float-end countch">'.($countch-2).'</span>
// // </div>
// // </a>
// // </li>';
// // //break(1);
// // //$list_chat_mark=$v['account_user_id_set'];
// // $list_chat_mark=$v['account_user_id'];
// // }
// // /*if($$v['account_user_id_set']==$_SESSION['id'] && $v['account_user_id']==$_SESSION['id'] )
// // break;//ONLY LIST !!!!!!!!!!!!!!!!!!!*/
// // }
// /* if($v['account_user_id_set']==$_SESSION['id'] && $v['account_user_id']==$_SESSION['id'] ){
// if($em_name = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='{$v['account_user_id_set']}' ") ){
// $account_userAvatar1 = preg_replace('~(\pL)\S+|\s+~u', '$1', $em_name);
// $userAB1 = mb_substr(mb_strtoupper($account_userAvatar1),0, 2);
// $ColorUsers1='#'.substr(crc32($em_name.$v['account_user_id_set']), -6);
// $list_chat.='<li class="p-2 border-bottom" data-account-chat="'.$v['account_user_id_set'].'">
// <a href="#!" class="d-flex justify-content-between" style=" text-decoration: none;">
// <div class="d-flex flex-row">
// <div>
// <!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava1-bg.webp"
// alt="avatar" class="d-flex align-self-center me-3" width="60">-->
// <span class="rounded-circle" height="25" alt="" style="display: block;border-radius: 50%; background-color:'.$ColorUsers1.'; width: 25px;text-align: center;color: #b2b2b2;">
// '.$userAB1.'</span>
// <span class="badge bg-success badge-dot"></span>
// </div>
// <div class="pt-100" style="margin-left: 10px;">
// <p class="fw-bold mb-0">'.$em_name.'</p>
// <!--<p class="small text-muted">Hello, Are you there?</p>-->
// </div>
// </div>
// <div class="pt-1">
// <!--<p class="small text-muted mb-1">Just now</p>-->
// <span class="badge bg-danger rounded-pill float-end countch">'.($countch-2).'</span>
// </div>
// </a>
// </li>';
// break(2);
// }
// }*/
// /*if($$v['account_user_id_set']==$_SESSION['id'] && $v['account_user_id']==$_SESSION['id'] )
// break;//ONLY LIST !!!!!!!!!!!!!!!!!!!*/
// /*if(!is_null($v['text_chat'])){
// $account_userAvatar1 = preg_replace('~(\pL)\S+|\s+~u', '$1', $val['em_name']);
// $userAB1 = mb_substr(mb_strtoupper($account_userAvatar1),0, 2);
// $ColorUsers1='#'.substr(crc32($val['em_name'].$val['em_id']), -6);
// if($val['account_user_id']==$_SESSION['id']){
// $chat_full.='<div class="d-flex flex-row justify-content-end chat-msg" data-chat-id="'.$v['hashc'].'">
// <div>
// <p class="small p-2 me-3 mb-1 text-white rounded-3 bg-primary">'.$v['text_chat'].'</p>
// <p class="small me-3 mb-3 rounded-3 text-muted">'.$v['date_chat'].'</p>
// </div>
// <!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava1-bg.webp"
// alt="avatar 1" style="width: 45px; height: 100%;">-->
// </div>';
// }else{
// $chat_full.='<div class="d-flex flex-row justify-content-start chat-msg" data-chat-id="'.$v['hashc'].'">
// <!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava6-bg.webp"
// alt="avatar 1" style="width: 45px; height: 100%;">-->
// <div>
// <p class="small p-2 ms-3 mb-1 rounded-3 bg-body-tertiary">'.$v['text_chat'].'</p>
// <p class="small ms-3 mb-3 rounded-3 text-muted float-end">'.$v['date_chat'].'</p>
// </div>
// </div>';
// }
// }else{
// if($chat_full=='' && $countch<=2)
// $chat_full ='<div class="h-100 d-flex align-items-center justify-content-center chat-msg chat-none-empty" data-chat-id="'.$v['hashc'].'">
// <div>
// <i>Еще нет сообщений...</i>
// </div>
// </div>';
// }*/
// }//foreach
// }//foreach
// /*
// test final
// foreach($test as $k => $v){
// $list_chat.='<li class="p-2 border-bottom" data-account-chat="'.$v['account_user_id_set'].'">
// <a href="#!" class="d-flex justify-content-between" style=" text-decoration: none;">
// <div class="d-flex flex-row">
// <div>
// <!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava1-bg.webp"
// alt="avatar" class="d-flex align-self-center me-3" width="60">-->
// <span class="rounded-circle" height="25" alt="" style="display: block;border-radius: 50%; background-color:'.$ColorUsers1.'; width: 25px;text-align: center;color: #b2b2b2;">
// '.$userAB1.'</span>
// <span class="badge bg-success badge-dot"></span>
// </div>
// <div class="pt-100" style="margin-left: 10px;">
// <p class="fw-bold mb-0">'.$em_name.'</p>
// <!--<p class="small text-muted">Hello, Are you there?</p>-->
// </div>
// </div>
// <div class="pt-1">
// <!--<p class="small text-muted mb-1">Just now</p>-->
// <span class="badge bg-danger rounded-pill float-end countch">'.($countch-2).'</span>
// </div>
// </a>
// </li>';
// }*/
if(isset($test))//need когда нет чатов fix
foreach($test as $k => $v){
$list_chat.='<li class="p-2 border-bottom" data-account-chat="'.$v['id'].'">
<a href="#!" class="d-flex justify-content-between" style=" text-decoration: none;">
<div class="d-flex flex-row">
<div>
<!--<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-chat/ava1-bg.webp"
alt="avatar" class="d-flex align-self-center me-3" width="60">-->
<span class="rounded-circle" height="25" alt="" style="display: block;border-radius: 50%; background-color:'.$v['coloruser'].'; width: 25px;text-align: center;color: #b2b2b2;">
'.$v['userab'].'</span>
<span class="badge bg-success badge-dot"></span>
</div>
<div class="pt-100" style="margin-left: 10px;">
<p class="fw-bold mb-0">'.$v['name'].'</p>
<!--<p class="small text-muted">'.$v['date_chat'].'</p>-->
</div>
</div>
<div class="pt-1">
<!--<p class="small text-muted mb-1">Just now</p>-->
<span class="badge bg-danger rounded-pill float-end countch" style="display:none">'.$v['count'].'a</span>
</div>
</a>
</li>';
}
//echo '<pre>',print_r($GLOBALS,1);
echo json_encode([$list_chat]);
}
//открытие почты inbox mail add new post msg
if(isset($_POST['table_row'])){
$lastIDtd = $_POST['table_row'];//date('Y-m-d H:i:s') // 2025-05-11 08:45:49
$stkp_n='all';//isset($_GET['stkp'])
//ACCESS!!!
$access_company_email_id = '';
foreach($_SESSION['company_email_id'] as $key => $val){
if($_SESSION['access_role'][$key]!=0)
$access_company_email_id .= $val.',';
}
$access_company_email_id = rtrim($access_company_email_id,',');
//AND company_email_id IN ($access_company_email_id) //DEBUG REMOVE
//datetime('now', '-6 hours')
$Result = $SQLite3->query(" SELECT * FROM inbox_mail WHERE date_create BETWEEN '$lastIDtd' AND datetime('now', 'localtime') AND company_email_id IN ($access_company_email_id) ORDER BY date_create,date_update DESC ");
$INBOX_ALL = ResultSet($Result);
$INBOX_TD = '';
$TABLE_UPDATE = $data = [];
foreach ($INBOX_ALL as $key => $valueTable) {
$name_org_info = '';
if($name_org = $SQLite3->querySingle("SELECT name_org FROM organization WHERE email_org='{$valueTable['inbox_from']}' ") )
$name_org_info = '<br><span class="badge bg-secondary"> '.$name_org.' </span>';
$TABLE_UPDATE[$key][0]= $subject = $valueTable['subject'];
$TABLE_UPDATE[$key][1]= $email = $valueTable['inbox_from'].$name_org_info;
$TABLE_UPDATE[$key][2]=$valueTable['date_create'];
$dt = new DateTime($valueTable['date_create']);
$formatted_date_create = $dt->format('d.m.Y H:i:s');
$data_item = [];
$data_item['file'] = '';
$id_inbox = $valueTable['id'];
$inbox_udate = $valueTable['inbox_udate'];
$date_in_time = date('Y/m/d', $inbox_udate);
$path_save = $date_in_time . '/' . md5($inbox_udate);
if (file_exists('../attachments/' . $path_save . '/' . $inbox_udate . '.json')) {
$mail_inbox = json_decode(file_get_contents('../attachments/' . $path_save . '/' . $inbox_udate . '.json'), true);
$email_info = isset($mail_inbox['data'][0]['from']['name'])
? '<i class="text-muted">автор:</i> <span class="badge bg-light-subtle border border-light-subtle text-light-emphasis rounded-pill">' . htmlspecialchars($mail_inbox['data'][0]['from']['name']) . '</span>'
: '';
$data_item['file'] = (isset($mail_inbox['data'][0]['attachments']) && count($mail_inbox['data'][0]['attachments']))
? ' <img src="images/paperclip.svg" class="deal_file_img" style="margin-top: -5px; width: 20px;">'
: '';
} else {
$email_info = '';
}
// $dt = new DateTime($valueTable['date_create']);
// $formatted_date_create = $dt->format('d.m.Y H:i:s');
// Subject column
//$subject = htmlspecialchars($valueTable['subject']) . $data_item['file'] . '<br>' . $email_info;
$subject = $valueTable['subject'] . $data_item['file'] . '<br>' . $email_info;
// Email column
//$email = htmlspecialchars($valueTable['inbox_from']) . $name_org_info;
$email = $valueTable['inbox_from'] . $name_org_info;
// Status column
$status = '';
if ($stkp_n === 'all') {
$status = '<span class="badge bg-secondary" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . $STATUS_KP[$valueTable['status_kp']][0] . '</span>';
} elseif ($stkp_n == 0) {
$status = '<span class="badge bg-info" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . $STATUS_KP[$valueTable['status_kp']][0] . '</span>';
} elseif ($stkp_n == 1) {
$status = '<span class="badge bg-danger" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . $STATUS_KP[$valueTable['status_kp']][0] . '</span>';
} elseif ($stkp_n == 2 || $stkp_n == 4) {
$status = '<span class="badge bg-primary" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . $STATUS_KP[$valueTable['status_kp']][0] . '</span>';
} elseif ($stkp_n == 3) {
$status = '<span class="badge bg-success" style="' . $STATUS_KP[$valueTable['status_kp']][1] . '">' . str_replace('TL_KP', '- ', strstr($valueTable['subject'], 'TL_KP')) . '</span>';
}
// Button column
$button_class = ($stkp_n == 0 || $stkp_n == 2 || $stkp_n == 4) ? 'btn-outline-warning' : ($stkp_n == 1 ? 'btn-outline-danger' : ($stkp_n == 3 ? 'btn-outline-success' : 'btn-light'));
$button = '<button type="button" class="btn ' . $button_class . '" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable" data-id="' . $valueTable['id'] . '" data-stkp="' . $stkp_n . '">открыть</button>';
///OLD TEST and ////
$INBOX_TD .= '<tr class="odd">
<td class="sorting_1">'.$valueTable['subject'].'</td>
<td>'.$valueTable['inbox_from'].$name_org_info.'</td>
<td>'.$valueTable['date_create'].'</td>
<td>';
//<td><span class="badge bg-secondary" style="'.$STATUS_KP[$valueTable['status_kp']][1].'">'.$STATUS_KP[$valueTable['status_kp']][0].'</span><br>';
if($stkp_n==='all'){
$INBOX_TD.=' <span class="badge bg-secondary" style="'.$STATUS_KP[$valueTable['status_kp']][1].'">'.$STATUS_KP[$valueTable['status_kp']][0].'</span> </td>
<td><button type="button" class="btn btn-light" data-bs-toggle="modal"
data-bs-target="#exampleModalScrollable" data-id="'.$valueTable['id'].'" data-stkp="'.$stkp_n.'">
открыть
</button>';
$TABLE_UPDATE[$key][3]= $status ='<span class="badge bg-secondary" style="'.$STATUS_KP[$valueTable['status_kp']][1].'">'.$STATUS_KP[$valueTable['status_kp']][0].'</span>';
$TABLE_UPDATE[$key][4]= $button ='<button type="button" class="btn btn-light" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable" data-id="'.$valueTable['id'].'" data-stkp="'.$stkp_n.'">
открыть
</button>';
}elseif($stkp_n==0)
$INBOX_TD.=' <span class="badge bg-info" style="'.$STATUS_KP[$valueTable['status_kp']][1].'"> '.$STATUS_KP[$valueTable['status_kp']][0].' </span></td>
<td><button type="button" class="btn btn-outline-warning" data-bs-toggle="modal"
data-bs-target="#exampleModalScrollable" data-id="'.$valueTable['id'].'" data-stkp="'.$stkp_n.'">
открыть
</button>';
elseif($stkp_n==1)
$INBOX_TD.=' <span class="badge bg-danger" style="'.$STATUS_KP[$valueTable['status_kp']][1].'"> '.$STATUS_KP[$valueTable['status_kp']][0].' </span></td>
<td><button type="button" class="btn btn-outline-danger" data-bs-toggle="modal"
data-bs-target="#exampleModalScrollable" data-id="'.$valueTable['id'].'" data-stkp="'.$stkp_n.'">
открыть
</button>';
elseif($stkp_n==2)
$INBOX_TD.=' <span class="badge bg-primary" style="'.$STATUS_KP[$valueTable['status_kp']][1].'"> '.$STATUS_KP[$valueTable['status_kp']][0].' </span></td>
<td><button type="button" class="btn btn-outline-warning" data-bs-toggle="modal"
data-bs-target="#exampleModalScrollable" data-id="'.$valueTable['id'].'" data-stkp="'.$stkp_n.'">
открыть
</button>';
elseif($stkp_n==4)
$INBOX_TD.=' <span class="badge bg-primary" style="'.$STATUS_KP[$valueTable['status_kp']][1].'"> '.$STATUS_KP[$valueTable['status_kp']][0].' </span></td>
<td><button type="button" class="btn btn-outline-warning" data-bs-toggle="modal"
data-bs-target="#exampleModalScrollable" data-id="'.$valueTable['id'].'" data-stkp="'.$stkp_n.'">
открыть
</button>';
elseif($stkp_n==3)
$INBOX_TD.=' <span class="badge bg-success" style="'.$STATUS_KP[$valueTable['status_kp']][1].'"> '.str_replace('TL_KP', '- ', strstr($valueTable['subject'],'TL_KP') ).'</span></td>
<td><button type="button" class="btn btn-outline-success" data-bs-toggle="modal"
data-bs-target="#exampleModalScrollable" data-id="'.$valueTable['id'].'" data-stkp="'.$stkp_n.'">
открыть
</button>';
$INBOX_TD.=' </td>
</tr>';
$data[] = [
'subject' => $subject,
'email' => $email,
'date_create' => $formatted_date_create,
'status' => $status,
'action' => $button
];
}
if(isset($TABLE_UPDATE))
$lastIDtd = date('Y-m-d H:i:s');
//echo json_encode([$TABLE_UPDATE,'lastIDtd'=>$lastIDtd]);
echo json_encode([$data,'lastIDtd'=>$lastIDtd]);
}
if(isset($_POST['search_deal'])){
//В будущем можно по почте выводить все заказы например или по названию компании !!! ТОЛЬКО ПОНМИМ SQLITE не ищет криллицу ищем значения в массиве
$order_id = $SQLite3->querySingle("SELECT id FROM orders WHERE kp_id='{$_POST['search_deal']}' ");
echo json_encode(['id'=>$order_id]);
}
//search GLOBAL INBOX MAIL
if(isset($_POST['globSearch'])){
$searchQuery = cleanInput($_POST['globSearch']);
define('MIN_SEARCH_LENGTH', 3);
if ($searchQuery=='') {//первый запуск datatables AJAX
//echo json_encode(["success" => true, "data" => [],'searchQuery' => $searchQuery,'foundCount' => 0]);
echo json_encode(["success" => true, "data" => [],'searchQuery' => $searchQuery]);
exit;
}
if (strlen($searchQuery) < MIN_SEARCH_LENGTH) {
echo json_encode(['error' => 'Минимальная длина поискового запроса - ' . MIN_SEARCH_LENGTH . ' символа']);
exit;
}
// Получение ключевого слова из POST-запроса
/*
$keyword = isset($_POST['globSearch']) ? $_POST['globSearch'] : '';
if (empty($keyword)) {
die("Не указано ключевое слово для поиска.");
}*/
// Папка, с которой начинается обход (например, 'attachments')
//$baseDir = __DIR__ . '../attachments';
$baseDir = '../attachments';
$cacheFile = '../json_file_cache.json';//__DIR__ . '/json_file_cache.json';
$cacheTTL = 38800; // 3600 5 минут // 38800 10часов
// Массив для хранения совпадений
$globOutput = $data = [];
/**
* Рекурсивная функция обхода директорий и поиска JSON-файлов
*/
function scanForJsonFiles($dir, $keyword, &$globOutput) {
$files = scandir($dir);
foreach ($files as $file) {
if ($file === '.' || $file === '..') continue;
$fullPath = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($fullPath)) {
scanForJsonFiles($fullPath, $keyword, $globOutput);
} elseif (pathinfo($fullPath, PATHINFO_EXTENSION) === 'json') {
processJsonFile($fullPath, $keyword, $globOutput);
}
}
}
function scanJsonFilesFast($baseDir, $keyword, &$globOutput) {
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($baseDir, FilesystemIterator::SKIP_DOTS)
);
$regex = new RegexIterator($iterator, '/\.json$/i', RecursiveRegexIterator::GET_MATCH);
foreach ($regex as $files) {
$filePath = $files[0]; // RegexIterator возвращает массив
processJsonFile($filePath, $keyword, $globOutput);
}
}
// Function to recursively search for JSON files
/*function searchJsonFiles($dir, $keyword, &$results) {
try {
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $file) {
if ($file->isFile() && $file->getExtension() === 'json') {
processJsonFile($file->getPathname(), $keyword, $results);
}
}
} catch (Exception $e) {
// Handle potential directory access errors
$results[] = ['error' => 'Error accessing directory: ' . $e->getMessage()];
}
}*/
function searchJsonFiles($dir, $keyword, &$results, $cacheFile, $cacheTTL) {
try {
if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTTL) {
$cached = json_decode(file_get_contents($cacheFile), true);
if (is_array($cached)) return $cached;
}
$jsonFiles = [];
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $file) {
if ($file->isFile() && $file->getExtension() === 'json') {
//processJsonFile($file->getPathname(), $keyword, $results);
$jsonFiles[] = [ 'path' => $file->getPathname()];
}
}
file_put_contents($cacheFile, json_encode($jsonFiles, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
return $jsonFiles;
} catch (Exception $e) {
// Handle potential directory access errors
$results[] = ['error' => 'Error accessing directory: ' . $e->getMessage()];
}
}
// === Получение списка файлов с кешированием ===
function getJsonFilesFromCache($baseDir, $cacheFile, $cacheTTL) {
if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTTL) {
$cached = json_decode(file_get_contents($cacheFile), true);
if (is_array($cached)) return $cached;
}
$jsonFiles = [];
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($baseDir, FilesystemIterator::SKIP_DOTS)
);
$regex = new RegexIterator($iterator, '/\.json$/i', RecursiveRegexIterator::GET_MATCH);
foreach ($regex as $match) {
$filePath = $match[0];
$jsonFiles[] = [
'path' => $filePath,
'mtime' => filemtime($filePath),
];
}
file_put_contents($cacheFile, json_encode($jsonFiles, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
return $jsonFiles;
}
/**
* Обработка одного JSON-файла
*/
function processJsonFile($filePath, $keyword, &$globOutput) {
$content = @file_get_contents($filePath);
if ($content === false) return;
$json = json_decode($content, true);
if (json_last_error() !== JSON_ERROR_NONE) return;
// Проверяем, есть ли нужные поля
if (!isset($json['data']) || !is_array($json['data'])) return;
foreach ($json['data'] as $entry) {
$data_item = [];
$data_item['file'] = '';
// Проверка наличия ключей
$subject = $entry['subject'] ?? '';
$address = $entry['from']['address'] ?? '';
$name = $entry['from']['name'] ?? '';
$message = $entry['message'] ?? '';
// Поиск по ключевому слову (регистр не учитывается)
if (
stripos($subject, $keyword) !== false ||
stripos($address, $keyword) !== false ||
stripos($name, $keyword) !== false ||
stripos($message, $keyword) !== false
) {
$entry['_source_file'] = $filePath; // Добавим путь к файлу
$globOutput[] = $entry;
}
}
}
// Запускаем обход
//scanForJsonFiles($baseDir, $searchQuery, $globOutput); //SLOW
//searchJsonFiles($baseDir, $searchQuery, $globOutput);
// === Основной процесс ===
//$jsonFiles = getJsonFilesFromCache($baseDir, $cacheFile, $cacheTTL);
$jsonFiles = searchJsonFiles($baseDir, $searchQuery, $globOutput, $cacheFile, $cacheTTL);
foreach ($jsonFiles as $fileInfo) {
if (!isset($fileInfo['path'])) continue;
processJsonFile($fileInfo['path'], $searchQuery, $globOutput);
}
unset($jsonFiles);
foreach($globOutput as $num_zero => $entry){
$path_parts = pathinfo($entry['_source_file']);
//$path_parts['filename'] = str_replace('manual-','',$path_parts['filename']);
//$path_parts['filename'] = str_replace('auto-','',$path_parts['filename']);
$subject = $entry['subject'] ?? '';
$address = $entry['from']['address'] ?? '';
$name = $entry['from']['name'] ?? '';
$message = $entry['message'] ?? '';
// $subject = $entry['subject'];
// $address = $entry['from']['address'];
// $name = $entry['from']['name'];
// $message = $entry['message'];
$uid = $entry['uid'];
$date_uid = $entry['date'];
/*
создаем для таблицы данные
*/
//дата
$dt = new DateTime($entry['date']);
$formatted_date_create = $dt->format('d.m.Y H:i:s');
//иконка файлов
$data_item['file'] = (isset($entry['attachments']) && count($entry['attachments']))
? ' <img src="images/paperclip.svg" class="deal_file_img" style="margin-top: -5px; width: 20px;">'
: '';
//автор письма
$email_info = isset($name)
? '<i class="text-muted">автор:</i> <span class="badge bg-light-subtle border border-light-subtle text-light-emphasis rounded-pill">' . htmlspecialchars($name) . '</span>'
: '';
//тема письма
$subject = $subject . $data_item['file'] . '<br>' . $email_info;
//адрес письма
$name_org_info = $name_org = '';
if($name_org = $SQLite3->querySingle("SELECT name_org FROM organization WHERE email_org='$address' ") )
$name_org_info = '<br><span class="badge bg-secondary"> '.$name_org.' </span>';
$email = $address . $name_org_info;
if($Result = $SQLite3->query("SELECT id,status_kp FROM inbox_mail WHERE inbox_udate='{$path_parts['filename']}' AND inbox_from='$address' ") )
$inbox_statis_id = $Result->fetchArray(SQLITE3_ASSOC);
//file_put_contents('_!!!_DEBUG-inbox_statis_id.txt',var_export($inbox_statis_id,1),FILE_APPEND);//DEBUG
if(isset($inbox_statis_id) && $inbox_statis_id!=false){
$stkp_n='all';
// Status column
$status = '';
if ($stkp_n === 'all') {
$status = '<span class="badge bg-secondary" style="' . $STATUS_KP[$inbox_statis_id['status_kp']][1] . '">' . $STATUS_KP[$inbox_statis_id['status_kp']][0] . '</span>';
} elseif ($stkp_n == 0) {
$status = '<span class="badge bg-info" style="' . $STATUS_KP[$inbox_statis_id['status_kp']][1] . '">' . $STATUS_KP[$inbox_statis_id['status_kp']][0] . '</span>';
} elseif ($stkp_n == 1) {
$status = '<span class="badge bg-danger" style="' . $STATUS_KP[$inbox_statis_id['status_kp']][1] . '">' . $STATUS_KP[$inbox_statis_id['status_kp']][0] . '</span>';
} elseif ($stkp_n == 2 || $stkp_n == 4) {
$status = '<span class="badge bg-primary" style="' . $STATUS_KP[$inbox_statis_id['status_kp']][1] . '">' . $STATUS_KP[$inbox_statis_id['status_kp']][0] . '</span>';
} elseif ($stkp_n == 3) {
$status = '<span class="badge bg-success" style="' . $STATUS_KP[$inbox_statis_id['status_kp']][1] . '">' . str_replace('TL_KP', '- ', strstr($subject, 'TL_KP')) . '</span>';
}
// Button column
$button_class = ($stkp_n == 0 || $stkp_n == 2 || $stkp_n == 4) ? 'btn-outline-warning' : ($stkp_n == 1 ? 'btn-outline-danger' : ($stkp_n == 3 ? 'btn-outline-success' : 'btn-light'));
$button = '<button type="button" class="btn ' . $button_class . '" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable" data-id="' . $inbox_statis_id['id'] . '" data-stkp="' . $stkp_n . '">открыть</button>';
$data[] = [
'subject' => $subject,
'email' => $email,
'date_create' => $formatted_date_create,
'status' => $status,
'action' => $button
];
}
}
echo json_encode([
'success' => true,
'data' => $data,
'searchQuery' => $searchQuery,
'foundCount' => count($data)
]);
// Возвращаем результат в виде JSON
//header('Content-Type: application/json; charset=utf-8');
//echo json_encode($globOutput, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
//echo '<pre>',print_r($GLOBALS,1);exit;
writeLog($searchQuery,'../logs/search-inbox.log');
}
//chartjs
if(isset($_POST['chart'])){
//header('Content-Type: application/json');
// WEEK
$weekNewResult = $SQLite3->querySingle("SELECT COUNT(*) FROM orders WHERE deal_update >= datetime('now', '-7 days')");
$weekNewOrders = $SQLite3->querySingle("SELECT COUNT(*) FROM deal_stage WHERE deal_create >= datetime('now', '-7 days') AND status_deal=0");
$weekUnacquired = $SQLite3->querySingle("SELECT COUNT(*) FROM orders WHERE status_deal = 100 AND deal_update >= datetime('now', '-7 days')");
//$weekInWork = $SQLite3->querySingle("SELECT COUNT(DISTINCT order_id) FROM message WHERE date_create >= datetime('now', '-7 days') OR date_update >= datetime('now', '-7 days')");
$Result = $SQLite3->query("SELECT COUNT(DISTINCT me.order_id) as order_id
FROM message me
LEFT JOIN orders_tasks ort ON ort.order_id = me.order_id
WHERE me.date_create >= datetime('now', '-7 days') OR me.date_update >= datetime('now', '-7 days') OR ort.task_date_create >= datetime('now', '-7 days')");
$weekInWork = $Result->fetchArray(SQLITE3_ASSOC);//$weekInWork['order_id']
$weekMovements = $SQLite3->querySingle("SELECT COUNT(DISTINCT order_id) FROM deal_stage WHERE deal_create >= datetime('now', '-7 days') OR deal_finish >= datetime('now', '-7 days')");
//$weekMovements = $SQLite3->querySingle("SELECT COUNT(DISTINCT order_id) FROM deal_stage WHERE deal_create >= datetime('now', '-7 days') AND status_deal=0 ");
//$weekMovements = $SQLite3->querySingle("SELECT COUNT(DISTINCT order_id) FROM deal_stage WHERE deal_create >= datetime('now', '-7 days') AND deal_finish IS NULL ORDER BY id DESC");
// MONTH
$monthNewResult = $SQLite3->querySingle("SELECT COUNT(*) FROM orders WHERE deal_update >= datetime('now', '-30 days')");
$monthNewOrders = $SQLite3->querySingle("SELECT COUNT(*) FROM deal_stage WHERE deal_create >= datetime('now', '-30 days') AND status_deal=0");
$monthUnacquired = $SQLite3->querySingle("SELECT COUNT(*) FROM orders WHERE status_deal = 100 AND deal_update >= datetime('now', '-30 days')");
//$monthInWork = $SQLite3->querySingle("SELECT COUNT(DISTINCT order_id) FROM message WHERE date_create >= datetime('now', '-30 days') OR date_update >= datetime('now', '-30 days')");
$Result = $SQLite3->query("SELECT COUNT(DISTINCT me.order_id) as order_id
FROM message me
LEFT JOIN orders_tasks ort ON ort.order_id = me.order_id
WHERE me.date_create >= datetime('now', '-30 days') OR me.date_update >= datetime('now', '-30 days') OR ort.task_date_create >= datetime('now', '-30 days')");
$monthInWork = $Result->fetchArray(SQLITE3_ASSOC);//$monthInWork['order_id']
$monthMovements = $SQLite3->querySingle("SELECT COUNT(DISTINCT order_id) FROM deal_stage WHERE deal_create >= datetime('now', '-30 days') OR deal_finish >= datetime('now', '-30 days')");
// TOTAL (всё время)
$totalNewOrders = $SQLite3->querySingle("SELECT COUNT(*) FROM orders");
$totalUnacquired = $SQLite3->querySingle("SELECT COUNT(*) FROM orders WHERE status_deal = 100");
$totalInWork = $SQLite3->querySingle("SELECT COUNT(order_id) FROM message");//COUNT(DISTINCT order_id)
$totalMovements = $SQLite3->querySingle("SELECT COUNT(order_id) FROM deal_stage");//COUNT(DISTINCT order_id)
$totalorganization = $SQLite3->querySingle("SELECT COUNT(id) FROM organization");
echo json_encode([
"week" => [
"labels" => ["Движения этапов", "Не приобретено", "Активность сообщений", "Новые заявки", "Активность заявки"],
"data" => [$weekMovements, $weekUnacquired, $weekInWork['order_id'], $weekNewOrders, $weekNewResult],
"colors" => ["#C9CBCF", "#FF6384", "#4BC0C0", "#79c4f7", "#e3b680"]
],
"month" => [
"labels" => ["Движения этапов", "Не приобретено", "Активность сообщений", "Новые заявки", "Активность заявки"],
"data" => [$monthMovements, $monthUnacquired, $monthInWork['order_id'], $monthNewOrders, $monthNewResult],
"colors" => ["#C9CBCF", "#FF6384", "#4BC0C0", "#79c4f7", "#e3b680"]
],
"total" => [
"labels" => ["Движения этапов", "Не приобретено", "Вся активность сообщений", "Все заявки", "Всего контрагентов"],
"data" => [$totalMovements, $totalUnacquired, $totalInWork, $totalNewOrders, $totalorganization],
"colors" => ["#C9CBCF", "#FF6384", "#4BC0C0", "#79c4f7", "#a8ae6d"]
]
]);
}
//создание номенклатуры
if(isset($_POST['company_nomencl'])){
$kpcr_n = (int)$_POST['kpcr_n'];
$kp_number = strip_tags($_POST['kp_number']);
$daylimit = strip_tags($_POST['daylimit']);
$company = strip_tags($_POST['company']);
$formatted = date('d.m.Y', strtotime($_POST['kp_date'])) . 'г.';
foreach($_POST['position_project'] as $key => $val){
$data[$key]['position_project']=strip_tags($_POST['position_project'][$key]);
$data[$key]['search_query']=strip_tags($_POST['search_query'][$key]);
$data[$key]['quantity_query']=strip_tags($_POST['quantity_query'][$key]);
$data[$key]['pfixsum']=strip_tags($_POST['pfixsum'][$key]);
}
if($order_id = $SQLite3->querySingle("SELECT id FROM orders WHERE kp_id = '$kpcr_n'") ){
//создание файлов номенклатуры
include '../kp_create.php';
//DEBUG
// $targetPath[] = 'ТрейсЛайн_КП_'.$kp_number.'_от_'.$formatted.'_для_'.$company.'.pdf';
// $targetPath[] = 'ТрейсЛайн_КП_'.$kp_number.'_от_'.$formatted.'_для_'.$company.'.xlsx';
if(empty($targetPath)){
echo 'sdf34w5435';
error_log('sdf34w5435');
exit;
}
//сохранение файлов в контрагенте файлы КОМПАНИИ
$Result = $SQLite3->query("SELECT me.from_send, org.email_org, me.uid_inbox, me.uid_id, org.files_org, org.id as id_corpcom FROM message me
LEFT JOIN orders ord ON ord.id = me.order_id
LEFT JOIN organization org ON me.from_send = org.email_org
WHERE me.order_id = $order_id GROUP BY me.from_send ");
$company_nomencl = ResultSet($Result);//$Result->fetchArray(SQLITE3_ASSOC);
foreach($company_nomencl as $ki => $value){//несолько компаний в одной сделке
$files_corpcom = json_decode($value['files_org'] ,1);
if(!is_array($files_corpcom))//fix null
$files_corpcom = [];
$id_corpcom = $value['id_corpcom'];
$files_tmp = $targetFilesCompany = [];
$path_save = md5($id_corpcom.'corpcom');
$total = count($targetPath);
if (!is_dir('../attachments/company/'. $path_save .'/')) {
mkdir('../attachments/company/'. $path_save .'/');//mkdir($dirname, 0755, true);
}
//if(file_exists('../upload/ТрейсЛайн_КП_'.$kp_number.'_от_'.$formatted.'_для_'.$company.'.pdf') && file_exists('../upload/ТрейсЛайн_КП_'.$kp_number.'_от_'.$formatted.'_для_'.$company.'.xlsx')){
// $targetPath[] = 'ТрейсЛайн_КП_'.$kp_number.'_от_'.$formatted.'_для_'.$company.'.pdf';
// $targetPath[] = 'ТрейсЛайн_КП_'.$kp_number.'_от_'.$formatted.'_для_'.$company.'.xlsx';
for( $i=0 ; $i < $total ; $i++ ) {
//Get the temp file path
$sourcePath = '../upload/'.$targetPath[$i];
//Make sure we have a file path
if ($sourcePath != "" && file_exists($sourcePath)){
//Setup our new file path
$targetFilesCompany[$i] = '../attachments/company/'. $path_save .'/'. $targetPath[$i];
//Upload the file into the temp dir
if(copy($sourcePath, $targetFilesCompany[$i])) {
$files_corpcom[]=$targetPath[$i];
}
}
}
//}//file_exists
$files_tmp = array_unique($files_corpcom);
$files_corpcom = json_encode($files_tmp);
// $SQLite3->exec("UPDATE organization SET files_org='$files_corpcom' WHERE id='$id_corpcom' ");
// //$SQLite3->changes()
$stmt = $SQLite3->prepare("UPDATE organization SET files_org = :files_org WHERE id = :id");
$stmt->bindValue(':files_org', $files_corpcom, SQLITE3_TEXT);
$stmt->bindValue(':id', $id_corpcom, SQLITE3_INTEGER);
$result = $stmt->execute();
}//foreach
//Не верный номер сделки
// $data['info_text']='<div class="success alert alert-success mt-4">
// <div class="alert-message text-center">
// <strong>Не верный номер сделки</strong>
// </div>
// </div>';
// echo json_encode($data);
//создание файла номенклатуры для task create задачи
$files_tmp = [];
//$order_id = (int)$_POST['idkp'];//есть
$id_kpid = $kpcr_n;//(int)$_POST['otcr_num'];//kpid
$task_title = 'Коммерческое предложение №'.$kp_number;//strip_tags($_POST['subject_title_c']);
//$task_text = strip_tags($_POST['message_task_c']);
$task_text = str_replace(',','<br>',implode(',', $targetPath));//SQLite3::escapeString($_POST['message_task_c']);
// $task_date_create = strip_tags($_POST['otcr_datec']);
// if($task_date_create=='')
$task_date_create = date('Y-m-d H:i:s');//"now', 'localtime";
$task_date_close = date('Y-m-d H:i:s', strtotime($task_date_create . ' +3 days'));// $task_date_close = strip_tags($_POST['otcr_datef']);
// if($task_date_close=='')
// $task_date_close = "now', 'localtime";
$users_task = '';
$users_task_ids = json_encode([]);
if(isset($_POST['user_task_c'])){
$users_task_ids = json_encode($_POST['user_task_c']);
foreach($_POST['user_task_c'] as $val){
$users_task .= $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='$val' ") .', ';
}
$users_task = rtrim($users_task, ', ');
}else{
$users_task_ids = json_encode([$_SESSION['id']]);
}
$order_stage = 3;// Создание КП //(int)$_POST['otcr_all_select'];
//$otcr_st = strip_tags($_POST['otcr_st']);
$task_edit=0;//проверка на редактирование
$task_status=1;//временно создание статуса Отмена=0 В работе Открытая=1 Задача выполненна Закрытая=2 Задача изменена = 3 !!!!
if(!empty($_POST['id_task']) && isset($_POST['task_status'])){
$task_status=(int)$_POST['task_status'];
//$task_status = 3; //если изменили !!! ИЛИ КАК ТО ЕЩЕ проверить !!!
//UPDATE
$task_id = (int)$_POST['id_task'];
$taskEditF = $SQLite3->querySingle("SELECT task_file_path FROM orders_tasks WHERE id='$task_id' ");
$taskEditF=json_decode($taskEditF,1);
$SQLite3->exec("UPDATE orders_tasks SET task_status='$task_status', task_title='$task_title', task_text='$task_text', task_date_create=datetime('$task_date_create'),
task_date_close=datetime('$task_date_close'), users_task_ids='$users_task_ids', order_stage='$order_stage' WHERE id='$task_id' ");
//$updatetrue = $SQLite3->changes();
$task_edit=1;
}else{
$SQLite3->exec("INSERT INTO orders_tasks (order_id, task_status, task_title, task_text, task_date_create, task_date_close, account_id_create, users_task_ids, order_stage)
VALUES ('$order_id', '$task_status', '$task_title', '$task_text', datetime('$task_date_create'), datetime('$task_date_close'), '{$_SESSION['id']}', '$users_task_ids', '$order_stage' )");
$task_id = $SQLite3->lastInsertRowID();
}
////////////// обновить сделку в любом случаи кто и когда
$SQLite3->exec("UPDATE orders SET deal_update= datetime('now', 'localtime'), account_id_update = '{$_SESSION['id']}' WHERE id='$order_id' ");
$path_save = md5($task_id.'task');
//if (is_uploaded_file($_FILES['file_task_c']['tmp_name'][0])) {
$total = count($targetPath);//count($_FILES['file_task_c']['name']);
if (!is_dir('../attachments/task/'. $path_save .'/')) {
mkdir('../attachments/task/'. $path_save .'/');//mkdir($dirname, 0755, true);
}
// Loop through each file
$targetPathFilesTask = $files_tmp = [];
for( $i=0 ; $i < $total ; $i++ ) {
//Get the temp file path
$sourcePath = '../upload/'.$targetPath[$i];//$sourcePath = $_FILES['file_task_c']['tmp_name'][$i];
//Make sure we have a file path
if ($sourcePath != ""){
//Setup our new file path
$targetPathFilesTask[$i] = '../attachments/task/'. $path_save .'/'. $targetPath[$i];//$_FILES['file_task_c']['name'][$i];
//Upload the file into the temp dir
if(copy($sourcePath, $targetPathFilesTask[$i])) {
//$data['file_task_c'][]['file']=$_FILES['file_task_c']['name'][$i];
//$files_arr[]['file']=$_FILES['file_task_c']['name'][$i];
//$files_arr[]=$_FILES['file_task_c']['name'][$i];
//$files_tmp[]=$_FILES['file_task_c']['name'][$i];
$file_task_c[]=$targetPath[$i];//$_FILES['file_task_c']['name'][$i];
//$data['file_task_c']['path']='corpcom';
}
}
}
//if(!is_array(json_decode($company['files_org'],1)))
//$files_tmp = array_unshift($files_arr, $file_task_c);
//if(count($file_task_c)>=1)
//array_unshift($files_tmp, $file_task_c);
$files_tmp = array_unique($file_task_c);
//$files_tmp = $files_arr;
//$files_tmp = $file_task_c;
//}
if(!empty($taskEditF) ){//edit update files
$file_task_c = array_merge($taskEditF,$files_tmp);
$files_tmp = array_unique($file_task_c);
//echo var_dump($files_tmp);
}
$task_file_path = json_encode($files_tmp);
$SQLite3->exec("UPDATE orders_tasks SET
task_file_path='$task_file_path' WHERE id='$task_id' ");
/*$files_count = count($files_tmp);
$task_date_create = strtotime($task_date_create);
$time_task = date('d ', $task_date_create) . $monthes[date('n', $task_date_create)].', '.$days[date('w',$task_date_create)] . date(' в H:i Yг.', $task_date_create); //Y-m-d h:i:sa
$userName = $SQLite3->querySingle("SELECT em_name FROM account_user WHERE id='{$_SESSION['id']}' ");
$account_userAvatar = preg_replace('~(\pL)\S+|\s+~u', '$1', $userName);
$userAB = mb_substr(mb_strtoupper($account_userAvatar),0, 2);
$ColorUsers='#'.substr(crc32($userName.$_SESSION['id']), -6);
echo json_encode([
'id'=>$task_id,'status'=>$task_status,'title'=>$task_title,'text'=>$task_text,'create'=>$time_task,'user'=>[$userAB,$ColorUsers,$userName],$files_count,$otcr_st,$users_task,'edit'=>$task_edit,
'
<div class="success alert alert-success mt-4">
<div class="alert-message text-center">
<strong>Сохранено</strong>
</div>
</div>'
]);*/
//fix only task временно!!!
if($order_stage==100)//fix archive view
$ST_DEAL[100] = ['text'=>'Не приобретен ','css'=>'background-color:red !important;','stage_lid'=>100];//fix АРХИВНАЯ ОТЛОЖЕННАЯ СДЕЛКА !!!!!!! просмотр архива ЗАГРУЗИТЬ ЕЩЕ..
//отправить на почту уведомление!!!!!!!!!!!!!!!!!!!
$notifies_textSQL = $task_title.', <br>'.$ST_DEAL[$order_stage]['text'].', сделка <a class="st456cf" href="https://control.mail.com/crm/?order='.$order_id.'" target="_blank">'.$id_kpid.'</a><br>'.$users_task;
$SQLite3->exec("INSERT INTO notifies (text_notifies, notifies_create, access_look, status_notify) VALUES
('$notifies_textSQL', datetime('now', 'localtime'), '0' ,'10' )");
checkPostmail($notifies_textSQL,__LINE__);//'<a href="https://control.mail.com/crm/?order='.$order_id.'" target="_blank">'.$id_kpid.'</a>'.' '.
}else{
echo '435d43wjd';
error_log('435d43wjd');
exit;
}
}
}
//echo '<pre>',print_r($GLOBALS,1);