diff --git a/app/call_centers/app_config.php b/app/call_centers/app_config.php
index ca5fc2b0e3..878e10786b 100644
--- a/app/call_centers/app_config.php
+++ b/app/call_centers/app_config.php
@@ -189,6 +189,14 @@
$apps[$x]['default_settings'][$y]['default_setting_value'] = "1500";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Set the refresh rate in seconds (<=120) or milliseconds (>=500).";
+ $y++;
+ $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "ca34cbc0-e071-432e-afd6-b587aa52bd85";
+ $apps[$x]['default_settings'][$y]['default_setting_category'] = "call_center";
+ $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "queue_login";
+ $apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
+ $apps[$x]['default_settings'][$y]['default_setting_value'] = "static";
+ $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
+ $apps[$x]['default_settings'][$y]['default_setting_description'] = "Agent queue login options: dynamic, static";
//cache details
$apps[$x]['cache']['key'] = "dialplan.\${domain_name}";
diff --git a/app/call_centers/call_center_agent_status.php b/app/call_centers/call_center_agent_status.php
index 840d5c9fad..04a80ec222 100644
--- a/app/call_centers/call_center_agent_status.php
+++ b/app/call_centers/call_center_agent_status.php
@@ -48,7 +48,7 @@
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$database = new database;
$tiers = $database->select($sql, $parameters, 'all');
- if (empty($tiers)) {
+ if (!empty($_SESSION['call_center']['queue_login']['text']) && $_SESSION['call_center']['queue_login']['text'] == 'dynamic') {
$per_queue_login = true;
}
else {
@@ -358,6 +358,7 @@
echo "
| \n";
if ($per_queue_login) {
echo " ".$text['label-options']." | \n";
+ echo "   | \n";
}
echo "\n";
@@ -366,7 +367,7 @@
foreach ($agents as $row) {
$onclick = "onclick=\"cycle('agents[".$x."][agent_status]');\"";
$html = "\n";
- $html .= " | ".escape($row['agent_name'])." | \n";
+ $html .= " ".escape($row['agent_name'])." | \n";
if (!$per_queue_login) {
$html .= " ";
@@ -381,7 +382,7 @@
$html .= " | | \n";
if ($per_queue_login) {
- $html .= " ";
+ $html .= " | ";
if (!empty($row['queues'])) {
$html .= " \n";
}
$html .= " | \n";
+ $html .= " | \n";
}
$html .= "
\n";
if (count($_SESSION['domains']) > 1) {
diff --git a/app/call_centers/resources/dashboard/call_center_agents.php b/app/call_centers/resources/dashboard/call_center_agents.php
index 5ebaab95e3..1bb40be5bc 100644
--- a/app/call_centers/resources/dashboard/call_center_agents.php
+++ b/app/call_centers/resources/dashboard/call_center_agents.php
@@ -127,15 +127,6 @@
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$call_center_tiers = csv_to_named_array($event_socket_str, '|');
-//get the call center queues from the database
- $sql = "select * from v_call_center_queues ";
- $sql .= "where domain_uuid = :domain_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 agents from the database
$sql = "select * from v_call_center_agents ";
$sql .= "where user_uuid = :user_uuid ";
@@ -148,6 +139,22 @@
}
unset($sql, $parameters);
+//get the call center queues from the database
+ if (!empty($_SESSION['call_center']['queue_login']['text']) && $_SESSION['call_center']['queue_login']['text'] == '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'];
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
@@ -158,14 +165,16 @@
//update the queue status
$x = 0;
- 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'];
+ if (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++;
}
- $x++;
}
//includes the header
diff --git a/app/switch/resources/scripts/app/xml_handler/resources/scripts/configuration/callcenter.conf.lua b/app/switch/resources/scripts/app/xml_handler/resources/scripts/configuration/callcenter.conf.lua
index 3fcf69cfb7..8a1496aef0 100644
--- a/app/switch/resources/scripts/app/xml_handler/resources/scripts/configuration/callcenter.conf.lua
+++ b/app/switch/resources/scripts/app/xml_handler/resources/scripts/configuration/callcenter.conf.lua
@@ -1,6 +1,6 @@
-- xml_handler.lua
-- Part of FusionPBX
--- Copyright (C) 2015-2022 Mark J Crane
+-- Copyright (C) 2015-2023 Mark J Crane
-- All rights reserved.
--
-- Redistribution and use in source and binary forms, with or without
@@ -25,11 +25,29 @@
-- POSSIBILITY OF SUCH DAMAGE.
--include functions
- require "resources.functions.format_ringback"
+require "resources.functions.format_ringback"
--include xml library
local Xml = require "resources.functions.xml";
+--connect to the database
+ local Database = require "resources.functions.database";
+ dbh = Database.new('system');
+
+--include settings library
+ local Settings = require "resources.functions.lazy_settings"
+
+--create the settings object
+ local settings = Settings.new(dbh, domain_name, domain_uuid);
+
+--check queue
+ queue_login = settings:get('call_center', 'queue_login', 'text');
+ if (queue_login ~= nil and queue_login == 'dynamic') then
+ per_queue_login = true;
+ else
+ per_queue_login = false;
+ end
+
--get the cache
local cache = require "resources.functions.cache"
hostname = trim(api:execute("switchname", ""));
@@ -43,10 +61,6 @@
freeswitch.consoleLog("warning", "[xml_handler] " .. cc_cache_key .. " can not be get from the cache: " .. tostring(err) .. "\n");
end
- --connect to the database
- local Database = require "resources.functions.database";
- dbh = Database.new('system');
-
--exits the script if we didn't connect properly
assert(dbh:connected());
@@ -278,35 +292,37 @@
xml:append([[ ]]);
--get the tiers
- sql = "select t.domain_uuid, d.domain_name, t.call_center_agent_uuid, t.call_center_queue_uuid, q.queue_extension, t.tier_level, t.tier_position ";
- sql = sql .. "from v_call_center_tiers as t, v_domains as d, v_call_center_queues as q ";
- sql = sql .. "where d.domain_uuid = t.domain_uuid ";
- sql = sql .. "and t.call_center_queue_uuid = q.call_center_queue_uuid; ";
- if (debug["sql"]) then
- freeswitch.consoleLog("notice", "[xml_handler] SQL: " .. sql .. "\n");
+ if (not per_queue_login) then
+ sql = "select t.domain_uuid, d.domain_name, t.call_center_agent_uuid, t.call_center_queue_uuid, q.queue_extension, t.tier_level, t.tier_position ";
+ sql = sql .. "from v_call_center_tiers as t, v_domains as d, v_call_center_queues as q ";
+ sql = sql .. "where d.domain_uuid = t.domain_uuid ";
+ sql = sql .. "and t.call_center_queue_uuid = q.call_center_queue_uuid; ";
+ if (debug["sql"]) then
+ freeswitch.consoleLog("notice", "[xml_handler] SQL: " .. sql .. "\n");
+ end
+ xml:append([[ ]]);
+ dbh:query(sql, function(row)
+ --get the values from the database and set as variables
+ domain_uuid = row.domain_uuid;
+ domain_name = row.domain_name;
+ agent_uuid = row.call_center_agent_uuid;
+ queue_uuid = row.call_center_queue_uuid;
+ queue_extension = row.queue_extension;
+ tier_level = row.tier_level;
+ tier_position = row.tier_position;
+ --build the xml
+ xml:append([[ ]]);
+ end)
+ xml:append([[ ]]);
end
- xml:append([[ ]]);
- dbh:query(sql, function(row)
- --get the values from the database and set as variables
- domain_uuid = row.domain_uuid;
- domain_name = row.domain_name;
- agent_uuid = row.call_center_agent_uuid;
- queue_uuid = row.call_center_queue_uuid;
- queue_extension = row.queue_extension;
- tier_level = row.tier_level;
- tier_position = row.tier_position;
- --build the xml
- xml:append([[ ]]);
- end)
- xml:append([[ ]]);
--close the extension tag if it was left open
xml:append([[ ]]);