790 lines
33 KiB
PHP
790 lines
33 KiB
PHP
<?php
|
||
require_once($_SERVER['DOCUMENT_ROOT']."/ajax/vue_php_function.php");
|
||
/*header("Access-Control-Allow-Origin: *");
|
||
header('Access-Control-Allow-Credentials: true');
|
||
header('Access-Control-Max-Age: 0');
|
||
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS');
|
||
header('Access-Control-Allow-Headers: X-Debug, X-Requested-With, Content-Type, Accept, Origin, Authorization, Access-Token');
|
||
header('Access-Control-Expose-Headers: Authorization, Access-Token');
|
||
header('Content-Type: application/json');*/
|
||
/*ini_set('error_reporting', E_ALL);
|
||
ini_set('display_errors', 1);
|
||
ini_set('display_startup_errors', 1); */
|
||
function get_users($agency_id, $type){
|
||
$users = array();
|
||
$sql = "SELECT * FROM `mango_call_users` WHERE agency_id = ".$agency_id;
|
||
$q = mysql_query($sql);
|
||
while($r = mysql_fetch_assoc($q)){
|
||
$temp_user = array();
|
||
$temp_user['fio'] = $r['fio'];
|
||
|
||
$temp_user['groups'] = '';
|
||
if(!empty($r['groups'])){
|
||
$groups = json_decode($r['groups']);
|
||
foreach ($groups as $group) {
|
||
$sql_g = "SELECT * FROM mango_call_groups WHERE group_id = ".$group;
|
||
$q_g = mysql_query($sql_g);
|
||
if(mysql_num_rows($q_g) > 0){
|
||
while($r_g = mysql_fetch_assoc($q_g)){
|
||
if($temp_user['groups'] != '') $temp_user['groups'] .= ', ';
|
||
$temp_user['groups'] .= $r_g['name'];
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
$number_sip = $r['number_sip'];
|
||
//$users[$r['number_sip']] = $temp_user;
|
||
if($type == 'beeline'){
|
||
if(strpos($r['number_sip'],'@') !== false){
|
||
$part_user = explode('@', $r['number_sip']);
|
||
if(isset($part_user[0])){
|
||
$number_sip = $part_user[0];
|
||
}
|
||
|
||
}
|
||
}
|
||
$users[$number_sip] = $temp_user;
|
||
}
|
||
return $users;
|
||
}
|
||
|
||
|
||
function get_disconnect_reason(){
|
||
$reason = array();
|
||
$sql = "SELECT * FROM mango_result_codes";
|
||
$q = mysql_query($sql);
|
||
while($r = mysql_fetch_assoc($q)){
|
||
$reason[$r['code']] = $r['value'];
|
||
}
|
||
return $reason;
|
||
}
|
||
|
||
|
||
function int_to_time($second) {
|
||
$total_seconds = $second;
|
||
$seconds = intval($total_seconds%60);
|
||
if(strlen($seconds) == 1) $seconds = "0".$seconds;
|
||
$seconds .= ' сек.';
|
||
|
||
$total_minutes = intval($total_seconds/60);
|
||
$minutes = $total_minutes%60;
|
||
if($minutes == 0) {
|
||
$minutes = '';
|
||
} else {
|
||
if(strlen($minutes) == 1) $minutes = "0".$minutes;
|
||
$minutes .= ' м.';
|
||
}
|
||
$hours = intval($total_minutes/60);
|
||
|
||
if($hours == 0) {
|
||
$hours = '';
|
||
} else {
|
||
if(strlen($hours) == 1) $hours = "0".$hours;
|
||
$hours .= ' ч.';
|
||
}
|
||
|
||
return $hours." ".$minutes." ".$seconds;
|
||
}
|
||
|
||
function get_users_id($user_id = null){
|
||
$depClass = new Department();
|
||
if(is_null($user_id)){
|
||
$searchUserId = $_SESSION['id'];
|
||
} else {
|
||
$searchUserId = $user_id;
|
||
}
|
||
/*if($_SESSION['id'] == 5238){
|
||
$searchUserId = 7384;
|
||
}*/
|
||
$adminDep = false;
|
||
|
||
|
||
if ($_SESSION['agency'] || $_SESSION['manager'] || $_SESSION['users_admin']) {
|
||
$agentIds = [];
|
||
if ($_SESSION['users_admin'] || $_SESSION['id'] == 10838 || $_SESSION['id'] == 11403
|
||
|| $_SESSION['id'] == 11738 || $_SESSION['id'] == 11703 || $_SESSION['id'] == 11799 || $_SESSION['id'] == 11709
|
||
|| $_SESSION['id'] == 11804 || $_SESSION['id'] == 11697 || $_SESSION['id'] == 11895 || $_SESSION['id'] == 11781
|
||
|| $_SESSION['id'] == 12272 || $_SESSION['id'] == 11842 || $_SESSION['id'] == 11705 || $_SESSION['id'] == 8829
|
||
|| $_SESSION['id'] == 13063 || $_SESSION['id'] == 12010 || $_SESSION['id'] == 14530 || $_SESSION['id'] == 18613
|
||
) {
|
||
$user = new User;
|
||
$user->get($searchUserId);
|
||
$searchUserId = $user->agencyId;
|
||
$agentIds[] = $user->agencyId;
|
||
}
|
||
|
||
$dep_user = $depClass->getDepartment((int)$_SESSION['id']);
|
||
if($dep_user['role'] == 'manager_office'){
|
||
$searchUserId = $dep_user['admin'];
|
||
$adminDep = true;
|
||
} else if($dep_user['role'] == 'manager_office_menager') {
|
||
$searchUserId = $user->id_manager;
|
||
$adminDep = true;
|
||
}
|
||
|
||
/*if (!$searchUserId)
|
||
$searchUserId = (int)$_SESSION['id'];*/
|
||
|
||
$agentIds[] = $searchUserId;
|
||
$agentsOfAgency = User::getAllAgents($searchUserId);
|
||
foreach ($agentsOfAgency as $agent) {
|
||
if (!in_array($agent['id'], $agentIds)) {
|
||
$agentIds[] = $agent['id'];
|
||
}
|
||
}
|
||
|
||
if ($_SESSION['agency'] || $_SESSION['users_admin'] || $adminDep) {
|
||
$agentsOfManager = User::getAllManagers($searchUserId);
|
||
foreach ($agentsOfManager as $agent) {
|
||
if (!in_array($agent['id'], $agentIds)) {
|
||
$agentIds[] = $agent['id'];
|
||
}
|
||
if((int)$agent['role_id'] > 0 && (int)$agent['department_id'] > 0){
|
||
$role_user = $depClass->getRole((int)$agent['role_id']);
|
||
if($role_user['role'] == 'admin_department'){
|
||
$menagerDep = User::getDepManagers($role_user['department_id']);
|
||
foreach($menagerDep as $md){
|
||
if(!in_array($md['id'], $agentIds)){
|
||
$agentIds[] = $md['id'];
|
||
|
||
$thisAgents = User::getAgentsOfAgency($md['id'], true);
|
||
|
||
foreach($thisAgents as $da){
|
||
if (!in_array($da['id'], $agentIds)) {
|
||
$agentIds[] = $da['id'];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
} else {
|
||
$agentIds = [$searchUserId];
|
||
}
|
||
|
||
$agentIds = array_unique($agentIds);
|
||
return $agentIds;
|
||
}
|
||
|
||
$data = json_decode(file_get_contents("php://input"));
|
||
|
||
$request = $data->request;
|
||
|
||
// hide_client_contacts: маска для телефонов клиентов в выгрузке звонков (страница «Телефония»).
|
||
// Применяется к from_number/entry_id/to_number, когда они сопоставлены с реальным клиентом.
|
||
$hideContactsTel = function_exists('should_hide_contacts_for_current_user')
|
||
&& should_hide_contacts_for_current_user();
|
||
|
||
if($request == 'get_telephone'){
|
||
/*ini_set('error_reporting', E_ALL);
|
||
ini_set('display_errors', 1);
|
||
ini_set('display_startup_errors', 1);*/
|
||
|
||
|
||
$response = array();
|
||
$pdopg = new MysqlPdo(hstpg, ndbpg, userpg, passpg, false, '5432', true);
|
||
|
||
unset($_SESSION['calls_query']);
|
||
unset($_SESSION['calls_query_pg']);
|
||
|
||
$agencyId = $data->agency_id;
|
||
if ($agencyId == 5238) {
|
||
$agencyId = 7384;
|
||
}
|
||
|
||
$is_pg = false;
|
||
|
||
$sql_tel = "SELECT `type` FROM `agency_mango` WHERE agency_id = {$agencyId}";
|
||
//echo $sql_tel;
|
||
$q_tel = mysql_query($sql_tel);
|
||
$type_phone = '';
|
||
while($r_tel = mysql_fetch_assoc($q_tel)){
|
||
if($r_tel['type'] == 'mango' || $r_tel['type'] == 'beeline' || $r_tel['type'] == 'telphin'){
|
||
$is_pg = true;
|
||
$type_phone = $r_tel['type'];
|
||
}
|
||
}
|
||
|
||
$sql_tel = "SELECT id FROM `agency_megafon` WHERE agency_id = {$agencyId}";
|
||
//echo $sql_tel;
|
||
$q_tel = mysql_query($sql_tel);
|
||
if(mysql_num_rows($q_tel) > 0){
|
||
// if($r_tel['type'] == 'mango' || $r_tel['type'] == 'beeline' || $r_tel['type'] == 'megafon'){
|
||
$is_pg = true;
|
||
//}
|
||
}
|
||
|
||
$mango = new MangoApiClass('','');
|
||
$usersIds = array();
|
||
$usersIds[] = $agencyId;
|
||
/* $agentsOfAgency = User::getAgentsOfManager($agencyId, true);
|
||
foreach($agentsOfAgency as $ag){
|
||
$usersIds[] = $ag['id'];
|
||
}
|
||
|
||
$agentsOfManager = User::getAllManagers($agencyId);
|
||
|
||
foreach($agentsOfManager as $manager){
|
||
$usersIds[] = $manager['id'];
|
||
$agentsOfAgency = User::getAgentsOfManager($manager['id'], true);
|
||
foreach($agentsOfAgency as $ag){
|
||
$usersIds[] = $ag['id'];
|
||
}
|
||
}*/
|
||
|
||
$sql_users = "SELECT id FROM users WHERE id in (select id from users where id=$agencyId or id_manager=$agencyId or id_manager in
|
||
(select id from users where id_manager=$agencyId or id_manager in
|
||
(select id from users where id_manager=$agencyId)))";
|
||
//echo $sql_users;
|
||
$q_users = mysql_query($sql_users);
|
||
while($r_users = mysql_fetch_assoc($q_users)){
|
||
$usersIds[] = $r_users['id'];
|
||
}
|
||
$usersIds = array_unique($usersIds);
|
||
//var_dump($usersIds);
|
||
|
||
$mango->set_users($usersIds);
|
||
$page = $data->page;
|
||
$limit = $data->limit;
|
||
$pageLimit = ($page-1)*$limit.', '.$limit;
|
||
$pageLimitPg = 'LIMIT '.$limit.' OFFSET '.($page-1)*$limit;
|
||
$users = get_users($agencyId, $type_phone);
|
||
$reason = get_disconnect_reason();
|
||
$date_from = $data->date_from." 00:00:00";
|
||
$data_to = $data->date_to." 23:59:59";
|
||
$source = $data->source;
|
||
$where = "agency_id='".$agencyId."' and start >= ".strtotime($date_from)." and start <= ".strtotime($data_to);
|
||
|
||
$emp = $data->user;
|
||
$response['tr'] = $type_phone;
|
||
if(!empty($emp)){
|
||
// echo $r_tel['type']."\n";
|
||
if($type_phone == 'beeline'){
|
||
$where .= " AND (from_extension like '".$emp."%' OR to_number like '".$emp."%' OR to_extension like '".$emp."%' OR from_number like '".$emp."%')";
|
||
} else {
|
||
$where .= " AND (from_extension = '".$emp."' OR to_number='".$emp."' OR to_extension = '".$emp."' OR from_number='".$emp."')";
|
||
}
|
||
|
||
}
|
||
|
||
$status = $data->status;
|
||
if($status == 'accepted'){
|
||
$where .= " AND answer != 0";
|
||
} else if($status == 'skip'){
|
||
$where .= " AND answer = 0";
|
||
}
|
||
|
||
$duration = $data->duration;
|
||
switch($duration) {
|
||
case 'less':
|
||
|
||
if($is_pg){
|
||
$where .= " AND (finish - start) < 60";
|
||
} else {
|
||
$where .= " AND TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(start), FROM_UNIXTIME(finish)) < 60";
|
||
}
|
||
break;
|
||
|
||
case '1to3min':
|
||
|
||
if($is_pg){
|
||
$where .= " AND ((finish - start) >= 60 AND (finish - start) <= 180)";
|
||
} else {
|
||
$where .= " AND (TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(start), FROM_UNIXTIME(finish)) >= 60 AND TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(start), FROM_UNIXTIME(finish)) <= 180)";
|
||
}
|
||
break;
|
||
|
||
case '3to10min':
|
||
if($is_pg){
|
||
$where .= " AND ((finish - start) > 180 AND (finish - start) <= 600)";
|
||
} else {
|
||
$where .= " AND (TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(start), FROM_UNIXTIME(finish)) > 180 AND TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(start), FROM_UNIXTIME(finish)) <= 600)";
|
||
}
|
||
break;
|
||
|
||
case '10to30min':
|
||
if($is_pg){
|
||
$where .= " AND ((finish - start) > 600 AND (finish - start) <= 1800)";
|
||
} else {
|
||
$where .= " AND (TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(start), FROM_UNIXTIME(finish)) > 600 AND TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(start), FROM_UNIXTIME(finish)) <= 1800)";
|
||
}
|
||
break;
|
||
|
||
case 'more':
|
||
if($is_pg){
|
||
$where .= " AND (finish - start) > 1800";
|
||
} else {
|
||
$where .= " AND TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(start), FROM_UNIXTIME(finish)) > 1800";
|
||
}
|
||
break;
|
||
|
||
case 'individual':
|
||
$durationFrom = $data->individual_unit === 'minutes' ? (int)$data->individual_from * 60 : (int)$data->individual_from;
|
||
$durationTo = $data->individual_unit === 'minutes' ? (int)$data->individual_to * 60 : (int)$data->individual_to;
|
||
|
||
if($is_pg){
|
||
if ($durationFrom) {
|
||
$where .= " AND (finish - start) >= $durationFrom";
|
||
}
|
||
|
||
if ($durationTo) {
|
||
$where .= " AND (finish - start) <= $durationTo";
|
||
}
|
||
|
||
} else {
|
||
if ($durationFrom) {
|
||
$where .= " AND TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(start), FROM_UNIXTIME(finish)) >= $durationFrom";
|
||
}
|
||
|
||
if ($durationTo) {
|
||
$where .= " AND TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(start), FROM_UNIXTIME(finish)) <= $durationTo";
|
||
}
|
||
}
|
||
break;
|
||
|
||
}
|
||
|
||
$is_call_record = (int)$data->is_call_record;
|
||
if($is_call_record > 0){
|
||
$where .= " AND records <> '' AND records <> '[]' AND records <> '[\"\"]' AND records is not null";
|
||
}
|
||
|
||
|
||
$call_number = $data->call_number;
|
||
if(!empty($call_number)){
|
||
$where .= " AND entry_id like '%".str_replace('+','',$call_number)."%'";
|
||
}
|
||
|
||
$in_call_number = $data->in_call_number;
|
||
if(!empty($in_call_number)){
|
||
$where .= " AND from_number like '%".str_replace('+','',$in_call_number)."%'";
|
||
}
|
||
|
||
if($source != 'all'){
|
||
$where .= " AND to_extension like '%".str_replace('+', '', $source)."%'";
|
||
}
|
||
|
||
$in_out = $data->in_out;
|
||
if(!empty($in_out)){
|
||
if($in_out == 'in'){
|
||
$where .= " AND from_extension = ''";
|
||
} else if($in_out == 'out') {
|
||
$where .= " AND from_extension != ''";
|
||
}
|
||
}
|
||
$total = 0;
|
||
//if(!isset($_SESSION['agency_ids'])){
|
||
$user_id = null;
|
||
|
||
// if(isset($data->user_id)) $user_id = $data->user_id;
|
||
if(isset($_SESSION['id'])){
|
||
$agencyIDS = get_users_id($user_id);
|
||
} else {
|
||
$agencyIDS = $usersIds;
|
||
}
|
||
$search_user_main = null;
|
||
if(isset($_SESSION['id'])){
|
||
$search_user_main = $_SESSION['id'];
|
||
if($search_user_main == 5238){
|
||
$search_user_main = 7384;
|
||
}
|
||
} else
|
||
if(!is_null($user_id)){
|
||
$search_user_main = $user_id;
|
||
}
|
||
if(is_null($search_user_main)) die("Не найден пользователь");
|
||
/* $_SESSION['agency_ids'] = $agencyIDS;
|
||
} else {
|
||
$agencyIDS = $_SESSION['agency_ids'];
|
||
}*/
|
||
// if($agencyId == 9588){
|
||
$sqlTotal = "SELECT count(*) as total FROM `mango_calls` as mc WHERE ".$where." and (if((SELECT user_id FROM user_call WHERE call_id = mc.id limit 1)>0,(SELECT user_id FROM user_call WHERE call_id = mc.id limit 1), ".$agencyId.")) in (".implode(',',$agencyIDS).")";
|
||
// echo $sqlTotal;
|
||
$qTotal = mysql_query($sqlTotal);
|
||
$rTotal = mysql_result($qTotal, 0);
|
||
$total = (int)$rTotal;
|
||
// }
|
||
//var_dump($is_pg);
|
||
if($is_pg){
|
||
|
||
$sqlTotal = "SELECT count(*) as total FROM mango_calls as mc WHERE ".$where." and (agency_id = {$search_user_main} or ((SELECT user_id FROM user_call WHERE call_id = mc.id limit 1) in (".implode(',',$agencyIDS).")))";
|
||
//echo $sqlTotal;
|
||
$qTotal = $pdopg->query($sqlTotal);
|
||
$rTotal = $pdopg->result($qTotal, 0);
|
||
$total = (int)$rTotal;
|
||
}
|
||
|
||
$_SESSION['calls_query'] = "SELECT * FROM mango_calls as mc WHERE ".$where." and (if((SELECT user_id FROM user_call WHERE call_id = mc.id limit 1)>0,(SELECT user_id FROM user_call WHERE call_id = mc.id limit 1), ".$agencyId.")) in (".implode(',',$agencyIDS).") ORDER BY start DESC";
|
||
if($is_pg){
|
||
$_SESSION['calls_query_pg'] = "SELECT * FROM mango_calls as mc WHERE ".$where." and (agency_id = {$search_user_main} or ((SELECT user_id FROM user_call WHERE call_id = mc.id limit 1) in (".implode(',',$agencyIDS)."))) ORDER BY start DESC ";
|
||
}
|
||
$sql = "SELECT * FROM mango_calls as mc WHERE ".$where." and (if((SELECT user_id FROM user_call WHERE call_id = mc.id limit 1)>0,(SELECT user_id FROM user_call WHERE call_id = mc.id limit 1), ".$agencyId.")) in (".implode(',',$agencyIDS).") ORDER BY start DESC LIMIT ".$pageLimit;
|
||
//echo $sql;
|
||
if($is_pg){
|
||
$sql = "SELECT * FROM mango_calls as mc WHERE ".$where." and (agency_id = {$search_user_main} or ((SELECT user_id FROM user_call WHERE call_id = mc.id limit 1) in (".implode(',',$agencyIDS)."))) ORDER BY start DESC ".$pageLimitPg;
|
||
|
||
|
||
$qpg = $pdopg->query($sql);
|
||
} else {
|
||
$q = mysql_query($sql);
|
||
}
|
||
// echo $sql;
|
||
$i = 0;
|
||
$list = array();
|
||
|
||
$calls = array();
|
||
|
||
if($is_pg){
|
||
while ($call = $pdopg->fetch_assoc($qpg)) {
|
||
$calls[] = $call;
|
||
}
|
||
} else {
|
||
while ($call = mysql_fetch_assoc($q)) {
|
||
$calls[] = $call;
|
||
}
|
||
}
|
||
|
||
|
||
if($agencyId == 7384){
|
||
$source = array();
|
||
$sql_s = "SELECT a.phone, a.adv_id, s.source FROM advertising_phone as a LEFT JOIN advertising_sources as s on a.adv_id = s.id";
|
||
//echo $sql_s;
|
||
$q_s = mysql_query($sql_s);
|
||
while($r_s = mysql_fetch_assoc($q_s)){
|
||
$source[$r_s['phone']] = $r_s['source'];
|
||
}
|
||
}
|
||
$type = 'mango';
|
||
foreach($calls as $r) {
|
||
$type = 'mango';
|
||
$list_temp = array();
|
||
$list_temp['start'] = date('d.m.Y H:i:s', $r['start']);
|
||
$fill = '#FF3838';
|
||
//$list_temp['from_number'] = $fill "color:#4CAF50;">';
|
||
if($r['answer'] > 0){
|
||
$fill = '#4CAF50';
|
||
}
|
||
|
||
if(!empty($r['from_extension'])){
|
||
$list_temp['from_number'] = '<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M12.3594 6.01561H4.01625L6.16437 3.86749C6.26109 3.77737 6.33866 3.66869 6.39246 3.54794C6.44626 3.4272 6.47519 3.29685 6.47752 3.16467C6.47986 3.0325 6.45554 2.90121 6.40603 2.77864C6.35652 2.65607 6.28284 2.54472 6.18936 2.45125C6.09589 2.35778 5.98454 2.28409 5.86197 2.23458C5.7394 2.18507 5.60811 2.16075 5.47594 2.16309C5.34376 2.16542 5.21342 2.19435 5.09267 2.24815C4.97192 2.30195 4.86324 2.37952 4.77312 2.47624L0.951561 6.2978C0.857455 6.38882 0.78277 6.49797 0.732015 6.61866C0.681259 6.73935 0.655485 6.86907 0.656248 6.99999C0.655252 7.13035 0.680278 7.25961 0.72986 7.38018C0.779441 7.50075 0.852582 7.61022 0.944998 7.70217L4.77312 11.5303C4.86324 11.627 4.97192 11.7046 5.09267 11.7584C5.21342 11.8122 5.34376 11.8411 5.47594 11.8435C5.60811 11.8458 5.7394 11.8215 5.86197 11.772C5.98454 11.7225 6.09589 11.6488 6.18936 11.5553C6.28284 11.4618 6.35652 11.3505 6.40603 11.2279C6.45554 11.1053 6.47986 10.974 6.47752 10.8419C6.47519 10.7097 6.44626 10.5793 6.39246 10.4586C6.33866 10.3378 6.26109 10.2292 6.16437 10.1391L4.01625 7.98436H12.3594C12.6204 7.98436 12.8708 7.88065 13.0554 7.69605C13.24 7.51144 13.3437 7.26106 13.3437 6.99999C13.3437 6.73891 13.24 6.48854 13.0554 6.30393C12.8708 6.11932 12.6204 6.01561 12.3594 6.01561Z" fill="'.$fill.'"/>
|
||
</svg>';
|
||
} else {
|
||
$list_temp['from_number'] = '<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M1.64063 7.98439L9.98375 7.98439L7.83563 10.1325C7.73891 10.2226 7.66134 10.3313 7.60754 10.4521C7.55374 10.5728 7.52481 10.7032 7.52248 10.8353C7.52014 10.9675 7.54446 11.0988 7.59397 11.2214C7.64348 11.3439 7.71716 11.4553 7.81064 11.5487C7.90411 11.6422 8.01546 11.7159 8.13803 11.7654C8.2606 11.8149 8.39189 11.8392 8.52406 11.8369C8.65624 11.8346 8.78658 11.8057 8.90733 11.7518C9.02808 11.698 9.13676 11.6205 9.22688 11.5238L13.0484 7.7022C13.1425 7.61118 13.2172 7.50203 13.268 7.38134C13.3187 7.26065 13.3445 7.13093 13.3438 7.00001C13.3447 6.86965 13.3197 6.74039 13.2701 6.61982C13.2206 6.49925 13.1474 6.38978 13.055 6.29783L9.22688 2.4697C9.13676 2.37299 9.02808 2.29541 8.90733 2.24161C8.78658 2.18781 8.65624 2.15888 8.52406 2.15655C8.39189 2.15422 8.2606 2.17853 8.13803 2.22804C8.01546 2.27755 7.90411 2.35124 7.81064 2.44471C7.71716 2.53819 7.64348 2.64953 7.59397 2.7721C7.54446 2.89467 7.52014 3.02596 7.52248 3.15814C7.52481 3.29031 7.55374 3.42066 7.60754 3.54141C7.66134 3.66216 7.73891 3.77083 7.83563 3.86095L9.98375 6.01564L1.64063 6.01564C1.37955 6.01564 1.12918 6.11935 0.944569 6.30395C0.759963 6.48856 0.656252 6.73894 0.656252 7.00001C0.656252 7.26109 0.759963 7.51146 0.944569 7.69607C1.12918 7.88068 1.37955 7.98439 1.64063 7.98439Z" fill="'.$fill.'"/>
|
||
</svg>';
|
||
}
|
||
$client_id = 0;
|
||
$fio_client = '';
|
||
$client = $mango->find_client_info($mango->ver_phone($r['from_number']));
|
||
if(!empty($client)){
|
||
$client_id = (int)$client['id'];
|
||
$fio_client = ' '.trim($client['fio']);
|
||
if(strpos($fio_client, 'Клиент') !== false || strpos($fio_client, 'Новый') !== false){
|
||
$fio_client = '';
|
||
}
|
||
}
|
||
$from_number = $r['from_number'];
|
||
if($type_phone == 'beeline'){
|
||
if(strpos($r['from_number'],'@') !== false){
|
||
$part_user_from = explode('@', $r['from_number']);
|
||
if(isset($part_user_from[0])){
|
||
$from_number = $part_user_from[0];
|
||
}
|
||
|
||
}
|
||
}
|
||
if($client_id != 0){
|
||
// hide_client_contacts: подменяем телефон + ФИО клиента в HTML.
|
||
$fromNumberDisplay = $hideContactsTel ? mask_client_phone($r['from_number']) : $r['from_number'];
|
||
$fioClientDisplay = $hideContactsTel ? mask_fio_if_contains_phone(trim($fio_client)) : $fio_client;
|
||
if ($hideContactsTel && $fioClientDisplay !== '' && $fioClientDisplay[0] !== ' ') {
|
||
$fioClientDisplay = ' ' . $fioClientDisplay;
|
||
}
|
||
$list_temp['from_number'] .= '<a href="javascript:{};" data-id="'.$client_id.'" class="cartClient no-border" title="'.htmlspecialchars($fioClientDisplay).'">
|
||
<span class="simple-button settings"></span>'.$fromNumberDisplay.$fioClientDisplay.'
|
||
</a>';
|
||
} else if(isset($users[$from_number])){
|
||
$list_temp['from_number'] .= '<span style="margin-left:5px">'.$users[$from_number]['fio'].'</span>';
|
||
} else {
|
||
// Неопознанный внешний номер — для скрытых контактов тоже маскируем
|
||
$fromNumberDisplay = $hideContactsTel ? mask_client_phone($r['from_number']) : $r['from_number'];
|
||
$list_temp['from_number'] .= '<span style="margin-left:5px">'.$fromNumberDisplay.'</span>';
|
||
}
|
||
|
||
$entryIdDisplay = $hideContactsTel ? mask_client_phone($r['entry_id']) : $r['entry_id'];
|
||
$list_temp['entry_id'] = '<span style="margin-left:5px">'.$entryIdDisplay.'</span>';
|
||
$client_id = 0;
|
||
$client = $mango->find_client_info($mango->ver_phone($r['entry_id']));
|
||
$fio_client = '';
|
||
if(!empty($client)){
|
||
$client_id = (int)$client['id'];
|
||
$fio_client = ' '.trim($client['fio']);
|
||
if(strpos($fio_client, 'Клиент') !== false || strpos($fio_client, 'Новый') !== false){
|
||
$fio_client = '';
|
||
}
|
||
}
|
||
if($client_id != 0){
|
||
$fioClientDisplay = $hideContactsTel ? mask_fio_if_contains_phone(trim($fio_client)) : $fio_client;
|
||
if ($hideContactsTel && $fioClientDisplay !== '' && $fioClientDisplay[0] !== ' ') {
|
||
$fioClientDisplay = ' ' . $fioClientDisplay;
|
||
}
|
||
$list_temp['entry_id'] = '<a href="javascript:{};" data-id="'.$client_id.'" class="cartClient no-border" title="'.htmlspecialchars($fioClientDisplay).'">
|
||
<span class="simple-button settings"></span>'.$entryIdDisplay.$fioClientDisplay.'
|
||
</a>';
|
||
} else {
|
||
$entry_id = $r['entry_id'];
|
||
if($type_phone == 'beeline'){
|
||
if(strpos($r['entry_id'],'@') !== false){
|
||
$part_user_entry_id = explode('@', $r['entry_id']);
|
||
if(isset($part_user_entry_id[0])){
|
||
$entry_id = $part_user_entry_id[0];
|
||
}
|
||
|
||
}
|
||
}
|
||
if(isset($users[$entry_id])){
|
||
$list_temp['entry_id'] = '<span title="'.$users[$entry_id]['fio'].'" style="margin-left:5px">'.$users[$entry_id]['fio'].'</span>';
|
||
}
|
||
}
|
||
if($agencyId == 7384){
|
||
$entry_id = $mango->ver_phone($r['entry_id']);
|
||
$list_temp['source'] = '';
|
||
if(isset($source[$entry_id])){
|
||
$list_temp['source'] = $source[$entry_id];
|
||
}
|
||
}
|
||
|
||
// hide_client_contacts: дефолт — маска номера; если ниже найдём сотрудника в users, перезапишем на ФИО.
|
||
$list_temp['to_number'] = $hideContactsTel ? mask_client_phone($r['to_number']) : $r['to_number'];
|
||
$to_number = $r['to_number'];
|
||
if($type_phone == 'beeline'){
|
||
if(strpos($r['to_number'],'@') !== false){
|
||
$part_user_to = explode('@', $r['to_number']);
|
||
if(isset($part_user_to[0])){
|
||
$to_number = $part_user_to[0];
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
if(isset($users[$to_number])) {
|
||
$list_temp['to_number'] = '<span title="'.$users[$to_number]['fio'].'" style="margin-left:5px">'.$users[$to_number]['fio'].'</span>';
|
||
|
||
}
|
||
//Проверка переадресации
|
||
if($r['operator_id'] == 2 && $r['operator_call_id'] > 0){
|
||
$sql_call = "SELECT id FROM call_events WHERE uuid_call_id=$r[operator_call_id]";
|
||
$q_call = mysql_query($sql_call);
|
||
if(mysql_num_rows($q_call) > 0){
|
||
$r_call = mysql_fetch_assoc($q_call);
|
||
$sql_red = "SELECT * FROM call_events_redirect WHERE call_id = $r_call[id]";
|
||
$q_red = mysql_query($sql_red);
|
||
if(mysql_num_rows($q_red) > 0){
|
||
$r_red = mysql_fetch_assoc($q_red);
|
||
$user_red = mysql_fetch_assoc(mysql_query("SELECT fio FROM users WHERE id=$r_red[user_id]"));
|
||
if($user_red){
|
||
$list_temp['to_number'] = '<span title="'.$users[$r['to_number']]['fio'].' → '.$user_red['fio'].'" style="margin-left:5px">'.$users[$r['to_number']]['fio'].' → '.$user_red['fio'].'</span>';
|
||
}
|
||
}
|
||
}
|
||
}
|
||
$list_temp['connect'] = $reason[$r['disconnect_reason']];
|
||
/* try{
|
||
$list_temp['connect'] = '<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M16.5336 13.14C16.0419 12.7277 13.1586 10.9018 12.6793 10.9856C12.4543 11.0256 12.2822 11.2174 11.8215 11.7669C11.6085 12.0374 11.3745 12.2908 11.1217 12.5246C10.6587 12.4128 10.2105 12.2466 9.78638 12.0296C8.12322 11.2199 6.77961 9.87589 5.97038 8.2125C5.75338 7.78841 5.58723 7.34018 5.47538 6.87712C5.70922 6.62439 5.96256 6.39042 6.23306 6.17738C6.78206 5.71669 6.97444 5.54569 7.01438 5.31956C7.09819 4.83919 5.27063 1.95694 4.86 1.46531C4.68788 1.26169 4.5315 1.125 4.33125 1.125C3.75075 1.125 1.125 4.37175 1.125 4.7925C1.125 4.82681 1.18125 8.20688 5.45006 12.5499C9.79313 16.8188 13.1732 16.875 13.2075 16.875C13.6283 16.875 16.875 14.2492 16.875 13.6687C16.875 13.4685 16.7383 13.3121 16.5336 13.14Z" fill="#FF3838"/>
|
||
<path d="M10.5227 8.2727L12.6562 6.13914L14.7898 8.2727L15.5852 7.47733L13.4516 5.34376L15.5852 3.2102L14.7898 2.41483L12.6562 4.54839L10.5227 2.41483L9.72729 3.2102L11.8609 5.34376L9.72729 7.47733L10.5227 8.2727Z" fill="#FF3838"/>
|
||
</svg>'.$reason[$r['disconnect_reason']];
|
||
} catch (Exception $e){}
|
||
if($r['answer'] > 0){
|
||
$list_temp['connect'] = '<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M16.5336 13.14C16.0419 12.7277 13.1586 10.9018 12.6793 10.9856C12.4543 11.0256 12.2822 11.2174 11.8215 11.7669C11.6085 12.0374 11.3745 12.2908 11.1217 12.5246C10.6587 12.4128 10.2105 12.2466 9.78638 12.0296C8.12322 11.2199 6.77961 9.87589 5.97038 8.2125C5.75338 7.78841 5.58723 7.34018 5.47538 6.87712C5.70922 6.62439 5.96256 6.39042 6.23306 6.17738C6.78206 5.71669 6.97444 5.54569 7.01438 5.31956C7.09819 4.83919 5.27063 1.95694 4.86 1.46531C4.68788 1.26169 4.5315 1.125 4.33125 1.125C3.75075 1.125 1.125 4.37175 1.125 4.7925C1.125 4.82681 1.18125 8.20688 5.45006 12.5499C9.79313 16.8188 13.1732 16.875 13.2075 16.875C13.6283 16.875 16.875 14.2492 16.875 13.6687C16.875 13.4685 16.7383 13.3121 16.5336 13.14Z" fill="#4CAF50"/>
|
||
<path d="M12.9375 8.4375H14.0625C14.0612 7.24444 13.5866 6.10062 12.743 5.257C11.8994 4.41338 10.7556 3.93884 9.5625 3.9375V5.0625C10.4573 5.06339 11.3153 5.41926 11.948 6.052C12.5807 6.68474 12.9366 7.54267 12.9375 8.4375Z" fill="#4CAF50"/>
|
||
<path d="M15.75 8.4375H16.875C16.8728 6.49879 16.1016 4.64012 14.7308 3.26925C13.3599 1.89837 11.5012 1.12723 9.5625 1.125V2.25C11.2029 2.25194 12.7756 2.90445 13.9356 4.06441C15.0955 5.22438 15.7481 6.79707 15.75 8.4375Z" fill="#4CAF50"/>
|
||
</svg>'.$reason[$r['disconnect_reason']];
|
||
}*/
|
||
|
||
$list_temp['answer'] = $r['answer'];
|
||
$list_temp['time'] = int_to_time((int)$r['finish'] - (int)$r['start']);
|
||
$list_temp['records'] = [];
|
||
|
||
$records = explode(",", str_replace(["[","]"], "", $r['records']));
|
||
if($r['line_number'] == 'telphin'){
|
||
$type = 'telphin';
|
||
$records = json_decode($r['records']);
|
||
} else if($r['line_number'] == 'beeline'){
|
||
$type = 'beeline';
|
||
$records = json_decode($r['records']);
|
||
|
||
} else if($r['line_number'] == 'megafon'){
|
||
$type = 'megafon';
|
||
$records = json_decode($r['records']);
|
||
|
||
} else if($r['line_number'] == 'mts'){
|
||
$type = 'mts';
|
||
$records = json_decode($r['records']);
|
||
|
||
} else if($r['line_number'] == 'tele2'){
|
||
$type = 'tele2';
|
||
$records = json_decode($r['records']);
|
||
|
||
} else if($r['line_number'] == 'alloincognito'){
|
||
$type = 'alloincognito';
|
||
$records = json_decode($r['records']);
|
||
//var_dump($records);
|
||
|
||
}
|
||
$list_temp['type'] = $type;
|
||
|
||
//var_dump($records);
|
||
if(!empty($records)){
|
||
foreach ($records as $record) {
|
||
if(!empty($record)){
|
||
|
||
|
||
|
||
if($type == 'megafon'){
|
||
$temp_type = 'mega';
|
||
$path = $temp_type.'/'.$record.'.mp3';
|
||
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/server/'.$path)){
|
||
$list_temp['records'][] = "/server/".$path;
|
||
} else {
|
||
|
||
$href = 'https://voice.joywork.ru/'.$temp_type.'/'.$record.'.mp3';
|
||
$Headers = @get_headers($href);
|
||
|
||
if(strpos($Headers[0],'200')) {
|
||
|
||
$list_temp['records'][] = $href;
|
||
}
|
||
}
|
||
} else
|
||
if($type == 'mts'){
|
||
$path = $type.'/'.$agencyId.'/'.$record.'.mp3';
|
||
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/server/'.$path)){
|
||
$list_temp['records'][] = "/server/".$path;
|
||
} else {
|
||
|
||
$href = 'https://voice.joywork.ru/'.$type.'/'.$agencyId.'/'.$record.'.mp3';
|
||
$Headers = @get_headers($href);
|
||
|
||
if(strpos($Headers[0],'200')) {
|
||
|
||
$list_temp['records'][] = $href;
|
||
}
|
||
}
|
||
|
||
} else
|
||
if($type == 'tele2'){
|
||
$date = date('Ymd', $r['start']);
|
||
$path = $type.'/'.$agencyId.'/'.$date.'/'.$record.'.mp3';
|
||
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/server/'.$path)){
|
||
$list_temp['records'][] = "/server/".$path;
|
||
} else {
|
||
|
||
$href = 'https://voice.joywork.ru/'.$type.'/'.$agencyId.'/'.$date.'/'.$record.'.mp3';
|
||
$Headers = @get_headers($href);
|
||
|
||
if(strpos($Headers[0],'200')) {
|
||
|
||
$list_temp['records'][] = $href;
|
||
}
|
||
}
|
||
|
||
} else
|
||
if($type == 'alloincognito'){
|
||
$temp_type = 'allo';
|
||
$path =$temp_type.'/'.$agencyId.'/'.$record.'.mp3';
|
||
// echo $path;
|
||
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/server/'.$path)){
|
||
$list_temp['records'][] = "/server/".$path;
|
||
} else {
|
||
|
||
$href = 'https://voice.joywork.ru/'.$temp_type.'/'.$agencyId.'/'.$record.'.mp3';
|
||
$Headers = @get_headers($href);
|
||
|
||
if(strpos($Headers[0],'200')) {
|
||
|
||
$list_temp['records'][] = $href;
|
||
}
|
||
}
|
||
|
||
} else {
|
||
|
||
$path = $type.'/'.$record.'.mp3';
|
||
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/server/'.$path)){
|
||
$list_temp['records'][] = "/server/".$path;
|
||
} else {
|
||
$href = 'https://voice.joywork.ru/'.$type.'/'.$record.'.mp3';
|
||
$Headers = @get_headers($href);
|
||
if(strpos($Headers[0],'200')) {
|
||
$list_temp['records'][] = $href;
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
$list_temp['disconnect_reason'] = $r['disconnect_reason'];
|
||
$list[] = $list_temp;
|
||
}
|
||
$users_vue = array();
|
||
foreach ($users as $key => $user) {
|
||
$temp_fio = trim($user['fio']);
|
||
if($agencyId == 7864){
|
||
if(strpos($key, 'mega') !== false){
|
||
$temp_fio .= " (Мегафон)";
|
||
} else {
|
||
$temp_fio .= " (Билайн)";
|
||
}
|
||
}
|
||
//Не нужно тут менять это не таблица users
|
||
$users_vue[] = array('code' => $key, 'fio' => $temp_fio);
|
||
}
|
||
|
||
$response['list'] = $list;
|
||
$response['line_number'] = $type;
|
||
$response['users'] = $users_vue;
|
||
$response['agency_id'] = $agencyId;
|
||
$response['total'] = $total;
|
||
|
||
echo json_encode($response);
|
||
exit;
|
||
}
|
||
|
||
if($request == 'get_source'){
|
||
|
||
$sql = "SELECT a.phone, a.adv_id, s.source FROM advertising_phone as a LEFT JOIN advertising_sources as s on s.id = a.adv_id";
|
||
|
||
$q = mysql_query($sql);
|
||
$sourse_arr = array();
|
||
$sourse_arr[] = array('code'=>'all', 'name'=>'');
|
||
while($r = mysql_fetch_assoc($q)){
|
||
$sourse_arr[] = array('code'=>$r['phone'], 'name'=>$r['source']);
|
||
}
|
||
|
||
echo json_encode($sourse_arr);
|
||
exit;
|
||
}
|
||
|
||
if($request == 'get_source_new'){
|
||
$agency_id = (int)$data->agency_id;
|
||
|
||
$sql = "SELECT a.phone, a.adv_id, s.source FROM advertising_phone as a LEFT JOIN advertising_sources as s on s.id = a.adv_id WHERE s.user_id = {$agency_id}";
|
||
|
||
$q = mysql_query($sql);
|
||
$sourse_arr = array();
|
||
//$sourse_arr[] = array('value'=>'all', 'title'=>'');
|
||
while($r = mysql_fetch_assoc($q)){
|
||
$sourse_arr[] = array('value'=>$r['phone'], 'title'=>$r['source']);
|
||
}
|
||
|
||
echo json_encode($sourse_arr);
|
||
exit;
|
||
}
|