From 46e9e084429f264aa34eb80798e9cbc93d4392b3 Mon Sep 17 00:00:00 2001 From: Mark Crane Date: Fri, 18 Jul 2014 00:31:07 +0000 Subject: [PATCH] Add a \ to escape the + in destination number formatted in E.164 format. --- app/destinations/destination_edit.php | 1 + app/ivr_menu/resources/classes/ivr_menu.php | 152 ++++++++++++++++++ .../provision/grandstream/gxp21xx/{$mac}.xml | 1 + 3 files changed, 154 insertions(+) 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 .= " 0) { + $tmp .= " greet-short=\"".$ivr_menu_greet_short."\"\n"; + } + } + else { + //not found + if (strlen($ivr_menu_greet_short) > 0) { + $tmp .= " greet-short=\"".$ivr_menu_greet_short."\"\n"; + } + } + $tmp .= " invalid-sound=\"$ivr_menu_invalid_sound\"\n"; + $tmp .= " exit-sound=\"$ivr_menu_exit_sound\"\n"; + $tmp .= " confirm-macro=\"$ivr_menu_confirm_macro\"\n"; + $tmp .= " confirm-key=\"$ivr_menu_confirm_key\"\n"; + $tmp .= " tts-engine=\"$ivr_menu_tts_engine\"\n"; + $tmp .= " tts-voice=\"$ivr_menu_tts_voice\"\n"; + $tmp .= " confirm-attempts=\"$ivr_menu_confirm_attempts\"\n"; + $tmp .= " timeout=\"$ivr_menu_timeout\"\n"; + $tmp .= " inter-digit-timeout=\"$ivr_menu_inter_digit_timeout\"\n"; + $tmp .= " max-failures=\"$ivr_menu_max_failures\"\n"; + $tmp .= " max-timeouts=\"$ivr_menu_max_timeouts\"\n"; + $tmp .= " digit-len=\"$ivr_menu_digit_len\">\n"; + + $sub_sql = "select * from v_ivr_menu_options "; + $sub_sql .= "where ivr_menu_uuid = '$ivr_menu_uuid' "; + $sub_sql .= "and domain_uuid = '".$_SESSION['domain_uuid']."' "; + $sub_sql .= "order by ivr_menu_option_order asc "; + $sub_prep_statement = $db->prepare(check_sql($sub_sql)); + $sub_prep_statement->execute(); + $sub_result = $sub_prep_statement->fetchAll(PDO::FETCH_ASSOC); + foreach ($sub_result as &$sub_row) { + //$ivr_menu_uuid = $sub_row["ivr_menu_uuid"]; + $ivr_menu_option_digits = $sub_row["ivr_menu_option_digits"]; + $ivr_menu_option_action = $sub_row["ivr_menu_option_action"]; + $ivr_menu_option_param = $sub_row["ivr_menu_option_param"]; + $ivr_menu_option_description = $sub_row["ivr_menu_option_description"]; + + $tmp .= " "; + if (strlen($ivr_menu_option_description) == 0) { + $tmp .= "\n"; + } + else { + $tmp .= " \n"; + } + } + unset ($sub_prep_statement, $sub_row); + + if ($ivr_menu_direct_dial == "true") { + $tmp .= " \n"; + } + $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