diff --git a/app/destinations/destination_edit.php b/app/destinations/destination_edit.php
index cb2a0aabd6..4be8cd2b1e 100644
--- a/app/destinations/destination_edit.php
+++ b/app/destinations/destination_edit.php
@@ -60,6 +60,7 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/app/billing/app_config.
$destination_type = check_str($_POST["destination_type"]);
$destination_number = check_str($_POST["destination_number"]);
$db_destination_number = check_str($_POST["db_destination_number"]);
+ $regex_destination_number = str_replace("+", "\\+", $destination_number);
$destination_caller_id_name = check_str($_POST["destination_caller_id_name"]);
$destination_caller_id_number = check_str($_POST["destination_caller_id_number"]);
$destination_context = check_str($_POST["destination_context"]);
diff --git a/app/ivr_menu/resources/classes/ivr_menu.php b/app/ivr_menu/resources/classes/ivr_menu.php
index 9923354931..2735734999 100644
--- a/app/ivr_menu/resources/classes/ivr_menu.php
+++ b/app/ivr_menu/resources/classes/ivr_menu.php
@@ -735,6 +735,158 @@ include "root.php";
}
function get_xml(){
+ //set the global variables
+ global $db;
+
+ //prepare for dialplan .xml files to be written. delete all dialplan files that are prefixed with dialplan_ and have a file extension of .xml
+ if (count($_SESSION["domains"]) > 1) {
+ $v_needle = 'v_'.$_SESSION['domain_name'].'_';
+ }
+ else {
+ $v_needle = 'v_';
+ }
+ if($dh = opendir($_SESSION['switch']['conf']['dir']."/ivr_menus/")) {
+ $files = Array();
+ while($file = readdir($dh)) {
+ if($file != "." && $file != ".." && $file[0] != '.') {
+ if(is_dir($dir . "/" . $file)) {
+ //this is a directory
+ } else {
+ if (strpos($file, $v_needle) !== false && substr($file,-4) == '.xml') {
+ //echo "file: $file
\n";
+ unlink($_SESSION['switch']['conf']['dir']."/ivr_menus/".$file);
+ }
+ }
+ }
+ }
+ closedir($dh);
+ }
+
+ $sql = "select * from v_ivr_menus ";
+ $sql .= "where domain_uuid = '".$_SESSION['domain_uuid']."' ";
+ $prep_statement = $db->prepare(check_sql($sql));
+ $prep_statement->execute();
+ $result = $prep_statement->fetchAll(PDO::FETCH_ASSOC);
+ $result_count = count($result);
+ unset ($prep_statement, $sql);
+ if ($result_count > 0) {
+ foreach($result as $row) {
+ $dialplan_uuid = $row["dialplan_uuid"];
+ $ivr_menu_uuid = $row["ivr_menu_uuid"];
+ $ivr_menu_name = check_str($row["ivr_menu_name"]);
+ $ivr_menu_extension = $row["ivr_menu_extension"];
+ $ivr_menu_greet_long = $row["ivr_menu_greet_long"];
+ $ivr_menu_greet_short = $row["ivr_menu_greet_short"];
+ $ivr_menu_invalid_sound = $row["ivr_menu_invalid_sound"];
+ $ivr_menu_exit_sound = $row["ivr_menu_exit_sound"];
+ $ivr_menu_confirm_macro = $row["ivr_menu_confirm_macro"];
+ $ivr_menu_confirm_key = $row["ivr_menu_confirm_key"];
+ $ivr_menu_tts_engine = $row["ivr_menu_tts_engine"];
+ $ivr_menu_tts_voice = $row["ivr_menu_tts_voice"];
+ $ivr_menu_confirm_attempts = $row["ivr_menu_confirm_attempts"];
+ $ivr_menu_timeout = $row["ivr_menu_timeout"];
+ $ivr_menu_exit_app = $row["ivr_menu_exit_app"];
+ $ivr_menu_exit_data = $row["ivr_menu_exit_data"];
+ $ivr_menu_inter_digit_timeout = $row["ivr_menu_inter_digit_timeout"];
+ $ivr_menu_max_failures = $row["ivr_menu_max_failures"];
+ $ivr_menu_max_timeouts = $row["ivr_menu_max_timeouts"];
+ $ivr_menu_digit_len = $row["ivr_menu_digit_len"];
+ $ivr_menu_direct_dial = $row["ivr_menu_direct_dial"];
+ $ivr_menu_enabled = $row["ivr_menu_enabled"];
+ $ivr_menu_description = check_str($row["ivr_menu_description"]);
+
+ //replace space with an underscore
+ $ivr_menu_name = str_replace(" ", "_", $ivr_menu_name);
+
+ //add each IVR menu to the XML config
+ $tmp = "\n";
+ if (strlen($ivr_menu_description) > 0) {
+ $tmp .= " \n";
+ }
+ if (count($_SESSION["domains"]) > 1) {
+ $tmp .= " \n";
+ $tmp .= "\n";
+
+ //remove invalid characters from the file names
+ $ivr_menu_name = str_replace(" ", "_", $ivr_menu_name);
+ $ivr_menu_name = preg_replace("/[\*\:\\/\<\>\|\'\"\?]/", "", $ivr_menu_name);
+
+ //write the file
+ if (count($_SESSION["domains"]) > 1) {
+ $fout = fopen($_SESSION['switch']['conf']['dir']."/ivr_menus/v_".$_SESSION['domains'][$row['domain_uuid']]['domain_name']."_".$ivr_menu_name.".xml","w");
+ }
+ else {
+ $fout = fopen($_SESSION['switch']['conf']['dir']."/ivr_menus/v_".$ivr_menu_name.".xml","w");
+ }
+ fwrite($fout, $tmp);
+ fclose($fout);
+ }
+ }
+
return $xml;
}
diff --git a/resources/templates/provision/grandstream/gxp21xx/{$mac}.xml b/resources/templates/provision/grandstream/gxp21xx/{$mac}.xml
index 75b5daa7f8..08fe18dedb 100644
--- a/resources/templates/provision/grandstream/gxp21xx/{$mac}.xml
+++ b/resources/templates/provision/grandstream/gxp21xx/{$mac}.xml
@@ -2694,6 +2694,7 @@
2
+
{$domain_name}{$project_path}/app/provision