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

793 lines
36 KiB
PHP
Raw 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 SourcesConnection {
private $db = null;
private $agency_id = 0;
private $user_id = 0;
private $users = array();
private $limit = 20;
private $page = 1;
private $allPages = 0;
public function __construct($agency_id, $db = null){
if($db){
$this->db = $db;
} else {
$pdo = new MysqlPdo(hst, ndb, user, pass);
$sql = "SET NAMES 'utf8'";
$pdo->query($sql);
$this->db = $pdo;
}
$this->set_agency_id($agency_id);
}
public function set_user_id($user_id){
$this->user_id = $user_id;
}
public function set_agency_id($agency_id){
$this->agency_id = $agency_id;
}
public function set_page($page){
$this->page = $page;
}
public function getAllUserAgency($all = true, $user_id = null){
$usersIds = array();
if($this->agency_id > 0){
$agency_id = (int)$this->agency_id;
if($user_id > 0) $agency_id = $user_id;
$sql_u = "SELECT * FROM users WHERE id in (select id from users where id=$agency_id or id_manager=$agency_id or id_manager in
(select id from users where id_manager=$agency_id or id_manager in
(select id from users where id_manager=$agency_id)))";
if($all === false){
$sql_u .= ' AND blocked = 0';
}
$q_u = $this->db->query($sql_u);
while($r_u = $this->db->fetch_assoc($q_u)){
$usersIds[] = (int)$r_u['id'];
$this->users[$r_u['id']] = $r_u;
}
if($all){
$sql_u = "SELECT * FROM users_delete WHERE user_id in (select user_id from users_delete where user_id=$agency_id or id_manager=$agency_id or id_manager in
(select user_id from users_delete where id_manager=$agency_id or id_manager in
(select user_id from users_delete where id_manager=$agency_id)))";
$q_u = $this->db->query($sql_u);
while($r_u = $this->db->fetch_assoc($q_u)){
$usersIds[] = (int)$r_u['user_id'];
$this->users[$r_u['id']] = $r_u;
}
}
}
return $usersIds;
}
/**
*
*/
public function get_sources_connection($filter){
$result = array();
$result['total'] = 0;
if($this->agency_id > 0){
$limitSql = "";
$where = '';
if(isset($filter->type) && !empty($filter->type)){
$where .= " AND asd.type in (".implode(',', $filter->type).")";
}
if(isset($filter->name) && !empty($filter->name)){
$name = trim($filter->name);
$where .= " AND (aso.source like '%{$name}%' || asd.tag like '%{$name}%' || asd.domain like '%{$name}%')";
}
$sql_total = "SELECT COUNT(*) as total FROM advertising_sources_domain as asd
LEFT JOIN advertising_sources as aso ON asd.adv_id=aso.id
WHERE agency_id = {$this->agency_id} {$where}";
$q_total = $this->db->query($sql_total);
$r_total = $this->db->fetch_row($q_total);
if($r_total[0] > 0) $result['total'] = (int)$r_total[0];
if($this->page > 0){
$limitSql = ' limit '.($this->page-1)*$this->limit.', '.$this->limit;
}
$sources_ids = [];
$activites = [];
$sql = "SELECT asd.id, type, domain, tag, asd.adv_id, aso.source, asw.who_work FROM advertising_sources_domain as asd
LEFT JOIN advertising_sources as aso ON asd.adv_id=aso.id
LEFT JOIN advertising_sources_who_work as asw ON asw.adv_id=aso.id
WHERE agency_id = {$this->agency_id} {$where} ORDER BY id DESC {$limitSql}";
// echo $sql;
$q = $this->db->query($sql);
while($r = $this->db->fetch_assoc($q)){
$sources_ids[] = $r['adv_id'];
$type_name = '';
switch ($r['type']){
case 0: {
$type_name = $r['tag'].' / GCK или KnowHow';
break;
}
case 1: {
$type_name = $r['domain'].' / Pixel';
break;
}
case 2: {
$type_name = $r['domain'].' / Creatium';
break;
}
case 3: {
$type_name = $r['domain'].' / Creatium2';
break;
}
case 4: {
$type_name = $r['domain'].' / Leadback';
break;
}
case 5: {
$type_name = $r['domain'].' / Marqviz';
break;
}
}
$r['type_name'] = $type_name;
$r['tags'] = [];
$r['user'] = '';
$r['name_funnel'] = null;
$r['name_funnel_req'] = null;
$r['funnel_id'] = null;
$r['funnel_id_req'] = null;
$sources[] = $r;
}
if(!empty($sources_ids)){
$sources_ids = array_unique($sources_ids);
$sql_activites = "SELECT asa.source_id, a.name, asa.activities_id FROM `advertising_sources_activities` as asa LEFT JOIN activities AS a ON asa.activities_id = a.id WHERE source_id in (".implode(",", $sources_ids).") AND agency_id = {$this->agency_id}";
//echo $sql_activites;
$q_activites = $this->db->query($sql_activites);
while($r_activites = $this->db->fetch_assoc($q_activites)){
if(!isset($activites[$r_activites['source_id']])) $activites[$r_activites['source_id']] = [];
$activites[$r_activites['source_id']][] = $r_activites;
}
$usersIds = $this->getAllUserAgency();
$funnels = array();
$sql_funnels = "SELECT *, (SELECT name FROM funnel as f WHERE asf.funnel_id = f.id) as name_funnel, (SELECT name FROM funnel as f WHERE asf.funnel_id_req = f.id) as name_funnel_req FROM advertising_sources_funnel as asf WHERE source_id in (".implode(",", $sources_ids).")";
$q_funnels = $this->db->query($sql_funnels);
while($r_funnel = $this->db->fetch_assoc($q_funnels)){
$funnels[$r_funnel['source_id']] = array('name_funnel'=>$r_funnel['name_funnel'], 'name_funnel_req'=>$r_funnel['name_funnel_req'], 'funnel_id'=>$r_funnel['funnel_id'], 'funnel_id_req'=>$r_funnel['funnel_id_req']);
}
}
if(!empty($sources)){
foreach($sources as $key => $source){
if(isset($activites[$source['adv_id']])){
$sources[$key]['tags'] = $activites[$source['adv_id']];
}
if($source['who_work'] > 0 && isset($this->users[$source['who_work']])){
$user = $this->users[$source['who_work']];
$sources[$key]['user'] = trim($user['last_name'] . ' ' . $user['first_name'] . ' ' . $user['middle_name']);
} else {
$sources[$key]['user'] = "Общие";
}
if(isset($funnels[$source['adv_id']])){
if($funnels[$source['adv_id']]['funnel_id'] > 0){
$sources[$key]['name_funnel'] = $funnels[$source['adv_id']]['name_funnel'];
$sources[$key]['funnel_id'] = $funnels[$source['adv_id']]['funnel_id'];
}
if($funnels[$source['adv_id']]['funnel_id_req'] > 0){
$sources[$key]['name_funnel_req'] = $funnels[$source['adv_id']]['name_funnel_req'];
$sources[$key]['funnel_id_req'] = $funnels[$source['adv_id']]['funnel_id_req'];
}
}
}
}
}
$result['allPages'] = ceil($result['total']/$this->limit);
$result['list'] = isset($sources) ? $sources : [];
return $result;
}
/**
* Список источников агентства
*/
public function get_all_sources(){
$sources = array();
if($this->agency_id > 0){
$usersIds = $this->getAllUserAgency();
$sql_source = "SELECT * FROM `advertising_sources` WHERE (user_id in (".implode(',', $usersIds).") or manager_id in (".implode(',', $usersIds)."))";
$q_source = $this->db->query($sql_source);
while($r_source = $this->db->fetch_assoc($q_source)){
$sources[] = array('code'=> $r_source['id'], 'name'=>$r_source['source']);
}
}
return $sources;
}
/**
* Теги
*/
public function get_activites(){
$result = array();
if($this->agency_id > 0){
$agencyId = (int)$this->agency_id;
$users = $this->getAllUserAgency();
$sql_activites = "SELECT * FROM `activities` WHERE (user_id in (".implode(',', $users).") or manager_id in (".implode(',', $users)."))";
$q_aclivites = $this->db->query($sql_activites);
while($r_activites = $this->db->fetch_assoc($q_aclivites)){
$result[] = array('code'=>$r_activites['id'], 'name'=>$r_activites['name']);
}
}
return $result;
}
/**
* Ответственные список
*/
public function get_users_list(){
$result = array();
if($this->agency_id > 0 && $this->user_id > 0){
$depClass = new Department;
$departments = $depClass->getDepartments();
$usersIds = $this->getAllUserAgency(false, $this->user_id);
$users = $this->users;
$result[] = array('code'=> $this->user_id, 'name'=> 'Я', 'type'=>'label', 'agency_id'=>$this->agency_id);
if($this->user_id != $this->agency_id){
$fio = trim($users[$this->agency_id]['last_name'] . ' ' . $users[$this->agency_id]['first_name'] . ' ' . $users[$this->agency_id]['middle_name'])." (Руководитель агентства)";
$result[] = array('code'=> $this->agency_id, 'name'=> 'Я', 'type'=>'label', 'agency_id'=>$this->agency_id);
}
$otdels = array();
$agents = array();
foreach($users as $user){
if($user['id'] != $this->user_id){
if($user['id_manager'] == $this->agency_id && $user['manager'] == 1){
$fio = "Отдел ".trim($user['last_name'] . ' ' . $user['first_name'] . ' ' . $user['middle_name']);
if ($user['role_id'] > 0 && isset($departments[$user['role_id']])) {
$fio = $departments[$user['role_id']]['dep_name'];
}
$otdels[] = array('code'=> 'otdel_'.$user['id'], 'name'=> $fio, 'type'=>'group', 'agency_id'=>$this->agency_id, 'id'=>$user['id']);
} else if ($user['id_manager'] == $this->agency_id && $user['manager'] == 0){
$fio = trim($user['last_name'] . ' ' . $user['first_name'] . ' ' . $user['middle_name'])." (Агент)";
$agents[] = array('code'=> $user['id'], 'name'=> $fio, 'type'=>'label', 'agency_id'=>$this->agency_id);
}
}
}
foreach($otdels as $otdel){
$result[] = $otdel;
$fio = trim($users[$otdel['id']]['last_name'] . ' ' . $users[$otdel['id']]['first_name'] . ' ' . $users[$otdel['id']]['middle_name'])." (Менеджер)";;
$result[] = array('code'=> $otdel['id'], 'name'=> $fio, 'type'=>'label', 'agency_id'=>$this->agency_id);
foreach($users as $user){
if($user['id_manager'] == $otdel['id']){
if($user['manager'] == 1){
$fio = trim($user['last_name'] . ' ' . $user['first_name'] . ' ' . $user['middle_name']);
$result[] = array('code'=> $otdel['id'], 'name'=> $fio, 'type'=>'label', 'agency_id'=>$this->agency_id);
foreach($users as $user2){
if($user2['id_manager'] == $user['id']){
$fio2 = trim($user2['last_name'] . ' ' . $user2['first_name'] . ' ' . $user2['middle_name'])." (Агент)";
$result[] = array('code'=> $user2['id'], 'name'=> $fio2, 'type'=>'label', 'agency_id'=>$this->agency_id);
}
}
} else {
$fio = trim($user['last_name'] . ' ' . $user['first_name'] . ' ' . $user['middle_name'])." (Агент)";
$result[] = array('code'=> $user['id'], 'name'=> $fio, 'type'=>'label', 'agency_id'=>$this->agency_id);
}
}
}
}
if(!empty($agents)){
$result[] = array('code'=> 'agency'.$this->agency_id, 'name'=> "Агенты", 'type'=>'group', 'agency_id'=>$this->agency_id);
foreach($agents as $agent){
$result[] = $agent;
}
}
}
return $result;
}
/**
* Для получения связи по источнику
*
* @param int $source_id
* @return array
*/
public function get_data_source($source_id){
$result = array();
if($this->agency_id > 0){
$activites = [];
$sql_act = "SELECT * FROM advertising_sources_activities WHERE source_id = {$source_id}";
$q_act = $this->db->query($sql_act);
while($r_act = $this->db->fetch_assoc($q_act)){
$activites[] = (int)$r_act['activities_id'];
}
$result['activites'] = $activites;
$who_work = null;
$sql_who_work = "SELECT * FROM advertising_sources_who_work WHERE adv_id = {$source_id}";
$q_who_work = $this->db->query($sql_who_work);
if($this->db->num_rows($q_who_work) > 0){
$who_work = (int)$this->db->fetch_assoc($q_who_work)['who_work'];
}
$result['who_work'] = $who_work;
$funnel_id = null;
$funnel_id_req = null;
$sql_funnels = "SELECT * FROM advertising_sources_funnel WHERE source_id = {$source_id}";
$q_funnels = $this->db->query($sql_funnels);
if($this->db->num_rows($q_funnels) > 0){
$r_funnels = $this->db->fetch_assoc($q_funnels);
if($r_funnels['funnel_id'] > 0) $funnel_id = (int)$r_funnels['funnel_id'];
if($r_funnels['funnel_id_req'] > 0) $funnel_id_req = (int)$r_funnels['funnel_id_req'];
}
$result['funnel_id'] = $funnel_id;
$result['funnel_id_req'] = $funnel_id_req;
}
return $result;
}
public function add_tags($item){
$text = "";
$tags = [];
$tags_old = [];
if($item->source > 0){
$sql = "SELECT * FROM advertising_sources_activities WHERE source_id = {$item->source} AND agency_id = {$this->agency_id}";
$q = $this->db->query($sql);
while($r = $this->db->fetch_assoc($q)){
$tags_old[] = (int)$r['activities_id'];
}
foreach($item->tags as $tag){
$tags[] = (int)$tag;
}
if($tags != $tags_old){
$tags_arr = array_merge($tags, $tags_old);
$tags_name = array();
$text = "Изменена связь с тегами<br>";
$new_tags = "";
$old_tags = "";
if(!empty($tags_arr)){
$sql_tag_name = "SELECT * FROM activities WHERE id in (".implode(',', $tags_arr).")";
$q_tag_name = $this->db->query($sql_tag_name);
while($r_tag_name = $this->db->fetch_assoc($q_tag_name)){
$tags_name[$r_tag_name['id']] = $r_tag_name['name'];
}
}
$this->db->query("DELETE FROM advertising_sources_activities WHERE source_id = {$item->source} AND agency_id = {$this->agency_id}");
foreach($tags as $tag){
$sql_in = "INSERT INTO advertising_sources_activities (activities_id, source_id, agency_id) VALUES ({$tag}, {$item->source}, {$this->agency_id})";
$this->db->query($sql_in);
if($new_tags != ""){
$new_tags .= ", ";
}
$new_tags .= $tags_name[$tag];
}
if(!empty($tags_old)){
foreach($tags_old as $tag){
if($old_tags != "") $old_tags .= ", ";
$old_tags .= $tags_name[$tag];
}
}
$text .= "Старое значение: ".$old_tags."<br>";
$text .= "Новое значение: ".$new_tags;
}
}
return $text;
}
public function add_who_work($item){
$text = "";
if($item->source > 0){
$who_work = (int)$item->who_work;
$user_ids = [];
$user_ids[] = $who_work;
$sql = "SELECT * FROM advertising_sources_who_work WHERE adv_id = {$item->source}";
$q = $this->db->query($sql);
if($this->db->num_rows($q) == 0 && (int)$item->who_work > 0){
$sql_in = "INSERT INTO advertising_sources_who_work (adv_id, who_work) VALUES ({$item->source}, {$item->who_work})";
$this->db->query($sql_in);
$sql_user = "SELECT * FROM users WHERE id = {$who_work}";
$q_user = $this->db->query($sql_user);
$user = $this->db->fetch_assoc($q_user);
$fio = trim($user['last_name'] . ' ' . $user['first_name'] . ' ' . $user['middle_name']);
$text = "Добавлена связь с сотрудником ".$fio;
} else {
$r = $this->db->fetch_assoc($q);
if($r['who_work'] != $who_work){
$user_ids[] = (int)$r['who_work'];
$text .= "Изменена связь с сотрудником";
$sql_user = "SELECT * FROM users WHERE id in (".implode(',', $user_ids).")";
$q_user = $this->db->query($sql_user);
while($r_user = $this->db->fetch_assoc($q_user)){
if($r_user['id'] == $who_work){
$text .= "<br>Новое значение: ".trim($r_user['last_name'] . ' ' . $r_user['first_name'] . ' ' . $r_user['middle_name']);
} else if($r_user['id'] == $r['who_work']){
$text .= "<br>Старое значение: ".trim($r_user['last_name'] . ' ' . $r_user['first_name'] . ' ' . $r_user['middle_name']);
}
}
if($who_work > 0)
$this->db->query("UPDATE advertising_sources_who_work SET who_work = {$who_work} WHERE id = {$r['id']}");
else
$this->db->query("DELETE FROM advertising_sources_who_work WHERE id = {$r['id']}");
}
}
}
return $text;
}
public function add_funnel($item){
$text = "";
if($item->source > 0){
if(empty($item->funnel_id) && empty($item->funnel_id_req)) {
/** */
} else {
$sql = "SELECT * FROM advertising_sources_funnel WHERE source_id = {$item->source}";
$q = $this->db->query($sql);
$funnel_id = (int)$item->funnel_id;
$funnel_id_req = (int)$item->funnel_id_req;
if($this->db->num_rows($q) == 0){
$sql_in = "INSERT INTO advertising_sources_funnel (source_id, funnel_id, funnel_id_req) VALUES ({$item->source}, {$funnel_id}, {$funnel_id_req})";
$this->db->query($sql_in);
$text = "Добавлена связь с воронкой: ";
$funnels = array();
if($funnel_id > 0 || $funnel_id_req > 0){
$sql_funnel = "SELECT * FROM funnnel WHERE id in ($funnel_id, $funnel_id_req)";
$q_funnel = $this->db->query($sql_funnel);
while($r_funnel = $this->db->fetch_assoc($q_funnel)){
$funnels[$r_funnel['id']] = $r_funnel['name'];
}
/*if($funnel_id > 0){
$text .= "<br>".$funnels[$funnel_id]. " для клиентов";
}*/
if($funnel_id_req > 0){
$text .= "<br>".$funnels[$funnel_id_req]. " для заявок";
}
}
} else {
$r = $this->db->fetch_assoc($q);
if((int)$r['funnel_id'] != $funnel_id || (int)$r['funnel_id_req'] != $funnel_id_req){
$funnels = array();
$sql_funnel = "SELECT * FROM funnnel WHERE id in ($funnel_id, $funnel_id_req, $r[funnel_id], $r[funnel_id_req])";
$q_funnel = $this->db->query($sql_funnel);
while($r_funnel = $this->db->fetch_assoc($q_funnel)){
$funnels[$r_funnel['id']] = $r_funnel['neme'];
}
$sql_up = "UPDATE advertising_sources_funnel SET funnel_id={$funnel_id}, funnel_id_req={$funnel_id_req} WHERE id = {$r['id']}";
$this->db->query($sql_up);
$text = "Изменена связь с воронкой: ";
/* if((int)$r['funnel_id'] != $funnel_id){
$text .= "<br>Старое значение для клиентов: ";
$text .= "<br>".$funnels[$r['funnel_id']];
$text .= "<br>Новое значение для клиентов: ";
$text .= "<br>".$funnels[$funnel_id];
}*/
if((int)$r['funnel_id_req'] != $funnel_id_req){
$text .= "<br>Старое значение для заявок: ";
$text .= "<br>".$funnels[$r['funnel_id_req']];
$text .= "<br>Новое значение для заявок: ";
$text .= "<br>".$funnels[$funnel_id_req];
}
}
}
}
}
return $text;
}
public function save($item){
$errors = array();
$name_field = 'домена';
$result = array();
$event = "add";
if($this->agency_id > 0 && $this->user_id > 0){
$type = (int)$item->type;
$sql = "SELECT * FROM advertising_sources_domain WHERE adv_id = {$item->source} AND type = {$type} AND agency_id = {$this->agency_id}";
if(isset($item->id)){
$sql .= " AND id != {$item->id}";
}
//echo $sql;
$q = $this->db->query($sql);
if($this->db->num_rows($q) > 0){
$errors['source'] = "Для этого иточника уже настроена связь";
}
$field = 'domain';
if($item->type_source_conect == 'tag'){
$field = 'tag';
$name_field = 'тега';
}
$sql = "SELECT * FROM advertising_sources_domain WHERE $field = '{$item->name}' AND type = {$type} AND agency_id = {$this->agency_id}";
if(isset($item->id)){
$sql .= " AND id != {$item->id}";
}
//echo $sql;
$q = $this->db->query($sql);
if($this->db->num_rows($q) > 0){
$errors['name'] = "Для этого {$name_field} уже настроена связь";
}
if(empty($errors)){
if($item->id > 0){
$event = "update";
$desc = "";
$sqlUp = "SELECT * FROM advertising_sources_domain WHERE id = {$item->id}";
$qUp = $this->db->query($sqlUp);
$rUp = $this->db->fetch_assoc($qUp);
if($rUp['type'] == 0){
if($rUp['tag'] != $item->name){
$desc = "Изменен тег<br>";
$desc .= "Старое значение: ".$rUp['tag']."<br>";
$desc .= "Новое значение: ".$item->name."<br>";
}
if(!$this->db->query("UPDATE advertising_sources_domain SET tag = '{$item->name}' WHERE id={$item->id}")){
$errors[] = $this->db->error();
}
} else {
if($rUp['domain'] != $item->name){
$desc = "Изменен домен<br>";
$desc .= "Старое значение: ".$rUp['domain']."<br>";
$desc .= "Новое значение: ".$item->name."<br>";
}
if(!$this->db->query("UPDATE advertising_sources_domain SET domain = '{$item->name}' WHERE id={$item->id}")){
$errors[] = $this->db->error();
}
}
} else {
$desc = '';
$sqlIn = "INSERT INTO advertising_sources_domain ($field, adv_id, type, agency_id) VALUES ('{$item->name}', {$item->source}, {$type}, {$this->agency_id})";
if(!$this->db->query($sqlIn)){
$errors['sql'] = $this->db->error();
} else {
$desc .= "Добавлена связь для источника ID ".$item->source." ".$name_field." ". $item->name;
}
}
$text = $this->add_tags($item);
if(!empty($text)) {
if($desc != '') $desc .= "<br>";
$desc .= $text;
}
$text2 = $this->add_who_work($item);
if(!empty($text2)) {
if($desc != '') $desc .= "<br>";
$desc .= $text2;
}
$text3 = $this->add_funnel($item);
if(!empty($text3)) {
if($desc != '') $desc .= "<br>";
$desc .= $text3;
}
$sql_log = "INSERT INTO advertising_sources_connection_log(`user_id`, `agency_id`, `event`, `source_id`, `description`)
VALUES ({$this->user_id}, {$this->agency_id}, '{$event}', {$item->source}, '{$desc}')";
if(!$this->db->query($sql_log)){
$errors[] = $this->db->error();
}
}
}
if(!empty($errors)){
return array('result'=>'error', 'errors'=>$errors);
}
return array('result'=>'success');
}
public function delete_source_connect($delete_id){
$errors = array();
if($this->agency_id > 0 && $this->user_id > 0){
$sql = "SELECT asd.id, type, domain, tag, asd.adv_id, aso.source FROM advertising_sources_domain as asd
LEFT JOIN advertising_sources as aso ON asd.adv_id=aso.id WHERE asd.id = {$delete_id}";
$q = $this->db->query($sql);
$connect = $this->db->fetch_assoc($q);
if(!isset($connect['id'])){
$errors[] = "Связь не найдена";
} else {
$source_id = (int)$connect['adv_id'];
$desc = "Удалена связь для источника ID ".$source_id." ".$connect['source'];
$this->db->query("DELETE FROM advertising_sources_domain WHERE id = {$delete_id}");
//Сборка мусора
try{
$sql_d = "SELECT * FROM advertising_sources_domain WHERE adv_id = {$source_id}";
$q_d = $this->db->query($sql_d);
if($this->db->num_rows($q_d) == 0){
$sql_activites = "SELECT asa.id, asa.source_id, a.name FROM `advertising_sources_activities` as asa LEFT JOIN activities AS a ON asa.activities_id = a.id WHERE asa.source_id = {$source_id} AND asa.agency_id = {$this->agency_id}";
//echo $sql_activites;
$q_activites = $this->db->query($sql_activites);
if($this->db->num_rows($q_activites) > 0){
$act = array();
while($r_activites = $this->db->fetch_assoc($q_activites)){
$act[] = $r_activites['name'];
}
if(!empty($act)){
$desc .= "<br>Удалена привязка источника к тегам: ".implode(', ', $act);
}
}
if(!$this->db->query("DELETE FROM advertising_sources_activities WHERE source_id = {$source_id}")){
$errors[] = $this->db->error();
}
}
$sql_w = "SELECT * FROM advertising_sources_who_work WHERE adv_id = {$source_id}";
$q_w = $this->db->query($sql_w);
if($this->db->num_rows($q_w) > 0){
$r_w = $this->db->fetch_assoc($q_w);
$sql_u = "SELECT * FROM users WHERE id = {$r_w['id']}";
$q_u = $this->db->query($sql_u);
$user = $this->db->fetch_assoc($q_u);
$fio = '';
if($user['id'] > 0){
$fio = trim($user['last_name'] . ' ' . $user['first_name'] . ' ' . $user['middle_name']);
}
$desc .= "<br>Удалена привязка источника к сотруднику ".$fio;
if(!$this->db->query("DELETE FROM advertising_sources_who_work WHERE adv_id = {$source_id}")){
$errors[] = $this->db->error();
}
}
$sql_f = "SELECT *, (SELECT name FROM funnel as f WHERE asf.funnel_id = f.id) as name_funnel, (SELECT name FROM funnel as f WHERE asf.funnel_id_req = f.id) as name_funnel_req FROM advertising_sources_funnel as asf WHERE source_id={$source_id}";
$q_f = $this->db->query($sql_f);
if($this->db->num_rows($q_f) > 0){
$r_f = $this->db->fetch_assoc($q_f);
/* if(!empty($r_f['name_funnel'])){
$desc .= "<br>Удалена привязка источника к воронке клиента ".$r_f['name_funnel'];
}*/
if(!empty($r_f['name_funnel_req'])){
$desc .= "<br>Удалена привязка источника к воронке заявки ".$r_f['name_funnel_req'];
}
if(!$this->db->query("DELETE FROM advertising_sources_funnel WHERE id = {$r_f['id']}")){
$errors[] = $this->db->error();
}
}
} catch (Exception $e){
$errors[] = $e->getMessage();
}
$sql_log = "INSERT INTO advertising_sources_connection_log(`user_id`, `agency_id`, `event`, `source_id`, `description`)
VALUES ({$this->user_id}, {$this->agency_id}, 'delete', {$source_id}, '{$desc}')";
if(!$this->db->query($sql_log)){
$errors[] = $this->db->error();
}
}
}
if(!empty($errors)){
return array('result'=>'error', 'errors'=>$errors);
}
return array('result'=>'success');
}
public function get_logs_connection($filter){
$result = array();
$result['total'] = 0;
if($this->agency_id > 0){
$logs = array();
$usersIds = $this->getAllUserAgency();
$limitSql = "";
$where = '';
// var_dump($filter);
if(isset($filter->date_start) && !empty($filter->date_start)){
$date_start = strtotime(date('d.m.Y 00:00:00', strtotime($filter->date_start)));
$where .= " AND UNIX_TIMESTAMP(asl.created_at) >= '{$date_start}'";
}
if(isset($filter->date_end) && !empty($filter->date_end)){
$date_end = strtotime(date('d.m.Y 23:59:59', strtotime($filter->date_end)));
$where .= " AND UNIX_TIMESTAMP(asl.created_at) <= '{$date_end}'";
}
if(isset($filter->event) && !empty($filter->event)){
$where .= " AND asl.event in ('".implode('\',\'', $filter->event)."')";
}
if(isset($filter->users) && !empty($filter->users)){
$where .= " AND asl.user_id in (".implode(',', $filter->users).")";
}
$sql_total = "SELECT COUNT(*) as total FROM advertising_sources_connection_log as asl WHERE asl.agency_id = {$this->agency_id} {$where}";
$q_total = $this->db->query($sql_total);
$r_total = $this->db->fetch_row($q_total);
if($r_total[0] > 0) $result['total'] = (int)$r_total[0];
if($this->page > 0){
$limitSql = ' limit '.($this->page-1)*$this->limit.', '.$this->limit;
}
$sql = "SELECT asl.*, aso.source FROM advertising_sources_connection_log as asl
LEFT JOIN advertising_sources as aso ON asl.source_id=aso.id
WHERE asl.agency_id = {$this->agency_id} {$where} ORDER BY asl.id DESC {$limitSql}";
// echo $sql;
$q = $this->db->query($sql);
while($r = $this->db->fetch_assoc($q)){
$arrEvent = array('add'=>'Добавление', 'delete'=>'Удаление', 'update'=>'Изменение');
$r['user'] = '';
$r['create_at'] = date('d.m.y H:i', strtotime($r['created_at']));
$r['event_name'] = $arrEvent[$r['event']];
$r['description'] = trim(trim($r['description']), '<br>');
if(isset($this->users[$r['user_id']])){
$user = $this->users[$r['user_id']];
$r['user'] = trim($user['last_name'] . ' ' . $user['first_name'] . ' ' . $user['middle_name']);
}
$logs[] = $r;
}
}
$result['allPages'] = ceil($result['total']/$this->limit);
$result['list'] = isset($logs) ? $logs : [];
return $result;
}
}