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

957 lines
45 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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

<?php
class 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})");
}
}
$sql = "UPDATE user_client_events SET user_id={$user_id} WHERE req_id={$field_val} and type != 'step' and type != 'file'";
$this->db->query($sql);
$sql = "UPDATE `events_clients` SET `read` = 1, date_update='".date('Y-m-d H:i:s')."' WHERE req_id = {$field_val} AND event IN ('transmitted', 'notadopted')";
$this->db->query($sql);
$sql = "INSERT INTO `events_clients` (user_id, req_id, from_id, event, `read`) VALUES ({$user_id}, {$field_val}, {$user_id}, 'accepted', '1')";
$this->db->query($sql);
//Передача объекта
$agency = new User;
$agency->get($user_id);
$sqlUser = "SELECT `first_name`, `last_name`, `middle_name`, `phone` FROM `users` where id=".$user_id;
$qUser = $this->db->query($sqlUser);
$rUser = $this->db->fetch_assoc($qUser);
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']);
if ($_SESSION['agency']) {
$sobstv = $sobstv . ", агентство " . $rUser['agency_name'];
} else {
if (isset($agency->agencyName)) {
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']) . ", агентство " . $agency->agencyName;
} else {
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']);
}
}
if($r_cl['object_id'] && ($r_cl['type_id'] == 2 || $r_cl['heir'] == 2)){
$sql_up = "UPDATE objects SET id_add_user = {$user_id}, phone='".$rUser['phone']."', sobstv='".$sobstv."' WHERE id = ".$r_cl['object_id'];
//echo $sql_up;
$this->db->query($sql_up);
$sql_sph = "UPDATE objects SET id_add_user = {$user_id} WHERE id = ".$r_cl['object_id'];
$db_sphinx->query($sql_sph);
}
}
}
} else {
$sql_no = "SELECT * FROM events_clients WHERE user_id={$user_id} AND req_id = {$field_val} AND event = 'notadopted'";
$q_no = $this->db->query($sql_no);
if($this->db->num_rows($q_no) > 0){
$cl_fio_disp = should_hide_contacts_for_user_id($user_id) ? mask_fio_if_contains_phone($r_cl['fio']) : $r_cl['fio'];
$text = "«<b>" . $cl_fio_disp . "</b>»";
$is_rejected = true;
} else {
$no_accept = true;
}
$sql = "UPDATE `events_clients` SET `read` = 1, date_update='".date('Y-m-d H:i:s')."' WHERE req_id = {$field_val} AND event IN ('transmitted', 'notadopted')";
$this->db->query($sql);
}
} else if ($tr == 1){
if(!empty($r_cl['doers'])){
$confirm = 1;
$doers = json_decode(html_entity_decode($r_cl['doers']), true);
if($doers[$user_id] == 1){
$is_confirm = true;
} else {
$doers[$user_id] = 1;
foreach($doers as $doer){
if($doer == 0) $confirm = 0;
}
$sql_up = "UPDATE requisitions SET doers='".$this->clearInputElement(json_encode($doers))."', doers_confirm=$confirm WHERE id={$field_val}";
$this->db->query($sql_up);
foreach($doers as $key => $agent) {
$sql_up_d = "UPDATE requisition_doers SET confirm = {$agent} WHERE requisition_id ={$field_val} and user_id = {$key}";
$this->db->query($sql_up_d);
}
$sql_up_doer = "UPDATE doers_emp_client SET confirm=1 WHERE req_id ={$field_val} and who_work = $user_id and doer_id = $user_id";
$this->db->query($sql_up_doer);
$sql_2 = "UPDATE `events_clients` SET `read` = 1, date_update='".date('Y-m-d H:i:s')."' WHERE req_id = {$field_val} AND event IN ('transmitted_parallel', 'notadopted_doer') AND from_id = ".$user_id;
$this->db->query($sql_2);
$sql = "INSERT INTO `events_clients` (user_id, req_id, from_id, event, `read`) VALUES ('".$user_id."', '{$field_val}', '".$user_id."', 'accepted_doer', '1')";
$this->db->query($sql);
}
}
}
break;
}
case 'client': {
$tr = 0;
if($r_ev['event'] == 'transmitted_parallel') $tr = 1;
$sql_client = "SELECT objects, funnel_id, who_work, confirm, fio, phone, doers FROM clients WHERE id={$field_val}";
$q_client = $this->db->query($sql_client);
$r_client = $this->db->fetch_assoc($q_client);
if($tr == 0) {
if($r_client['who_work'] == $user_id){
if($r_client['confirm'] == 1){
$sql_no = "SELECT * FROM events_clients WHERE client_id = {$field_val} AND `read`= 0 AND user_id={$user_id} AND event = 'notadopted'";
$q_no = $this->db->query($sql_no);
if($this->db->num_rows($q_no) > 0){
$cl_phone_disp = should_hide_contacts_for_user_id($user_id) ? mask_client_phone($r_client['phone']) : $r_client['phone'];
$cl_fio_disp = should_hide_contacts_for_user_id($user_id) ? mask_fio_if_contains_phone($r_client['fio']) : $r_client['fio'];
$text = "«<b>" . $cl_phone_disp." ".$cl_fio_disp . "</b>»";
$is_rejected = true;
} else {
$is_confirm = true;
}
} else {
$sql_no = "SELECT * FROM events_clients WHERE client_id = {$field_val} AND `read`= 0 AND user_id={$user_id} AND event = 'notadopted'";
$q_no = $this->db->query($sql_no);
if($this->db->num_rows($q_no) > 0){
$cl_phone_disp = should_hide_contacts_for_user_id($user_id) ? mask_client_phone($r_client['phone']) : $r_client['phone'];
$cl_fio_disp = should_hide_contacts_for_user_id($user_id) ? mask_fio_if_contains_phone($r_client['fio']) : $r_client['fio'];
$text = "«<b>" . $cl_phone_disp." ".$cl_fio_disp . "</b>»";
$is_rejected = true;
} else {
$sql = "UPDATE clients SET confirm=1, deleted=0, who_work={$user_id} WHERE id={$field_val}";
$this->db->query($sql);
//Смена срока закрытия этапа
$sql_step = "SELECT * FROM clients_funnel_step WHERE client_id = {$field_val}";
$q_step = $this->db->query($sql_step);
if($this->db->num_rows($q_step) > 0){
$sql_op_step = "UPDATE clients_funnel_step SET date_update = NOW() WHERE client_id = {$field_val}";
$this->db->query($sql_op_step);
} else {
if($r_client['funnel_id'] > 0){
$this->db->query("INSERT INTO clients_funnel_step (client_id) VALUES ({$field_val})");
}
}
$sql="UPDATE user_client_events SET user_id={$user_id} WHERE client_id={$field_val} and type != 'step' and type != 'file'";
$this->db->query($sql);
$sql = "UPDATE `events_clients` SET `read` = 1, date_update='".date('Y-m-d H:i:s')."' WHERE client_id = {$field_val} AND event IN ('transmitted', 'notadopted')";
$this->db->query($sql);
$sql = "INSERT INTO `events_clients` (user_id, client_id, from_id, event, `read`) VALUES ({$user_id}, {$field_val}, {$user_id}, 'accepted', '1')";
$this->db->query($sql);
//Передача объекта
$agency = new User;
$agency->get($user_id);
$sqlUser = "SELECT `first_name`, `last_name`, `middle_name`, `phone` FROM `users` where id=".$user_id;
$qUser = $this->db->query($sqlUser);
$rUser = $this->db->fetch_assoc($qUser);
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']);
if ($_SESSION['agency']) {
$sobstv = $sobstv . ", агентство " . $rUser['agency_name'];
} else {
if (isset($agency->agencyName)) {
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']) . ", агентство " . $agency->agencyName;
} else {
$sobstv = trim($rUser['last_name'] . ' ' . $rUser['first_name'] . ' ' . $rUser['middle_name']);
}
}
$sql_confirm_obj = "SELECT * FROM client_confirm_objects WHERE client_id = {$field_val} AND status = 0";
$q_confirm_obj = $this->db->query($sql_confirm_obj);
$is_confirm_obj = false;
if($this->db->num_rows($q_confirm_obj) > 0){
$r_confirm_obj = $this->db->fetch_assoc($q_confirm_obj);
$is_confirm_obj = (bool)$r_confirm_obj['confirm_objects'];
}
if($is_confirm_obj){
$sql_client = "SELECT * FROM `client_objects` WHERE client_id = {$field_val}";
$q_client = $this->db->query($sql_client);
while($object = $this->db->fetch_assoc($q_client)){
$sql_up = "UPDATE objects SET id_add_user = '".$_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;
}
}