From 73cb782110aaebe7595353b924c04f33f3720ed7 Mon Sep 17 00:00:00 2001 From: FusionPBX Date: Fri, 19 May 2017 20:09:33 -0600 Subject: [PATCH] Update call_center_agent_status.php --- app/call_centers/call_center_agent_status.php | 217 ++++++++++++------ 1 file changed, 142 insertions(+), 75 deletions(-) diff --git a/app/call_centers/call_center_agent_status.php b/app/call_centers/call_center_agent_status.php index 3be0580754..1f4fbc88da 100644 --- a/app/call_centers/call_center_agent_status.php +++ b/app/call_centers/call_center_agent_status.php @@ -47,66 +47,82 @@ $document['title'] = $text['title-call_center_agent_status']; require_once "resources/paging.php"; +//get the agents from the database + $sql = "select * from v_call_center_tiers "; + $sql .= "where domain_uuid = '".$_SESSION['domain_uuid']."' "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $tiers = $prep_statement->fetchAll(PDO::FETCH_NAMED); + if (count($tiers) == 0) { + $per_queue_login = true; + } + else { + $per_queue_login = false; + } + //setup the event socket connection $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); //get the http post values and set them as php variables if (count($_POST) > 0) { - - //include the dnd php class - include PROJECT_PATH."/app/calls/resources/classes/do_not_disturb.php"; foreach($_POST['agents'] as $row) { if (strlen($row['agent_status']) > 0) { //agent set status if ($fp) { //set the user_status - $sql = "update v_users set "; - $sql .= "user_status = '".$row['agent_status']."' "; - $sql .= "where domain_uuid = '".$domain_uuid."' "; - $sql .= "and username = '".$row['agent_name']."' "; - //echo $sql."\n"; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); + if (!isset($row['queue_name'])) { + $sql = "update v_users set "; + $sql .= "user_status = '".$row['agent_status']."' "; + $sql .= "where domain_uuid = '".$domain_uuid."' "; + $sql .= "and username = '".$row['agent_name']."' "; + //echo $sql."\n"; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + } //set the call center status - if ($row['agent_status'] == "Do Not Disturb") { - //set the default dnd action - $dnd_action = "add"; - //set the call center status to Logged Out - $cmd = "api callcenter_config agent set status ".$row['agent_name']."@".$_SESSION['domains'][$domain_uuid]['domain_name']." 'Logged Out'"; + if (!isset($row['queue_name'])) { + if ($row['agent_status'] == "Do Not Disturb") { + //set the default dnd action + $dnd_action = "add"; + //set the call center status to Logged Out + $cmd = "api callcenter_config agent set status ".$row['agent_name']."@".$_SESSION['domains'][$domain_uuid]['domain_name']." 'Logged Out'"; + } + else { + $cmd = "api callcenter_config agent set status ".$row['agent_name']."@".$_SESSION['domains'][$domain_uuid]['domain_name']." '".$row['agent_status']."'"; + } + $response = event_socket_request($fp, $cmd); } - else { - $cmd = "api callcenter_config agent set status ".$row['agent_name']."@".$_SESSION['domains'][$domain_uuid]['domain_name']." '".$row['agent_status']."'"; - } - $response = event_socket_request($fp, $cmd); //echo $cmd."\n"; + + //set the agent status to available and assign the agent to the queue with the tier + if (isset($row['queue_name']) && $row['agent_status'] == 'Available') { + //set the call center status + //$cmd = "api callcenter_config agent set status ".$row['agent_name']."@".$_SESSION['domain_name']." '".$row['agent_status']."'"; + //$response = event_socket_request($fp, $cmd); + + //assign the agent to the queue + $cmd = "api callcenter_config tier add ".$row['queue_name']."@".$_SESSION['domain_name']." ".$row['agent_name']."@".$_SESSION['domain_name']." 1 1"; + //echo $cmd."
\n"; + $response = event_socket_request($fp, $cmd); + } + + //un-assign the agent from the queue + if (isset($row['queue_name']) && $row['agent_status'] == 'Logged Out') { + $cmd = "api callcenter_config tier del ".$row['queue_name']."@".$_SESSION['domain_name']." ".$row['agent_name']."@".$_SESSION['domain_name']; + //echo $cmd."
\n"; + $response = event_socket_request($fp, $cmd); + } usleep(200); } - //loop through the list of assigned extensions - //foreach ($_SESSION['user']['extension'] as &$sub_row) { - // //update dnd - // $dnd = new do_not_disturb; - // //$dnd->debug = false; - // $dnd->domain_uuid = $domain_uuid; - // $dnd->domain_name = $_SESSION['domain_name']; - // $dnd->extension = $sub_row["user"]; - // if ($row['status'] == "Do Not Disturb") { - // $dnd->enabled = "true"; - // } - // else { - // $dnd->enabled = "false"; - // } - // $dnd->set(); - // unset($dnd); - //} - //unset ($prep_statement); } } } //get the agents from the database $sql = "select * from v_call_center_agents "; - $sql .= "where domain_uuid = '$domain_uuid' ORDER BY agent_name ASC "; + $sql .= "where domain_uuid = '".$_SESSION['domain_uuid']."' "; + $sql .= "order by agent_name ASC "; $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); $agents = $prep_statement->fetchAll(PDO::FETCH_NAMED); @@ -114,20 +130,53 @@ //get the agent list from event socket $switch_cmd = 'callcenter_config agent list'; $event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd)); - $call_center_agents = csv_to_named_array($event_socket_str, '|'); + $agent_list = csv_to_named_array($event_socket_str, '|'); //echo "
\n";
 	//print_r($call_center_agents);
 	//echo "
\n"; +//get the agent list from event socket + $switch_cmd = 'callcenter_config tier list'; + $event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd)); + $call_center_tiers = csv_to_named_array($event_socket_str, '|'); + //echo "
\n";
+	//print_r($call_center_tiers);
+	//echo "
\n"; + +//get the call center queues from the database + $sql = "select * from v_call_center_queues "; + $sql .= "where domain_uuid = '".$_SESSION['domain_uuid']."' "; + $sql .= "order by queue_name asc "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $call_center_queues = $prep_statement->fetchAll(PDO::FETCH_NAMED); + unset ($prep_statement, $sql); + //get the agent status from mod_callcenter and update the agent status in the agents array $x = 0; foreach ($agents as $row) { //add the domain name $domain_name = $_SESSION['domains'][$row['domain_uuid']]['domain_name']; $agents[$x]['domain_name'] = $domain_name; + + //update the queue status + $i = 0; + foreach ($call_center_queues as $queue) { + $agents[$x]['queues'][$i]['agent_name'] = $row['agent_name']; + $agents[$x]['queues'][$i]['queue_name'] = $queue['queue_name']; + $agents[$x]['queues'][$i]['queue_status'] = 'Logged Out'; + foreach ($call_center_tiers as $tier) { + if ($queue['queue_name'] .'@'. $_SESSION['domain_name'] == $tier['queue'] + && $row['agent_name'] .'@'. $_SESSION['domain_name'] == $tier['agent']) { + $agents[$x]['queues'][$i]['queue_status'] = 'Available'; + } + } + $i++; + } + //update the agent status - foreach ($call_center_agents as $r) { - if ($r['name'] == $row[agent_name].'@'.$domain_name) { + foreach ($agent_list as $r) { + if ($r['name'] == $row['agent_name'].'@'.$domain_name) { $agents[$x]['agent_status'] = $r['status']; } } @@ -139,29 +188,10 @@ //print_r($agents); //echo "\n"; -//set the status on the user_array by using the extension as the key - //foreach ($call_center_agents as $row) { - // if (count($_SESSION['domains']) == 1) { - // //get the extension status from the call center agent list - // preg_match('/user\/(\d{2,7})/', $row['contact'], $matches); - // $extension = $matches[1]; - // $user_array[$extension]['username'] = $tmp[0]; - // if ($user_array[$extension]['user_status'] != "Do Not Disturb") { - // $user_array[$extension]['user_status'] = $row['status']; - // } - // } else { - // $tmp = explode('@',$row["name"]); - // if ($tmp[1] == $_SESSION['domain_name']) { - // //get the extension status from the call center agent list - // preg_match('/user\/(\d{2,7})/', $row['contact'], $matches); - // $extension = $matches[1]; - // $user_array[$extension]['username'] = $tmp[0]; - // if ($user_array[$extension]['user_status'] != "Do Not Disturb") { - // $user_array[$extension]['user_status'] = $row['status']; - // } - // } - // } - //} +//set the row style + $c = 0; + $row_style["0"] = "row_style0"; + $row_style["1"] = "row_style1"; //show the content echo "\n"; @@ -179,32 +209,69 @@ echo "\n"; echo "
\n"; - $c = 0; - $row_style["0"] = "row_style0"; - $row_style["1"] = "row_style1"; - echo "
\n"; - echo "\n"; + echo "
\n"; echo "\n"; echo " \n"; echo " \n"; echo " \n"; + echo " \n"; echo "\n"; $x = 0; foreach($agents as $row) { - $str = ''; - $str .= "\n"; - $str .= " \n"; - $str .= " \n"; - $str .= " \n"; + $str .= " \n"; + + //$str .= " \n"; + $str .= " \n"; + $str .= " \n"; + + $str .= " \n"; $str .= "\n"; if (count($_SESSION['domains']) > 1) { if ($row['domain_name'] == $_SESSION['domain_name']) {
".$text['label-agent']."".$text['label-status']."".$text['label-options']."".$text['label-queues']."
".$row['agent_name']." ".$row['agent_status']." "; + $str = "
".$row['agent_name']." ".$row['agent_name']." ".$row['agent_status']." "; $str .= " \n"; $str .= " \n"; - $str .= "   \n"; + //$str .= "   \n"; $str .= "   \n"; $str .= "   \n"; $str .= "   \n"; //$str .= " \n"; $str .= " "; + if (is_array($row['queues']) && $per_queue_login) { + $str .= " \n"; + $str .= " \n"; + $str .= " \n"; + $str .= " \n"; + $str .= " \n"; + $str .= " \n"; + foreach ($row['queues'] as $queue) { + $x++; + $str .= " \n"; + $str .= " \n"; + + $str .= " \n"; + + $str .= " \n"; + $str .= " \n"; + } + $str .= "
".$text['label-agent']."".$text['label-status']."".$text['label-options']."
\n"; + $str .= " ".$queue['queue_name']."\n"; + $str .= " \n"; + //.$row[queue_status]."  + if ($queue['queue_status'] == "Available") { + $str .= " ".$text['option-available']."\n"; + } + if ($queue['queue_status'] == "Logged Out") { + $str .= " ".$text['option-logged_out']."\n"; + } + $str .= " "; + $str .= " \n"; + $str .= " \n"; + $str .= " \n"; + //$str .= "   \n"; + $str .= "   \n"; + $str .= "   \n"; + $str .= "
\n"; + } + $str .= "