2026-05-22 20:21:54 +02:00
< ? 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 } ) " );
}
}
2026-07-15 14:14:48 +02:00
$sql = " UPDATE user_client_events SET user_id= { $user_id } WHERE req_id= { $field_val } and type != 'step' and type != 'file' and (type != 'deal' or deal_id = 0 or deal_id IS NULL) " ;
2026-05-22 20:21:54 +02:00
$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 ;
}
}