Portions created by the Initial Developer are Copyright (C) 2017-2025 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ //includes files require_once dirname(__DIR__, 4) . "/resources/require.php"; require_once "resources/check_auth.php"; //check permissions if (permission_exists('call_center_queue_view')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get($settings->get('domain', 'language', 'en-us'), 'app/call_centers'); //get http variables and set as php variables $order_by = $_GET["order_by"] ?? null; $order = $_GET["order"] ?? null; //setup the event socket connection $esl = event_socket::create(); //get the http post values and set them as php variables if (!empty($_POST['agents'])) { //get the agent id if (is_uuid($_POST['agents'][0]['id'])) { $agent_uuid = $_POST['agents'][0]['id']; } //get the agent details from event socket if (is_uuid($agent_uuid)) { $switch_cmd = 'callcenter_config agent list '.$agent['call_center_agent_uuid']; $event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd)); $call_center_agent = csv_to_named_array($event_socket_str, '|'); $agent['agent_status'] = $call_center_agent[1]['status']; } //find the agent_status - used for mod_call_center as there is only one agent status not one per queue $agent_status = 'Logged Out'; foreach ($_POST['agents'] as $row) { if ($row['agent_status'] == 'Available') { $agent_status = 'Available'; break; } if ($row['agent_status'] == 'On Break') { $agent_status = 'On Break'; break; } } //save the agent_stat change to the database $array['call_center_agents'][0]['call_center_agent_uuid'] = $agent_uuid; $array['call_center_agents'][0]['domain_uuid'] = $_SESSION['user']['domain_uuid']; $array['call_center_agents'][0]['agent_status'] = $agent_status; $result = $database->save($array); //send the agent status status to mod_call_center $cmd = "callcenter_config agent set status ".$agent_uuid." '".$agent_status."'"; $response = event_socket::api($cmd); //add or delete agents from the queue assigned by the tier foreach ($_POST['agents'] as $row) { //agent set status if ($fp && is_numeric($row['queue_extension']) && is_uuid($row['id'])) { //set the agent status to available and assign the agent to the queue with the tier if ($row['agent_status'] == 'Available') { //assign the agent to the queue $cmd = "callcenter_config tier add ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id']." 1 1"; $response = event_socket::api($cmd); } //set the agent status to available and assign the agent to the queue with the tier if ($row['agent_status'] == 'On Break') { //assign the agent to the queue $cmd = "callcenter_config tier add ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id']." 1 1"; $response = event_socket::api($cmd); } //un-assign the agent from the queue if ($row['agent_status'] == 'Logged Out') { $cmd = "callcenter_config tier del ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id']; $response = event_socket::api($cmd); } //small sleep usleep(200); } } //redirect header('Location: '.PROJECT_PATH.'/core/dashboard/'); exit; } //get the agent list from event socket $switch_cmd = 'callcenter_config tier list'; $event_socket_str = trim(event_socket::api($switch_cmd)); $call_center_tiers = csv_to_named_array($event_socket_str, '|'); //get the agents from the database $sql = "select * from v_call_center_agents "; $sql .= "where user_uuid = :user_uuid "; $sql .= "and domain_uuid = :domain_uuid"; $parameters['user_uuid'] = $_SESSION['user_uuid']; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $agents = $database->select($sql, $parameters, 'all'); if (!empty($agents)) { $agent = $agents[0]; } unset($sql, $parameters); //get the call center queues from the database //if ($settings->get('call_center, queue_login', '') == 'dynamic') { $sql = "select * from v_call_center_queues "; $sql .= "where domain_uuid = :domain_uuid "; $sql .= "and call_center_queue_uuid in ( "; $sql .= " select call_center_queue_uuid from v_call_center_tiers "; $sql .= " where call_center_agent_uuid = :call_center_agent_uuid "; $sql .= ") "; $parameters['call_center_agent_uuid'] = $agent['call_center_agent_uuid']; $sql .= "order by queue_extension asc "; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $call_center_queues = $database->select($sql, $parameters, 'all'); $num_rows = !is_array($call_center_queues) ? 0 : @sizeof($call_center_queues); unset($sql, $parameters); //} //get the agent details from event socket $switch_cmd = 'callcenter_config agent list '.($agent['call_center_agent_uuid'] ?? null); $event_socket_str = trim(event_socket_request($fp ?? null, 'api '.$switch_cmd)); $call_center_agent = csv_to_named_array($event_socket_str, '|'); //set the agent status $agent['agent_status'] = $call_center_agent[1]['status']; //update the queue status $x = 0; if (!empty($call_center_queues) && is_array($call_center_queues)) { foreach ($call_center_queues as $queue) { $call_center_queues[$x]['queue_status'] = 'Logged Out'; foreach ($call_center_tiers as $tier) { if ($queue['queue_extension'] .'@'. $_SESSION['user']['domain_name'] == $tier['queue'] && $agent['call_center_agent_uuid'] == $tier['agent']) { $call_center_queues[$x]['queue_status'] = $agent['agent_status']; } } $x++; } } //includes the header require_once "resources/header.php"; //radio button cycle script echo "\n"; //show the content echo "
"; echo "
\n"; echo "
\n"; echo "
".$text['header-call_center_queues'].(!empty($agent['agent_name']) ? "    Agent: ".$agent['agent_name']."" : "")."
\n"; echo "
\n"; echo button::create(['type'=>'button','label'=>$text['button-save'],'icon'=>$settings->get('theme', 'button_icon_save'),'collapse'=>false,'onclick'=>"document.getElementById('form_list_call_center_agent_dashboard').submit();"]); echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; if (!empty($call_center_queues) && is_array($call_center_queues) && @sizeof($call_center_queues) != 0) { $x = 0; foreach ($call_center_queues as $row) { $onclick = "onclick=\"cycle('agents[".$x."][agent_status]');\""; $onclick = ''; echo "\n"; echo " \n"; echo " \n"; echo "\n"; $x++; } unset($call_center_queues); } echo "
".$text['label-queue_name']."".$text['label-status']."
".escape($row['queue_name'])."\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "
\n"; echo "
\n"; echo " \n"; echo "
\n"; echo "
\n"; echo "
\n"; ?>