mirror of
https://github.com/fusionpbx/fusionpbx.git
synced 2025-12-31 09:33:48 +00:00
Previously, if a bridge statement was written with prepended variables to be passed, the gateway name would not be parsed and replaced. Additionally, if multiple bridges were used in failover in a single bridge statement separated by a pipe, only the first would be parsed and replaced.
I noticed this after upgrade to FreeSWITCH 1.8.5 (from 1.6.20) which changed failover behavior with multiple separate bridge statements. When network returns 486 BUSY, it will proceed to second bridge statement, initiating a second call. To allow failover and not have this behavior, you must write a single statement and separate your failover bridges with a pipe, this change allows the UI to show all gateway names on the line once saved.
Examples:
{fax_use_ecm=on}sofia/gateway/99b1234c-667c-4b31-9d2f-31d4f396abfa/$1
=> {fax_use_ecm=on}sofia/gateway/Gateway_Name/$1
sofia/gateway/0e70e123-00fd-4f0c-b525-bc7f6283cfa1/$1|sofia/gateway/99b1234c-667c-4b31-9d2f-31d4f396abfa/1$1
=> sofia/gateway/Gateway_One/$1|sofia/gateway/Gateway_Two/1$1
870 lines
37 KiB
PHP
870 lines
37 KiB
PHP
<?php
|
|
/*
|
|
FusionPBX
|
|
Version: MPL 1.1
|
|
|
|
The contents of this file are subject to the Mozilla Public License Version
|
|
1.1 (the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
for the specific language governing rights and limitations under the
|
|
License.
|
|
|
|
The Original Code is FusionPBX
|
|
|
|
The Initial Developer of the Original Code is
|
|
Mark J Crane <markjcrane@fusionpbx.com>
|
|
Portions created by the Initial Developer are Copyright (C) 2008-2018
|
|
the Initial Developer. All Rights Reserved.
|
|
|
|
Contributor(s):
|
|
Mark J Crane <markjcrane@fusionpbx.com>
|
|
Luis Daniel Lucio Quiroz <dlucio@okay.com.mx>
|
|
*/
|
|
|
|
//includes
|
|
include "root.php";
|
|
require_once "resources/require.php";
|
|
require_once "resources/check_auth.php";
|
|
require_once "resources/paging.php";
|
|
|
|
//check permissions
|
|
if (permission_exists('dialplan_add')
|
|
|| permission_exists('dialplan_edit')
|
|
|| permission_exists('inbound_route_add')
|
|
|| permission_exists('inbound_route_edit')
|
|
|| permission_exists('outbound_route_add')
|
|
|| permission_exists('outbound_route_edit')
|
|
|| permission_exists('fifo_edit')
|
|
|| permission_exists('fifo_add')
|
|
|| permission_exists('time_condition_add')
|
|
|| permission_exists('time_condition_edit')) {
|
|
//access granted
|
|
}
|
|
else {
|
|
echo "access denied";
|
|
exit;
|
|
}
|
|
|
|
//add multi-lingual support
|
|
$language = new text;
|
|
$text = $language->get();
|
|
|
|
//set the action as an add or an update
|
|
if (is_uuid($_GET["id"])) {
|
|
$action = "update";
|
|
$dialplan_uuid = $_GET["id"];
|
|
}
|
|
else {
|
|
$action = "add";
|
|
}
|
|
|
|
//set the app_uuid
|
|
if (strlen($_GET["app_uuid"]) > 0) {
|
|
$app_uuid = $_GET["app_uuid"];
|
|
}
|
|
|
|
//get the http post values and set them as php variables
|
|
if (count($_POST) > 0) {
|
|
$hostname = check_str($_POST["hostname"]);
|
|
$dialplan_name = check_str($_POST["dialplan_name"]);
|
|
$dialplan_number = check_str($_POST["dialplan_number"]);
|
|
$dialplan_order = check_str($_POST["dialplan_order"]);
|
|
$dialplan_continue = check_str($_POST["dialplan_continue"]);
|
|
$dialplan_details = $_POST["dialplan_details"];
|
|
if (strlen($dialplan_continue) == 0) { $dialplan_continue = "false"; }
|
|
$dialplan_context = check_str($_POST["dialplan_context"]);
|
|
$dialplan_enabled = check_str($_POST["dialplan_enabled"]);
|
|
$dialplan_description = check_str($_POST["dialplan_description"]);
|
|
}
|
|
|
|
//get the list of applications
|
|
if (count($_SESSION['switch']['applications']) == 0) {
|
|
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
|
|
if ($fp) {
|
|
$result = event_socket_request($fp, 'api show application');
|
|
$_SESSION['switch']['applications'] = explode("\n\n", $result);
|
|
$_SESSION['switch']['applications'] = explode("\n", $_SESSION['switch']['applications'][0]);
|
|
unset($result);
|
|
unset($fp);
|
|
} else {
|
|
$_SESSION['switch']['applications'] = Array();
|
|
}
|
|
}
|
|
|
|
//process and save the data
|
|
if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
|
|
|
|
//get the dialplan uuid
|
|
if ($action == "update") {
|
|
$dialplan_uuid = check_str($_POST["dialplan_uuid"]);
|
|
}
|
|
|
|
//check for all required data
|
|
$msg = '';
|
|
if (strlen($dialplan_name) == 0) { $msg .= $text['message-required'].$text['label-name']."<br>\n"; }
|
|
if (strlen($dialplan_order) == 0) { $msg .= $text['message-required'].$text['label-order']."<br>\n"; }
|
|
if (strlen($dialplan_continue) == 0) { $msg .= $text['message-required'].$text['label-continue']."<br>\n"; }
|
|
if (strlen($dialplan_context) == 0) { $msg .= $text['message-required'].$text['label-context']."<br>\n"; }
|
|
if (strlen($dialplan_enabled) == 0) { $msg .= $text['message-required'].$text['label-enabled']."<br>\n"; }
|
|
//if (strlen($dialplan_description) == 0) { $msg .= $text['message-required'].$text['label-description']."<br>\n"; }
|
|
if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) {
|
|
require_once "resources/header.php";
|
|
require_once "resources/persist_form_var.php";
|
|
echo "<div align='center'>\n";
|
|
echo "<table><tr><td>\n";
|
|
echo $msg."<br />";
|
|
echo "</td></tr></table>\n";
|
|
persistformvar($_POST);
|
|
echo "</div>\n";
|
|
require_once "resources/footer.php";
|
|
return;
|
|
}
|
|
|
|
//remove the invalid characters from the dialplan name
|
|
$dialplan_name = $_POST["dialplan_name"];
|
|
$dialplan_name = str_replace(" ", "_", $dialplan_name);
|
|
$dialplan_name = str_replace("/", "", $dialplan_name);
|
|
|
|
//build the array
|
|
$x = 0;
|
|
if (isset($_POST["dialplan_uuid"])) {
|
|
$array['dialplans'][$x]['dialplan_uuid'] = $_POST["dialplan_uuid"];
|
|
}
|
|
else {
|
|
$dialplan_uuid = uuid();
|
|
$array['dialplans'][$x]['dialplan_uuid'] = $dialplan_uuid;
|
|
}
|
|
if (isset($_POST["domain_uuid"])) {
|
|
$array['dialplans'][$x]['domain_uuid'] = $_POST['domain_uuid'];
|
|
}
|
|
else {
|
|
$array['dialplans'][$x]['domain_uuid'] = $_SESSION['domain_uuid'];
|
|
}
|
|
if ($action == 'add') {
|
|
$array['dialplans'][$x]['app_uuid'] = uuid();
|
|
}
|
|
$array['dialplans'][$x]['hostname'] = $hostname;
|
|
$array['dialplans'][$x]['dialplan_name'] = $dialplan_name;
|
|
$array['dialplans'][$x]['dialplan_number'] = $_POST["dialplan_number"];
|
|
$array['dialplans'][$x]['dialplan_destination'] = $_POST["dialplan_destination"];
|
|
$array['dialplans'][$x]['dialplan_context'] = $_POST["dialplan_context"];
|
|
$array['dialplans'][$x]['dialplan_continue'] = $_POST["dialplan_continue"];
|
|
$array['dialplans'][$x]['dialplan_order'] = $_POST["dialplan_order"];
|
|
$array['dialplans'][$x]['dialplan_enabled'] = $_POST["dialplan_enabled"];
|
|
$array['dialplans'][$x]['dialplan_description'] = $_POST["dialplan_description"];
|
|
$y = 0;
|
|
if (is_array($_POST["dialplan_details"])) {
|
|
foreach ($_POST["dialplan_details"] as $row) {
|
|
if (strlen($row["dialplan_detail_tag"]) > 0) {
|
|
if (strlen($row["dialplan_detail_uuid"]) > 0) {
|
|
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = $row["dialplan_detail_uuid"];
|
|
}
|
|
$array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $array['domain_uuid'];
|
|
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = $row["dialplan_detail_tag"];
|
|
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = $row["dialplan_detail_type"];
|
|
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = $row["dialplan_detail_data"];
|
|
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_break'] = $row["dialplan_detail_break"];
|
|
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_inline'] = $row["dialplan_detail_inline"];
|
|
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = ($row["dialplan_detail_group"] != '') ? $row["dialplan_detail_group"] : '0';
|
|
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $row["dialplan_detail_order"];
|
|
}
|
|
$y++;
|
|
}
|
|
}
|
|
|
|
//add or update the database
|
|
if ($_POST["persistformvar"] != "true") {
|
|
$database = new database;
|
|
$database->app_name = 'dialplans';
|
|
$database->app_uuid = $app_uuid;
|
|
$database->uuid($dialplan_uuid);
|
|
$database->save($array);
|
|
$message = $database->message;
|
|
}
|
|
|
|
//update the dialplan xml
|
|
$dialplans = new dialplan;
|
|
$dialplans->source = "details";
|
|
$dialplans->destination = "database";
|
|
$dialplans->uuid = $dialplan_uuid;
|
|
$dialplans->xml();
|
|
|
|
//clear the cache
|
|
$cache = new cache;
|
|
$cache->delete("dialplan:".$dialplan_context);
|
|
|
|
//synchronize the xml config
|
|
save_dialplan_xml();
|
|
|
|
//set the message
|
|
if ($action == "add") {
|
|
message::add($text['message-add']);
|
|
}
|
|
else if ($action == "update") {
|
|
message::add($text['message-update']);
|
|
}
|
|
header("Location: ?id=".escape($dialplan_uuid).(($app_uuid != '') ? "&app_uuid=".escape($app_uuid) : null));
|
|
exit;
|
|
|
|
} //(count($_POST)>0 && strlen($_POST["persistformvar"]) == 0)
|
|
|
|
//pre-populate the form
|
|
if (count($_GET) > 0 && $_POST["persistformvar"] != "true") {
|
|
$sql = "select * from v_dialplans ";
|
|
$sql .= "where dialplan_uuid = '$dialplan_uuid' ";
|
|
$prep_statement = $db->prepare(check_sql($sql));
|
|
$prep_statement->execute();
|
|
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
|
|
if (is_array($result)) foreach ($result as &$row) {
|
|
$domain_uuid = $row["domain_uuid"];
|
|
$hostname = $row["hostname"];
|
|
$dialplan_name = $row["dialplan_name"];
|
|
$dialplan_number = $row["dialplan_number"];
|
|
$dialplan_destination = $row["dialplan_destination"];
|
|
$dialplan_order = $row["dialplan_order"];
|
|
$dialplan_continue = $row["dialplan_continue"];
|
|
$dialplan_context = $row["dialplan_context"];
|
|
$dialplan_enabled = $row["dialplan_enabled"];
|
|
$dialplan_description = $row["dialplan_description"];
|
|
}
|
|
unset ($prep_statement);
|
|
}
|
|
|
|
//set the defaults
|
|
if (strlen($dialplan_context) == 0) {
|
|
$dialplan_context = $_SESSION['domain_name'];
|
|
}
|
|
if (strlen($dialplan_order) == 0) {
|
|
$dialplan_order = '200';
|
|
}
|
|
if (strlen($dialplan_destination) == 0) {
|
|
$dialplan_destination = 'false';
|
|
}
|
|
|
|
|
|
//get the dialplan details in an array
|
|
$sql = "select * from v_dialplan_details ";
|
|
$sql .= "where dialplan_uuid = '$dialplan_uuid' ";
|
|
$sql .= "order by dialplan_detail_group asc, dialplan_detail_order asc";
|
|
$prep_statement = $db->prepare(check_sql($sql));
|
|
$prep_statement->execute();
|
|
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
|
|
$result_count = count($result);
|
|
unset ($prep_statement, $sql);
|
|
|
|
//create a new array that is sorted into groups and put the tags in order conditions, actions, anti-actions
|
|
//set the array index
|
|
$x = 0;
|
|
//define the array
|
|
$details = array();
|
|
//conditions
|
|
if (is_array($result)) foreach($result as $row) {
|
|
if ($row['dialplan_detail_tag'] == "condition") {
|
|
$group = $row['dialplan_detail_group'];
|
|
foreach ($row as $key => $val) {
|
|
$details[$group][$x][$key] = $val;
|
|
}
|
|
}
|
|
$x++;
|
|
}
|
|
//regex
|
|
if (is_array($result)) foreach($result as $row) {
|
|
if ($row['dialplan_detail_tag'] == "regex") {
|
|
$group = $row['dialplan_detail_group'];
|
|
foreach ($row as $key => $val) {
|
|
$details[$group][$x][$key] = $val;
|
|
}
|
|
}
|
|
$x++;
|
|
}
|
|
//actions
|
|
if (is_array($result)) foreach($result as $row) {
|
|
if ($row['dialplan_detail_tag'] == "action") {
|
|
$group = $row['dialplan_detail_group'];
|
|
foreach ($row as $key => $val) {
|
|
$details[$group][$x][$key] = $val;
|
|
}
|
|
}
|
|
$x++;
|
|
}
|
|
//anti-actions
|
|
if (is_array($result)) foreach($result as $row) {
|
|
if ($row['dialplan_detail_tag'] == "anti-action") {
|
|
$group = $row['dialplan_detail_group'];
|
|
foreach ($row as $key => $val) {
|
|
$details[$group][$x][$key] = $val;
|
|
}
|
|
}
|
|
$x++;
|
|
}
|
|
unset($result);
|
|
//blank row
|
|
if (is_array($details)) foreach($details as $group => $row) {
|
|
//set the array key for the empty row
|
|
$x = "999";
|
|
//get the highest dialplan_detail_order
|
|
if (is_array($row)) foreach ($row as $key => $field) {
|
|
$dialplan_detail_order = 0;
|
|
if ($dialplan_detail_order < $field['dialplan_detail_order']) {
|
|
$dialplan_detail_order = $field['dialplan_detail_order'];
|
|
}
|
|
}
|
|
//increment the highest order by 5
|
|
$dialplan_detail_order = $dialplan_detail_order + 10;
|
|
//set the rest of the empty array
|
|
//$details[$group][$x]['domain_uuid'] = '';
|
|
//$details[$group][$x]['dialplan_uuid'] = '';
|
|
$details[$group][$x]['dialplan_detail_tag'] = '';
|
|
$details[$group][$x]['dialplan_detail_type'] = '';
|
|
$details[$group][$x]['dialplan_detail_data'] = '';
|
|
$details[$group][$x]['dialplan_detail_break'] = '';
|
|
$details[$group][$x]['dialplan_detail_inline'] = '';
|
|
$details[$group][$x]['dialplan_detail_group'] = $group;
|
|
$details[$group][$x]['dialplan_detail_order'] = $dialplan_detail_order;
|
|
}
|
|
//sort the details array by group number
|
|
if (is_array($details)) {
|
|
ksort($details);
|
|
}
|
|
|
|
//show the header
|
|
require_once "resources/header.php";
|
|
$document['title'] = $text['title-dialplan_edit'];
|
|
|
|
//javascript to change select to input and back again
|
|
?><script language="javascript">
|
|
var objs;
|
|
|
|
function change_to_input(obj){
|
|
tb=document.createElement('INPUT');
|
|
tb.type='text';
|
|
tb.name=obj.name;
|
|
tb.className='formfld';
|
|
//tb.setAttribute('id', 'ivr_menu_option_param');
|
|
tb.setAttribute('style', 'width:175px;');
|
|
tb.value=obj.options[obj.selectedIndex].value;
|
|
tbb=document.createElement('INPUT');
|
|
tbb.setAttribute('class', 'btn');
|
|
tbb.setAttribute('style', 'margin-left: 4px;');
|
|
tbb.type='button';
|
|
tbb.value=$("<div />").html('◁').text();
|
|
tbb.objs=[obj,tb,tbb];
|
|
tbb.onclick=function(){ replace_param(this.objs); }
|
|
obj.parentNode.insertBefore(tb,obj);
|
|
obj.parentNode.insertBefore(tbb,obj);
|
|
obj.parentNode.removeChild(obj);
|
|
replace_param(this.objs);
|
|
}
|
|
|
|
function replace_param(obj){
|
|
obj[2].parentNode.insertBefore(obj[0],obj[2]);
|
|
obj[0].parentNode.removeChild(obj[1]);
|
|
obj[0].parentNode.removeChild(obj[2]);
|
|
}
|
|
</script>
|
|
<?php
|
|
|
|
//show the content
|
|
echo "<form method='post' name='frm' action=''>\n";
|
|
echo "<input type='hidden' name='app_uuid' value='".escape($app_uuid)."'>\n";
|
|
|
|
echo "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"1\">\n";
|
|
echo " <tr>\n";
|
|
echo " <td align='left' width='30%'>\n";
|
|
echo" <span class=\"title\">".$text['title-dialplan_edit']."</span><br />\n";
|
|
echo " </td>\n";
|
|
echo " <td width='70%' align='right'>\n";
|
|
if (permission_exists('dialplan_xml')) {
|
|
echo " <input type='button' class='btn' name='' alt='".$text['button-xml']."' onclick=\"window.location='dialplan_xml.php?id=".escape($dialplan_uuid)."&".((strlen($app_uuid) > 0) ? "app_uuid=".escape($app_uuid) : null)."';\" value='".$text['button-xml']."'>\n";
|
|
}
|
|
echo " <input type='button' class='btn' name='' alt='".$text['button-back']."' onclick=\"window.location='dialplans.php".((strlen($app_uuid) > 0) ? "?app_uuid=".escape($app_uuid) : null)."';\" value='".$text['button-back']."'>\n";
|
|
echo " <input type='button' class='btn' name='' alt='".$text['button-copy']."' onclick=\"if (confirm('".$text['confirm-copy']."')){window.location='dialplan_copy.php?id=".escape($dialplan_uuid)."';}\" value='".$text['button-copy']."'>\n";
|
|
echo " <input type='submit' class='btn' value='".$text['button-save']."'>\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
echo " <tr>\n";
|
|
echo " <td align='left' colspan='2'>\n";
|
|
echo " ".$text['description-dialplan-edit']."\n";
|
|
echo " \n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
echo "</table>";
|
|
echo "<br />\n";
|
|
|
|
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
|
|
echo "<tr>\n";
|
|
echo "<td width='50%' style='vertical-align: top;'>\n";
|
|
|
|
echo " <table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
|
|
echo " <tr>\n";
|
|
echo " <td class='vncellreq' valign='top' align='left' nowrap='nowrap' width='30%'>\n";
|
|
echo " ".$text['label-name']."\n";
|
|
echo " </td>\n";
|
|
echo " <td class='vtable' width='70%' align='left'>\n";
|
|
echo " <input class='formfld' type='text' name='dialplan_name' maxlength='255' placeholder='' value=\"".escape($dialplan_name)."\" required='required'>\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
|
|
echo " <tr>\n";
|
|
echo " <td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
|
|
echo " ".$text['label-number']."\n";
|
|
echo " </td>\n";
|
|
echo " <td class='vtable' align='left'>\n";
|
|
echo " <input class='formfld' type='text' name='dialplan_number' maxlength='255' placeholder='' value=\"".escape($dialplan_number)."\">\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
|
|
echo " <tr>\n";
|
|
echo " <td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
|
|
echo " ".$text['label-hostname']."\n";
|
|
echo " </td>\n";
|
|
echo " <td class='vtable' align='left'>\n";
|
|
echo " <input class='formfld' type='text' name='hostname' maxlength='255' value=\"".escape($hostname)."\">\n";
|
|
echo " <br />\n";
|
|
echo " ".$text['description-hostname']."\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
|
|
echo " <tr>\n";
|
|
echo " <td class='vncell' valign='top' align='left' nowrap='nowrap' width='30%'>\n";
|
|
echo " ".$text['label-context']."\n";
|
|
echo " </td>\n";
|
|
echo " <td class='vtable' align='left' width='70%'>\n";
|
|
echo " <input class='formfld' type='text' name='dialplan_context' maxlength='255' placeholder='' value=\"".escape($dialplan_context)."\">\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
|
|
echo " <tr>\n";
|
|
echo " <td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
|
|
echo " ".$text['label-continue']."\n";
|
|
echo " </td>\n";
|
|
echo " <td class='vtable' align='left'>\n";
|
|
echo " <select class='formfld' name='dialplan_continue'>\n";
|
|
if ($dialplan_continue == "true") {
|
|
echo " <option value='true' selected='selected'>".$text['option-true']."</option>\n";
|
|
}
|
|
else {
|
|
echo " <option value='true'>".$text['option-true']."</option>\n";
|
|
}
|
|
if ($dialplan_continue == "false") {
|
|
echo " <option value='false' selected='selected'>".$text['option-false']."</option>\n";
|
|
}
|
|
else {
|
|
echo " <option value='false'>".$text['option-false']."</option>\n";
|
|
}
|
|
echo " </select>\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
echo " </table>\n";
|
|
|
|
echo "</td>";
|
|
echo "<td width='50%' style='vertical-align: top;'>\n";
|
|
|
|
echo " <table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
|
|
|
|
echo " <tr>\n";
|
|
echo " <td class='vncellreq' valign='top' align='left' nowrap='nowrap' width='30%'>\n";
|
|
echo " ".$text['label-order']."\n";
|
|
echo " </td>\n";
|
|
echo " <td class='vtable' align='left' width='70%'>\n";
|
|
echo " <select name='dialplan_order' class='formfld'>\n";
|
|
$i=0;
|
|
while($i<=999) {
|
|
$selected = ($i == $dialplan_order) ? "selected" : null;
|
|
if (strlen($i) == 1) {
|
|
echo " <option value='00$i' ".$selected.">00$i</option>\n";
|
|
}
|
|
if (strlen($i) == 2) {
|
|
echo " <option value='0$i' ".$selected.">0$i</option>\n";
|
|
}
|
|
if (strlen($i) == 3) {
|
|
echo " <option value='$i' ".$selected.">$i</option>\n";
|
|
}
|
|
$i++;
|
|
}
|
|
echo " </select>\n";
|
|
echo " <br />\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
|
|
echo " <tr>\n";
|
|
echo " <td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
|
|
echo " ".$text['label-destination']."\n";
|
|
echo " </td>\n";
|
|
echo " <td class='vtable' align='left'>\n";
|
|
echo " <select class='formfld' name='dialplan_destination'>\n";
|
|
echo " <option value=''></option>\n";
|
|
if ($dialplan_destination == "true") {
|
|
echo " <option value='true' selected='selected'>".$text['option-true']."</option>\n";
|
|
}
|
|
else {
|
|
echo " <option value='true'>".$text['option-true']."</option>\n";
|
|
}
|
|
if ($dialplan_destination == "false") {
|
|
echo " <option value='false' selected='selected'>".$text['option-false']."</option>\n";
|
|
}
|
|
else {
|
|
echo " <option value='false'>".$text['option-false']."</option>\n";
|
|
}
|
|
echo " </select>\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
|
|
if (permission_exists('dialplan_domain')) {
|
|
echo " <tr>\n";
|
|
echo " <td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
|
|
echo " ".$text['label-domain']."\n";
|
|
echo " </td>\n";
|
|
echo " <td class='vtable' align='left'>\n";
|
|
echo " <select class='formfld' name='domain_uuid'>\n";
|
|
if (strlen($domain_uuid) == 0) {
|
|
echo " <option value='' selected='selected'>".$text['select-global']."</option>\n";
|
|
}
|
|
else {
|
|
echo " <option value=''>".$text['select-global']."</option>\n";
|
|
}
|
|
if (is_array($_SESSION['domains'])) foreach ($_SESSION['domains'] as $row) {
|
|
if ($row['domain_uuid'] == $domain_uuid) {
|
|
echo " <option value='".escape($row['domain_uuid'])."' selected='selected'>".escape($row['domain_name'])."</option>\n";
|
|
}
|
|
else {
|
|
echo " <option value='".escape($row['domain_uuid'])."'>".escape($row['domain_name'])."</option>\n";
|
|
}
|
|
}
|
|
echo " </select>\n";
|
|
echo " <br />\n";
|
|
echo " ".$text['description-domain_name']."\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
}
|
|
|
|
echo " <tr>\n";
|
|
echo " <td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
|
|
echo " ".$text['label-enabled']."\n";
|
|
echo " </td>\n";
|
|
echo " <td class='vtable' align='left'>\n";
|
|
echo " <select class='formfld' name='dialplan_enabled'>\n";
|
|
if ($dialplan_enabled == "true") {
|
|
echo " <option value='true' selected='selected'>".$text['option-true']."</option>\n";
|
|
}
|
|
else {
|
|
echo " <option value='true'>".$text['option-true']."</option>\n";
|
|
}
|
|
if ($dialplan_enabled == "false") {
|
|
echo " <option value='false' selected='selected'>".$text['option-false']."</option>\n";
|
|
}
|
|
else {
|
|
echo " <option value='false'>".$text['option-false']."</option>\n";
|
|
}
|
|
echo " </select>\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
|
|
echo " <tr>\n";
|
|
echo " <td class='vncell' valign='top' align='left' nowrap='nowrap' width='30%'>\n";
|
|
echo " ".$text['label-description']."\n";
|
|
echo " </td>\n";
|
|
echo " <td class='vtable' align='left' width='70%'>\n";
|
|
//echo " <textarea class='formfld' style='width: 250px;' name='dialplan_description'>".escape($dialplan_description)."</textarea>\n";
|
|
echo " <input class='formfld' type='text' name='dialplan_description' maxlength='255' value=\"".escape($dialplan_description)."\">\n";
|
|
echo " </td>\n";
|
|
echo " </tr>\n";
|
|
|
|
echo " </table>\n";
|
|
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
echo "</table>";
|
|
echo "<br><br>";
|
|
|
|
//dialplan details
|
|
if ($action == "update") {
|
|
?>
|
|
<!--javascript to change select to input and back again-->
|
|
<script language="javascript">
|
|
|
|
function label_to_form(label_id, form_id) {
|
|
if (document.getElementById(label_id) != null) {
|
|
label = document.getElementById(label_id);
|
|
label.parentNode.removeChild(label);
|
|
}
|
|
document.getElementById(form_id).style.display='';
|
|
}
|
|
|
|
</script>
|
|
<?php
|
|
|
|
//display the results
|
|
if (is_array($details)) {
|
|
|
|
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0' style='margin: -2px; border-spacing: 2px;'>\n";
|
|
|
|
$x = 0;
|
|
foreach($details as $group) {
|
|
|
|
if ($x != 0) {
|
|
echo "<tr><td colspan='7'><br><br></td></tr>";
|
|
}
|
|
|
|
echo "<tr>\n";
|
|
echo "<td class='vncellcolreq'>".$text['label-tag']."</td>\n";
|
|
echo "<td class='vncellcolreq'>".$text['label-type']."</td>\n";
|
|
echo "<td class='vncellcol' width='70%'>".$text['label-data']."</td>\n";
|
|
echo "<td class='vncellcol'>".$text['label-break']."</td>\n";
|
|
echo "<td class='vncellcol' style='text-align: center;'>".$text['label-inline']."</td>\n";
|
|
echo "<td class='vncellcolreq' style='text-align: center;'>".$text['label-group']."</td>\n";
|
|
echo "<td class='vncellcolreq' style='text-align: center;'>".$text['label-order']."</td>\n";
|
|
echo "<td> </td>\n";
|
|
echo "</tr>\n";
|
|
|
|
if (is_array($group)) foreach($group as $index => $row) {
|
|
|
|
//get the values from the database and set as variables
|
|
$dialplan_detail_uuid = $row['dialplan_detail_uuid'];
|
|
$dialplan_detail_tag = $row['dialplan_detail_tag'];
|
|
$dialplan_detail_type = $row['dialplan_detail_type'];
|
|
$dialplan_detail_data = $row['dialplan_detail_data'];
|
|
$dialplan_detail_break = $row['dialplan_detail_break'];
|
|
$dialplan_detail_inline = $row['dialplan_detail_inline'];
|
|
$dialplan_detail_group = $row['dialplan_detail_group'];
|
|
$dialplan_detail_order = $row['dialplan_detail_order'];
|
|
|
|
//no border on last row
|
|
$no_border = ($index == 999) ? "border: none;" : null;
|
|
|
|
//begin the row
|
|
echo "<tr>\n";
|
|
//determine whether to hide the element
|
|
if (strlen($dialplan_detail_tag) == 0) {
|
|
$element['hidden'] = false;
|
|
$element['visibility'] = "";
|
|
}
|
|
else {
|
|
$element['hidden'] = true;
|
|
$element['visibility'] = "display: none;";
|
|
}
|
|
//add the primary key uuid
|
|
if (strlen($dialplan_detail_uuid) > 0) {
|
|
echo " <input name='dialplan_details[".$x."][dialplan_detail_uuid]' type='hidden' value=\"".escape($dialplan_detail_uuid)."\">\n";
|
|
}
|
|
//tag
|
|
$selected = "selected=\"selected\" ";
|
|
echo "<td class='vtablerow' style='".$no_border."' onclick=\"label_to_form('label_dialplan_detail_tag_".$x."','dialplan_detail_tag_".$x."');\" nowrap='nowrap'>\n";
|
|
if ($element['hidden']) {
|
|
echo " <label id=\"label_dialplan_detail_tag_".$x."\">".escape($dialplan_detail_tag)."</label>\n";
|
|
}
|
|
echo " <select id='dialplan_detail_tag_".$x."' name='dialplan_details[".$x."][dialplan_detail_tag]' class='formfld' style='width: 97px; ".$element['visibility']."'>\n";
|
|
echo " <option></option>\n";
|
|
echo " <option value='condition' ".($dialplan_detail_tag == "condition" ? $selected : null).">".$text['option-condition']."</option>\n";
|
|
echo " <option value='regex' ".($dialplan_detail_tag == "regex" ? $selected : null).">".$text['option-regex']."</option>\n";
|
|
echo " <option value='action' ".($dialplan_detail_tag == "action" ? $selected : null).">".$text['option-action']."</option>\n";
|
|
echo " <option value='anti-action' ".($dialplan_detail_tag == "anti-action" ? $selected : null).">".$text['option-anti-action']."</option>\n";
|
|
echo " </select>\n";
|
|
echo "</td>\n";
|
|
//type
|
|
echo "<td class='vtablerow' style='".$no_border."' onclick=\"label_to_form('label_dialplan_detail_type_".$x."','dialplan_detail_type_".$x."');\" nowrap='nowrap'>\n";
|
|
if ($element['hidden']) {
|
|
echo " <label id=\"label_dialplan_detail_type_".$x."\">".escape($dialplan_detail_type)."</label>\n";
|
|
}
|
|
echo " <select id='dialplan_detail_type_".$x."' name='dialplan_details[".$x."][dialplan_detail_type]' class='formfld' style='width: auto; ".$element['visibility']."' onchange='change_to_input(this);'>\n";
|
|
if (strlen($dialplan_detail_type) > 0) {
|
|
echo " <optgroup label='selected'>\n";
|
|
echo " <option value=\"".escape($dialplan_detail_type)."\">".escape($dialplan_detail_type)."</option>\n";
|
|
echo " </optgroup>\n";
|
|
}
|
|
else {
|
|
echo " <option value=''></option>\n";
|
|
}
|
|
//if (strlen($dialplan_detail_tag) == 0 || $dialplan_detail_tag == "condition" || $dialplan_detail_tag == "regex") {
|
|
echo " <optgroup label='".$text['optgroup-condition_or_regex']."'>\n";
|
|
echo " <option value='context'>".$text['option-context']."</option>\n";
|
|
echo " <option value='username'>".$text['option-username']."</option>\n";
|
|
echo " <option value='rdnis'>".$text['option-rdnis']."</option>\n";
|
|
echo " <option value='destination_number'>".$text['option-destination_number']."</option>\n";
|
|
echo " <option value='dialplan'>".$text['option-dialplan']."</option>\n";
|
|
echo " <option value='caller_id_name'>".$text['option-caller_id_name']."</option>\n";
|
|
echo " <option value='caller_id_number'>".$text['option-caller_id_number']."</option>\n";
|
|
echo " <option value='ani'>".$text['option-ani']."</option>\n";
|
|
echo " <option value='ani2'>".$text['option-ani2']."</option>\n";
|
|
echo " <option value='uuid'>".$text['option-uuid']."</option>\n";
|
|
echo " <option value='source'>".$text['option-source']."</option>\n";
|
|
echo " <option value='chan_name'>".$text['option-chan_name']."</option>\n";
|
|
echo " <option value='network_addr'>".$text['option-network_addr']."</option>\n";
|
|
echo " <option value='\${number_alias}'>\${number_alias}</option>\n";
|
|
echo " <option value='\${sip_from_uri}'>\${sip_from_uri}</option>\n";
|
|
echo " <option value='\${sip_from_user}'>\${sip_from_user}</option>\n";
|
|
echo " <option value='\${sip_from_host}'>\${sip_from_host}</option>\n";
|
|
echo " <option value='\${sip_contact_uri}'>\${sip_contact_uri}</option>\n";
|
|
echo " <option value='\${sip_contact_user}'>\${sip_contact_user}</option>\n";
|
|
echo " <option value='\${sip_contact_host}'>\${sip_contact_host}</option>\n";
|
|
echo " <option value='\${sip_to_uri}'>\${sip_to_uri}</option>\n";
|
|
echo " <option value='\${sip_to_user}'>\${sip_to_user}</option>\n";
|
|
echo " <option value='\${sip_to_host}'>\${sip_to_host}</option>\n";
|
|
echo " <option value='\${toll_allow}'>\${toll_allow}</option>\n";
|
|
echo " <option value='\${sip_h_Diversion}'>\$sip_h_Diversion}</option>\n";
|
|
echo " </optgroup>\n";
|
|
//}
|
|
//if (strlen($dialplan_detail_tag) == 0 || $dialplan_detail_tag == "action" || $dialplan_detail_tag == "anti-action") {
|
|
echo " <optgroup label='".$text['optgroup-applications']."'>\n";
|
|
if (is_array($_SESSION['switch']['applications'])) {
|
|
foreach ($_SESSION['switch']['applications'] as $row) {
|
|
if (strlen($row) > 0) {
|
|
$application = explode(",", $row);
|
|
if ($application[0] != "name" && stristr($application[0], "[") != true) {
|
|
echo " <option value='".escape($application[0])."'>".escape($application[0])."</option>\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
echo " </optgroup>\n";
|
|
//}
|
|
echo " </select>\n";
|
|
//echo " <input type='button' id='btn_select_to_input_dialplan_detail_type' class='btn' style='visibility:hidden;' name='' alt='".$text['button-back']."' onclick='change_to_input(document.getElementById(\"dialplan_detail_type\"));this.style.visibility = \"hidden\";' value='◁'>\n";
|
|
echo "</td>\n";
|
|
//data
|
|
echo "<td class='vtablerow' onclick=\"label_to_form('label_dialplan_detail_data_".$x."','dialplan_detail_data_".$x."');\" style='".$no_border." width: 100%; max-width: 150px; overflow: hidden; _text-overflow: ellipsis; white-space: nowrap;' nowrap='nowrap'>\n";
|
|
if ($element['hidden']) {
|
|
$dialplan_detail_data_mod = $dialplan_detail_data;
|
|
if ($dialplan_detail_type == 'bridge') {
|
|
// split up failover bridges and get variables in statement
|
|
$failover_bridges = explode('|', $dialplan_detail_data);
|
|
preg_match('/^\{.*\}/', $failover_bridges[0], $bridge_vars);
|
|
$bridge_vars = $bridge_vars[0];
|
|
|
|
// rename parse and rename each gateway
|
|
foreach ($failover_bridges as $bridge_statement_exploded) {
|
|
// parse out gateway uuid
|
|
$bridge_statement = str_replace($bridge_vars, '', explode('/', $bridge_statement_exploded));
|
|
array_unshift($bridge_statement, $bridge_vars);
|
|
|
|
if ($bridge_statement[1] == 'sofia' && $bridge_statement[2] == 'gateway' && is_uuid($bridge_statement[3])) {
|
|
// retrieve gateway name from db
|
|
$sql = "select gateway from v_gateways where gateway_uuid = '".$bridge_statement[3]."' ";
|
|
$prep_statement = $db->prepare(check_sql($sql));
|
|
$prep_statement->execute();
|
|
$gateways = $prep_statement->fetchAll(PDO::FETCH_NAMED);
|
|
if (is_array($gateways)) {
|
|
$gateway_name = $gateways[0]['gateway'];
|
|
$bridge_statement_exploded_mod = str_replace($bridge_statement[3], $gateway_name, $bridge_statement_exploded);
|
|
}
|
|
$dialplan_detail_data_mod = str_replace($bridge_statement_exploded, $bridge_statement_exploded_mod, $dialplan_detail_data_mod);
|
|
unset ($prep_statement, $sql, $bridge_statement, $gateways, $bridge_statement_exploded, $bridge_statement_exploded_mod);
|
|
}
|
|
}
|
|
}
|
|
echo " <label id=\"label_dialplan_detail_data_".$x."\">".escape($dialplan_detail_data_mod)."</label>\n";
|
|
}
|
|
echo " <input id='dialplan_detail_data_".$x."' name='dialplan_details[".$x."][dialplan_detail_data]' class='formfld' type='text' style='width: calc(100% - 2px); min-width: calc(100% - 2px); max-width: calc(100% - 2px); ".$element['visibility']."' placeholder='' value=\"".escape($dialplan_detail_data)."\">\n";
|
|
echo "</td>\n";
|
|
//break
|
|
echo "<td class='vtablerow' style='".$no_border."' onclick=\"label_to_form('label_dialplan_detail_break_".$x."','dialplan_detail_break_".$x."');\" nowrap='nowrap'>\n";
|
|
if ($element['hidden']) {
|
|
echo " <label id=\"label_dialplan_detail_break_".$x."\">".escape($dialplan_detail_break)."</label>\n";
|
|
}
|
|
echo " <select id='dialplan_detail_break_".$x."' name='dialplan_details[".$x."][dialplan_detail_break]' class='formfld' style='width: auto; ".$element['visibility']."'>\n";
|
|
echo " <option></option>\n";
|
|
echo " <option value='on-true' ".($dialplan_detail_break == "on-true" ? $selected : null).">".$text['option-on_true']."</option>\n";
|
|
echo " <option value='on-false' ".($dialplan_detail_break == "on-false" ? $selected : null).">".$text['option-on_false']."</option>\n";
|
|
echo " <option value='always' ".($dialplan_detail_break == "always" ? $selected : null).">".$text['option-always']."</option>\n";
|
|
echo " <option value='never' ".($dialplan_detail_break == "never" ? $selected : null).">".$text['option-never']."</option>\n";
|
|
echo " </select>\n";
|
|
echo "</td>\n";
|
|
//inline
|
|
echo "<td class='vtablerow' style='".$no_border." text-align: center;' onclick=\"label_to_form('label_dialplan_detail_inline_".$x."','dialplan_detail_inline_".$x."');\" nowrap='nowrap'>\n";
|
|
if ($element['hidden']) {
|
|
echo " <label id=\"label_dialplan_detail_inline_".$x."\">".escape($dialplan_detail_inline)."</label>\n";
|
|
}
|
|
echo " <select id='dialplan_detail_inline_".$x."' name='dialplan_details[".$x."][dialplan_detail_inline]' class='formfld' style='width: auto; ".$element['visibility']."'>\n";
|
|
echo " <option></option>\n";
|
|
echo " <option value='true' ".($dialplan_detail_inline == "true" ? $selected : null).">".$text['option-true']."</option>\n";
|
|
echo " <option value='false' ".($dialplan_detail_inline == "false" ? $selected : null).">".$text['option-false']."</option>\n";
|
|
echo " </select>\n";
|
|
echo "</td>\n";
|
|
//group
|
|
echo "<td class='vtablerow' style='".$no_border." text-align: center;' onclick=\"label_to_form('label_dialplan_detail_group_".$x."','dialplan_detail_group_".$x."');\" nowrap='nowrap'>\n";
|
|
if ($element['hidden']) {
|
|
echo " <label id=\"label_dialplan_detail_group_".$x."\">".escape($dialplan_detail_group)."</label>\n";
|
|
}
|
|
echo " <input id='dialplan_detail_group_".$x."' name='dialplan_details[".$x."][dialplan_detail_group]' class='formfld' type='number' min='0' step='1' style='width: 30px; text-align: center; ".$element['visibility']."' placeholder='' value=\"".escape($dialplan_detail_group)."\" onclick='this.select();'>\n";
|
|
/*
|
|
echo " <select id='dialplan_detail_group_".$x."' name='dialplan_details[".$x."][dialplan_detail_group]' class='formfld' style='".$element['width']." ".$element['visibility']."'>\n";
|
|
echo " <option value=''></option>\n";
|
|
if (strlen($dialplan_detail_group)> 0) {
|
|
echo " <option $selected value='".escape($dialplan_detail_group)."'>".escape($dialplan_detail_group)."</option>\n";
|
|
}
|
|
$i=0;
|
|
while($i<=999) {
|
|
echo " <option value='$i'>$i</option>\n";
|
|
$i++;
|
|
}
|
|
echo " </select>\n";
|
|
*/
|
|
echo "</td>\n";
|
|
//order
|
|
echo "<td class='vtablerow' style='".$no_border." text-align: center;' onclick=\"label_to_form('label_dialplan_detail_order_".$x."','dialplan_detail_order_".$x."');\" nowrap='nowrap'>\n";
|
|
if ($element['hidden']) {
|
|
echo " <label id=\"label_dialplan_detail_order_".$x."\">".escape($dialplan_detail_order)."</label>\n";
|
|
}
|
|
echo " <input id='dialplan_detail_order_".$x."' name='dialplan_details[".$x."][dialplan_detail_order]' class='formfld' type='number' min='0' step='1' style='width: 32px; text-align: center; ".$element['visibility']."' placeholder='' value=\"".escape($dialplan_detail_order)."\" onclick='this.select();'>\n";
|
|
/*
|
|
echo " <select id='dialplan_detail_order_".$x."' name='dialplan_details[".$x."][dialplan_detail_order]' class='formfld' style='".$element['width']." ".$element['visibility']."'>\n";
|
|
if (strlen($dialplan_detail_order)> 0) {
|
|
echo " <option $selected value='".escape($dialplan_detail_order)."'>".escape($dialplan_detail_order)."</option>\n";
|
|
}
|
|
$i=0;
|
|
while($i<=999) {
|
|
if (strlen($i) == 1) {
|
|
echo " <option value='00$i'>00$i</option>\n";
|
|
}
|
|
if (strlen($i) == 2) {
|
|
echo " <option value='0$i'>0$i</option>\n";
|
|
}
|
|
if (strlen($i) == 3) {
|
|
echo " <option value='$i'>$i</option>\n";
|
|
}
|
|
$i++;
|
|
}
|
|
echo " </select>\n";
|
|
*/
|
|
echo "</td>\n";
|
|
//tools
|
|
echo " <td class='list_control_icon'>\n";
|
|
if ($element['hidden']) {
|
|
//echo " <a href='dialplan_detail_edit.php?id=".$dialplan_detail_uuid."&dialplan_uuid=".$dialplan_uuid."&app_uuid=".$app_uuid."' alt='".$text['button-edit']."'>$v_link_label_edit</a>\n";
|
|
echo " <a href='dialplan_detail_delete.php?id=".escape($dialplan_detail_uuid)."&dialplan_uuid=".escape($dialplan_uuid).(($app_uuid != '') ? "&app_uuid=".escape($app_uuid) : null)."' alt='".$text['button-delete']."' onclick=\"return confirm('".$text['confirm-delete']."')\">$v_link_label_delete</a>\n";
|
|
}
|
|
echo " </td>\n";
|
|
//end the row
|
|
echo "</tr>\n";
|
|
//increment the value
|
|
$x++;
|
|
}
|
|
$x++;
|
|
} //end foreach
|
|
unset($sql, $details);
|
|
|
|
echo "</table>";
|
|
|
|
} //end if results
|
|
|
|
} //end if update
|
|
|
|
echo "<br>\n";
|
|
echo "<div align='right'>\n";
|
|
if ($action == "update") {
|
|
echo " <input type='hidden' name='dialplan_uuid' value='".escape($dialplan_uuid)."'>\n";
|
|
}
|
|
echo " <input type='submit' class='btn' value='".$text['button-save']."'>\n";
|
|
echo "</div>\n";
|
|
echo "<br><br>\n";
|
|
echo "</form>";
|
|
|
|
//show the footer
|
|
require_once "resources/footer.php";
|
|
|
|
?>
|