Update the IVR Menu class to make dialplan more modular. Add option for LUA or application IVR.

This commit is contained in:
markjcrane 2016-03-19 19:06:06 -06:00
parent bd5db4d7a0
commit e17c11f754
3 changed files with 313 additions and 390 deletions

View File

@ -32,6 +32,31 @@
$apps[$x]['destinations'][$y]['select_value']['dialplan'] = "transfer:\${destination} XML \${context}"; $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_value']['ivr'] = "menu-exec-app:transfer \${destination} XML \${context}";
$apps[$x]['destinations'][$y]['select_label'] = "\${destination} \${name}"; $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 //permission details
$y = 0; $y = 0;

View File

@ -17,7 +17,7 @@
The Initial Developer of the Original Code is The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com> Mark J Crane <markjcrane@fusionpbx.com>
Copyright (C) 2010 Copyright (C) 2010-2016
All Rights Reserved. All Rights Reserved.
Contributor(s): Contributor(s):
@ -160,151 +160,29 @@ include "root.php";
public function add() { public function add() {
//create the database object
$database = new database;
if ($this->db) {
$database->db = $this->db;
}
//add the ivr menu //add the ivr menu
if (strlen($this->ivr_menu_option_action) == 0) { if (strlen($this->ivr_menu_extension) > 0) {
if (strlen($this->ivr_menu_extension) > 0) { //set the ivr menu uuid
//set the ivr menu uuid if (strlen($this->ivr_menu_uuid) == 0) {
if (strlen($this->ivr_menu_uuid) == 0) { $this->ivr_menu_uuid = uuid();
$this->ivr_menu_uuid = uuid(); }
}
//ensure the dialplan_uuid has a uuid //ensure the dialplan_uuid has a uuid
if (strlen($this->dialplan_uuid) == 0) { if (strlen($this->dialplan_uuid) == 0) {
$this->dialplan_uuid = uuid(); $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();
}
} }
//add the ivr menu //add the ivr menu
$database = new database;
if ($this->db) {
$database->db = $this->db;
}
$database->table = "v_ivr_menus"; $database->table = "v_ivr_menus";
$database->fields['domain_uuid'] = $this->domain_uuid; $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['ivr_menu_extension'] = $this->ivr_menu_extension; $database->fields['dialplan_uuid'] = $this->dialplan_uuid;
$database->fields['dialplan_uuid'] = $this->dialplan_uuid;
}
$database->fields['ivr_menu_uuid'] = $this->ivr_menu_uuid; $database->fields['ivr_menu_uuid'] = $this->ivr_menu_uuid;
$database->fields['ivr_menu_name'] = $this->ivr_menu_name; $database->fields['ivr_menu_name'] = $this->ivr_menu_name;
$database->fields['ivr_menu_greet_long'] = $this->ivr_menu_greet_long; $database->fields['ivr_menu_greet_long'] = $this->ivr_menu_greet_long;
@ -336,9 +214,6 @@ include "root.php";
//add the ivr menu option //add the ivr menu option
if (strlen($this->ivr_menu_option_action) > 0) { if (strlen($this->ivr_menu_option_action) > 0) {
$database = new database; $database = new database;
if ($this->db) {
$database->db = $this->db;
}
$database->table = "v_ivr_menu_options"; $database->table = "v_ivr_menu_options";
$database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['domain_uuid'] = $this->domain_uuid;
$database->fields['ivr_menu_uuid'] = $this->ivr_menu_uuid; $database->fields['ivr_menu_uuid'] = $this->ivr_menu_uuid;
@ -351,261 +226,102 @@ include "root.php";
$database->add(); $database->add();
} }
//delete the dialplan context from memcache //update the dialplan
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); $this->dialplan();
if ($fp) {
$switch_cmd .= "memcache delete dialplan:".$_SESSION["context"]."@".$_SESSION['domain_name'];
$switch_result = event_socket_request($fp, 'api '.$switch_cmd);
}
} }
public function update() { public function update() {
//udate the ivr menu //create the database object
if (strlen($this->ivr_menu_option_action) == 0) { $database = new database;
//get the dialplan uuid if ($this->db) {
$database = new database; $database->db = $this->db;
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'];
}
//if the extension number is empty and the dialplan exists then delete the dialplan //get the dialplan uuid
if (strlen($this->ivr_menu_extension) == 0) { $database->table = "v_ivr_menus";
if (strlen($this->dialplan_uuid) > 0) { $database->where[0]['name'] = 'domain_uuid';
//delete dialplan entry $database->where[0]['value'] = $this->domain_uuid;
$database = new database; $database->where[0]['operator'] = '=';
$database->table = "v_dialplan_details"; $database->where[1]['name'] = 'ivr_menu_uuid';
$database->where[0]['name'] = 'domain_uuid'; $database->where[1]['value'] = $this->ivr_menu_uuid;
$database->where[0]['value'] = $this->domain_uuid; $database->where[1]['operator'] = '=';
$database->where[0]['operator'] = '='; $result = $database->find();
$database->where[1]['name'] = 'dialplan_uuid'; foreach($result as $row) {
$database->where[1]['value'] = $this->dialplan_uuid; $this->dialplan_uuid = $row['dialplan_uuid'];
$database->where[1]['operator'] = '='; }
$database->delete();
//delete the child dialplan information //if the extension number is empty and the dialplan exists then delete the dialplan
$database = new database; if (strlen($this->ivr_menu_extension) == 0) {
$database->table = "v_dialplans"; if (strlen($this->dialplan_uuid) > 0) {
$database->where[0]['name'] = 'domain_uuid'; //delete dialplan entry
$database->where[0]['value'] = $this->domain_uuid; $database = new database;
$database->where[0]['operator'] = '='; $database->table = "v_dialplan_details";
$database->where[1]['name'] = 'dialplan_uuid'; $database->where[0]['name'] = 'domain_uuid';
$database->where[1]['value'] = $this->dialplan_uuid; $database->where[0]['value'] = $this->domain_uuid;
$database->where[1]['operator'] = '='; $database->where[0]['operator'] = '=';
$database->delete(); $database->where[1]['name'] = 'dialplan_uuid';
//update the table to remove the dialplan_uuid $database->where[1]['value'] = $this->dialplan_uuid;
$this->dialplan_uuid = ''; $database->where[1]['operator'] = '=';
} $database->delete();
}
//update the ivr menu //delete the child dialplan information
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) {
$database = new database; $database = new database;
$database->table = "v_dialplans"; $database->table = "v_dialplans";
$database->fields['dialplan_name'] = $this->ivr_menu_name; $database->where[0]['name'] = 'domain_uuid';
$database->fields['dialplan_order'] = '333'; $database->where[0]['value'] = $this->domain_uuid;
$database->fields['dialplan_context'] = $_SESSION['context']; $database->where[0]['operator'] = '=';
$database->fields['dialplan_enabled'] = $this->ivr_menu_enabled; $database->where[1]['name'] = 'dialplan_uuid';
$database->fields['dialplan_description'] = $this->ivr_menu_description; $database->where[1]['value'] = $this->dialplan_uuid;
$database->fields['app_uuid'] = $this->app_uuid; $database->where[1]['operator'] = '=';
$database->fields['domain_uuid'] = $this->domain_uuid; $database->delete();
$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();
//delete the old dialplan details to prepare for new details //update the table to remove the dialplan_uuid
$database = new database; $this->dialplan_uuid = '';
$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 //update the ivr menu
$detail_data = '^'.$this->ivr_menu_extension.'$'; if (strlen($this->ivr_menu_extension) > 0) {
$database->table = "v_dialplan_details"; if (strlen($this->dialplan_uuid) == 0) {
$database->fields['domain_uuid'] = $this->domain_uuid; $this->dialplan_uuid = uuid();
$database->fields['dialplan_uuid'] = $this->dialplan_uuid; }
$database->fields['dialplan_detail_uuid'] = uuid(); $database = new database;
$database->fields['dialplan_detail_tag'] = 'condition'; //condition, action, antiaction $database->table = "v_ivr_menus";
$database->fields['dialplan_detail_type'] = 'destination_number'; $database->fields['ivr_menu_uuid'] = $this->ivr_menu_uuid;
$database->fields['dialplan_detail_data'] = $detail_data; $database->fields['dialplan_uuid'] = $this->dialplan_uuid;
$database->fields['dialplan_detail_order'] = '005'; $database->fields['ivr_menu_name'] = $this->ivr_menu_name;
$database->add(); $database->fields['ivr_menu_extension'] = $this->ivr_menu_extension;
$database->fields['ivr_menu_greet_long'] = $this->ivr_menu_greet_long;
$database->table = "v_dialplan_details"; $database->fields['ivr_menu_greet_short'] = $this->ivr_menu_greet_short;
$database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['ivr_menu_invalid_sound'] = $this->ivr_menu_invalid_sound;
$database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['ivr_menu_exit_sound'] = $this->ivr_menu_exit_sound;
$database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['ivr_menu_confirm_macro'] = $this->ivr_menu_confirm_macro;
$database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['ivr_menu_confirm_key'] = $this->ivr_menu_confirm_key;
$database->fields['dialplan_detail_type'] = 'answer'; $database->fields['ivr_menu_tts_engine'] = $this->ivr_menu_tts_engine;
$database->fields['dialplan_detail_data'] = ''; $database->fields['ivr_menu_tts_voice'] = $this->ivr_menu_tts_voice;
$database->fields['dialplan_detail_order'] = '010'; $database->fields['ivr_menu_confirm_attempts'] = $this->ivr_menu_confirm_attempts;
$database->add(); $database->fields['ivr_menu_timeout'] = $this->ivr_menu_timeout;
$database->fields['ivr_menu_exit_app'] = $this->ivr_menu_exit_app;
$database->table = "v_dialplan_details"; $database->fields['ivr_menu_exit_data'] = $this->ivr_menu_exit_data;
$database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['ivr_menu_inter_digit_timeout'] = $this->ivr_menu_inter_digit_timeout;
$database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['ivr_menu_max_failures'] = $this->ivr_menu_max_failures;
$database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['ivr_menu_max_timeouts'] = $this->ivr_menu_max_timeouts;
$database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['ivr_menu_max_timeouts'] = $this->ivr_menu_max_timeouts;
$database->fields['dialplan_detail_type'] = 'sleep'; $database->fields['ivr_menu_digit_len'] = $this->ivr_menu_digit_len;
$database->fields['dialplan_detail_data'] = '1000'; $database->fields['ivr_menu_digit_len'] = $this->ivr_menu_digit_len;
$database->fields['dialplan_detail_order'] = '015'; $database->fields['ivr_menu_direct_dial'] = $this->ivr_menu_direct_dial;
$database->add(); $database->fields['ivr_menu_ringback'] = $this->ivr_menu_ringback;
$database->fields['ivr_menu_cid_prefix'] = $this->ivr_menu_cid_prefix;
$database->table = "v_dialplan_details"; $database->fields['ivr_menu_enabled'] = $this->ivr_menu_enabled;
$database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['ivr_menu_description'] = $this->ivr_menu_description;
$database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->where[0]['name'] = 'domain_uuid';
$database->fields['dialplan_detail_uuid'] = uuid(); $database->where[0]['value'] = $this->domain_uuid;
$database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->where[0]['operator'] = '=';
$database->fields['dialplan_detail_type'] = 'set'; $database->where[1]['name'] = 'ivr_menu_uuid';
$database->fields['dialplan_detail_data'] = 'hangup_after_bridge=true'; $database->where[1]['value'] = $this->ivr_menu_uuid;
$database->fields['dialplan_detail_order'] = '020'; $database->where[1]['operator'] = '=';
$database->add(); $database->update();
$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 option //update the ivr menu option
@ -628,6 +344,9 @@ include "root.php";
$database->where[2]['operator'] = '='; $database->where[2]['operator'] = '=';
$database->update(); $database->update();
} }
//update the dialplan
$this->dialplan();
} }
function delete() { function delete() {
@ -664,7 +383,8 @@ include "root.php";
$database->where[1]['operator'] = '='; $database->where[1]['operator'] = '=';
$result = $database->find(); $result = $database->find();
foreach($result as $row) { foreach($result as $row) {
$this->dialplan_uuid = $row['dialplan_uuid']; //set the uuid
$this->dialplan_uuid = $row['dialplan_uuid'];
//delete the child dialplan information //delete the child dialplan information
$database->table = "v_dialplan_details"; $database->table = "v_dialplan_details";
$database->where[0]['name'] = 'domain_uuid'; $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(){ function get_xml(){
/* /*
//set the global variables //set the global variables
@ -878,8 +777,6 @@ include "root.php";
return $xml; return $xml;
} }
function xml_save_all() {
}
} }
?> ?>

View File

@ -17,7 +17,7 @@
The Initial Developer of the Original Code is The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com> 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. the Initial Developer. All Rights Reserved.
Contributor(s): Contributor(s):
@ -332,6 +332,7 @@ else {
case "api" : echo "API"; break; case "api" : echo "API"; break;
case "cdr" : echo "CDR"; break; case "cdr" : echo "CDR"; break;
case "ldap" : echo "LDAP"; break; case "ldap" : echo "LDAP"; break;
case "ivr menu" : echo "IVR Menu"; break;
default: echo ucwords(str_replace("_", " ", $row['default_setting_category'])); default: echo ucwords(str_replace("_", " ", $row['default_setting_category']));
} }
echo "</b>\n"; echo "</b>\n";