From e984d7e00a51c3d4fe0947172e2346ff60454034 Mon Sep 17 00:00:00 2001 From: markjcrane Date: Sat, 19 Mar 2016 19:06:06 -0600 Subject: [PATCH] Update the IVR Menu class to make dialplan more modular. Add option for LUA or application IVR. --- app/ivr_menus/app_config.php | 25 + app/ivr_menus/resources/classes/ivr_menu.php | 675 ++++++++----------- core/default_settings/default_settings.php | 3 +- 3 files changed, 313 insertions(+), 390 deletions(-) diff --git a/app/ivr_menus/app_config.php b/app/ivr_menus/app_config.php index 911b6ef3d0..467f2a923d 100644 --- a/app/ivr_menus/app_config.php +++ b/app/ivr_menus/app_config.php @@ -32,6 +32,31 @@ $apps[$x]['destinations'][$y]['select_value']['dialplan'] = "transfer:\${destination} XML \${context}"; $apps[$x]['destinations'][$y]['select_value']['ivr'] = "menu-exec-app:transfer \${destination} XML \${context}"; $apps[$x]['destinations'][$y]['select_label'] = "\${destination} \${name}"; + if ($_SESSION['ivr menu']['application']['text'] != "lua") { + $y++; + $this->destinations[$x]['type'] = 'array'; + //$this->destinations[$x]['label'] = 'ivr_menus'; + $this->destinations[$x]['result']['data'][$y]['label'] = 'menu-top'; + $this->destinations[$x]['result']['data'][$y]['name'] = 'menu-top:'; + $this->destinations[$x]['result']['data'][$y]['destination'] = 'menu-top'; + $y++; + $this->destinations[$x]['result']['data'][$y]['label'] = 'menu-exit'; + $this->destinations[$x]['result']['data'][$y]['name'] = 'menu-exit'; + $this->destinations[$x]['result']['data'][$y]['destination'] = 'menu-exit'; + $y++; + $apps[$x]['destinations'][$y]['type'] = "sql"; + $apps[$x]['destinations'][$y]['label'] = "sub_ivr_menus"; + $apps[$x]['destinations'][$y]['name'] = "ivr_menus"; + $apps[$x]['destinations'][$y]['where'] = "where domain_uuid = '\${domain_uuid}' and ivr_menu_enabled = 'true' "; + $apps[$x]['destinations'][$y]['order_by'] = "ivr_menu_extension asc"; + $apps[$x]['destinations'][$y]['field']['name'] = "ivr_menu_name"; + $apps[$x]['destinations'][$y]['field']['destination'] = "ivr_menu_uuid"; + //$apps[$x]['destinations'][$y]['select_value']['dialplan'] = "ivr:\${uuid}"; + $apps[$x]['destinations'][$y]['select_value']['ivr'] = "menu-sub:ivr \${uuid}"; + $apps[$x]['destinations'][$y]['select_label'] = "\${destination} \${name}"; + } + //menu-say-phrase + //menu-play-sound //permission details $y = 0; diff --git a/app/ivr_menus/resources/classes/ivr_menu.php b/app/ivr_menus/resources/classes/ivr_menu.php index 6f8c8a9bb2..3e03617268 100644 --- a/app/ivr_menus/resources/classes/ivr_menu.php +++ b/app/ivr_menus/resources/classes/ivr_menu.php @@ -17,7 +17,7 @@ The Initial Developer of the Original Code is Mark J Crane - Copyright (C) 2010 + Copyright (C) 2010-2016 All Rights Reserved. Contributor(s): @@ -160,151 +160,29 @@ include "root.php"; public function add() { + //create the database object + $database = new database; + if ($this->db) { + $database->db = $this->db; + } + //add the ivr menu - if (strlen($this->ivr_menu_option_action) == 0) { - if (strlen($this->ivr_menu_extension) > 0) { - //set the ivr menu uuid - if (strlen($this->ivr_menu_uuid) == 0) { - $this->ivr_menu_uuid = uuid(); - } + if (strlen($this->ivr_menu_extension) > 0) { + //set the ivr menu uuid + if (strlen($this->ivr_menu_uuid) == 0) { + $this->ivr_menu_uuid = uuid(); + } - //ensure the dialplan_uuid has a uuid - if (strlen($this->dialplan_uuid) == 0) { - $this->dialplan_uuid = uuid(); - } - - //add the dialplan - $database = new database; - if ($this->db) { - $database->db = $this->db; - } - $database->table = "v_dialplans"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_name'] = $this->ivr_menu_name; - $database->fields['dialplan_order'] = '333'; - $database->fields['dialplan_context'] = $_SESSION['context']; - $database->fields['dialplan_enabled'] = $this->ivr_menu_enabled; - $database->fields['dialplan_description'] = $this->ivr_menu_description; - $database->fields['app_uuid'] = $this->app_uuid; - $database->add(); - - //add the dialplan details - $detail_data = '^'.$this->ivr_menu_extension.'$'; - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'condition'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'destination_number'; - $database->fields['dialplan_detail_data'] = $detail_data; - $database->fields['dialplan_detail_order'] = '005'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'answer'; - $database->fields['dialplan_detail_data'] = ''; - $database->fields['dialplan_detail_order'] = '010'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'sleep'; - $database->fields['dialplan_detail_data'] = '1000'; - $database->fields['dialplan_detail_order'] = '015'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'set'; - $database->fields['dialplan_detail_data'] = 'hangup_after_bridge=true'; - $database->fields['dialplan_detail_order'] = '020'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'set'; - if ($this->ivr_menu_ringback == "music" || $this->ivr_menu_ringback == "") { - $database->fields['dialplan_detail_data'] = 'ringback=${hold_music}'; - } - else { - $database->fields['dialplan_detail_data'] = 'ringback='.$this->ivr_menu_ringback; - } - $database->fields['dialplan_detail_order'] = '025'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'set'; - if ($this->ivr_menu_ringback == "music" || $this->ivr_menu_ringback == "") { - $database->fields['dialplan_detail_data'] = 'transfer_ringback=${hold_music}'; - } - else { - $database->fields['dialplan_detail_data'] = 'transfer_ringback='.$this->ivr_menu_ringback; - } - $database->fields['dialplan_detail_order'] = '030'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'set'; - $database->fields['dialplan_detail_data'] = 'ivr_menu_uuid='.$this->ivr_menu_uuid; - $database->fields['dialplan_detail_order'] = '035'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'lua'; - $database->fields['dialplan_detail_data'] = 'ivr_menu.lua'; - $database->fields['dialplan_detail_order'] = '040'; - $database->add(); - - if (strlen($this->ivr_menu_exit_app) > 0) { - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = $this->ivr_menu_exit_app; - $database->fields['dialplan_detail_data'] = $this->ivr_menu_exit_data; - $database->fields['dialplan_detail_order'] = '045'; - $database->add(); - } + //ensure the dialplan_uuid has a uuid + if (strlen($this->dialplan_uuid) == 0) { + $this->dialplan_uuid = uuid(); } //add the ivr menu - $database = new database; - if ($this->db) { - $database->db = $this->db; - } $database->table = "v_ivr_menus"; $database->fields['domain_uuid'] = $this->domain_uuid; - if (strlen($this->ivr_menu_extension) > 0) { - $database->fields['ivr_menu_extension'] = $this->ivr_menu_extension; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - } + $database->fields['ivr_menu_extension'] = $this->ivr_menu_extension; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['ivr_menu_uuid'] = $this->ivr_menu_uuid; $database->fields['ivr_menu_name'] = $this->ivr_menu_name; $database->fields['ivr_menu_greet_long'] = $this->ivr_menu_greet_long; @@ -336,9 +214,6 @@ include "root.php"; //add the ivr menu option if (strlen($this->ivr_menu_option_action) > 0) { $database = new database; - if ($this->db) { - $database->db = $this->db; - } $database->table = "v_ivr_menu_options"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['ivr_menu_uuid'] = $this->ivr_menu_uuid; @@ -351,261 +226,102 @@ include "root.php"; $database->add(); } - //delete the dialplan context from memcache - $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); - if ($fp) { - $switch_cmd .= "memcache delete dialplan:".$_SESSION["context"]."@".$_SESSION['domain_name']; - $switch_result = event_socket_request($fp, 'api '.$switch_cmd); - } + //update the dialplan + $this->dialplan(); } public function update() { - //udate the ivr menu - if (strlen($this->ivr_menu_option_action) == 0) { - //get the dialplan uuid - $database = new database; - if ($this->db) { - $database->db = $this->db; - } - $database->table = "v_ivr_menus"; - $database->where[0]['name'] = 'domain_uuid'; - $database->where[0]['value'] = $this->domain_uuid; - $database->where[0]['operator'] = '='; - $database->where[1]['name'] = 'ivr_menu_uuid'; - $database->where[1]['value'] = $this->ivr_menu_uuid; - $database->where[1]['operator'] = '='; - $result = $database->find(); - foreach($result as $row) { - $this->dialplan_uuid = $row['dialplan_uuid']; - } + //create the database object + $database = new database; + if ($this->db) { + $database->db = $this->db; + } - //if the extension number is empty and the dialplan exists then delete the dialplan - if (strlen($this->ivr_menu_extension) == 0) { - if (strlen($this->dialplan_uuid) > 0) { - //delete dialplan entry - $database = new database; - $database->table = "v_dialplan_details"; - $database->where[0]['name'] = 'domain_uuid'; - $database->where[0]['value'] = $this->domain_uuid; - $database->where[0]['operator'] = '='; - $database->where[1]['name'] = 'dialplan_uuid'; - $database->where[1]['value'] = $this->dialplan_uuid; - $database->where[1]['operator'] = '='; - $database->delete(); + //get the dialplan uuid + $database->table = "v_ivr_menus"; + $database->where[0]['name'] = 'domain_uuid'; + $database->where[0]['value'] = $this->domain_uuid; + $database->where[0]['operator'] = '='; + $database->where[1]['name'] = 'ivr_menu_uuid'; + $database->where[1]['value'] = $this->ivr_menu_uuid; + $database->where[1]['operator'] = '='; + $result = $database->find(); + foreach($result as $row) { + $this->dialplan_uuid = $row['dialplan_uuid']; + } - //delete the child dialplan information - $database = new database; - $database->table = "v_dialplans"; - $database->where[0]['name'] = 'domain_uuid'; - $database->where[0]['value'] = $this->domain_uuid; - $database->where[0]['operator'] = '='; - $database->where[1]['name'] = 'dialplan_uuid'; - $database->where[1]['value'] = $this->dialplan_uuid; - $database->where[1]['operator'] = '='; - $database->delete(); - //update the table to remove the dialplan_uuid - $this->dialplan_uuid = ''; - } - } + //if the extension number is empty and the dialplan exists then delete the dialplan + if (strlen($this->ivr_menu_extension) == 0) { + if (strlen($this->dialplan_uuid) > 0) { + //delete dialplan entry + $database = new database; + $database->table = "v_dialplan_details"; + $database->where[0]['name'] = 'domain_uuid'; + $database->where[0]['value'] = $this->domain_uuid; + $database->where[0]['operator'] = '='; + $database->where[1]['name'] = 'dialplan_uuid'; + $database->where[1]['value'] = $this->dialplan_uuid; + $database->where[1]['operator'] = '='; + $database->delete(); - //update the ivr menu - if (strlen($this->dialplan_uuid) == 0) { - $this->dialplan_uuid = uuid(); - } - $database = new database; - $database->table = "v_ivr_menus"; - $database->fields['ivr_menu_uuid'] = $this->ivr_menu_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['ivr_menu_name'] = $this->ivr_menu_name; - $database->fields['ivr_menu_extension'] = $this->ivr_menu_extension; - $database->fields['ivr_menu_greet_long'] = $this->ivr_menu_greet_long; - $database->fields['ivr_menu_greet_short'] = $this->ivr_menu_greet_short; - $database->fields['ivr_menu_invalid_sound'] = $this->ivr_menu_invalid_sound; - $database->fields['ivr_menu_exit_sound'] = $this->ivr_menu_exit_sound; - $database->fields['ivr_menu_confirm_macro'] = $this->ivr_menu_confirm_macro; - $database->fields['ivr_menu_confirm_key'] = $this->ivr_menu_confirm_key; - $database->fields['ivr_menu_tts_engine'] = $this->ivr_menu_tts_engine; - $database->fields['ivr_menu_tts_voice'] = $this->ivr_menu_tts_voice; - $database->fields['ivr_menu_confirm_attempts'] = $this->ivr_menu_confirm_attempts; - $database->fields['ivr_menu_timeout'] = $this->ivr_menu_timeout; - $database->fields['ivr_menu_exit_app'] = $this->ivr_menu_exit_app; - $database->fields['ivr_menu_exit_data'] = $this->ivr_menu_exit_data; - $database->fields['ivr_menu_inter_digit_timeout'] = $this->ivr_menu_inter_digit_timeout; - $database->fields['ivr_menu_max_failures'] = $this->ivr_menu_max_failures; - $database->fields['ivr_menu_max_timeouts'] = $this->ivr_menu_max_timeouts; - $database->fields['ivr_menu_max_timeouts'] = $this->ivr_menu_max_timeouts; - $database->fields['ivr_menu_digit_len'] = $this->ivr_menu_digit_len; - $database->fields['ivr_menu_digit_len'] = $this->ivr_menu_digit_len; - $database->fields['ivr_menu_direct_dial'] = $this->ivr_menu_direct_dial; - $database->fields['ivr_menu_ringback'] = $this->ivr_menu_ringback; - $database->fields['ivr_menu_cid_prefix'] = $this->ivr_menu_cid_prefix; - $database->fields['ivr_menu_enabled'] = $this->ivr_menu_enabled; - $database->fields['ivr_menu_description'] = $this->ivr_menu_description; - $database->where[0]['name'] = 'domain_uuid'; - $database->where[0]['value'] = $this->domain_uuid; - $database->where[0]['operator'] = '='; - $database->where[1]['name'] = 'ivr_menu_uuid'; - $database->where[1]['value'] = $this->ivr_menu_uuid; - $database->where[1]['operator'] = '='; - $database->update(); - - //check to see if the dialplan entry exists - $dialplan = new dialplan; - $dialplan->domain_uuid = $_SESSION["domain_uuid"]; - $dialplan->dialplan_uuid = $this->dialplan_uuid; - $dialplan_exists = $dialplan->dialplan_exists(); - - //if the dialplan entry does not exist then add it - if (!$dialplan_exists) { + //delete the child dialplan information $database = new database; $database->table = "v_dialplans"; - $database->fields['dialplan_name'] = $this->ivr_menu_name; - $database->fields['dialplan_order'] = '333'; - $database->fields['dialplan_context'] = $_SESSION['context']; - $database->fields['dialplan_enabled'] = $this->ivr_menu_enabled; - $database->fields['dialplan_description'] = $this->ivr_menu_description; - $database->fields['app_uuid'] = $this->app_uuid; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->add(); - } - //if the dialplan entry exists then update it - if ($dialplan_exists && strlen($this->ivr_menu_extension) > 0) { - //update the dialplan - $database = new database; - $database->table = "v_dialplans"; - $database->fields['dialplan_name'] = $this->ivr_menu_name; - $database->fields['dialplan_order'] = '333'; - $database->fields['dialplan_context'] = $_SESSION['context']; - $database->fields['dialplan_enabled'] = $this->ivr_menu_enabled; - $database->fields['dialplan_description'] = $this->ivr_menu_description; - $database->fields['app_uuid'] = $this->app_uuid; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->where[0]['name'] = 'domain_uuid'; - $database->where[0]['value'] = $this->domain_uuid; - $database->where[0]['operator'] = '='; - $database->where[1]['name'] = 'dialplan_uuid'; - $database->where[1]['value'] = $this->dialplan_uuid; - $database->where[1]['operator'] = '='; - $database->update(); + $database->where[0]['name'] = 'domain_uuid'; + $database->where[0]['value'] = $this->domain_uuid; + $database->where[0]['operator'] = '='; + $database->where[1]['name'] = 'dialplan_uuid'; + $database->where[1]['value'] = $this->dialplan_uuid; + $database->where[1]['operator'] = '='; + $database->delete(); - //delete the old dialplan details to prepare for new details - $database = new database; - $database->table = "v_dialplan_details"; - $database->where[0]['name'] = 'domain_uuid'; - $database->where[0]['value'] = $this->domain_uuid; - $database->where[0]['operator'] = '='; - $database->where[1]['name'] = 'dialplan_uuid'; - $database->where[1]['value'] = $this->dialplan_uuid; - $database->where[1]['operator'] = '='; - $database->delete(); - } + //update the table to remove the dialplan_uuid + $this->dialplan_uuid = ''; + } + } - //add the dialplan details - $detail_data = '^'.$this->ivr_menu_extension.'$'; - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'condition'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'destination_number'; - $database->fields['dialplan_detail_data'] = $detail_data; - $database->fields['dialplan_detail_order'] = '005'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'answer'; - $database->fields['dialplan_detail_data'] = ''; - $database->fields['dialplan_detail_order'] = '010'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'sleep'; - $database->fields['dialplan_detail_data'] = '1000'; - $database->fields['dialplan_detail_order'] = '015'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'set'; - $database->fields['dialplan_detail_data'] = 'hangup_after_bridge=true'; - $database->fields['dialplan_detail_order'] = '020'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'set'; - if ($this->ivr_menu_ringback == "music" || $this->ivr_menu_ringback == "") { - $database->fields['dialplan_detail_data'] = 'ringback=${hold_music}'; - } - else { - $database->fields['dialplan_detail_data'] = 'ringback='.$this->ivr_menu_ringback; - } - $database->fields['dialplan_detail_order'] = '025'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'set'; - if ($this->ivr_menu_ringback == "music" || $this->ivr_menu_ringback == "") { - $database->fields['dialplan_detail_data'] = 'transfer_ringback=${hold_music}'; - } - else { - $database->fields['dialplan_detail_data'] = 'transfer_ringback='.$this->ivr_menu_ringback; - } - $database->fields['dialplan_detail_order'] = '030'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'set'; - $database->fields['dialplan_detail_data'] = 'ivr_menu_uuid='.$this->ivr_menu_uuid; - $database->fields['dialplan_detail_order'] = '035'; - $database->add(); - - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = 'lua'; - $database->fields['dialplan_detail_data'] = 'ivr_menu.lua'; - $database->fields['dialplan_detail_order'] = '040'; - $database->add(); - - if (strlen($this->ivr_menu_exit_app) > 0) { - $database->table = "v_dialplan_details"; - $database->fields['domain_uuid'] = $this->domain_uuid; - $database->fields['dialplan_uuid'] = $this->dialplan_uuid; - $database->fields['dialplan_detail_uuid'] = uuid(); - $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction - $database->fields['dialplan_detail_type'] = $this->ivr_menu_exit_app; - $database->fields['dialplan_detail_data'] = $this->ivr_menu_exit_data; - $database->fields['dialplan_detail_order'] = '045'; - $database->add(); - } + //update the ivr menu + if (strlen($this->ivr_menu_extension) > 0) { + if (strlen($this->dialplan_uuid) == 0) { + $this->dialplan_uuid = uuid(); + } + $database = new database; + $database->table = "v_ivr_menus"; + $database->fields['ivr_menu_uuid'] = $this->ivr_menu_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['ivr_menu_name'] = $this->ivr_menu_name; + $database->fields['ivr_menu_extension'] = $this->ivr_menu_extension; + $database->fields['ivr_menu_greet_long'] = $this->ivr_menu_greet_long; + $database->fields['ivr_menu_greet_short'] = $this->ivr_menu_greet_short; + $database->fields['ivr_menu_invalid_sound'] = $this->ivr_menu_invalid_sound; + $database->fields['ivr_menu_exit_sound'] = $this->ivr_menu_exit_sound; + $database->fields['ivr_menu_confirm_macro'] = $this->ivr_menu_confirm_macro; + $database->fields['ivr_menu_confirm_key'] = $this->ivr_menu_confirm_key; + $database->fields['ivr_menu_tts_engine'] = $this->ivr_menu_tts_engine; + $database->fields['ivr_menu_tts_voice'] = $this->ivr_menu_tts_voice; + $database->fields['ivr_menu_confirm_attempts'] = $this->ivr_menu_confirm_attempts; + $database->fields['ivr_menu_timeout'] = $this->ivr_menu_timeout; + $database->fields['ivr_menu_exit_app'] = $this->ivr_menu_exit_app; + $database->fields['ivr_menu_exit_data'] = $this->ivr_menu_exit_data; + $database->fields['ivr_menu_inter_digit_timeout'] = $this->ivr_menu_inter_digit_timeout; + $database->fields['ivr_menu_max_failures'] = $this->ivr_menu_max_failures; + $database->fields['ivr_menu_max_timeouts'] = $this->ivr_menu_max_timeouts; + $database->fields['ivr_menu_max_timeouts'] = $this->ivr_menu_max_timeouts; + $database->fields['ivr_menu_digit_len'] = $this->ivr_menu_digit_len; + $database->fields['ivr_menu_digit_len'] = $this->ivr_menu_digit_len; + $database->fields['ivr_menu_direct_dial'] = $this->ivr_menu_direct_dial; + $database->fields['ivr_menu_ringback'] = $this->ivr_menu_ringback; + $database->fields['ivr_menu_cid_prefix'] = $this->ivr_menu_cid_prefix; + $database->fields['ivr_menu_enabled'] = $this->ivr_menu_enabled; + $database->fields['ivr_menu_description'] = $this->ivr_menu_description; + $database->where[0]['name'] = 'domain_uuid'; + $database->where[0]['value'] = $this->domain_uuid; + $database->where[0]['operator'] = '='; + $database->where[1]['name'] = 'ivr_menu_uuid'; + $database->where[1]['value'] = $this->ivr_menu_uuid; + $database->where[1]['operator'] = '='; + $database->update(); } //update the ivr menu option @@ -628,6 +344,9 @@ include "root.php"; $database->where[2]['operator'] = '='; $database->update(); } + + //update the dialplan + $this->dialplan(); } function delete() { @@ -664,7 +383,8 @@ include "root.php"; $database->where[1]['operator'] = '='; $result = $database->find(); foreach($result as $row) { - $this->dialplan_uuid = $row['dialplan_uuid']; + //set the uuid + $this->dialplan_uuid = $row['dialplan_uuid']; //delete the child dialplan information $database->table = "v_dialplan_details"; $database->where[0]['name'] = 'domain_uuid'; @@ -717,6 +437,185 @@ include "root.php"; } } + public function dialplan() { + //create the database object + $database = new database; + if ($this->db) { + $database->db = $this->db; + } + + //check to see if the dialplan entry exists + $dialplan = new dialplan; + $dialplan->domain_uuid = $_SESSION["domain_uuid"]; + $dialplan->dialplan_uuid = $this->dialplan_uuid; + $dialplan_exists = $dialplan->dialplan_exists(); + + //if the dialplan entry does not exist then add it + if (!$dialplan_exists) { + $database = new database; + $database->table = "v_dialplans"; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['dialplan_name'] = $this->ivr_menu_name; + $database->fields['dialplan_order'] = '333'; + $database->fields['dialplan_context'] = $_SESSION['context']; + $database->fields['dialplan_enabled'] = $this->ivr_menu_enabled; + $database->fields['dialplan_description'] = $this->ivr_menu_description; + $database->fields['app_uuid'] = $this->app_uuid; + $database->add(); + } + + //if the dialplan entry exists then update it + if ($dialplan_exists && strlen($this->ivr_menu_extension) > 0) { + //update the dialplan + $database = new database; + $database->table = "v_dialplans"; + $database->fields['dialplan_name'] = $this->ivr_menu_name; + $database->fields['dialplan_order'] = '333'; + $database->fields['dialplan_context'] = $_SESSION['context']; + $database->fields['dialplan_enabled'] = $this->ivr_menu_enabled; + $database->fields['dialplan_description'] = $this->ivr_menu_description; + $database->fields['app_uuid'] = $this->app_uuid; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->where[0]['name'] = 'domain_uuid'; + $database->where[0]['value'] = $this->domain_uuid; + $database->where[0]['operator'] = '='; + $database->where[1]['name'] = 'dialplan_uuid'; + $database->where[1]['value'] = $this->dialplan_uuid; + $database->where[1]['operator'] = '='; + $database->update(); + + //delete the old dialplan details to prepare for new details + $database = new database; + $database->table = "v_dialplan_details"; + $database->where[0]['name'] = 'domain_uuid'; + $database->where[0]['value'] = $this->domain_uuid; + $database->where[0]['operator'] = '='; + $database->where[1]['name'] = 'dialplan_uuid'; + $database->where[1]['value'] = $this->dialplan_uuid; + $database->where[1]['operator'] = '='; + $database->delete(); + } + + //add the dialplan details + $detail_data = '^'.$this->ivr_menu_extension.'$'; + $database->table = "v_dialplan_details"; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['dialplan_detail_uuid'] = uuid(); + $database->fields['dialplan_detail_tag'] = 'condition'; //condition, action, antiaction + $database->fields['dialplan_detail_type'] = 'destination_number'; + $database->fields['dialplan_detail_data'] = $detail_data; + $database->fields['dialplan_detail_order'] = '005'; + $database->add(); + + $database->table = "v_dialplan_details"; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['dialplan_detail_uuid'] = uuid(); + $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction + $database->fields['dialplan_detail_type'] = 'answer'; + $database->fields['dialplan_detail_data'] = ''; + $database->fields['dialplan_detail_order'] = '010'; + $database->add(); + + $database->table = "v_dialplan_details"; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['dialplan_detail_uuid'] = uuid(); + $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction + $database->fields['dialplan_detail_type'] = 'sleep'; + $database->fields['dialplan_detail_data'] = '1000'; + $database->fields['dialplan_detail_order'] = '015'; + $database->add(); + + $database->table = "v_dialplan_details"; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['dialplan_detail_uuid'] = uuid(); + $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction + $database->fields['dialplan_detail_type'] = 'set'; + $database->fields['dialplan_detail_data'] = 'hangup_after_bridge=true'; + $database->fields['dialplan_detail_order'] = '020'; + $database->add(); + + $database->table = "v_dialplan_details"; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['dialplan_detail_uuid'] = uuid(); + $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction + $database->fields['dialplan_detail_type'] = 'set'; + if ($this->ivr_menu_ringback == "music" || $this->ivr_menu_ringback == "") { + $database->fields['dialplan_detail_data'] = 'ringback=${hold_music}'; + } + else { + $database->fields['dialplan_detail_data'] = 'ringback='.$this->ivr_menu_ringback; + } + $database->fields['dialplan_detail_order'] = '025'; + $database->add(); + + $database->table = "v_dialplan_details"; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['dialplan_detail_uuid'] = uuid(); + $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction + $database->fields['dialplan_detail_type'] = 'set'; + if ($this->ivr_menu_ringback == "music" || $this->ivr_menu_ringback == "") { + $database->fields['dialplan_detail_data'] = 'transfer_ringback=${hold_music}'; + } + else { + $database->fields['dialplan_detail_data'] = 'transfer_ringback='.$this->ivr_menu_ringback; + } + $database->fields['dialplan_detail_order'] = '030'; + $database->add(); + + $database->table = "v_dialplan_details"; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['dialplan_detail_uuid'] = uuid(); + $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction + $database->fields['dialplan_detail_type'] = 'set'; + $database->fields['dialplan_detail_data'] = 'ivr_menu_uuid='.$this->ivr_menu_uuid; + $database->fields['dialplan_detail_order'] = '035'; + $database->add(); + + $database->table = "v_dialplan_details"; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['dialplan_detail_uuid'] = uuid(); + $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction + if ($_SESSION['ivr menu']['application']['text'] == "lua") { + $database->fields['dialplan_detail_type'] = 'lua'; + $database->fields['dialplan_detail_data'] = 'ivr_menu.lua'; + } + else { + $database->fields['dialplan_detail_type'] = 'ivr'; + $database->fields['dialplan_detail_data'] = $this->ivr_menu_uuid; + } + $database->fields['dialplan_detail_order'] = '040'; + $database->add(); + + if (strlen($this->ivr_menu_exit_app) > 0) { + $database->table = "v_dialplan_details"; + $database->fields['domain_uuid'] = $this->domain_uuid; + $database->fields['dialplan_uuid'] = $this->dialplan_uuid; + $database->fields['dialplan_detail_uuid'] = uuid(); + $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction + $database->fields['dialplan_detail_type'] = $this->ivr_menu_exit_app; + $database->fields['dialplan_detail_data'] = $this->ivr_menu_exit_data; + $database->fields['dialplan_detail_order'] = '045'; + $database->add(); + } + + //delete the dialplan context from memcache + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + if ($fp) { + $switch_cmd .= "memcache delete dialplan:".$_SESSION["context"]."@".$_SESSION['domain_name']; + $switch_result = event_socket_request($fp, 'api '.$switch_cmd); + } + } + function get_xml(){ /* //set the global variables @@ -878,8 +777,6 @@ include "root.php"; return $xml; } - function xml_save_all() { - } } ?> \ No newline at end of file diff --git a/core/default_settings/default_settings.php b/core/default_settings/default_settings.php index 46b9562017..24319d5b00 100644 --- a/core/default_settings/default_settings.php +++ b/core/default_settings/default_settings.php @@ -17,7 +17,7 @@ The Initial Developer of the Original Code is Mark J Crane - Portions created by the Initial Developer are Copyright (C) 2008-2015 + Portions created by the Initial Developer are Copyright (C) 2008-2016 the Initial Developer. All Rights Reserved. Contributor(s): @@ -332,6 +332,7 @@ else { case "api" : echo "API"; break; case "cdr" : echo "CDR"; break; case "ldap" : echo "LDAP"; break; + case "ivr menu" : echo "IVR Menu"; break; default: echo ucwords(str_replace("_", " ", $row['default_setting_category'])); } echo "\n";