From 9445d39cc2f98eb703daf77cf3cddbb344696a1c Mon Sep 17 00:00:00 2001 From: FusionPBX Date: Sat, 24 May 2025 18:14:53 -0600 Subject: [PATCH] Add IVR Menu search to Call Detail Records --- app/xml_cdr/app_config.php | 23 +++++++--- app/xml_cdr/app_languages.php | 27 ++++++++++++ app/xml_cdr/resources/classes/xml_cdr.php | 5 ++- app/xml_cdr/xml_cdr.php | 54 +++++++++++++++++------ app/xml_cdr/xml_cdr_inc.php | 7 +++ 5 files changed, 94 insertions(+), 22 deletions(-) diff --git a/app/xml_cdr/app_config.php b/app/xml_cdr/app_config.php index 23707ebf44..3df7260b91 100644 --- a/app/xml_cdr/app_config.php +++ b/app/xml_cdr/app_config.php @@ -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++; diff --git a/app/xml_cdr/app_languages.php b/app/xml_cdr/app_languages.php index 333917a74e..c2f86c46dc 100644 --- a/app/xml_cdr/app_languages.php +++ b/app/xml_cdr/app_languages.php @@ -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 메뉴"; diff --git a/app/xml_cdr/resources/classes/xml_cdr.php b/app/xml_cdr/resources/classes/xml_cdr.php index ae28d8c464..d31ab14766 100644 --- a/app/xml_cdr/resources/classes/xml_cdr.php +++ b/app/xml_cdr/resources/classes/xml_cdr.php @@ -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 diff --git a/app/xml_cdr/xml_cdr.php b/app/xml_cdr/xml_cdr.php index 0614469a85..30b9840c6a 100644 --- a/app/xml_cdr/xml_cdr.php +++ b/app/xml_cdr/xml_cdr.php @@ -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 " \n"; echo " \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 "
\n"; echo "
\n"; echo " ".$text['label-call_center_queue']."\n"; @@ -603,19 +615,17 @@ echo "
\n"; echo " \n"; echo "
\n"; echo "
\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 "
\n"; echo "
\n"; echo " ".$text['label-ring_group']."\n"; @@ -623,19 +633,35 @@ echo "
\n"; echo " \n"; echo "
\n"; echo "
\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 "
\n"; + echo "
\n"; + echo " ".$text['label-ivr_menu']."\n"; + echo "
\n"; + echo "
\n"; + echo " \n"; + echo "
\n"; + echo "
\n"; + unset($ivr_menus, $row, $selected); + } + echo "
\n"; button::$collapse = false; diff --git a/app/xml_cdr/xml_cdr_inc.php b/app/xml_cdr/xml_cdr_inc.php index 50ad1bfb77..0dd1311c09 100644 --- a/app/xml_cdr/xml_cdr_inc.php +++ b/app/xml_cdr/xml_cdr_inc.php @@ -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);