Portions created by the Initial Developer are Copyright (C) 2008-2024 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane Luis Daniel Lucio Quiroz */ //includes files require_once dirname(__DIR__, 2) . "/resources/require.php"; require_once "resources/check_auth.php"; //check permissions if (permission_exists('call_center_queue_add') || permission_exists('call_center_queue_edit')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get(); //set the defaults $queue_name = ''; $queue_extension = ''; $queue_time_base_score_sec = ''; $queue_cid_prefix = ''; $queue_announce_frequency = ''; $queue_cc_exit_keys = ''; $queue_description = ''; $queue_timeout_action = ''; //action add or update if (!empty($_REQUEST["id"]) && is_uuid($_REQUEST["id"])) { $action = "update"; $call_center_queue_uuid = $_REQUEST["id"]; } else { $action = "add"; } //initialize the destinations object $destination = new destinations; //get total call center queues count from the database, check limit, if defined if ($action == 'add') { if (!empty($_SESSION['limit']['call_center_queues']['numeric'])) { $sql = "select count(*) from v_call_center_queues "; $sql .= "where domain_uuid = :domain_uuid "; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $database = new database; $total_call_center_queues = $database->select($sql, $parameters, 'column'); unset($sql, $parameters); if ($total_call_center_queues >= $_SESSION['limit']['call_center_queues']['numeric']) { message::add($text['message-maximum_queues'].' '.$_SESSION['limit']['call_center_queues']['numeric'], 'negative'); header('Location: call_center_queues.php'); return; } } } //get http post variables and set them to php variables if (!empty($_POST)) { //get the post variables a run a security chack on them //$domain_uuid = $_POST["domain_uuid"]; $dialplan_uuid = $_POST["dialplan_uuid"] ?? null; $queue_name = $_POST["queue_name"]; $queue_extension = $_POST["queue_extension"]; $queue_greeting = $_POST["queue_greeting"]; $queue_strategy = $_POST["queue_strategy"]; $call_center_tiers = $_POST["call_center_tiers"]; $queue_moh_sound = $_POST["queue_moh_sound"]; $queue_record_template = $_POST["queue_record_template"]; $queue_time_base_score = $_POST["queue_time_base_score"]; $queue_time_base_score_sec = $_POST["queue_time_base_score_sec"]; $queue_max_wait_time = $_POST["queue_max_wait_time"]; $queue_max_wait_time_with_no_agent = $_POST["queue_max_wait_time_with_no_agent"]; $queue_max_wait_time_with_no_agent_time_reached = $_POST["queue_max_wait_time_with_no_agent_time_reached"]; $queue_tier_rules_apply = $_POST["queue_tier_rules_apply"]; $queue_tier_rule_wait_second = $_POST["queue_tier_rule_wait_second"]; $queue_tier_rule_wait_multiply_level = $_POST["queue_tier_rule_wait_multiply_level"]; $queue_tier_rule_no_agent_no_wait = $_POST["queue_tier_rule_no_agent_no_wait"]; $queue_timeout_action = $_POST["queue_timeout_action"] ?? null; $queue_discard_abandoned_after = $_POST["queue_discard_abandoned_after"]; $queue_abandoned_resume_allowed = $_POST["queue_abandoned_resume_allowed"]; $queue_cid_prefix = $_POST["queue_cid_prefix"]; $queue_outbound_caller_id_name = $_POST["queue_outbound_caller_id_name"] ?? null; $queue_outbound_caller_id_number = $_POST["queue_outbound_caller_id_number"] ?? null; $queue_announce_position = $_POST["queue_announce_position"] ?? null; $queue_announce_sound = $_POST["queue_announce_sound"]; $queue_announce_frequency = $_POST["queue_announce_frequency"]; $queue_cc_exit_keys = $_POST["queue_cc_exit_keys"]; $queue_email_address = $_POST["queue_email_address"] ?? null; $queue_description = $_POST["queue_description"]; //set the context for users that do not have the permission if (permission_exists('call_center_queue_context')) { $queue_context = $_POST["queue_context"]; } else if ($action == 'add') { $queue_context = $_SESSION['domain_name']; } //remove invalid characters $queue_cid_prefix = str_replace(":", "-", $queue_cid_prefix); $queue_cid_prefix = str_replace("\"", "", $queue_cid_prefix); $queue_cid_prefix = str_replace("@", "", $queue_cid_prefix); $queue_cid_prefix = str_replace("\\", "", $queue_cid_prefix); $queue_cid_prefix = str_replace("/", "", $queue_cid_prefix); } //delete the tier (agent from the queue) if (!empty($_REQUEST["a"]) && $_REQUEST["a"] == "delete" && is_uuid($_REQUEST["id"]) && permission_exists("call_center_tier_delete")) { //set the variables $call_center_queue_uuid = $_REQUEST["id"]; $call_center_tier_uuid = $_REQUEST["call_center_tier_uuid"]; //get the agent details $sql = "select t.call_center_agent_uuid, t.call_center_queue_uuid, q.queue_extension "; $sql .= "from v_call_center_tiers as t, v_call_center_queues as q "; $sql .= "where t.domain_uuid = :domain_uuid "; $sql .= "and t.call_center_tier_uuid = :call_center_tier_uuid "; $sql .= "and t.call_center_queue_uuid = q.call_center_queue_uuid; "; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $parameters['call_center_tier_uuid'] = $call_center_tier_uuid; $database = new database; $tiers = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); if (!empty($tiers)) { foreach ($tiers as &$row) { $call_center_agent_uuid = $row["call_center_agent_uuid"]; $call_center_queue_uuid = $row["call_center_queue_uuid"]; $queue_extension = $row["queue_extension"]; } } //delete the agent from freeswitch //setup the event socket connection $esl = event_socket::create(); //delete the agent over event socket if ($esl->is_connected()) { //callcenter_config tier del [queue_name] [agent_name] if (is_numeric($queue_extension) && is_uuid($call_center_agent_uuid)) { $cmd = "callcenter_config tier del ".$queue_extension."@".$_SESSION['domain_name']." ".$call_center_agent_uuid; $response = event_socket::api($cmd); } } //delete the tier from the database if (!empty($call_center_tier_uuid)) { $array['call_center_tiers'][0]['call_center_tier_uuid'] = $call_center_tier_uuid; $array['call_center_tiers'][0]['domain_uuid'] = $_SESSION['domain_uuid']; $p = new permissions; $p->add('call_center_tier_delete', 'temp'); $database = new database; $database->app_name = 'call_centers'; $database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370'; $database->delete($array); unset($array); $p->delete('call_center_tier_delete', 'temp'); } } //process the user data and save it to the database if (!empty($_POST) && empty($_POST["persistformvar"])) { //get the uuid from the POST if ($action == "update") { $call_center_queue_uuid = $_POST["call_center_queue_uuid"]; } //validate the token $token = new token; if (!$token->validate($_SERVER['PHP_SELF'])) { message::add($text['message-invalid_token'],'negative'); header('Location: call_center_queues.php'); exit; } //check for all required data $msg = ''; //if (empty($domain_uuid)) { $msg .= $text['message-required']."domain_uuid
\n"; } if (empty($queue_name)) { $msg .= $text['message-required'].$text['label-queue_name']."
\n"; } if (empty($queue_extension)) { $msg .= $text['message-required'].$text['label-extension']."
\n"; } if (empty($queue_strategy)) { $msg .= $text['message-required'].$text['label-strategy']."
\n"; } //if (empty($queue_moh_sound)) { $msg .= $text['message-required'].$text['label-music_on_hold']."
\n"; } //if (empty($queue_record_template)) { $msg .= $text['message-required'].$text['label-record_template']."
\n"; } //if (empty($queue_time_base_score)) { $msg .= $text['message-required'].$text['label-time_base_score']."
\n"; } //if (empty($queue_time_base_score_sec)) { $msg .= $text['message-required'].$text['label-time_base_score_sec']."
\n"; } //if (empty($queue_max_wait_time)) { $msg .= $text['message-required'].$text['label-max_wait_time']."
\n"; } //if (empty($queue_max_wait_time_with_no_agent)) { $msg .= $text['message-required'].$text['label-max_wait_time_with_no_agent']."
\n"; } //if (empty($queue_max_wait_time_with_no_agent_time_reached)) { $msg .= $text['message-required'].$text['label-max_wait_time_with_no_agent_time_reached']."
\n"; } //if (empty($queue_tier_rules_apply)) { $msg .= $text['message-required'].$text['label-tier_rules_apply']."
\n"; } //if (empty($queue_tier_rule_wait_second)) { $msg .= $text['message-required'].$text['label-tier_rule_wait_second']."
\n"; } //if (empty($queue_tier_rule_wait_multiply_level)) { $msg .= $text['message-required'].$text['label-tier_rule_wait_multiply_level']."
\n"; } //if (empty($queue_tier_rule_no_agent_no_wait)) { $msg .= $text['message-required'].$text['label-tier_rule_no_agent_no_wait']."
\n"; } //if (empty($queue_timeout_action)) { $msg .= $text['message-required'].$text['label-timeout_action']."
\n"; } //if (empty($queue_discard_abandoned_after)) { $msg .= $text['message-required'].$text['label-discard_abandoned_after']."
\n"; } //if (empty($queue_abandoned_resume_allowed)) { $msg .= $text['message-required'].$text['label-abandoned_resume_allowed']."
\n"; } //if (empty($queue_cid_prefix)) { $msg .= $text['message-required'].$text['label-caller_id_name_prefix']."
\n"; } //if (empty($queue_description)) { $msg .= $text['message-required'].$text['label-description']."
\n"; } if (!empty($msg) && empty($_POST["persistformvar"])) { require_once "resources/header.php"; require_once "resources/persist_form_var.php"; echo "
\n"; echo "
\n"; echo $msg."
"; echo "
\n"; persistformvar($_POST); echo "
\n"; require_once "resources/footer.php"; return; } //set the domain_uuid $_POST["domain_uuid"] = $_SESSION["domain_uuid"]; //add the call_center_queue_uuid if (empty($_POST["call_center_queue_uuid"])) { $call_center_queue_uuid = uuid(); $_POST["call_center_queue_uuid"] = $call_center_queue_uuid; } //add the dialplan_uuid if (empty($_POST["dialplan_uuid"])) { $dialplan_uuid = uuid(); $_POST["dialplan_uuid"] = $dialplan_uuid; } //update the call centier tiers array $x = 0; if (!empty($_POST["call_center_tiers"])) { foreach ($_POST["call_center_tiers"] as $row) { //add the domain_uuid if (empty($row["domain_uuid"])) { $_POST["call_center_tiers"][$x]["domain_uuid"] = $_SESSION['domain_uuid']; } //unset ring_group_destination_uuid if the field has no value if (empty($row["call_center_agent_uuid"])) { unset($_POST["call_center_tiers"][$x]); } //increment the row $x++; } } //get the application and data $action_array = explode(":",$queue_timeout_action); $queue_timeout_app = $action_array[0]; unset($action_array[0]); $queue_timeout_data = implode($action_array); //add the recording path if needed if (!empty($queue_greeting)) { if (file_exists($_SESSION['switch']['recordings']['dir'].'/'.$_SESSION['domain_name'].'/'.$queue_greeting)) { $queue_greeting_path = $_SESSION['switch']['recordings']['dir'].'/'.$_SESSION['domain_name'].'/'.$queue_greeting; } else { $queue_greeting_path = trim($queue_greeting); } } //prepare the array $array['call_center_queues'][0]['queue_name'] = $queue_name; $array['call_center_queues'][0]['queue_extension'] = $queue_extension; $array['call_center_queues'][0]['queue_greeting'] = $queue_greeting; $array['call_center_queues'][0]['queue_strategy'] = $queue_strategy; $array['call_center_queues'][0]['queue_moh_sound'] = $queue_moh_sound; $array['call_center_queues'][0]['queue_record_template'] = $queue_record_template; $array['call_center_queues'][0]['queue_time_base_score'] = $queue_time_base_score; $array['call_center_queues'][0]['queue_time_base_score_sec'] = $queue_time_base_score_sec; $array['call_center_queues'][0]['queue_max_wait_time'] = $queue_max_wait_time; $array['call_center_queues'][0]['queue_max_wait_time_with_no_agent'] = $queue_max_wait_time_with_no_agent; $array['call_center_queues'][0]['queue_max_wait_time_with_no_agent_time_reached'] = $queue_max_wait_time_with_no_agent_time_reached; if ($destination->valid($queue_timeout_action)) { $array['call_center_queues'][0]['queue_timeout_action'] = $queue_timeout_action; } $array['call_center_queues'][0]['queue_tier_rules_apply'] = $queue_tier_rules_apply; $array['call_center_queues'][0]['queue_tier_rule_wait_second'] = $queue_tier_rule_wait_second; $array['call_center_queues'][0]['queue_tier_rule_wait_multiply_level'] = $queue_tier_rule_wait_multiply_level; $array['call_center_queues'][0]['queue_tier_rule_no_agent_no_wait'] = $queue_tier_rule_no_agent_no_wait; $array['call_center_queues'][0]['queue_discard_abandoned_after'] = $queue_discard_abandoned_after; $array['call_center_queues'][0]['queue_abandoned_resume_allowed'] = $queue_abandoned_resume_allowed; $array['call_center_queues'][0]['queue_cid_prefix'] = $queue_cid_prefix; if (permission_exists('call_center_outbound_caller_id_name')) { $array['call_center_queues'][0]['queue_outbound_caller_id_name'] = $queue_outbound_caller_id_name; } if (permission_exists('call_center_outbound_caller_id_number')) { $array['call_center_queues'][0]['queue_outbound_caller_id_number'] = $queue_outbound_caller_id_number; } $array['call_center_queues'][0]['queue_announce_position'] = $queue_announce_position; if (permission_exists('call_center_announce_sound')) { $array['call_center_queues'][0]['queue_announce_sound'] = $queue_announce_sound; } $array['call_center_queues'][0]['queue_announce_frequency'] = $queue_announce_frequency; $array['call_center_queues'][0]['queue_cc_exit_keys'] = $queue_cc_exit_keys; if (permission_exists('call_center_email_address')) { $array['call_center_queues'][0]['queue_email_address'] = $queue_email_address; } $array['call_center_queues'][0]['queue_context'] = $queue_context; $array['call_center_queues'][0]['queue_description'] = $queue_description; $array['call_center_queues'][0]['call_center_queue_uuid'] = $call_center_queue_uuid; $array['call_center_queues'][0]['dialplan_uuid'] = $dialplan_uuid; $array['call_center_queues'][0]['domain_uuid'] = $domain_uuid; $y = 0; if (!empty($_POST["call_center_tiers"])) { foreach ($_POST["call_center_tiers"] as $row) { if (is_uuid($row['call_center_tier_uuid'])) { $call_center_tier_uuid = $row['call_center_tier_uuid']; } else { $call_center_tier_uuid = uuid(); } if (!empty($row['call_center_agent_uuid'])) { $array["call_center_queues"][0]["call_center_tiers"][$y]["call_center_tier_uuid"] = $call_center_tier_uuid; $array['call_center_queues'][0]["call_center_tiers"][$y]["call_center_agent_uuid"] = $row['call_center_agent_uuid']; $array['call_center_queues'][0]["call_center_tiers"][$y]["tier_level"] = $row['tier_level']; $array['call_center_queues'][0]["call_center_tiers"][$y]["tier_position"] = $row['tier_position']; $array['call_center_queues'][0]["call_center_tiers"][$y]["domain_uuid"] = $_SESSION['domain_uuid']; } $y++; } } //add definable export variables can be set in default settings $export_variables = 'call_center_queue_uuid,sip_h_Alert-Info'; if (!empty($_SESSION['call_center']['export_vars'])) { foreach ($_SESSION['call_center']['export_vars'] as $export_variable) { $export_variables .= ','.$export_variable; } } //build the xml dialplan $dialplan_xml = "\n"; $dialplan_xml .= " \n"; $dialplan_xml .= " \n"; $dialplan_xml .= " \n"; $dialplan_xml .= " \n"; $dialplan_xml .= " \n"; if (!empty($call_center_queue_uuid) && is_uuid($call_center_queue_uuid)) { $dialplan_xml .= " \n"; } if (!empty($queue_extension) && is_numeric($queue_extension)) { $dialplan_xml .= " \n"; } $dialplan_xml .= " \n"; $dialplan_xml .= " \n"; if (!empty($queue_time_base_score_sec)) { $dialplan_xml .= " \n"; } if (!empty($queue_greeting_path)) { $dialplan_xml .= " \n"; $greeting_array = explode(':', $queue_greeting_path); if (count($greeting_array) == 1) { $dialplan_xml .= " \n"; } else { if ($greeting_array[0] == 'say' || $greeting_array[0] == 'tone_stream' || $greeting_array[0] == 'phrase') { $dialplan_xml .= " \n"; } } } if (!empty($queue_cid_prefix)) { $dialplan_xml .= " \n"; } if (!empty($queue_cc_exit_keys)) { $dialplan_xml .= " \n"; } $dialplan_xml .= " \n"; if ($destination->valid($queue_timeout_app.':'.$queue_timeout_data)) { $dialplan_xml .= " \n"; } $dialplan_xml .= " \n"; $dialplan_xml .= "\n"; //build the dialplan array $array['dialplans'][0]["domain_uuid"] = $_SESSION['domain_uuid']; $array['dialplans'][0]["dialplan_uuid"] = $dialplan_uuid; $array['dialplans'][0]["dialplan_name"] = $queue_name; $array['dialplans'][0]["dialplan_number"] = $queue_extension; if (isset($queue_context)) { $array['dialplans'][0]["dialplan_context"] = $queue_context; } $array['dialplans'][0]["dialplan_continue"] = "false"; $array['dialplans'][0]["dialplan_xml"] = $dialplan_xml; $array['dialplans'][0]["dialplan_order"] = "230"; $array['dialplans'][0]["dialplan_enabled"] = "true"; $array['dialplans'][0]["dialplan_description"] = $queue_description; $array['dialplans'][0]["app_uuid"] = "95788e50-9500-079e-2807-fd530b0ea370"; //add the dialplan permission $p = new permissions; $p->add("dialplan_add", "temp"); $p->add("dialplan_edit", "temp"); //save to the data $database = new database; $database->app_name = 'call_centers'; $database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370'; $database->save($array); $message = $database->message; //remove the temporary permission $p->delete("dialplan_add", "temp"); $p->delete("dialplan_edit", "temp"); //debug info //echo "
". print_r($message, true) ."
"; exit; //apply settings reminder $_SESSION["reload_xml"] = true; //clear the cache $cache = new cache; $cache->delete("dialplan:".$_SESSION["domain_name"]); //clear the destinations session array if (isset($_SESSION['destinations']['array'])) { unset($_SESSION['destinations']['array']); } //redirect the user if (isset($action)) { if ($action == "add") { message::add($text['message-add']); } if ($action == "update") { message::add($text['message-update']); } } //synchronize the configuration save_call_center_xml(); remove_config_from_cache('configuration:callcenter.conf'); //add agent/tier to queue $agent_name = $_POST["agent_name"] ?? null; $tier_level = $_POST["tier_level"] ?? null; $tier_position = $_POST["tier_position"] ?? null; if (!empty($agent_name)) { //setup the event socket connection $esl = event_socket::create(); //add the agent using event socket if ($esl->is_connected()) { /* syntax: callcenter_config tier add [queue_name] [agent_name] [level] [position] callcenter_config tier set state [queue_name] [agent_name] [state] callcenter_config tier set level [queue_name] [agent_name] [level] callcenter_config tier set position [queue_name] [agent_name] [position] */ //add the agent if (is_numeric($queue_extension) && is_uuid($call_center_agent_uuid) && is_numeric($tier_level) && is_numeric($tier_position)) { $cmd = "callcenter_config tier add ".$queue_extension."@".$_SESSION["domain_name"]." ".$call_center_agent_uuid." ".$tier_level." ".$tier_position; $response = event_socket::api($cmd); } usleep(200); //agent set level if (is_numeric($queue_extension) && is_numeric($tier_level)) { $cmd = "callcenter_config tier set level ".$queue_extension."@".$_SESSION["domain_name"]." ".$call_center_agent_uuid." ".$tier_level; $response = event_socket::api($cmd); } usleep(200); //agent set position if (is_numeric($queue_extension) && is_numeric($tier_position)) { $cmd = "callcenter_config tier set position ".$queue_extension."@".$_SESSION["domain_name"]." ".$tier_position; $response = event_socket::api($cmd); } usleep(200); } } //syncrhonize configuration save_call_center_xml(); //clear the cache $cache = new cache; $cache->delete('configuration:callcenter.conf'); //redirect the user if (is_uuid($call_center_queue_uuid)) { header("Location: call_center_queue_edit.php?id=".urlencode($call_center_queue_uuid)); } return; } //(count($_POST)>0 && empty($_POST["persistformvar"])) //pre-populate the form if (!empty($_GET) && is_uuid($_GET["id"]) && empty($_POST["persistformvar"])) { $call_center_queue_uuid = $_GET["id"]; $sql = "select * from v_call_center_queues "; $sql .= "where domain_uuid = :domain_uuid "; $sql .= "and call_center_queue_uuid = :call_center_queue_uuid "; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $parameters['call_center_queue_uuid'] = $call_center_queue_uuid; $database = new database; $call_center_queues = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); if (!empty($call_center_queues)) { foreach ($call_center_queues as &$row) { $queue_name = $row["queue_name"]; $dialplan_uuid = $row["dialplan_uuid"]; $database_queue_name = $row["queue_name"]; $queue_extension = $row["queue_extension"]; $queue_greeting = $row["queue_greeting"]; $queue_strategy = $row["queue_strategy"]; $queue_moh_sound = $row["queue_moh_sound"]; $queue_record_template = $row["queue_record_template"]; $queue_time_base_score = $row["queue_time_base_score"]; $queue_time_base_score_sec = $row["queue_time_base_score_sec"]; $queue_max_wait_time = $row["queue_max_wait_time"]; $queue_max_wait_time_with_no_agent = $row["queue_max_wait_time_with_no_agent"]; $queue_max_wait_time_with_no_agent_time_reached = $row["queue_max_wait_time_with_no_agent_time_reached"]; $queue_timeout_action = $row["queue_timeout_action"]; $queue_tier_rules_apply = $row["queue_tier_rules_apply"]; $queue_tier_rule_wait_second = $row["queue_tier_rule_wait_second"]; $queue_tier_rule_wait_multiply_level = $row["queue_tier_rule_wait_multiply_level"]; $queue_tier_rule_no_agent_no_wait = $row["queue_tier_rule_no_agent_no_wait"]; $queue_discard_abandoned_after = $row["queue_discard_abandoned_after"]; $queue_abandoned_resume_allowed = $row["queue_abandoned_resume_allowed"]; $queue_cid_prefix = $row["queue_cid_prefix"]; $queue_outbound_caller_id_name = $row["queue_outbound_caller_id_name"]; $queue_outbound_caller_id_number = $row["queue_outbound_caller_id_number"]; $queue_announce_position = $row["queue_announce_position"]; $queue_announce_sound = $row["queue_announce_sound"]; $queue_announce_frequency = $row["queue_announce_frequency"]; $queue_cc_exit_keys = $row["queue_cc_exit_keys"]; $queue_email_address = $row["queue_email_address"]; $queue_context = $row["queue_context"]; $queue_description = $row["queue_description"]; } } } //get the tiers $sql = "select t.call_center_tier_uuid, t.call_center_agent_uuid, t.call_center_queue_uuid, t.tier_level, t.tier_position, a.agent_name "; $sql .= "from v_call_center_tiers as t, v_call_center_agents as a "; $sql .= "where t.call_center_queue_uuid = :call_center_queue_uuid "; $sql .= "and t.call_center_agent_uuid = a.call_center_agent_uuid "; $sql .= "and t.domain_uuid = :domain_uuid "; $sql .= "order by tier_level asc, tier_position asc, a.agent_name asc"; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $parameters['call_center_queue_uuid'] = $call_center_queue_uuid ?? null; $database = new database; $tiers = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); //add an empty row to the tiers array if (count($tiers) == 0) { $rows = $_SESSION['call_center']['agent_add_rows']['numeric'] ?? null; $id = 0; } if (count($tiers) > 0) { $rows = $_SESSION['call_center']['agent_edit_rows']['numeric']; $id = count($tiers)+1; } for ($x = 0; $x < $rows; $x++) { $tiers[$id]['call_center_tier_uuid'] = uuid(); $tiers[$id]['call_center_agent_uuid'] = ''; $tiers[$id]['call_center_queue_uuid'] = $call_center_queue_uuid ?? null; $tiers[$id]['tier_level'] = ''; $tiers[$id]['tier_position'] = ''; $tiers[$id]['agent_name'] = ''; $id++; } //get the agents $sql = "select call_center_agent_uuid, agent_name from v_call_center_agents "; $sql .= "where domain_uuid = :domain_uuid "; $sql .= "order by agent_name asc"; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $database = new database; $agents = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); //get the sounds $sounds = new sounds; $audio_files[0] = $sounds->get(); unset($sounds); if (permission_exists('call_center_announce_sound')) { $sounds = new sounds; $sounds->sound_types = ['recordings']; $sounds->full_path = ['recordings']; $audio_files[1] = $sounds->get(); unset($sounds); } //set default values if (empty($queue_strategy)) { $queue_strategy = "longest-idle-agent"; } if (empty($queue_moh_sound)) { $queue_moh_sound = "\$\${hold_music}"; } if (empty($queue_time_base_score)) { $queue_time_base_score = "system"; } if (empty($queue_time_base_score)) { $queue_time_base_score = ""; } if (empty($queue_max_wait_time)) { $queue_max_wait_time = "0"; } if (empty($queue_max_wait_time_with_no_agent)) { $queue_max_wait_time_with_no_agent = "90"; } if (empty($queue_max_wait_time_with_no_agent_time_reached)) { $queue_max_wait_time_with_no_agent_time_reached = "30"; } if (empty($queue_tier_rules_apply)) { $queue_tier_rules_apply = "false"; } if (empty($queue_tier_rule_wait_second)) { $queue_tier_rule_wait_second = "30"; } if (empty($queue_tier_rule_wait_multiply_level)) { $queue_tier_rule_wait_multiply_level = "true"; } if (empty($queue_tier_rule_no_agent_no_wait)) { $queue_tier_rule_no_agent_no_wait = "true"; } if (empty($queue_discard_abandoned_after)) { $queue_discard_abandoned_after = "900"; } if (empty($queue_abandoned_resume_allowed)) { $queue_abandoned_resume_allowed = "false"; } if (empty($queue_context)) { $queue_context = $_SESSION['domain_name']; } //create token $object = new token; $token = $object->create($_SERVER['PHP_SELF']); //show the header if ($action == "add") { $document['title'] = $text['title-call_center_queue_add']; } if ($action == "update") { $document['title'] = $text['title-call_center_queue_edit']; } require_once "resources/header.php"; //only allow a uuid if (empty($call_center_queue_uuid)) { $call_center_queue_uuid = null; } //set the record_template if (empty($_SESSION['call_center']['record_name']['text'])) { $record_template = $_SESSION['switch']['recordings']['dir']."/".$_SESSION['domain_name']."/archive/\${strftime(%Y)}/\${strftime(%b)}/\${strftime(%d)}/\${uuid}.\${record_ext}"; } else { $record_template = $_SESSION['switch']['recordings']['dir']."/".$_SESSION['domain_name']."/archive/".$_SESSION['call_center']['record_name']['text']; } //show the content if (permission_exists('recording_play') || permission_exists('recording_download')) { echo "\n"; } if (if_group("superadmin")) { echo "\n"; } echo "
\n"; echo "
\n"; echo "
"; if ($action == "add") { echo "".$text['header-call_center_queue_add'].""; } if ($action == "update") { echo "".$text['header-call_center_queue_edit'].""; } echo "
\n"; echo "
\n"; echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','style'=>'margin-right: 15px;','link'=>'call_center_queues.php']); if ($action == "update") { if (permission_exists('call_center_wallboard')) { echo button::create(['type'=>'button','label'=>$text['button-wallboard'],'icon'=>'th','link'=>PROJECT_PATH.'/app/call_center_wallboard/call_center_wallboard.php?queue_name='.urlencode($call_center_queue_uuid)]); } //echo button::create(['type'=>'button','label'=>$text['button-stop'],'icon'=>$_SESSION['theme']['button_icon_stop'],'link'=>'cmd.php?cmd=unload&id='.urlencode($call_center_queue_uuid)]); //echo button::create(['type'=>'button','label'=>$text['button-start'],'icon'=>$_SESSION['theme']['button_icon_start'],'link'=>'cmd.php?cmd=load&id='.urlencode($call_center_queue_uuid)]); echo button::create(['type'=>'button','label'=>$text['button-reload'],'icon'=>$_SESSION['theme']['button_icon_reload'],'link'=>'cmd.php?cmd=reload&id='.urlencode($call_center_queue_uuid)]); echo button::create(['type'=>'button','label'=>$text['button-view'],'icon'=>$_SESSION['theme']['button_icon_view'],'style'=>'margin-right: 15px;','link'=>PROJECT_PATH.'/app/call_center_active/call_center_active.php?queue_name='.urlencode($call_center_queue_uuid)]); } echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save']); echo "
\n"; echo "
\n"; echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; $instance_id = 'queue_greeting'; $instance_label = 'greeting'; $instance_value = $queue_greeting; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; if (permission_exists('call_center_tier_view') && !empty($agents) && is_array($agents)) { echo ""; echo " "; echo " "; echo ""; } } echo "\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"; echo "\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"; echo "\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"; echo "\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"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; if (permission_exists('call_center_outbound_caller_id_name')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_center_outbound_caller_id_number')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_center_announce_position')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_center_announce_sound')) { $instance_id = 'queue_announce_sound'; $instance_label = 'caller_announce_sound'; $instance_value = $queue_announce_sound; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_center_announce_frequency')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo "\n"; echo "\n"; echo "\n"; echo "\n"; if (permission_exists('call_center_email_address')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } if (permission_exists('call_center_queue_context')) { echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo " ".$text['label-queue_name']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-queue_name']."\n"; echo "
\n"; echo " ".$text['label-extension']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-extension']."\n"; echo "
\n"; echo " ".$text['label-'.$instance_label]."\n"; echo "
\n"; echo "\n"; if (if_group("superadmin")) { echo ""; } if ((permission_exists('recording_play') || permission_exists('recording_download')) && (!empty($playable) || empty($instance_value))) { switch (pathinfo($playable, PATHINFO_EXTENSION)) { case 'wav' : $mime_type = 'audio/wav'; break; case 'mp3' : $mime_type = 'audio/mpeg'; break; case 'ogg' : $mime_type = 'audio/ogg'; break; } echo ""; echo button::create(['type'=>'button','title'=>$text['label-play'].' / '.$text['label-pause'],'icon'=>$_SESSION['theme']['button_icon_play'],'id'=>'recording_button_'.$instance_id,'style'=>'display: '.(!empty($mime_type) ? 'inline' : 'none'),'onclick'=>"recording_play('".$instance_id."', document.getElementById('".$instance_id."').value, document.getElementById('".$instance_id."').options[document.getElementById('".$instance_id."').selectedIndex].parentNode.getAttribute('data-type'))"]); unset($playable, $mime_type); } echo "
\n"; echo $text['description-'.$instance_label]."\n"; echo "
\n"; echo " ".$text['label-strategy']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-strategy']."\n"; echo "
".$text['label-agents'].""; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; $x = 0; if (is_array($tiers)) { foreach($tiers as $field) { echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; $assigned_agents[] = $field['agent_name']; $x++; } unset ($tiers); echo "
".$text['label-agent_name']."".$text['label-tier_level']."".$text['label-tier_position']."
"; if (!empty($field['call_center_tier_uuid'])) { echo " \n"; } echo " "; echo " "; echo " \n"; echo " \n"; echo " \n"; echo " "; if (permission_exists('call_center_tier_delete')) { echo " $v_link_label_delete"; } echo "
\n"; echo "
\n"; echo " ".$text['description-tiers']."\n"; echo "
\n"; echo "
\n"; echo " ".$text['label-music_on_hold']."\n"; echo "\n"; $ringbacks = new ringbacks; echo $ringbacks->select('queue_moh_sound', $queue_moh_sound); echo "
\n"; echo $text['description-music_on_hold']."\n"; echo "
\n"; echo " ".$text['label-record_template']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-record_template']."\n"; echo "
\n"; echo " ".$text['label-time_base_score']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-time_base_score']."\n"; echo "
\n"; echo " ".$text['label-time_base_score_sec']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-time_base_score_sec']."\n"; echo "
\n"; echo " ".$text['label-max_wait_time']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-max_wait_time']."\n"; echo "
\n"; echo " ".$text['label-max_wait_time_with_no_agent']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-max_wait_time_with_no_agent']."\n"; echo "
\n"; echo " ".$text['label-max_wait_time_with_no_agent_time_reached']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-max_wait_time_with_no_agent_time_reached']."\n"; echo "
\n"; echo " ".$text['label-timeout_action']."\n"; echo "\n"; echo $destination->select('dialplan', 'queue_timeout_action', $queue_timeout_action); echo "
\n"; echo $text['description-timeout_action']."\n"; echo "
\n"; echo " ".$text['label-tier_rules_apply']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-tier_rules_apply']."\n"; echo "
\n"; echo " ".$text['label-tier_rule_wait_second']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-tier_rule_wait_second']."\n"; echo "
\n"; echo " ".$text['label-tier_rule_wait_multiply_level']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-tier_rule_wait_multiply_level']."\n"; echo "
\n"; echo " ".$text['label-tier_rule_no_agent_no_wait']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-tier_rule_no_agent_no_wait']."\n"; echo "
\n"; echo " ".$text['label-discard_abandoned_after']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-discard_abandoned_after']."\n"; echo "
\n"; echo " ".$text['label-abandoned_resume_allowed']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-abandoned_resume_allowed']."\n"; echo "
\n"; echo " ".$text['label-caller_id_name_prefix']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-caller_id_name_prefix']."\n"; echo "
\n"; echo " ".$text['label-outbound_caller_id_name']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-outbound_caller_id_name']."\n"; echo "
\n"; echo " ".$text['label-outbound_caller_id_number']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-outbound_caller_id_number']."\n"; echo "
\n"; echo " ".$text['label-queue_announce_position']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo ($text['description-queue_announce_position'] ?? '')."\n"; echo "
\n"; echo " ".$text['label-'.$instance_label]."\n"; echo "
\n"; echo "\n"; if (if_group("superadmin")) { echo ""; } if ((permission_exists('recording_play') || permission_exists('recording_download')) && (!empty($playable) || empty($instance_value))) { switch (pathinfo($playable, PATHINFO_EXTENSION)) { case 'wav' : $mime_type = 'audio/wav'; break; case 'mp3' : $mime_type = 'audio/mpeg'; break; case 'ogg' : $mime_type = 'audio/ogg'; break; } echo ""; echo button::create(['type'=>'button','title'=>$text['label-play'].' / '.$text['label-pause'],'icon'=>$_SESSION['theme']['button_icon_play'],'id'=>'recording_button_'.$instance_id,'style'=>'display: '.(!empty($mime_type) ? 'inline' : 'none'),'onclick'=>"recording_play('".$instance_id."', document.getElementById('".$instance_id."').value, document.getElementById('".$instance_id."').options[document.getElementById('".$instance_id."').selectedIndex].parentNode.getAttribute('data-type'))"]); unset($playable, $mime_type); } echo "
\n"; echo $text['description-'.$instance_label]."\n"; echo "
\n"; echo " ".$text['label-caller_announce_frequency']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-caller_announce_frequency']."\n"; echo "
\n"; echo " ".$text['label-exit_keys']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-exit_keys']."\n"; echo "
\n"; echo " ".$text['label-queue_email_address']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-queue_email_address']."\n"; echo "
\n"; echo " ".$text['label-context']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-enter-context']."\n"; echo "
\n"; echo " ".$text['label-description']."\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['description-description']."\n"; echo "
"; echo "

"; if ($action == "update") { echo "\n"; echo "\n"; } echo "\n"; echo "
"; //include the footer require_once "resources/footer.php"; ?>