Joywork/engine/classes/MaxClass.php
2026-05-22 21:21:54 +03:00

919 lines
42 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
class MaxClass {
private $db = null;
private $dbpg = null;
private $token = 'f9LHodD0cOLzH1dzzkfKhiejD2HWpnGxmoq_iGDbTrOuj2PoGlY9kJPzHCplH0M4Ycc8RBbEj3kdLu-BQavu';
private $metod = 'get';
private $base_url = 'https://platform-api.max.ru/';
private $href = '';
private $bodyPost = null;
private $idСhannel = -70963110483455; //id канала по которому проверяем подписку
public function __construct()
{
//throw new \Exception('Not implemented');
$pdo = new MysqlPdo(hst, ndb, user, pass);
$pdo->query("SET NAMES 'utf8'");
$this->db = $pdo;
}
private function clearInputElement($el2) // очистка входящего элимента
{
$el = $el2;
$el = strip_tags($el); // от тегов
$el = htmlspecialchars($el); // от кавычек и прочего
$el = str_replace("\n", "<br>", $el);
$el = str_replace("\r", "", $el);
$el = mysql_real_escape_string($el); // от MySQL-инъекций
$el = trim($el); // от лишних пробелов
$el = stripslashes($el); // от слэшей
return $el;
}
public function set_token($token){
$this->token = $token;
}
public function set_metod($metod){
$this->metod = $metod;
}
public function set_href($href){
$this->href = $href;
}
/**
* Получение информации о боте
* @return array
*/
public function me(){
$this->set_metod('get');
$this->set_href('me');
return $this->send();
}
public function get_chats(){
$this->set_metod('get');
$this->set_href('chats');
return $this->send();
// https://platform-api.max.ru/chats
}
/**
* Возвращает список участников группового чата
* @param int $user_id id пользователя max для получения информации тошльок об этом пользователе,
* если null то будет получен массив из 20 поьзователей
* @return array $response Если members пустой, то пользователь не подписан
*/
public function get_members($user_id = null){
$this->set_metod('get');
$href = 'chats/'.$this->idСhannel.'/members';
if(!is_null($user_id)){
$href .= '?user_ids='.$user_id;
}
$this->set_href($href);
return $this->send();
}
/**
* Получение текущих подписок
* @return array
*/
public function get_subscriptions(){
$this->set_metod('get');
$this->set_href('subscriptions');
return $this->send();
}
/**
* Отписка от обновлений
* @param string $url адрес от которого отписываемся не получаем вебхуки
* @return array
*/
public function delete_subscriptions($url){
$this->set_metod('delete');
$this->set_href('subscriptions?url='.$url);
return $this->send();
}
/**
* Подписка на обновления
* Webhook-endpoint должен быть доступен по HTTPS на порту 443. Ваш сервер должен прослушивать этот порт. Порт в URL не указывается
* @param string $url URL HTTPS-endpoint вашего бота. Должен начинаться с https://
* @param array $update_types Список типов обновлений, которые хочет получать ваш бот. Для полного списка типов
* @param string $secret Cекрет, который должен быть отправлен в заголовке X-Max-Bot-Api-Secret в каждом запросе Webhook.
* Разрешены только символы A-Z, a-z, 0-9, и дефис.
* Заголовок рекомендован, чтобы запрос поступал из установленного веб-узла
*/
public function set_subscription($url, $update_types, $secret = null){
$this->set_metod('post');
$this->set_href('subscriptions');
$data = [
'url'=>$url,
'update_types'=>$update_types
];
if(!is_null($secret)){
$data['secret'] = $secret;
}
$this->bodyPost = $data;
return $this->send();
}
/**
* Отправка сообщения пользователю
* @param int $user_id - id пользователя max
* @param string $text Текст сообщения
* @param array $attachments вложение в сообщение (кнопки, файлы, избражения и т.д.)
* @return array $response
*/
public function send_messages_to_user($user_id, $text, $attachments = []){
$this->set_metod('post');
$this->set_href("messages?user_id={$user_id}");
$data = [
'text'=>$text,
'format'=>'html',
'attachments'=>$attachments
];
$this->bodyPost = $data;
return $this->send();
}
/**
* Отправка сообщения в чат
* @param int $chat_id - Если сообщение отправляется в чат, укажите его ID
* @param string $text Текст сообщения
* @param array $attachments вложение в сообщение (кнопки, файлы, избражения и т.д.)
* @return array $response
*/
public function send_messages_to_chat($chat_id, $text, $attachments = []){
$this->set_metod('post');
$this->set_href("messages?chat_id={$chat_id}");
$data = [
'text'=>$text,
'format'=>'html',
];
$this->bodyPost = $data;
return $this->send();
}
/**
*
*/
/**
* Отправка запроса
* @return array $response
*/
private function send(){
$url = $this->base_url . $this->href;
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: '.$this->token, 'Content-Type: application/json'));
curl_setopt($ch, CURLOPT_URL, $url); // Устанавливаем URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Возвращать результат в виде строки
// Если отправляем через POST (часто предпочтительнее для больших данных или JSON):
if($this->metod == 'post'){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($this->bodyPost, JSON_UNESCAPED_UNICODE));
}
if($this->metod == 'delete'){
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
}
// Выполнение запроса
$result = curl_exec($ch);
//var_dump($result);
$response = array();
// Проверка на ошибки
if (curl_errno($ch)) {
echo 'Ошибка cURL: ' . curl_error($ch);
$response['error'] = true;
$response['message'] = 'Ошибка cURL: ' . curl_error($ch);
file_put_contents($_SERVER['DOCUMENT_ROOT']."/max_error.log", date('d.m.y H:i:s').' '.$url.' '.curl_error($ch).' '.json_encode($this->bodyPost, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);
} else {
// Обработка ответа
$response = json_decode($result, true);
if(isset($response['code'])){
$response['error'] = true;
file_put_contents($_SERVER['DOCUMENT_ROOT']."/max_error.log", date('d.m.y H:i:s').' '.$url.' '.$response['code'].' '.json_encode($this->bodyPost, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);
}
}
// Закрытие сессии cURL
curl_close($ch);
return $response;
}
//Выборка клиентов
public function get_clients_array($client_ids){
$clients = array();
$sql_cl = "SELECT id, phone, fio, of_objects, opis FROM clients WHERE id in (".implode(',',$client_ids).")";
$q_cl = $this->db->query($sql_cl, true);
while($r_cl = $this->db->fetch_assoc($q_cl)){
$clients[$r_cl['id']] = $r_cl;
}
return $clients;
}
//Выборка заявок
public function get_reqs_array($req_ids){
$result = array('reqs'=>array(), 'client_ids'=>array());
$reqs=array();
$client_req_ids = array();
$sql_req = "SELECT id, object_id, name as fio, client_id, '' as `phone`, `object_id` as `of_objects`, client_id, description as opis, type_id, (SELECT heir FROM requisitions_type WHERE requisitions.type_id = requisitions_type.id) as heir FROM requisitions WHERE id in (" . implode(',', $req_ids) . ")";
$q_req = $this->db->query($sql_req);
while($r_req = $this->db->fetch_assoc($q_req)){
$reqs[$r_req['id']] = $r_req;
$client_req_ids[] = $r_req['client_id'];
}
$result['reqs'] = $reqs;
$result['client_ids'] = $client_req_ids;
return $result;
}
/**
* Отметка задачи выполненной
*/
public function task_completed($max_user_id, $event_id, $type='client_req', $is_comment = false){
if($max_user_id > 0 && $event_id > 0){
$user_id = 0;
$stage = 0;
$status = 0;
$sql_user = "SELECT * FROM users WHERE max_user_id = {$max_user_id}";
$q_user = $this->db->query($sql_user);
$r_user = $this->db->fetch_assoc($q_user);
$user_id = (int)$r_user['id'];
$agency_id = (int)$r_user['company_id'] > 0 ? $r_user['company_id'] : $user_id;
$event = 'task_completed';
$table = 'user_client_events';
if($type == 'object'){
$event = 'task_completed_object';
$table = 'user_object_events';
}
$this->db->query("UPDATE max_events SET status = 1 WHERE max_user_id = {$max_user_id}");
if(!$is_comment){
$stage = 0;
$status = 1;
}
$description = date('d-m-Y H:i:s').' - Запрос на отметку выполнено';
$sql = "INSERT INTO max_events (max_user_id, mess_id, event, stage, service, status, description, user_id, agency_id)
VALUE ({$max_user_id}, {$event_id}, '{$event}', 1, 0, '{$status}', '{$description}', {$user_id}, {$agency_id})";
if(!$this->db->query($sql)){
$errors[] = $this->db->error();
}
if(!$is_comment){
$sql = "UPDATE {$table} SET calendar_view = 1 WHERE id = {$event_id}";
$this->db->query($sql);
}
$result = array('result'=>$event, 'stage'=>$stage, 'event_id' => $event_id);
} else {
$errors[] = 'Empty data';
}
if(!empty($errors)){
file_put_contents($_SERVER['DOCUMENT_ROOT']."/log_task_max.txt", date('d.m.y H:i:s').' max_user_id '.$max_user_id.' id:'.$event_id." ".json_encode($errors, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);
return array('result'=>'error');
}
return $result;
}
/**
* отправка комментария для задачи
*/
public function send_comment_task($max_user_id, $mess, $event_table, $type='client_req'){
$event = 'task_completed';
$table = 'user_client_events';
if($type == 'object'){
$event = 'task_completed_object';
$table = 'user_object_events';
}
if(empty($mess)) $errors[] = "Пустое сообщение";
if(empty($event_table)){
$sql_ev = "SELECT * FROM max_events WHERE max_user_id = {$max_user_id} AND status = 0 AND event='$event' ORDER BY id DESC LIMIT 1";
//file_put_contents($_SERVER['DOCUMENT_ROOT']."/log_task_max.txt", date('d.m.y H:i:s').' max_user_id '.$max_user_id.' id:'.$sql_ev."\n", FILE_APPEND);
$q_ev = $this->db->query($sql_ev);
if($this->db->num_rows($q_ev) > 0){
$event_table = $this->db->fetch_assoc($q_ev);
}
}
if(empty($event_table)) $errors[] = "Не найдено связаное событие";
if($event_table['user_id'] == 0) $errors[] = "Не определен user_id";
$event_id = (int)$event_table['mess_id'];
$user_id = (int)$event_table['user_id'];
if(empty($errors)){
$sql = "UPDATE {$table} SET calendar_view = 1 WHERE id = {$event_id}";
$this->db->query($sql);
$field = '';
$field_val = 0;
$sql_ev = "SELECT * FROM {$table} WHERE id = {$event_id}";
$q_ev = $this->db->query($sql_ev);
$r_ev = $this->db->fetch_assoc($q_ev);
if(isset($r_ev['req_id']) && $r_ev['req_id'] > 0){
$field = 'req_id';
$field_val = $r_ev['req_id'];
} else if (isset($r_ev['client_id']) && $r_ev['client_id'] > 0){
$field = 'client_id';
$field_val = $r_ev['client_id'];
} else if (isset($r_ev['object_id']) && $r_ev['object_id'] > 0){
$field = 'object_id';
$field_val = $r_ev['object_id'];
}
if($field_val > 0){
$sql_comment = "INSERT INTO {$table} (user_id, from_id, type, comment, max, {$field}) VALUES ({$user_id}, {$user_id}, 'comment', '{$mess}', 1, {$field_val})";
$this->db->query($sql_comment);
}
}
$result = array('result'=>'add_task_comment', 'event_id' => $event_table['mess_id']);
if(!empty($errors)){
file_put_contents($_SERVER['DOCUMENT_ROOT']."/log_task_telega.txt", date('d.m.y H:i:s').' id:'.$event_id." ".json_encode($errors, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);
return array('result'=>'error');
}
return $result;
}
/**
* Отмена отправки сообщения для задачи
*/
public function no_task_completed($max_user_id, $event_id, $type='client_req'){
$event = 'task_completed';
if($type == 'object'){
$event = 'task_completed_object';
}
$sql_ev = "UPDATE max_events SET status=1 WHERE max_user_id = {$max_user_id} AND mess_id={$event_id} AND event='{$event}'";
if(!$this->db->query($sql_ev)){
$errors[] = $this->db->error();
}
$result = array('result'=>'no_task_completed', 'event_id' => $event_id);
if(!empty($errors)){
file_put_contents($_SERVER['DOCUMENT_ROOT']."/log_task_telega.txt", date('d.m.y H:i:s').' id:'.$event_id." ".json_encode($errors, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);
return array('result'=>'error');
}
return $result;
}
/**
* Принять в работу
*/
public function accept_work($maxUserId, $event_id, $type='client_req'){
if($maxUserId > 0 && $event_id > 0){
$db_sphinx = new MysqlPdo(hstsph2, null, null, null, true, '9306');
$user_id = 0;
$stage = 0;
$status = 1;
$section = '';
$sql_user = "SELECT * FROM users WHERE max_user_id = {$maxUserId}";
$q_user = $this->db->query($sql_user);
$r_user = $this->db->fetch_assoc($q_user);
$user_id = (int)$r_user['id'];
$agency_id = (int)$r_user['company_id'] > 0 ? $r_user['company_id'] : $user_id;
$event = 'accept_work';
$table = 'events_clients';
$text = '';
if($type == 'object'){
$event = 'accept_work_object';
$table = 'objects_to_send';
$section = 'object';
}
$this->db->query("UPDATE max_events SET status = 1 WHERE max_user_id = {$maxUserId}");
$description = date('d-m-Y H:i:s').' - Запрос на принятие в работу';
$sql = "INSERT INTO max_events (max_user_id, mess_id, event, stage, service, status, description, user_id, agency_id)
VALUE ({$maxUserId}, {$event_id}, '{$event}', 1, 0, '{$status}', '{$description}', {$user_id}, {$agency_id})";
if(!$this->db->query($sql)){
$errors[] = $this->db->error();
}
$sql_ev = "SELECT * FROM {$table} WHERE id = {$event_id}";
$q_ev = $this->db->query($sql_ev);
$row_ev = $this->db->num_rows($q_ev);
$r_ev = $this->db->fetch_assoc($q_ev);
$field = '';
$field_val = 0;
$cancel_confirm = false;
if($row_ev == 0){
$cancel_confirm = true;
} else if(isset($r_ev['req_id']) && $r_ev['req_id'] > 0){
$field = 'req_id';
$field_val = $r_ev['req_id'];
$section = 'req';
} else if (isset($r_ev['client_id']) && $r_ev['client_id'] > 0){
$field = 'client_id';
$field_val = $r_ev['client_id'];
$section = 'client';
} else if (isset($r_ev['object_id']) && $r_ev['object_id'] > 0){
$field = 'object_id';
$field_val = $r_ev['object_id'];
}
$no_accept = false;
$is_confirm = false;
$is_rejected = false;
if($field_val > 0){
switch($section){
case 'req':{
$tr = 0;
if($r_ev['event'] == 'transmitted_parallel') $tr = 1;
$sql_cl = "SELECT `name` as `fio`, object_id, type_id, who_work, funnel_id, confirm, doers, (SELECT heir FROM requisitions_type WHERE id = requisitions.type_id) as heir FROM `requisitions` WHERE `id` = {$field_val}";
$q_cl = $this->db->query($sql_cl);
$r_cl = $this->db->fetch_assoc($q_cl);
if($tr == 0){
if($r_cl['who_work'] == $user_id){
if($r_cl['confirm'] == 1){
$sql_no = "SELECT * FROM events_clients WHERE user_id={$user_id} AND req_id = {$field_val} AND event = 'notadopted' AND `read` = 0";
$q_no = $this->db->query($sql_no);
if($this->db->num_rows($q_no) > 0){
$cl_fio_disp = should_hide_contacts_for_user_id($user_id) ? mask_fio_if_contains_phone($r_cl['fio']) : $r_cl['fio'];
$text = "«<b>" . $cl_fio_disp . "</b>»";
$is_rejected = true;
} else {
$is_confirm = true;
}
} else {
$sql_no = "SELECT * FROM events_clients WHERE user_id={$user_id} AND req_id = {$field_val} AND event = 'notadopted' AND `read` = 0";
$q_no = $this->db->query($sql_no);
if($this->db->num_rows($q_no) > 0){
$cl_fio_disp = should_hide_contacts_for_user_id($user_id) ? mask_fio_if_contains_phone($r_cl['fio']) : $r_cl['fio'];
$text = "«<b>" . $cl_fio_disp . "</b>»";
$is_rejected = true;
} else {
$sql = "UPDATE requisitions SET confirm=1, deleted=0, who_work={$user_id} WHERE id={$field_val}";
$this->db->query($sql);
// Автопривязка ответственного по заявке к клиенту из заявки
$sql = "UPDATE `clients`
JOIN `requisitions` AS `req` ON
`clients`.`id` = `req`.`client_id` AND
`clients`.`who_work` = 0 AND
`clients`.`confirm` = 0 AND
`req`.`id` = '{$field_val}' AND
`clients`.`who_work` = 0 AND
`clients`.`confirm` = 0
SET `clients`.`who_work` = '{$user_id}',
`clients`.`confirm` = 1";
$this->db->query($sql);
//Смена срока закрытия этапа
$sql_step = "SELECT * FROM clients_funnel_step WHERE req_id = {$field_val}";
$q_step = $this->db->query($sql_step);
if($this->db->num_rows($q_step) > 0){
$sql_op_step = "UPDATE clients_funnel_step SET date_update = NOW() WHERE req_id = {$field_val}";
$this->db->query($sql_op_step);
} else {
if($r_cl['funnel_id'] > 0){
$this->db->query("INSERT INTO clients_funnel_step (req_id) VALUES ({$field_val})");
}
}
$sql = "UPDATE user_client_events SET user_id={$user_id} WHERE req_id={$field_val} and type != 'step' and type != 'file'";
$this->db->query($sql);
$sql = "UPDATE `events_clients` SET `read` = 1, date_update='".date('Y-m-d H:i:s')."' WHERE req_id = {$field_val} AND event IN ('transmitted', 'notadopted')";
$this->db->query($sql);
$sql = "INSERT INTO `events_clients` (user_id, req_id, from_id, event, `read`) VALUES ({$user_id}, {$field_val}, {$user_id}, 'accepted', '1')";
$this->db->query($sql);
//Передача объекта
$agency = new User;
$agency->get($user_id);
$sqlUser = "SELECT `first_name`, `last_name`, `middle_name`, `phone` FROM `users` where id=".$user_id;
$qUser = $this->db->query($sqlUser);
$rUser = $this->db->fetch_assoc($qUser);
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']);
if ($_SESSION['agency']) {
$sobstv = $sobstv . ", агентство " . $rUser['agency_name'];
} else {
if (isset($agency->agencyName)) {
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']) . ", агентство " . $agency->agencyName;
} else {
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']);
}
}
if($r_cl['object_id'] && ($r_cl['type_id'] == 2 || $r_cl['heir'] == 2)){
$sql_up = "UPDATE objects SET id_add_user = {$user_id}, phone='".$rUser['phone']."', sobstv='".$sobstv."' WHERE id = ".$r_cl['object_id'];
//echo $sql_up;
$this->db->query($sql_up);
$sql_sph = "UPDATE objects SET id_add_user = {$user_id} WHERE id = ".$r_cl['object_id'];
$db_sphinx->query($sql_sph);
}
}
}
} else {
$sql_no = "SELECT * FROM events_clients WHERE user_id={$user_id} AND req_id = {$field_val} AND event = 'notadopted'";
$q_no = $this->db->query($sql_no);
if($this->db->num_rows($q_no) > 0){
$cl_fio_disp = should_hide_contacts_for_user_id($user_id) ? mask_fio_if_contains_phone($r_cl['fio']) : $r_cl['fio'];
$text = "«<b>" . $cl_fio_disp . "</b>»";
$is_rejected = true;
} else {
$no_accept = true;
}
$sql = "UPDATE `events_clients` SET `read` = 1, date_update='".date('Y-m-d H:i:s')."' WHERE req_id = {$field_val} AND event IN ('transmitted', 'notadopted')";
$this->db->query($sql);
}
} else if ($tr == 1){
if(!empty($r_cl['doers'])){
$confirm = 1;
$doers = json_decode(html_entity_decode($r_cl['doers']), true);
if($doers[$user_id] == 1){
$is_confirm = true;
} else {
$doers[$user_id] = 1;
foreach($doers as $doer){
if($doer == 0) $confirm = 0;
}
$sql_up = "UPDATE requisitions SET doers='".$this->clearInputElement(json_encode($doers))."', doers_confirm=$confirm WHERE id={$field_val}";
$this->db->query($sql_up);
foreach($doers as $key => $agent) {
$sql_up_d = "UPDATE requisition_doers SET confirm = {$agent} WHERE requisition_id ={$field_val} and user_id = {$key}";
$this->db->query($sql_up_d);
}
$sql_up_doer = "UPDATE doers_emp_client SET confirm=1 WHERE req_id ={$field_val} and who_work = $user_id and doer_id = $user_id";
$this->db->query($sql_up_doer);
$sql_2 = "UPDATE `events_clients` SET `read` = 1, date_update='".date('Y-m-d H:i:s')."' WHERE req_id = {$field_val} AND event IN ('transmitted_parallel', 'notadopted_doer') AND from_id = ".$user_id;
$this->db->query($sql_2);
$sql = "INSERT INTO `events_clients` (user_id, req_id, from_id, event, `read`) VALUES ('".$user_id."', '{$field_val}', '".$user_id."', 'accepted_doer', '1')";
$this->db->query($sql);
}
}
}
break;
}
case 'client': {
$tr = 0;
if($r_ev['event'] == 'transmitted_parallel') $tr = 1;
$sql_client = "SELECT objects, funnel_id, who_work, confirm, fio, phone, doers FROM clients WHERE id={$field_val}";
$q_client = $this->db->query($sql_client);
$r_client = $this->db->fetch_assoc($q_client);
if($tr == 0){
if($r_client['who_work'] == $user_id){
if($r_client['confirm'] == 1){
$sql_no = "SELECT * FROM events_clients WHERE client_id = {$field_val} AND `read`= 0 AND user_id={$user_id} AND event = 'notadopted'";
$q_no = $this->db->query($sql_no);
if($this->db->num_rows($q_no) > 0){
$cl_phone_disp = should_hide_contacts_for_user_id($user_id) ? mask_client_phone($r_client['phone']) : $r_client['phone'];
$cl_fio_disp = should_hide_contacts_for_user_id($user_id) ? mask_fio_if_contains_phone($r_client['fio']) : $r_client['fio'];
$text = "«<b>" . $cl_phone_disp." ".$cl_fio_disp . "</b>»";
$is_rejected = true;
} else {
$is_confirm = true;
}
} else {
$sql_no = "SELECT * FROM events_clients WHERE client_id = {$field_val} AND `read`= 0 AND user_id={$user_id} AND event = 'notadopted'";
$q_no = $this->db->query($sql_no);
if($this->db->num_rows($q_no) > 0){
$cl_phone_disp = should_hide_contacts_for_user_id($user_id) ? mask_client_phone($r_client['phone']) : $r_client['phone'];
$cl_fio_disp = should_hide_contacts_for_user_id($user_id) ? mask_fio_if_contains_phone($r_client['fio']) : $r_client['fio'];
$text = "«<b>" . $cl_phone_disp." ".$cl_fio_disp . "</b>»";
$is_rejected = true;
} else {
$sql = "UPDATE clients SET confirm=1, deleted=0, who_work={$user_id} WHERE id={$field_val}";
$this->db->query($sql);
//Смена срока закрытия этапа
$sql_step = "SELECT * FROM clients_funnel_step WHERE client_id = {$field_val}";
$q_step = $this->db->query($sql_step);
if($this->db->num_rows($q_step) > 0){
$sql_op_step = "UPDATE clients_funnel_step SET date_update = NOW() WHERE client_id = {$field_val}";
$this->db->query($sql_op_step);
} else {
if($r_client['funnel_id'] > 0){
$this->db->query("INSERT INTO clients_funnel_step (client_id) VALUES ({$field_val})");
}
}
$sql="UPDATE user_client_events SET user_id={$user_id} WHERE client_id={$field_val} and type != 'step' and type != 'file'";
$this->db->query($sql);
$sql = "UPDATE `events_clients` SET `read` = 1, date_update='".date('Y-m-d H:i:s')."' WHERE client_id = {$field_val} AND event IN ('transmitted', 'notadopted')";
$this->db->query($sql);
$sql = "INSERT INTO `events_clients` (user_id, client_id, from_id, event, `read`) VALUES ({$user_id}, {$field_val}, {$user_id}, 'accepted', '1')";
$this->db->query($sql);
//Передача объекта
$agency = new User;
$agency->get($user_id);
$sqlUser = "SELECT `first_name`, `last_name`, `middle_name`, `phone` FROM `users` where id=".$user_id;
$qUser = $this->db->query($sqlUser);
$rUser = $this->db->fetch_assoc($qUser);
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']);
if ($_SESSION['agency']) {
$sobstv = $sobstv . ", агентство " . $rUser['agency_name'];
} else {
if (isset($agency->agencyName)) {
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']) . ", агентство " . $agency->agencyName;
} else {
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']);
}
}
$sql_confirm_obj = "SELECT * FROM client_confirm_objects WHERE client_id = {$field_val} AND status = 0";
$q_confirm_obj = $this->db->query($sql_confirm_obj);
$is_confirm_obj = false;
if($this->db->num_rows($q_confirm_obj) > 0){
$r_confirm_obj = $this->db->fetch_assoc($q_confirm_obj);
$is_confirm_obj = (bool)$r_confirm_obj['confirm_objects'];
}
if($is_confirm_obj){
$sql_client = "SELECT * FROM `client_objects` WHERE client_id = {$field_val}";
$q_client = $this->db->query($sql_client);
while($object = $this->db->fetch_assoc($q_client)){
$sql_up = "UPDATE objects SET id_add_user = '".$user_id."', phone='".$rUser['phone']."', sobstv='".$sobstv."' WHERE id = ".$object;
//echo $sql_up;
$this->db->query($sql_up);
$sql_sph = "UPDATE objects SET id_add_user = {$user_id} WHERE id = ".$object;
$db_sphinx->query($sql_sph);
}
}
$this->db->query("UPDATE client_confirm_objects SET status = 1 WHERE client_id = {$field_val} AND status = 0");
}
}
} else {
$sql_no = "SELECT * FROM events_clients WHERE client_id = {$field_val} AND user_id={$user_id} AND event = 'notadopted'";
$q_no = $this->db->query($sql_no);
if($this->db->num_rows($q_no) > 0){
$cl_phone_disp = should_hide_contacts_for_user_id($user_id) ? mask_client_phone($r_client['phone']) : $r_client['phone'];
$cl_fio_disp = should_hide_contacts_for_user_id($user_id) ? mask_fio_if_contains_phone($r_client['fio']) : $r_client['fio'];
$text = "«<b>" . $cl_phone_disp." ".$cl_fio_disp . "</b>»";
$is_rejected = true;
} else {
$no_accept = true;
}
$sql = "UPDATE `events_clients` SET `read` = 1, date_update='".date('Y-m-d H:i:s')."' WHERE client_id = {$field_val} AND event IN ('transmitted', 'notadopted')";
$this->db->query($sql);
}
} else if ($tr == 1){
if(!empty($r_client['doers'])){
$confirm = 1;
$doers = json_decode(html_entity_decode($r_client['doers']), true);
if($doers[$user_id] == 1){
$is_confirm = true;
} else {
$doers[$user_id] = 1;
foreach($doers as $doer){
if($doer == 0) $confirm = 0;
}
$sql_up = "UPDATE clients SET doers='".$this->clearInputElement(json_encode($doers))."', doers_confirm=$confirm WHERE id={$field_val}";
$this->db->query($sql_up);
foreach($doers as $key => $agent) {
$sql_up_d = "UPDATE clients_doers SET confirm = {$agent} WHERE client_id ={$field_val} and user_id = {$key}";
$this->db->query($sql_up_d);
}
$sql_up_doer = "UPDATE doers_emp_client SET confirm=1 WHERE client_id ={$field_val} and who_work = $user_id and doer_id = $user_id";
$this->db->query($sql_up_doer);
$sql_2 = "UPDATE `events_clients` SET `read` = 1, date_update='".date('Y-m-d H:i:s')."' WHERE client_id = {$field_val} AND event IN ('transmitted_parallel', 'notadopted_doer') AND from_id = ".$user_id;
$this->db->query($sql_2);
$sql = "INSERT INTO `events_clients` (user_id, client_id, from_id, event, `read`) VALUES ('".$user_id."', '{$field_val}', '".$user_id."', 'accepted_doer', '1')";
$this->db->query($sql);
}
}
}
break;
} case 'object':{
if(!isset($r_ev['object_id']) || (int)$r_ev['object_id'] == 0){
$cancel_confirm = true;
} else
if($r_ev['new_user_id'] == $user_id){
if($r_ev['accept_state'] != 'NEW'){
if($r_ev['accept_state'] == 'REJECTED'){
$sql_obj = "SELECT * FROM objects WHERE id = {$field_val}";
$q_obj = $this->db->query($sql_obj);
$r_obj = $this->db->fetch_assoc($q_obj);
$text = "«<b>" . $r_obj['nazv'] . "</b>»";
$is_rejected = true;
} else {
$is_confirm = true;
}
} else {
$newUserId = $user_id;
$objectId = $field_val;
$newUser = new User;
$newUser->get($newUserId);
if (!$newUser->agencyId) {
$newUser->agencyId = $newUserId;
}
$currentUser = $newUser;
$phone = $newUser->phone;
$num_search = User::num_search($phone);
$sobstv = trim($newUser->last_name . ' ' . $newUser->first_name . ' ' . $newUser->middle_name);
if ($newUser->agency == 0) {
$sql="SELECT * FROM users WHERE id=$newUser->id_manager";
$rez=$this->db->query($sql);
$manager = $this->db->fetch_assoc($rez);
if($manager['id_manager']) {
$agency = $this->db->fetch_assoc($this->db->query("SELECT * FROM users WHERE id=$manager[id_manager]"));
} else {
$agency = $manager;
}
if ($agency) {
$sobstv = trim($currentUser->last_name . ' ' . $currentUser->first_name . ' ' . $currentUser->middle_name) . ", агентство " . $agency['agency_name'];
}
} else {
$sobstv = $sobstv . ", агентство " . $newUser->agency_name;
}
$webHookIn = new WebHookIn(null, $agency_id);
$is_send_webhook = $webHookIn->check_hook('object_update', 'object');
if($is_send_webhook){
$webHookIn->save_temp_object($objectId);
}
// перенос всех объектов
$sql = "UPDATE objects SET id_add_user = $newUser->id, phone = '$phone', phone_search = '$num_search', sobstv = '$sobstv', is_main = 0 WHERE id=$objectId";
$rez = $this->db->query($sql);
//Запись в сфинкс
$sql_sph = "UPDATE objects SET id_add_user=$newUser->id, phone_search = '$num_search' WHERE id=$objectId";
$db_sphinx->query($sql_sph);
//перенос событий объектов
$sqlObjEvents = "UPDATE user_object_events SET user_id=$newUser->id WHERE object_id=$objectId";
$this->db->query($sqlObjEvents);
//перенос комментариев объектов
$sqlObjCom = "UPDATE user_object_comments SET user_id=$newUser->id WHERE object_id=$objectId";
$this->db->query($sqlObjCom);
// перенос Зипал
$sql = "UPDATE zipal_objects SET user_id=$newUser->id, send_to_update=1 WHERE object_id=$objectId";
$rez = $this->db->query($sql);
$sqlPack = "UPDATE advertising_package_object_publish SET send_to_update = '1', error_when_send_to_update = '' WHERE object_id=$objectId";
$this->db->query($sqlPack);
$sql = "UPDATE objects_to_send SET accept_date=NOW(), accept_state='ACCEPTED' WHERE id=$event_id";
$this->db->query($sql);
/**
* Передача заявок Реализация
*/
$sql_req = "SELECT id, `name`, object_id, type_id, who_work, funnel_id, confirm FROM `requisitions` WHERE object_id = {$objectId} AND cancel=0 AND deleted=0 AND (type_id = 2 or (SELECT heir FROM requisitions_type WHERE id = requisitions.type_id) = 2) AND who_work != '".$newUser->id."'";
//echo $sql_req."\n";
$q_req = $this->db->query($sql_req);
if($this->db->num_rows($q_req) > 0){
while($r_req = $this->db->fetch_assoc($q_req)){
$sql_up = "UPDATE requisitions SET confirm=1, who_work={$newUser->id} WHERE id={$r_req['id']}";
//echo $sql_up."\n";
if($this->db->query($sql_up)){
$sql_ev = "INSERT INTO `events_clients` (user_id, req_id, from_id, event, `read`, dop_text) VALUES ('".$user_id."', '{$r_req['id']}', '".$newUser->id."', 'update', '1', 'Переведена на ответственного при принятии объекта ID {$objectId}')";
//file_put_contents($_SERVER['DOCUMENT_ROOT']."/log_task_telega.txt", date('d.m.y H:i:s').' chat_id '.$chatId.' id:'.$event_id." ". $sql_ev."\n", FILE_APPEND);
$this->db->query($sql_ev);
}
}
}
if($is_send_webhook){
$dataWhook = array('action'=>'object_update', 'object_id'=>$objectId, 'section'=>'object', 'user_id'=>$user_id, 'agency_id'=>$agency_id);
$webHookIn->check_send($dataWhook);
}
}
} else {
$no_accept = true;
}
break;
}
}
}
$result = array('result'=>$event, 'section'=>$section, 'event_id' => $event_id, 'id' => $field_val);
if($no_accept) $result['no_accept'] = 1;
if($is_confirm) $result['is_confirm'] = 1;
if($cancel_confirm) $result['cancel_confirm'] = 1;
if($is_rejected) $result['is_rejected'] = 1;
if(!empty($text)) $result['text'] = $text;
// file_put_contents($_SERVER['DOCUMENT_ROOT']."/log_task_telega.txt", date('d.m.y H:i:s').' chat_id '.$chatId.' id:'.$event_id." ".json_encode($result, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);
} else {
$errors[] = 'Empty data';
}
if(!empty($errors)){
file_put_contents($_SERVER['DOCUMENT_ROOT']."/log_task_max.txt", date('d.m.y H:i:s').' user_id '.$maxUserId.' id:'.$event_id." ".json_encode($errors, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);
return array('result'=>'error');
}
return $result;
}
}