mirror of
https://github.com/fusionpbx/fusionpbx.git
synced 2025-12-30 09:03:49 +00:00
Update the IVR Menu class to make dialplan more modular. Add option for LUA or application IVR.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
The Initial Developer of the Original Code is
|
||||
Mark J Crane <markjcrane@fusionpbx.com>
|
||||
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() {
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
The Initial Developer of the Original Code is
|
||||
Mark J Crane <markjcrane@fusionpbx.com>
|
||||
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 "</b>\n";
|
||||
|
||||
Reference in New Issue
Block a user