793 lines
36 KiB
PHP
793 lines
36 KiB
PHP
<?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;
|
||
}
|
||
|
||
} |