Add IVR Menu search to Call Detail Records

This commit is contained in:
FusionPBX
2025-05-24 18:14:53 -06:00
committed by GitHub
parent 9a2f2e0866
commit 9445d39cc2
5 changed files with 94 additions and 22 deletions

View File

@@ -5,7 +5,7 @@
$apps[$x]['uuid'] = "4a085c51-7635-ff03-f67b-86e834422848";
$apps[$x]['category'] = "Switch";
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "1.2";
$apps[$x]['version'] = "1.3";
$apps[$x]['license'] = "Mozilla Public License 1.1";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "Call Detail Records with all information about the call.";
@@ -132,6 +132,9 @@
$apps[$x]['permissions'][$y]['name'] = "xml_cdr_search_ring_groups";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "xml_cdr_search_ivr_menus";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
$apps[$x]['permissions'][$y]['name'] = "xml_cdr_cc_side";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
@@ -835,6 +838,18 @@
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Save who hung up or cancelled the leg.";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "ring_group_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "ivr_menu_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "call_flow";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "jsonb";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
@@ -875,12 +890,6 @@
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "ring_group_uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
//xml cdr extensions
$y++;

View File

@@ -4148,3 +4148,30 @@ $text['label-ring_group']['tr-tr'] = "Yüzük Grubu";
$text['label-ring_group']['zh-cn'] = "环组";
$text['label-ring_group']['ja-jp'] = "リンググループ";
$text['label-ring_group']['ko-kr'] = "링 그룹";
$text['label-ivr_menu']['en-us'] = "IVR Menu";
$text['label-ivr_menu']['en-gb'] = "IVR Menu";
$text['label-ivr_menu']['ar-eg'] = "قائمة العاج";
$text['label-ivr_menu']['de-at'] = "Automatische Vermittlung";
$text['label-ivr_menu']['de-ch'] = "Automatische Vermittlung";
$text['label-ivr_menu']['de-de'] = "Automatische Vermittlung";
$text['label-ivr_menu']['el-gr'] = "Μενού IVR";
$text['label-ivr_menu']['es-cl'] = "Menú IVR";
$text['label-ivr_menu']['es-mx'] = "Menú IVR";
$text['label-ivr_menu']['fr-ca'] = "Menu RVI";
$text['label-ivr_menu']['fr-fr'] = "Menu SVI";
$text['label-ivr_menu']['he-il'] = "תפריט IVR";
$text['label-ivr_menu']['it-it'] = "Menu IVR";
$text['label-ivr_menu']['ka-ge'] = "IVR მენიუ";
$text['label-ivr_menu']['nl-nl'] = "IVR Menu";
$text['label-ivr_menu']['pl-pl'] = "Menu zapowiedzi głosowej (IVR)";
$text['label-ivr_menu']['pt-br'] = "Menus de IVR";
$text['label-ivr_menu']['pt-pt'] = "Menu de IVR";
$text['label-ivr_menu']['ro-ro'] = "Meniul IVR";
$text['label-ivr_menu']['ru-ru'] = "Голосовое Меню (IVR)";
$text['label-ivr_menu']['sv-se'] = "IVR Meny";
$text['label-ivr_menu']['uk-ua'] = "IVR меню";
$text['label-ivr_menu']['tr-tr'] = "IVR Menüsü";
$text['label-ivr_menu']['zh-cn'] = "IVR 菜单";
$text['label-ivr_menu']['ja-jp'] = "IVRメニュー";
$text['label-ivr_menu']['ko-kr'] = "IVR 메뉴";

View File

@@ -231,6 +231,8 @@
$this->fields[] = "hangup_cause";
$this->fields[] = "hangup_cause_q850";
$this->fields[] = "sip_hangup_disposition";
$this->fields[] = "ring_group_uuid";
$this->fields[] = "ivr_menu_uuid";
if (!empty($this->settings->get('cdr', 'field'))) {
foreach ($this->settings->get('cdr', 'field') as $field) {
@@ -657,7 +659,6 @@
$caller_id_number = preg_replace('#[^0-9\-\#\*]#', '', $caller_id_number);
//misc
$this->array[$key][0]['ring_group_uuid'] = urldecode($xml->variables->ring_group_uuid);
$this->array[$key][0]['xml_cdr_uuid'] = $uuid;
$this->array[$key][0]['destination_number'] = $destination_number;
$this->array[$key][0]['sip_call_id'] = urldecode($xml->variables->sip_call_id);
@@ -674,6 +675,8 @@
$this->array[$key][0]['sip_hangup_disposition'] = urldecode($xml->variables->sip_hangup_disposition);
$this->array[$key][0]['pin_number'] = urldecode($xml->variables->pin_number);
$this->array[$key][0]['status'] = $status;
$this->array[$key][0]['ring_group_uuid'] = urldecode($xml->variables->ring_group_uuid);
$this->array[$key][0]['ivr_menu_uuid'] = urldecode($xml->variables->ivr_menu_uuid);
//time
//catch invalid call detail records

View File

@@ -51,6 +51,7 @@
$permission['xml_cdr_domain'] = permission_exists('xml_cdr_domain');
$permission['xml_cdr_search_call_center_queues'] = permission_exists('xml_cdr_search_call_center_queues');
$permission['xml_cdr_search_ring_groups'] = permission_exists('xml_cdr_search_ring_groups');
$permission['xml_cdr_search_ivr_menus'] = permission_exists('xml_cdr_search_ivr_menus');
$permission['xml_cdr_statistics'] = permission_exists('xml_cdr_statistics');
$permission['xml_cdr_archive'] = permission_exists('xml_cdr_archive');
$permission['xml_cdr_all'] = permission_exists('xml_cdr_all');
@@ -155,11 +156,22 @@
if ($permission['xml_cdr_search_ring_groups']) {
$sql = "select ring_group_uuid, ring_group_name, ring_group_extension from v_ring_groups ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and ring_group_enabled = 'true' ";
$sql .= "order by ring_group_extension asc ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$ring_groups = $database->select($sql, $parameters, 'all');
}
//get the ivr menus
if ($permission['xml_cdr_search_ivr_menus']) {
$sql = "select ivr_menu_uuid, ivr_menu_name, ivr_menu_extension from v_ivr_menus ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and ivr_menu_enabled = 'true' ";
$sql .= "order by ivr_menu_extension asc ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$ivr_menus = $database->select($sql, $parameters, 'all');
}
//get the call center queues
if ($permission['xml_cdr_search_call_center_queues']) {
$sql = "select call_center_queue_uuid, queue_name, queue_extension from v_call_center_queues ";
@@ -595,7 +607,7 @@
echo " </div>\n";
echo " </div>\n";
if ($permission['xml_cdr_search_call_center_queues']) {
if ($permission['xml_cdr_search_call_center_queues'] && is_array($call_center_queues) && @sizeof($call_center_queues) != 0) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-call_center_queue']."\n";
@@ -603,19 +615,17 @@
echo " <div class='field'>\n";
echo " <select class='formfld' name='call_center_queue_uuid' id='call_center_queue_uuid'>\n";
echo " <option value=''></option>";
if (is_array($call_center_queues) && @sizeof($call_center_queues) != 0) {
foreach ($call_center_queues as $row) {
$selected = ($row['call_center_queue_uuid'] == $call_center_queue_uuid) ? "selected" : null;
echo " <option value='".escape($row['call_center_queue_uuid'])."' ".escape($selected).">".((is_numeric($row['queue_extension'])) ? escape($row['queue_extension']." (".$row['queue_name'].")") : escape($row['queue_extension'])." (".escape($row['queue_extension']).")")."</option>";
}
foreach ($call_center_queues as $row) {
$selected = ($row['call_center_queue_uuid'] == $call_center_queue_uuid) ? "selected" : null;
echo " <option value='".escape($row['call_center_queue_uuid'])."' ".escape($selected).">".((is_numeric($row['queue_extension'])) ? escape($row['queue_extension']." (".$row['queue_name'].")") : escape($row['queue_extension'])." (".escape($row['queue_extension']).")")."</option>";
}
echo " </select>\n";
echo " </div>\n";
echo " </div>\n";
unset($sql, $parameters, $call_center_queues, $row, $selected);
unset($call_center_queues, $row, $selected);
}
if ($permission['xml_cdr_search_ring_groups']) {
if ($permission['xml_cdr_search_ring_groups'] && is_array($ring_groups) && @sizeof($ring_groups) != 0) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-ring_group']."\n";
@@ -623,19 +633,35 @@
echo " <div class='field'>\n";
echo " <select class='formfld' name='ring_group_uuid' id='ring_group_uuid'>\n";
echo " <option value=''></option>";
if (is_array($ring_groups) && @sizeof($ring_groups) != 0) {
foreach ($ring_groups as $row) {
$selected = ($row['ring_group_uuid'] == $ring_group_uuid) ? "selected" : null;
echo " <option value='".escape($row['ring_group_uuid'])."' ".escape($selected).">".((is_numeric($row['ring_group_extension'])) ? escape($row['ring_group_extension']." (".$row['ring_group_name'].")") : escape($row['ring_group_extension'])." (".escape($row['ring_group_extension']).")")."</option>";
}
foreach ($ring_groups as $row) {
$selected = ($row['ring_group_uuid'] == $ring_group_uuid) ? "selected" : null;
echo " <option value='".escape($row['ring_group_uuid'])."' ".escape($selected).">".((is_numeric($row['ring_group_extension'])) ? escape($row['ring_group_extension']." (".$row['ring_group_name'].")") : escape($row['ring_group_extension'])." (".escape($row['ring_group_extension']).")")."</option>";
}
echo " </select>\n";
echo " </div>\n";
echo " </div>\n";
unset($sql, $parameters, $ring_groups, $row, $selected);
unset($ring_groups, $row, $selected);
}
}
if ($permission['xml_cdr_search_ivr_menus'] && is_array($ivr_menus) && @sizeof($ivr_menus) != 0) {
echo " <div class='form_set'>\n";
echo " <div class='label'>\n";
echo " ".$text['label-ivr_menu']."\n";
echo " </div>\n";
echo " <div class='field'>\n";
echo " <select class='formfld' name='ivr_menu_uuid' id='ivr_menu_uuid'>\n";
echo " <option value=''></option>";
foreach ($ivr_menus as $row) {
$selected = ($row['ivr_menu_uuid'] == $ivr_menu_uuid) ? "selected" : null;
echo " <option value='".escape($row['ivr_menu_uuid'])."' ".escape($selected).">".((is_numeric($row['ivr_menu_extension'])) ? escape($row['ivr_menu_extension']." (".$row['ivr_menu_name'].")") : escape($row['ivr_menu_extension'])." (".escape($row['ivr_menu_extension']).")")."</option>";
}
echo " </select>\n";
echo " </div>\n";
echo " </div>\n";
unset($ivr_menus, $row, $selected);
}
echo "</div>\n";
button::$collapse = false;

View File

@@ -47,6 +47,7 @@
$permission['xml_cdr_domain'] = permission_exists('xml_cdr_domain');
$permission['xml_cdr_search_call_center_queues'] = permission_exists('xml_cdr_search_call_center_queues');
$permission['xml_cdr_search_ring_groups'] = permission_exists('xml_cdr_search_ring_groups');
$permission['xml_cdr_search_ivr_menus'] = permission_exists('xml_cdr_search_ivr_menus');
$permission['xml_cdr_statistics'] = permission_exists('xml_cdr_statistics');
$permission['xml_cdr_archive'] = permission_exists('xml_cdr_archive');
$permission['xml_cdr_all'] = permission_exists('xml_cdr_all');
@@ -142,6 +143,7 @@
$cc_side = $_REQUEST["cc_side"] ?? '';
$call_center_queue_uuid = $_REQUEST["call_center_queue_uuid"] ?? '';
$ring_group_uuid = $_REQUEST["ring_group_uuid"] ?? '';
$ivr_menu_uuid = $_REQUEST["ivr_menu_uuid"] ?? '';
if (isset($_SESSION['cdr']['field']) && is_array($_SESSION['cdr']['field'])) {
foreach ($_SESSION['cdr']['field'] as $field) {
$array = explode(",", $field);
@@ -617,6 +619,11 @@
$sql .= "and ring_group_uuid = :ring_group_uuid \n";
$parameters['ring_group_uuid'] = $ring_group_uuid;
}
//show specific ivr menus
if (!empty($ivr_menu_uuid)) {
$sql .= "and ivr_menu_uuid = :ivr_menu_uuid \n";
$parameters['ivr_menu_uuid'] = $ivr_menu_uuid;
}
//end where
if (!empty($order_by)) {
$sql .= order_by($order_by, $order);