query("SET NAMES 'utf8'"); $this->db = $pdo; } private function clearInputElement($el2) // очистка входящего элимента { $el = $el2; $el = strip_tags($el); // от тегов $el = htmlspecialchars($el); // от кавычек и прочего $el = str_replace("\n", "
", $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 = "«" . $cl_fio_disp . "»"; $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 = "«" . $cl_fio_disp . "»"; $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 = "«" . $cl_fio_disp . "»"; $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 = "«" . $cl_phone_disp." ".$cl_fio_disp . "»"; $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 = "«" . $cl_phone_disp." ".$cl_fio_disp . "»"; $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 = "«" . $cl_phone_disp." ".$cl_fio_disp . "»"; $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 = "«" . $r_obj['nazv'] . "»"; $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; } }