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"; @@ -410,7 +411,8 @@ $html .= " \n"; $html .= " \n"; $html .= "  \n"; - $html .= " \n"; + $html .= " \n"; + //$html .= " \n"; $html .= " \n"; $html .= " \n"; } @@ -418,6 +420,7 @@ $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([[ ]]);