2026-05-22 20:21:54 +02:00
< ? php
class Telegram {
public $debug = false ;
private $db = null ;
private $user = null ;
private $TOKEN = '793676666:AAGFo66CjsmO2KxZVRwQbH8pLTvenpsHiHI' ;
public function __construct ( $is_user = true , $db = null , $debug = false ) {
if ( $debug == true ) {
$this -> debug = true ;
error_reporting ( E_ALL | E_STRICT );
ini_set ( 'display_errors' , 1 );
}
if ( $is_user ){
if ( isset ( $_SESSION [ 'id' ])) {
if ( isset ( $user )) {
$this -> user = $user ;
} else {
$user_id = intval ( $_SESSION [ 'id' ]);
$user = new User ;
$user -> get ( $user_id );
$this -> user = $user ;
}
} else {
$this -> user = null ;
}
}
if ( ! is_null ( $db )) {
$this -> db = $db ;
} else {
$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 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 object_ad ( $object_id , $on = 1 , $area = '' ){
if (( int ) $this -> user -> show_all_objects_page == 0 ){
if ( $this -> user -> id_manager > 0 ){
$manager_id = $this -> user -> id_manager ;
$user_id = $this -> user -> id ;
$sql = " INSERT INTO object_ad SET user_id = { $user_id } , manager_id = { $manager_id } , object_id = { $object_id } , on_off= { $on } , area=' { $area } ' " ;
if ( $this -> user -> agencyId == 9472 ){
$sql = " INSERT INTO object_ad SET user_id = { $user_id } , manager_id = 9472, object_id = { $object_id } , on_off= { $on } , area=' { $area } ' " ;
} else if ( $this -> user -> agencyId == 9588 ){
$sql = " INSERT INTO object_ad SET user_id = { $user_id } , manager_id = 9904, object_id = { $object_id } , on_off= { $on } , area=' { $area } ' " ;
} else if ( $this -> user -> agencyId == 9973 ){
$sql = " INSERT INTO object_ad SET user_id = { $user_id } , manager_id = 9973, object_id = { $object_id } , on_off= { $on } , area=' { $area } ' " ;
} else if ( $this -> user -> agencyId == 10982 ){
$sql = " INSERT INTO object_ad (user_id, manager_id, object_id, on_off) VALUES ( { $user_id } , 10982, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 10992, { $object_id } , { $on } , area=' { $area } ') " ;
} else if ( $this -> user -> agencyId == 11456 ){
$sql = " INSERT INTO object_ad SET user_id = { $user_id } , manager_id = 11552, object_id = { $object_id } , on_off= { $on } , area=' { $area } ' " ;
} else if ( $this -> user -> agencyId == 11501 ){
$sql = " INSERT INTO object_ad SET user_id = { $user_id } , manager_id = 11549, object_id = { $object_id } , on_off= { $on } , area=' { $area } ' " ;
} else if ( $this -> user -> agencyId == 11397 ){
$sql = " INSERT INTO object_ad SET user_id = { $user_id } , manager_id = 11583, object_id = { $object_id } , on_off= { $on } , area=' { $area } ' " ;
} else if ( $this -> user -> agencyId == 7507 ){
$sql = " INSERT INTO object_ad (user_id, manager_id, object_id, on_off) VALUES ( { $user_id } , 8364, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 7510, { $object_id } , { $on } , area=' { $area } ') " ;
} else if ( $this -> user -> agencyId == 8826 ){
$sql = " INSERT INTO object_ad (user_id, manager_id, object_id, on_off) VALUES ( { $user_id } , 8827, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 11867, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 11870, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 11874, { $object_id } , { $on } , area=' { $area } ') " ;
} else if ( $this -> user -> agencyId == 11417 ){
$sql = " INSERT INTO object_ad (user_id, manager_id, object_id, on_off) VALUES ( { $user_id } , 12349, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 12353, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 11417, { $object_id } , { $on } , area=' { $area } ') " ;
} else if ( $this -> user -> agencyId == 10429 ){
$sql = " INSERT INTO object_ad (user_id, manager_id, object_id, on_off) VALUES ( { $user_id } , 10429, { $object_id } , { $on } , area=' { $area } ') " ;
if ( $manager_id > 0 && $manager_id != 10429 ){
$sql .= " , ( { $user_id } , { $manager_id } , { $object_id } , { $on } , area=' { $area } ') " ;
}
} else if ( $this -> user -> agencyId == 16182 ){
$sql = " INSERT INTO object_ad (user_id, manager_id, object_id, on_off) VALUES ( { $user_id } , 16182, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 16281, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 16274, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 16270, { $object_id } , { $on } , area=' { $area } ') " ;
} else if ( $this -> user -> agencyId == 20553 ){
$sql = " INSERT INTO object_ad (user_id, manager_id, object_id, on_off) VALUES ( { $user_id } , 20865, { $object_id } , { $on } , area=' { $area } '), ( { $user_id } , 20863, { $object_id } , { $on } , area=' { $area } ') " ;
} else {
if ( $this -> user -> department_id > 0 ){
$dep = new Department ();
$list_user = $dep -> getDepartments ( $this -> user -> id , $this -> user -> department_id );
if ( ! empty ( $list_user )){
foreach ( $list_user as $dep_user ){
if ( $dep_user [ 'role' ] == 'manager_office_menager' || $dep_user [ 'role' ] == 'manager_office' ){
$sql_user2 = " SELECT * FROM users WHERE role_id = { $dep_user [ 'id' ] } AND blocked = 0 " ;
$q_user2 = $this -> db -> query ( $sql_user2 , true );
while ( $r_user2 = $this -> db -> fetch_assoc ( $q_user2 )){
if ( $r_user2 [ 'show_all_objects_pag' ] == 0 ){
$sql2 = " INSERT INTO object_ad SET user_id = { $user_id } , manager_id = { $r_user2 [ 'id' ] } , object_id = { $object_id } , on_off= { $on } , area=' { $area } ' " ;
$this -> db -> query ( $sql2 );
}
}
}
}
}
}
}
$this -> db -> query ( $sql , true );
}
}
}
/**
* Отметка задачи выполненной
*/
public function task_completed ( $chatId , $event_id , $type = 'client_req' , $is_comment = false ){
if ( $chatId > 0 && $event_id > 0 ){
$user_id = 0 ;
$stage = 0 ;
$status = 0 ;
$sql_user = " SELECT * FROM users WHERE telegramm_chat_id = { $chatId } " ;
$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 telegram_events SET status = 1 WHERE chat_id = { $chatId } " );
if ( ! $is_comment ){
$stage = 0 ;
$status = 1 ;
}
$description = date ( 'd-m-Y H:i:s' ) . ' - Запрос на отметку выполнено' ;
$sql = " INSERT INTO telegram_events (chat_id, mess_id, event, stage, service, status, description, user_id, agency_id)
VALUE ({ $chatId }, { $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_telega.txt " , date ( 'd.m.y H:i:s' ) . ' chat_id ' . $chatId . ' id:' . $event_id . " " . json_encode ( $errors , JSON_UNESCAPED_UNICODE ) . " \n " , FILE_APPEND );
return array ( 'result' => 'error' );
}
return $result ;
}
/**
* отправка комментария для задачи
*/
public function send_comment_task ( $chat_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 telegram_events WHERE chat_id = { $chat_id } AND status = 0 AND event=' $event ' ORDER BY id DESC LIMIT 1 " ;
file_put_contents ( $_SERVER [ 'DOCUMENT_ROOT' ] . " /log_task_telega.txt " , date ( 'd.m.y H:i:s' ) . ' chat_id ' . $chat_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, tel, { $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 ( $chat_id , $event_id , $type = 'client_req' ){
$event = 'task_completed' ;
if ( $type == 'object' ){
$event = 'task_completed_object' ;
}
$sql_ev = " UPDATE telegram_events SET status=1 WHERE chat_id = { $chat_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 ( $chatId , $event_id , $type = 'client_req' ){
if ( $chatId > 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 telegramm_chat_id = { $chatId } " ;
$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 telegram_events SET status = 1 WHERE chat_id = { $chatId } " );
$description = date ( 'd-m-Y H:i:s' ) . ' - Запрос на принятие в работу' ;
$sql = " INSERT INTO telegram_events (chat_id, mess_id, event, stage, service, status, description, user_id, agency_id)
VALUE ({ $chatId }, { $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 = ' " . $_SESSION [ '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 = { $_SESSION [ '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_telega.txt " , date ( 'd.m.y H:i:s' ) . ' chat_id ' . $chatId . ' id:' . $event_id . " " . json_encode ( $errors , JSON_UNESCAPED_UNICODE ) . " \n " , FILE_APPEND );
return array ( 'result' => 'error' );
}
return $result ;
}
//Отправка сообщений
/* public function send ( $text , $chatId , $event_id = null , $keyboardArr = []){
require_once $_SERVER [ 'DOCUMENT_ROOT' ] . " /telegramm/vendor/autoload.php " ;
$bot = new \TelegramBot\Api\Client ( $this -> TOKEN );
if ( $text != '' && $chatId > 0 ) {
try {
if ( ! empty ( $keyboardArr ))
{
$keyboard = new \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup ( $keyboardArr );
$bot -> sendMessage ( $chatId , $text , 'html' , false , null , $keyboard );
}
else
$bot -> sendMessage ( $chatId , $text , 'html' );
} catch ( Exception $e ) {
//echo 'Выброшено исключение телеграм: '. $e->getMessage(). "\n";
file_put_contents ( $_SERVER [ 'DOCUMENT_ROOT' ] . " /telegramm_error.log " , date ( 'd.m.y H:i:s' ) . ' ' . $chatId . ' ' . $e -> getMessage () . " \n " , FILE_APPEND );
}
}
$bot -> run ();
} */
//отправка сообщений cUrl
public function send_old ( $textChat , $chatId , $event_id = null , $keyboardArr = []){
$token = $this -> TOKEN ; // Замените на ваш токен
$chat_id = $chatId ; // Замените на ID чата
$text = $textChat ; // Текст сообщения
$getQuery = [
'chat_id' => $chat_id ,
'text' => $text ,
'parse_mode' => 'HTML' , // Или 'MarkdownV2', если нужно форматирование
];
if ( ! empty ( $keyboardArr )){
$getQuery [ 'reply_markup' ] = json_encode ( array (
'inline_keyboard' => $keyboardArr ,
), JSON_UNESCAPED_UNICODE
);
}
// Формируем URL с GET-параметрами
$url = " https://api.telegram.org/bot { $token } /sendMessage " ;
// Инициализация cURL
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL , $url ); // Устанавливаем URL
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 ); // Возвращать результат в виде строки
// Если отправляем через POST (часто предпочтительнее для больших данных или JSON):
curl_setopt ( $ch , CURLOPT_POST , 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , json_encode ( $getQuery , JSON_UNESCAPED_UNICODE ));
curl_setopt ( $ch , CURLOPT_HTTPHEADER , array ( 'Content-Type: application/json' ));
//curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
// Выполнение запроса
$result = curl_exec ( $ch );
// Проверка на ошибки
if ( curl_errno ( $ch )) {
// echo 'Ошибка cURL: ' . curl_error($ch);
file_put_contents ( $_SERVER [ 'DOCUMENT_ROOT' ] . " /telegramm_error.log " , date ( 'd.m.y H:i:s' ) . ' ' . $chatId . ' ' . curl_error ( $ch ) . ' ' . json_encode ( $getQuery , JSON_UNESCAPED_UNICODE ) . " \n " , FILE_APPEND );
} else {
// Обработка ответа
$response = json_decode ( $result );
if ( $response -> ok ) {
/* echo "Сообщение отправлено успешно!";*/
//file_put_contents($_SERVER['DOCUMENT_ROOT']."/telegramm_mes_chat.txt", date('d.m.y H:i:s').' '.$chatId.' '.json_encode($getQuery, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);
} else {
//echo "Ошибка отправки: " . $response->description;
file_put_contents ( $_SERVER [ 'DOCUMENT_ROOT' ] . " /telegramm_error.log " , date ( 'd.m.y H:i:s' ) . ' ' . $chatId . ' ' . $response -> description . ' ' . json_encode ( $getQuery , JSON_UNESCAPED_UNICODE ) . " \n " , FILE_APPEND );
}
}
// Закрытие сессии cURL
curl_close ( $ch );
}
//отправка сообщений cUrl
public function send ( $textChat , $chatId , $event_id = null , $keyboardArr = []){
$chat_id = $chatId ;
$text = $textChat ;
$getQuery = [
'chat_id' => $chat_id ,
'text' => $text ,
'keyboardArr' => $keyboardArr
];
if ( ! empty ( $keyboardArr )){
$getQuery [ 'reply_markup' ] = json_encode ( array (
'inline_keyboard' => $keyboardArr ,
), JSON_UNESCAPED_UNICODE
);
}
// Формируем URL с GET-параметрами
$url = " https://tgbsrv.joywork.ru/send_message.php " ;
// Инициализация cURL
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL , $url ); // Устанавливаем URL
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 ); // Возвращать результат в виде строки
// Если отправляем через POST (часто предпочтительнее для больших данных или JSON):
curl_setopt ( $ch , CURLOPT_POST , 1 );
curl_setopt ( $ch , CURLOPT_POSTFIELDS , json_encode ( $getQuery , JSON_UNESCAPED_UNICODE ));
curl_setopt ( $ch , CURLOPT_HTTPHEADER , array ( 'Content-Type: application/json' ));
//curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
// Выполнение запроса
$result = curl_exec ( $ch );
//var_dump($result);
$response = array ();
// Проверка на ошибки
if ( curl_errno ( $ch )) {
// echo 'Ошибка cURL: ' . curl_error($ch);
file_put_contents ( $_SERVER [ 'DOCUMENT_ROOT' ] . " /telegramm_error.log " , date ( 'd.m.y H:i:s' ) . ' ' . $chatId . ' ' . curl_error ( $ch ) . ' ' . json_encode ( $getQuery , JSON_UNESCAPED_UNICODE ) . " \n " , FILE_APPEND );
} else {
// Обработка ответа
$response = json_decode ( $result , true );
if ( $response [ 'ok' ]) {
/* echo "Сообщение отправлено успешно!";*/
//file_put_contents($_SERVER['DOCUMENT_ROOT']."/telegramm_mes_chat.txt", date('d.m.y H:i:s').' '.$chatId.' '.json_encode($getQuery, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);
} else {
//echo "Ошибка отправки: " . $response->description;
file_put_contents ( $_SERVER [ 'DOCUMENT_ROOT' ] . " /telegramm_error.log " , date ( 'd.m.y H:i:s' ) . ' ' . $chatId . ' ' . $response [ 'description' ] . ' ' . json_encode ( $getQuery , JSON_UNESCAPED_UNICODE ) . " \n " , FILE_APPEND );
}
}
// Закрытие сессии cURL
curl_close ( $ch );
return $response ;
}
}