From e89a499b2c3c14b835908786a99cc547156edea3 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Thu, 2 Jul 2015 18:49:58 +0400 Subject: [PATCH 1/6] Change. Use number_alias as voicemail_id. --- app/extensions/extension_copy.php | 6 +++--- app/extensions/extension_edit.php | 2 +- app/extensions/resources/classes/extension.php | 6 +++--- app/hot_desking/extension_edit.php | 12 ++++++------ 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/extensions/extension_copy.php b/app/extensions/extension_copy.php index d406b5ef4f..1f9a8d3563 100644 --- a/app/extensions/extension_copy.php +++ b/app/extensions/extension_copy.php @@ -176,11 +176,11 @@ else { //get the voicemails $sql = "select * from v_voicemails "; $sql .= "where domain_uuid = '$domain_uuid' "; - if (is_numeric($extension)) { - $sql .= "and voicemail_id = '$extension' "; + if (is_numeric($number_alias)) { + $sql .= "and voicemail_id = '$number_alias' "; } else { - $sql .= "and voicemail_id = '$number_alias' "; + $sql .= "and voicemail_id = '$extension' "; } $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); diff --git a/app/extensions/extension_edit.php b/app/extensions/extension_edit.php index 3407fdeedc..2920bef162 100644 --- a/app/extensions/extension_edit.php +++ b/app/extensions/extension_edit.php @@ -849,7 +849,7 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) { //get the voicemails $sql = "select * from v_voicemails "; $sql .= "where domain_uuid = '".$domain_uuid."' "; - $sql .= "and voicemail_id = '".((is_numeric($extension)) ? $extension : $number_alias)."' "; + $sql .= "and voicemail_id = '".((is_numeric($number_alias)) ? $number_alias : $extension)."' "; $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); diff --git a/app/extensions/resources/classes/extension.php b/app/extensions/resources/classes/extension.php index a1eb923c5b..dd557c8d7c 100644 --- a/app/extensions/resources/classes/extension.php +++ b/app/extensions/resources/classes/extension.php @@ -91,11 +91,11 @@ public function voicemail() { //determine the voicemail_id - if (is_numeric($this->extension)) { - $this->voicemail_id = $this->extension; + if (is_numeric($this->number_alias)) { + $this->voicemail_id = $this->number_alias; } else { - $this->voicemail_id = $this->number_alias; + $this->voicemail_id = $this->extension; } //update the voicemail settings diff --git a/app/hot_desking/extension_edit.php b/app/hot_desking/extension_edit.php index 86cb81dd1b..0f493eed82 100644 --- a/app/hot_desking/extension_edit.php +++ b/app/hot_desking/extension_edit.php @@ -134,11 +134,11 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) { $sql = "update v_voicemails set "; $sql .= "voicemail_password = '$vm_password' "; $sql .= "where domain_uuid = '$domain_uuid' "; - if (is_numeric($extension)) { - $sql .= "and voicemail_id = '$extension'"; + if (is_numeric($number_alias)) { + $sql .= "and voicemail_id = '$number_alias'"; } else { - $sql .= "and voicemail_id = '$number_alias'"; + $sql .= "and voicemail_id = '$extension'"; } $db->exec(check_sql($sql)); unset($sql); @@ -181,11 +181,11 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) { //get the voicemail data $sql = "select * from v_voicemails "; $sql .= "where domain_uuid = '$domain_uuid' "; - if (is_numeric($extension)) { - $sql .= "and voicemail_id = '$extension' "; + if (is_numeric($number_alias)) { + $sql .= "and voicemail_id = '$number_alias' "; } else { - $sql .= "and voicemail_id = '$number_alias' "; + $sql .= "and voicemail_id = '$extension' "; } //$sql .= "and voicemail_enabled = 'true' "; $prep_statement = $db->prepare(check_sql($sql)); From b4435c974eea80c6efc87419b161507461cd9c8c Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Tue, 7 Jul 2015 18:16:21 +0400 Subject: [PATCH 2/6] Fix. xml_handler/directory generate vm params based on number_alias --- .../app/xml_handler/resources/scripts/directory/directory.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/install/scripts/app/xml_handler/resources/scripts/directory/directory.lua b/resources/install/scripts/app/xml_handler/resources/scripts/directory/directory.lua index bdd926dbdb..3971a6314d 100644 --- a/resources/install/scripts/app/xml_handler/resources/scripts/directory/directory.lua +++ b/resources/install/scripts/app/xml_handler/resources/scripts/directory/directory.lua @@ -281,8 +281,8 @@ --get the voicemail from the database if (continue) then vm_enabled = "true"; - if tonumber(user) == nil then - sql = "SELECT * FROM v_voicemails WHERE domain_uuid = '" .. domain_uuid .. "' and voicemail_id = '" .. number_alias .. "' "; + if number_alias and #number_alias > 0 then + sql = "SELECT * FROM v_voicemails WHERE domain_uuid = '" .. domain_uuid .. "' and voicemail_id = '" .. number_alias .. "' "; else sql = "SELECT * FROM v_voicemails WHERE domain_uuid = '" .. domain_uuid .. "' and voicemail_id = '" .. user .. "' "; end From b4d968cf098aa5517edae660227a5c461ee52255 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Tue, 21 Jul 2015 11:22:16 +0400 Subject: [PATCH 3/6] Fix. remove hot_desking app. --- app/hot_desking/extension_edit.php | 327 ----------------------------- 1 file changed, 327 deletions(-) delete mode 100644 app/hot_desking/extension_edit.php diff --git a/app/hot_desking/extension_edit.php b/app/hot_desking/extension_edit.php deleted file mode 100644 index 0f493eed82..0000000000 --- a/app/hot_desking/extension_edit.php +++ /dev/null @@ -1,327 +0,0 @@ - - Copyright (C) 2008-2015 All Rights Reserved. - - Contributor(s): - Mark J Crane - Luis Daniel Lucio Quiroz -*/ -include "root.php"; -require_once "resources/require.php"; -require_once "resources/check_auth.php"; -if (permission_exists('extension_add') || permission_exists('extension_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 (isset($_REQUEST["id"])) { - $action = "update"; - $extension_uuid = check_str($_REQUEST["id"]); - } - else { - $action = "add"; - } - -//get the http values and set them as php variables - if (count($_POST) > 0) { - //get the values from the HTTP POST and save them as PHP variables - $extension_uuid = check_str($_POST["extension_uuid"]); - $unique_id = check_str($_POST["unique_id"]); - $vm_password = check_str($_POST["vm_password"]); - $dial_string = check_str($_POST["dial_string"]); - } - -if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) { - - //check for all required data - if (strlen($extension_uuid) == 0) { $msg .= $text['message-required'].$text['label-extension']."
\n"; } - if (strlen($unique_id) == 0) { $msg .= $text['message-required'].$text['label-unique_id']."
\n"; } - //get the number of rows in v_extensions - $sql = "select count(*) as num_rows from v_extensions "; - $sql .= "where unique_id = '".$unique_id."' and "; - $sql .= "extension_uuid <> '".$extension_uuid."'"; - $prep_statement = $db->prepare(check_sql($sql)); - if ($prep_statement) { - $prep_statement->execute(); - $row = $prep_statement->fetch(PDO::FETCH_ASSOC); - if ($row['num_rows'] > 0) { - $msg .= $text['message-unique']."
\n"; - } - } - unset($prep_statement, $result); - if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) { - require_once "resources/header.php"; - require_once "resources/persist_form_var.php"; - echo "
\n"; - echo "
\n"; - echo $msg."
"; - echo "
\n"; - persistformvar($_POST); - echo "
\n"; - require_once "resources/footer.php"; - return; - } - - //set the default user context - if (if_group("superadmin")) { - //allow a user assigned to super admin to change the user_context - } - else { - //if the user_context was not set then set the default value - if (strlen($user_context) == 0) { - if (count($_SESSION["domains"]) > 1) { - $user_context = $_SESSION['domain_name']; - } - else { - $user_context = "default"; - } - } - } - - //add or update the database - if ($_POST["persistformvar"] != "true") { - - //get the extension - $sql = "select * from v_extensions "; - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and extension_uuid = '$extension_uuid' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - foreach ($result as &$row) { - $extension = $row["extension"]; - $number_alias = $row["number_alias"]; - } - unset ($prep_statement); - - //update the extension and voicemail - if (($action == "add" && permission_exists('extension_add')) || ($action == "update" && permission_exists('extension_edit'))) { - //update the extension - $sql = "update v_extensions set "; - $sql .= "unique_id = '$unique_id' "; - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and extension_uuid = '$extension_uuid'"; - $db->exec(check_sql($sql)); - unset($sql); - - //update the voicemail - if (strlen($vm_password) > 0) { - $sql = "update v_voicemails set "; - $sql .= "voicemail_password = '$vm_password' "; - $sql .= "where domain_uuid = '$domain_uuid' "; - if (is_numeric($number_alias)) { - $sql .= "and voicemail_id = '$number_alias'"; - } - else { - $sql .= "and voicemail_id = '$extension'"; - } - $db->exec(check_sql($sql)); - unset($sql); - } - } - - //clear the cache - $cache = new cache; - $cache->delete("directory:".$extension."@".$_SESSION['domain_name']); - - //set message and redirect user - if ($action == "add") { - $_SESSION["message"] = $text['message-add']; - } - if ($action == "update") { - $_SESSION["message"] = $text['message-update']; - } - header("Location: index.php"); - return; - - } //if ($_POST["persistformvar"] != "true") -} //(count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) - -//pre-populate the form - if ($_POST["persistformvar"] != "true") { - //get the extension data - $sql = "select * from v_extensions "; - $sql .= "where domain_uuid = '$domain_uuid' "; - $sql .= "and extension_uuid = '$extension_uuid' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - foreach ($result as &$row) { - $extension = $row["extension"]; - $dial_string = $row["dial_string"]; - $unique_id = $row["unique_id"]; - } - unset ($prep_statement); - - //get the voicemail data - $sql = "select * from v_voicemails "; - $sql .= "where domain_uuid = '$domain_uuid' "; - if (is_numeric($number_alias)) { - $sql .= "and voicemail_id = '$number_alias' "; - } - else { - $sql .= "and voicemail_id = '$extension' "; - } - //$sql .= "and voicemail_enabled = 'true' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - foreach ($result as &$row) { - $vm_password = $row["voicemail_password"]; - } - unset ($prep_statement); - } - -//set the defaults - if (strlen($limit_max) == 0) { $limit_max = '5'; } - -//begin the page content - require_once "resources/header.php"; - - echo ""; - - echo "
\n"; - echo "\n"; - echo "\n"; - echo " \n"; - echo " \n"; - echo "\n"; - - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - - if ($action == "update") { - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - - echo "\n"; - } - - echo "\n"; - echo "\n"; - echo "\n"; - - echo "
\n"; - echo " ".$text['header-hot_desking']."\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
\n"; - echo " ".$text['label-extension']."\n"; - echo "\n"; - if ($action == "add") { - echo "
\n"; - echo $text['description-extension-add']."\n"; - } - if ($action == "update") { - echo " $extension
\n"; - echo $text['description-extension-edit']."\n"; - } - echo "
\n"; - - echo "
\n"; - echo " ".$text['label-unique_id']."\n"; - echo "\n"; - echo " \n"; - echo "
\n"; - echo $text['description-unique_id']."\n"; - echo "
\n"; - echo " ".$text['label-voicemail_password']."\n"; - echo "\n"; - echo " \n"; - echo "
\n"; - echo " ".$text['description-voicemail_password']."\n"; - echo "
\n"; - echo " ".$text['label-dial_string']."\n"; - echo "\n"; - echo " \n"; - echo "
\n"; - echo $text['description-dial_string']."\n"; - echo "
\n"; - echo "
"; - echo " \n"; - echo "
"; - echo "

"; - echo "
"; - -require_once "resources/footer.php"; -?> From 162640f754d40e28de706bbb980710b0c537dac6 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Thu, 30 Jul 2015 11:48:01 +0400 Subject: [PATCH 4/6] Fix. Can not enable follow me via `*21` if it was disabled via web. Problem is that php code clear `dial_string` field in DB. And Lua code on enable try use it. --- app/calls/resources/classes/follow_me.php | 419 ++++++++++------------ 1 file changed, 181 insertions(+), 238 deletions(-) diff --git a/app/calls/resources/classes/follow_me.php b/app/calls/resources/classes/follow_me.php index 78c25531fd..6bb12d36c5 100644 --- a/app/calls/resources/classes/follow_me.php +++ b/app/calls/resources/classes/follow_me.php @@ -141,148 +141,91 @@ include "root.php"; //set the global variable global $db; + //prepare insert statement + $stmt = $db->prepare( + "insert into v_follow_me_destinations(" + . "follow_me_destination_uuid," + . "domain_uuid," + . "follow_me_uuid," + . "follow_me_destination," + . "follow_me_timeout," + . "follow_me_delay," + . "follow_me_prompt," + . "follow_me_order" + . ")values(?,?,?,?,?,?,?,?)" + ); + //delete related follow me destinations $sql = "delete from v_follow_me_destinations where follow_me_uuid = '$this->follow_me_uuid' "; $db->exec(check_sql($sql)); //insert the follow me destinations if (strlen($this->destination_data_1) > 0) { - $sql = "insert into v_follow_me_destinations "; - $sql .= "("; - $sql .= "follow_me_destination_uuid, "; - $sql .= "domain_uuid, "; - $sql .= "follow_me_uuid, "; - $sql .= "follow_me_destination, "; - $sql .= "follow_me_timeout, "; - $sql .= "follow_me_delay, "; - $sql .= "follow_me_prompt, "; - $sql .= "follow_me_order "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".uuid()."', "; - $sql .= "'$this->domain_uuid', "; - $sql .= "'$this->follow_me_uuid', "; - $sql .= "'$this->destination_data_1', "; - $sql .= "'$this->destination_timeout_1', "; - $sql .= "'$this->destination_delay_1', "; - $sql .= "'$this->destination_prompt_1', "; - $sql .= "'1' "; - $sql .= ")"; - //echo $sql.";
"; - $db->exec(check_sql($sql)); + $stmt->execute(array( + uuid(), + $this->domain_uuid, + $this->follow_me_uuid, + $this->destination_data_1, + $this->destination_timeout_1, + $this->destination_delay_1, + $this->destination_prompt_1, + '1' + )); $this->destination_order++; - unset($sql); } if (strlen($this->destination_data_2) > 0) { - $sql = "insert into v_follow_me_destinations "; - $sql .= "("; - $sql .= "follow_me_destination_uuid, "; - $sql .= "domain_uuid, "; - $sql .= "follow_me_uuid, "; - $sql .= "follow_me_destination, "; - $sql .= "follow_me_timeout, "; - $sql .= "follow_me_delay, "; - $sql .= "follow_me_prompt, "; - $sql .= "follow_me_order "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".uuid()."', "; - $sql .= "'$this->domain_uuid', "; - $sql .= "'$this->follow_me_uuid', "; - $sql .= "'$this->destination_data_2', "; - $sql .= "'$this->destination_timeout_2', "; - $sql .= "'$this->destination_delay_2', "; - $sql .= "'$this->destination_prompt_2', "; - $sql .= "'2' "; - $sql .= ")"; - //echo $sql.";
"; - $db->exec(check_sql($sql)); + $stmt->execute(array( + uuid(), + $this->domain_uuid, + $this->follow_me_uuid, + $this->destination_data_2, + $this->destination_timeout_2, + $this->destination_delay_2, + $this->destination_prompt_2, + '2' + )); $this->destination_order++; - unset($sql); } if (strlen($this->destination_data_3) > 0) { - $sql = "insert into v_follow_me_destinations "; - $sql .= "("; - $sql .= "follow_me_destination_uuid, "; - $sql .= "domain_uuid, "; - $sql .= "follow_me_uuid, "; - $sql .= "follow_me_destination, "; - $sql .= "follow_me_timeout, "; - $sql .= "follow_me_delay, "; - $sql .= "follow_me_prompt, "; - $sql .= "follow_me_order "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".uuid()."', "; - $sql .= "'$this->domain_uuid', "; - $sql .= "'$this->follow_me_uuid', "; - $sql .= "'$this->destination_data_3', "; - $sql .= "'$this->destination_timeout_3', "; - $sql .= "'$this->destination_delay_3', "; - $sql .= "'$this->destination_prompt_3', "; - $sql .= "'3' "; - $sql .= ")"; - $db->exec(check_sql($sql)); + $stmt->execute(array( + uuid(), + $this->domain_uuid, + $this->follow_me_uuid, + $this->destination_data_3, + $this->destination_timeout_3, + $this->destination_delay_3, + $this->destination_prompt_3, + '3' + )); $this->destination_order++; - unset($sql); } if (strlen($this->destination_data_4) > 0) { - $sql = "insert into v_follow_me_destinations "; - $sql .= "("; - $sql .= "follow_me_destination_uuid, "; - $sql .= "domain_uuid, "; - $sql .= "follow_me_uuid, "; - $sql .= "follow_me_destination, "; - $sql .= "follow_me_timeout, "; - $sql .= "follow_me_delay, "; - $sql .= "follow_me_prompt, "; - $sql .= "follow_me_order "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".uuid()."', "; - $sql .= "'$this->domain_uuid', "; - $sql .= "'$this->follow_me_uuid', "; - $sql .= "'$this->destination_data_4', "; - $sql .= "'$this->destination_timeout_4', "; - $sql .= "'$this->destination_delay_4', "; - $sql .= "'$this->destination_prompt_4', "; - $sql .= "'4' "; - $sql .= ")"; - $db->exec(check_sql($sql)); + $stmt->execute(array( + uuid(), + $this->domain_uuid, + $this->follow_me_uuid, + $this->destination_data_4, + $this->destination_timeout_4, + $this->destination_delay_4, + $this->destination_prompt_4, + '4' + )); $this->destination_order++; - unset($sql); } if (strlen($this->destination_data_5) > 0) { - $sql = "insert into v_follow_me_destinations "; - $sql .= "("; - $sql .= "follow_me_destination_uuid, "; - $sql .= "domain_uuid, "; - $sql .= "follow_me_uuid, "; - $sql .= "follow_me_destination, "; - $sql .= "follow_me_timeout, "; - $sql .= "follow_me_delay, "; - $sql .= "follow_me_prompt, "; - $sql .= "follow_me_order "; - $sql .= ") "; - $sql .= "values "; - $sql .= "("; - $sql .= "'".uuid()."', "; - $sql .= "'$this->domain_uuid', "; - $sql .= "'$this->follow_me_uuid', "; - $sql .= "'$this->destination_data_5', "; - $sql .= "'$this->destination_timeout_5', "; - $sql .= "'$this->destination_delay_5', "; - $sql .= "'$this->destination_prompt_5', "; - $sql .= "'5' "; - $sql .= ")"; - $db->exec(check_sql($sql)); + $stmt->execute(array( + uuid(), + $this->domain_uuid, + $this->follow_me_uuid, + $this->destination_data_5, + $this->destination_timeout_5, + $this->destination_delay_5, + $this->destination_prompt_5, + '5' + )); $this->destination_order++; - unset($sql); } + unset($stmt); } //function public function set() { @@ -326,137 +269,131 @@ include "root.php"; $this->add(); } - //is follow me enabled - if ($this->follow_me_enabled == "true") { - //set the extension dial string - $sql = "select * from v_follow_me_destinations "; - $sql .= "where follow_me_uuid = '".$this->follow_me_uuid."' "; - $sql .= "order by follow_me_order asc "; - $prep_statement_2 = $db->prepare(check_sql($sql)); - $prep_statement_2->execute(); - $result = $prep_statement_2->fetchAll(PDO::FETCH_NAMED); - $dial_string = "{fail_on_single_reject=USER_BUSY"; - $dial_string .= ",instant_ringback=true"; - $dial_string .= ",ignore_early_media=true"; - $dial_string .= ",domain_uuid=".$_SESSION['domain_uuid']; - $dial_string .= ",sip_invite_domain=".$_SESSION['domain_name']; - $dial_string .= ",domain_name=".$_SESSION['domain_name']; - $dial_string .= ",domain=".$_SESSION['domain_name']; - $dial_string .= ",extension_uuid=".$this->extension_uuid; - $dial_string .= ",group_confirm_key=exec,group_confirm_file=lua confirm.lua"; + //set the extension dial string + $sql = "select * from v_follow_me_destinations "; + $sql .= "where follow_me_uuid = '".$this->follow_me_uuid."' "; + $sql .= "order by follow_me_order asc "; + $prep_statement_2 = $db->prepare(check_sql($sql)); + $prep_statement_2->execute(); + $result = $prep_statement_2->fetchAll(PDO::FETCH_NAMED); + $dial_string = "{fail_on_single_reject=USER_BUSY"; + $dial_string .= ",instant_ringback=true"; + $dial_string .= ",ignore_early_media=true"; + $dial_string .= ",domain_uuid=".$_SESSION['domain_uuid']; + $dial_string .= ",sip_invite_domain=".$_SESSION['domain_name']; + $dial_string .= ",domain_name=".$_SESSION['domain_name']; + $dial_string .= ",domain=".$_SESSION['domain_name']; + $dial_string .= ",extension_uuid=".$this->extension_uuid; + $dial_string .= ",group_confirm_key=exec,group_confirm_file=lua confirm.lua"; - $dial_string_caller_id_name = "\${caller_id_name}"; - $dial_string_caller_id_number = "\${caller_id_number}"; + $dial_string_caller_id_name = "\${caller_id_name}"; + $dial_string_caller_id_number = "\${caller_id_number}"; - if (strlen($this->follow_me_caller_id_uuid) > 0){ - $sql_caller = "select destination_number, destination_description from v_destinations where domain_uuid = '$this->domain_uuid' and destination_type = 'inbound' and destination_uuid = '$this->follow_me_caller_id_uuid'"; - $prep_statement_caller = $db->prepare($sql_caller); - if ($prep_statement_caller) { - $prep_statement_caller->execute(); - $row_caller = $prep_statement_caller->fetch(PDO::FETCH_ASSOC); - if (strlen($row_caller['destination_description']) > 0) { - $dial_string_caller_id_name = $row_caller['destination_description']; - } - if (strlen($row_caller['destination_number']) > 0) { - $dial_string_caller_id_number = $row_caller['destination_number']; - } + if (strlen($this->follow_me_caller_id_uuid) > 0){ + $sql_caller = "select destination_number, destination_description from v_destinations where domain_uuid = '$this->domain_uuid' and destination_type = 'inbound' and destination_uuid = '$this->follow_me_caller_id_uuid'"; + $prep_statement_caller = $db->prepare($sql_caller); + if ($prep_statement_caller) { + $prep_statement_caller->execute(); + $row_caller = $prep_statement_caller->fetch(PDO::FETCH_ASSOC); + if (strlen($row_caller['destination_description']) > 0) { + $dial_string_caller_id_name = $row_caller['destination_description']; + } + if (strlen($row_caller['destination_number']) > 0) { + $dial_string_caller_id_number = $row_caller['destination_number']; } } + } - if (strlen($this->cid_name_prefix) > 0) { - $dial_string .= ",origination_caller_id_name=".$this->cid_name_prefix."#$dial_string_caller_id_name"; - } - else { - $dial_string .= ",origination_caller_id_name=$dial_string_caller_id_name"; - } + if (strlen($this->cid_name_prefix) > 0) { + $dial_string .= ",origination_caller_id_name=".$this->cid_name_prefix."#$dial_string_caller_id_name"; + } + else { + $dial_string .= ",origination_caller_id_name=$dial_string_caller_id_name"; + } - if (strlen($this->cid_number_prefix) > 0) { - //$dial_string .= ",origination_caller_id_number=".$this->cid_number_prefix.""; - $dial_string .= ",origination_caller_id_number=".$this->cid_number_prefix."#dial_string_caller_id_number"; - } - else { - $dial_string .= ",origination_caller_id_number=$dial_string_caller_id_number"; - } + if (strlen($this->cid_number_prefix) > 0) { + //$dial_string .= ",origination_caller_id_number=".$this->cid_number_prefix.""; + $dial_string .= ",origination_caller_id_number=".$this->cid_number_prefix."#dial_string_caller_id_number"; + } + else { + $dial_string .= ",origination_caller_id_number=$dial_string_caller_id_number"; + } - if (strlen($this->accountcode) > 0) { - $dial_string .= ",sip_h_X-accountcode=".$this->accountcode; - $dial_string .= ",accountcode=".$this->accountcode; + if (strlen($this->accountcode) > 0) { + $dial_string .= ",sip_h_X-accountcode=".$this->accountcode; + $dial_string .= ",accountcode=".$this->accountcode; + } + $dial_string .= "}"; + $x = 0; + foreach ($result as &$row) { + if ($x > 0) { + $dial_string .= ","; } - $dial_string .= "}"; - $x = 0; - foreach ($result as &$row) { - if ($x > 0) { - $dial_string .= ","; + if (extension_exists($row["follow_me_destination"])) { + //set the dial string + if (strlen($_SESSION['domain']['dial_string']['text']) == 0) { + $dial_string .= "["; + $dial_string .= "outbound_caller_id_number=$dial_string_caller_id_number,"; + $dial_string .= "presence_id=".$row["follow_me_destination"]."@".$_SESSION['domain_name'].","; + if ($row["follow_me_prompt"] == "1") { + $dial_string .= "group_confirm_key=exec,group_confirm_file=lua confirm.lua,confirm=true,"; + } + $dial_string .= "leg_delay_start=".$row["follow_me_delay"].","; + $dial_string .= "leg_timeout=".$row["follow_me_timeout"]."]"; + $dial_string .= "\${sofia_contact(".$row["follow_me_destination"]."@".$_SESSION['domain_name'].")}"; } - if (extension_exists($row["follow_me_destination"])) { - //set the dial string - if (strlen($_SESSION['domain']['dial_string']['text']) == 0) { - $dial_string .= "["; - $dial_string .= "outbound_caller_id_number=$dial_string_caller_id_number,"; - $dial_string .= "presence_id=".$row["follow_me_destination"]."@".$_SESSION['domain_name'].","; - if ($row["follow_me_prompt"] == "1") { - $dial_string .= "group_confirm_key=exec,group_confirm_file=lua confirm.lua,confirm=true,"; - } - $dial_string .= "leg_delay_start=".$row["follow_me_delay"].","; - $dial_string .= "leg_timeout=".$row["follow_me_timeout"]."]"; - $dial_string .= "\${sofia_contact(".$row["follow_me_destination"]."@".$_SESSION['domain_name'].")}"; + else { + $replace_value = $row["follow_me_destination"]; + if ($row["follow_me_prompt"] == "1") { + $replace_value .= "[group_confirm_key=exec,group_confirm_file=lua confirm.lua,confirm=true]"; + } + $local_dial_string = $_SESSION['domain']['dial_string']['text']; + $local_dial_string = str_replace("\${dialed_user}", $replace_value, $local_dial_string); + $local_dial_string = str_replace("\${dialed_domain}", $_SESSION['domain_name'], $local_dial_string); + $local_dial_string = str_replace("\${call_timeout}", $row["follow_me_timeout"], $local_dial_string); + $local_dial_string = str_replace("\${leg_timeout}", $row["follow_me_timeout"], $local_dial_string); + $dial_string .= $local_dial_string; + } + } + else { + $dial_string .= "["; + if ($_SESSION['cdr']['follow_me_fix']['boolean'] == "true"){ + $dial_string .= "outbound_caller_id_name=".$this->outbound_caller_id_name; + $dial_string .= ",outbound_caller_id_number=".$this->outbound_caller_id_number; + $dial_string .= ",origination_caller_id_name=".$this->outbound_caller_id_name; + $dial_string .= ",origination_caller_id_number=".$this->outbound_caller_id_number; + } + else{ + $dial_string .= "outbound_caller_id_number=$dial_string_caller_id_number"; + } + $dial_string .= ",presence_id=".$this->extension."@".$_SESSION['domain_name']; + if ($row["follow_me_prompt"] == "1") { + $dial_string .= ",group_confirm_key=exec,group_confirm_file=lua confirm.lua,confirm=true,"; + } + $dial_string .= ",leg_delay_start=".$row["follow_me_delay"]; + $dial_string .= ",leg_timeout=".$row["follow_me_timeout"]."]"; + if (is_numeric($row["follow_me_destination"])) { + if ($_SESSION['domain']['bridge']['text'] == "outbound" || $_SESSION['domain']['bridge']['text'] == "bridge") { + $bridge = outbound_route_to_bridge ($_SESSION['domain_uuid'], $row["follow_me_destination"]); + $dial_string .= $bridge[0].","; + } + elseif ($_SESSION['domain']['bridge']['text'] == "loopback") { + $dial_string .= "loopback/".$row["follow_me_destination"]."/".$_SESSION['domain_name']; + } + elseif ($_SESSION['domain']['bridge']['text'] == "lcr") { + $dial_string .= "lcr/".$_SESSION['lcr']['profile']['text']."/".$_SESSION['domain_name']."/".$row["follow_me_destination"]; } else { - $replace_value = $row["follow_me_destination"]; - if ($row["follow_me_prompt"] == "1") { - $replace_value .= "[group_confirm_key=exec,group_confirm_file=lua confirm.lua,confirm=true]"; - } - $local_dial_string = $_SESSION['domain']['dial_string']['text']; - $local_dial_string = str_replace("\${dialed_user}", $replace_value, $local_dial_string); - $local_dial_string = str_replace("\${dialed_domain}", $_SESSION['domain_name'], $local_dial_string); - $local_dial_string = str_replace("\${call_timeout}", $row["follow_me_timeout"], $local_dial_string); - $local_dial_string = str_replace("\${leg_timeout}", $row["follow_me_timeout"], $local_dial_string); - $dial_string .= $local_dial_string; + $dial_string .= "loopback/".$row["follow_me_destination"]."/".$_SESSION['domain_name']; } } else { - $dial_string .= "["; - if ($_SESSION['cdr']['follow_me_fix']['boolean'] == "true"){ - $dial_string .= "outbound_caller_id_name=".$this->outbound_caller_id_name; - $dial_string .= ",outbound_caller_id_number=".$this->outbound_caller_id_number; - $dial_string .= ",origination_caller_id_name=".$this->outbound_caller_id_name; - $dial_string .= ",origination_caller_id_number=".$this->outbound_caller_id_number; - } - else{ - $dial_string .= "outbound_caller_id_number=$dial_string_caller_id_number"; - } - $dial_string .= ",presence_id=".$this->extension."@".$_SESSION['domain_name']; - if ($row["follow_me_prompt"] == "1") { - $dial_string .= ",group_confirm_key=exec,group_confirm_file=lua confirm.lua,confirm=true,"; - } - $dial_string .= ",leg_delay_start=".$row["follow_me_delay"]; - $dial_string .= ",leg_timeout=".$row["follow_me_timeout"]."]"; - if (is_numeric($row["follow_me_destination"])) { - if ($_SESSION['domain']['bridge']['text'] == "outbound" || $_SESSION['domain']['bridge']['text'] == "bridge") { - $bridge = outbound_route_to_bridge ($_SESSION['domain_uuid'], $row["follow_me_destination"]); - $dial_string .= $bridge[0].","; - } - elseif ($_SESSION['domain']['bridge']['text'] == "loopback") { - $dial_string .= "loopback/".$row["follow_me_destination"]."/".$_SESSION['domain_name']; - } - elseif ($_SESSION['domain']['bridge']['text'] == "lcr") { - $dial_string .= "lcr/".$_SESSION['lcr']['profile']['text']."/".$_SESSION['domain_name']."/".$row["follow_me_destination"]; - } - else { - $dial_string .= "loopback/".$row["follow_me_destination"]."/".$_SESSION['domain_name']; - } - } - else { - $dial_string .= $row["follow_me_destination"]; - } + $dial_string .= $row["follow_me_destination"]; } - $x++; } - $this->dial_string = $dial_string; - } - else { - $this->dial_string = ''; - } + $x++; + } + $this->dial_string = $dial_string; $sql = "update v_follow_me set "; $sql .= "dial_string = '".$this->dial_string."' "; @@ -468,8 +405,14 @@ include "root.php"; $db->exec($sql); unset($sql); + //is follow me enabled + $dial_string = ''; + if ($this->follow_me_enabled == "true") { + $dial_string = $this->dial_string; + } + $sql = "update v_extensions set "; - $sql .= "dial_string = '".$this->dial_string."', "; + $sql .= "dial_string = '".$dial_string."', "; $sql .= "dial_domain = '".$_SESSION['domain_name']."' "; $sql .= "where domain_uuid = '".$this->domain_uuid."' "; $sql .= "and follow_me_uuid = '".$this->follow_me_uuid."' "; From 3be5ebf29feb4758b193a23167d28eeb01333994 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Thu, 30 Jul 2015 16:21:50 +0400 Subject: [PATCH 5/6] Add. Option to ignore busy from destination in follow me dial-string. --- app/calls/app_languages.php | 11 +++++++++++ app/calls/call_edit.php | 16 ++++++++++++++++ app/calls/resources/classes/follow_me.php | 17 ++++++++++++----- app/follow_me/app_config.php | 4 ++++ 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/app/calls/app_languages.php b/app/calls/app_languages.php index c3ea2aa975..981ca16dd8 100644 --- a/app/calls/app_languages.php +++ b/app/calls/app_languages.php @@ -101,6 +101,17 @@ $text['label-on-busy']['sv-se'] = "Vid Upptaget "; $text['label-on-busy']['uk'] = "Якщо зайнято"; $text['label-on-busy']['de-at'] = "Bei Besetzt"; +$text['label-ignore-busy']['en-us'] = "Ignore Busy"; +$text['label-ignore-busy']['es-cl'] = ""; +$text['label-ignore-busy']['pt-pt'] = ""; +$text['label-ignore-busy']['fr-fr'] = ""; +$text['label-ignore-busy']['it-it'] = ""; +$text['label-ignore-busy']['pt-br'] = ""; +$text['label-ignore-busy']['pl'] = ""; +$text['label-ignore-busy']['sv-se'] = ""; +$text['label-ignore-busy']['uk'] = ""; +$text['label-ignore-busy']['de-at'] = ""; + $text['label-number']['en-us'] = "Number"; $text['label-number']['es-cl'] = "Número"; $text['label-number']['pt-pt'] = "Número"; diff --git a/app/calls/call_edit.php b/app/calls/call_edit.php index d4d151ee07..85e26d0ad9 100644 --- a/app/calls/call_edit.php +++ b/app/calls/call_edit.php @@ -127,6 +127,7 @@ if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) { $cid_number_prefix = check_str($_POST["cid_number_prefix"]); $follow_me_enabled = check_str($_POST["follow_me_enabled"]); $follow_me_caller_id_uuid = check_str($_POST["follow_me_caller_id_uuid"]); + $follow_me_ignore_busy = check_str($_POST["follow_me_ignore_busy"]); $destination_data_1 = check_str($_POST["destination_data_1"]); $destination_delay_1 = check_str($_POST["destination_delay_1"]); @@ -280,6 +281,7 @@ if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) { $follow_me->cid_number_prefix = $cid_number_prefix; $follow_me->follow_me_enabled = $follow_me_enabled; $follow_me->follow_me_caller_id_uuid = $follow_me_caller_id_uuid; + $follow_me->follow_me_ignore_busy = $follow_me_ignore_busy; $follow_me->destination_data_1 = $destination_data_1; $follow_me->destination_type_1 = $destination_type_1; @@ -402,6 +404,7 @@ if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) { $cid_number_prefix = $row["cid_number_prefix"]; $follow_me_enabled = $row["follow_me_enabled"]; $follow_me_caller_id_uuid = $row["follow_me_caller_id_uuid"]; + $follow_me_ignore_busy = $row["follow_me_ignore_busy"]; $sql = "select * from v_follow_me_destinations "; $sql .= "where follow_me_uuid = '$follow_me_uuid' "; @@ -738,6 +741,19 @@ if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) { echo "\n"; echo "\n"; + echo " \n"; + echo " "; + echo $text['label-ignore-busy']; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
Interrupt call if one of destination are busy\n"; + echo " \n"; + echo " \n"; + if (permission_exists('follow_me_cid_name_prefix')) { echo "\n"; echo "\n"; diff --git a/app/calls/resources/classes/follow_me.php b/app/calls/resources/classes/follow_me.php index 6bb12d36c5..8afeda794d 100644 --- a/app/calls/resources/classes/follow_me.php +++ b/app/calls/resources/classes/follow_me.php @@ -39,6 +39,7 @@ include "root.php"; public $accountcode; public $follow_me_enabled; public $follow_me_caller_id_uuid; + public $follow_me_ignore_busy; public $outbound_caller_id_name; public $outbound_caller_id_number; private $extension; @@ -90,7 +91,8 @@ include "root.php"; $sql .= "cid_number_prefix, "; } $sql .= "follow_me_caller_id_uuid, "; - $sql .= "follow_me_enabled "; + $sql .= "follow_me_enabled, "; + $sql .= "follow_me_ignore_busy "; $sql .= ")"; $sql .= "values "; $sql .= "("; @@ -106,7 +108,8 @@ include "root.php"; else { $sql .= 'null, '; } - $sql .= "'$this->follow_me_enabled' "; + $sql .= "'$this->follow_me_enabled', "; + $sql .= "'$this->follow_me_ignore_busy' "; $sql .= ")"; if ($v_debug) { echo $sql."
"; @@ -122,6 +125,7 @@ include "root.php"; //update follow me table $sql = "update v_follow_me set "; $sql .= "follow_me_enabled = '$this->follow_me_enabled', "; + $sql .= "follow_me_ignore_busy = '$this->follow_me_ignore_busy', "; $sql .= "cid_name_prefix = '$this->cid_name_prefix', "; if (strlen($this->follow_me_caller_id_uuid) > 0) { $sql .= "follow_me_caller_id_uuid = '$this->follow_me_caller_id_uuid', "; @@ -276,8 +280,11 @@ include "root.php"; $prep_statement_2 = $db->prepare(check_sql($sql)); $prep_statement_2->execute(); $result = $prep_statement_2->fetchAll(PDO::FETCH_NAMED); - $dial_string = "{fail_on_single_reject=USER_BUSY"; - $dial_string .= ",instant_ringback=true"; + $dial_string = "{"; + if ($this->follow_me_ignore_busy != 'true') { + $dial_string .= "fail_on_single_reject=USER_BUSY,"; + } + $dial_string .= "instant_ringback=true,"; $dial_string .= ",ignore_early_media=true"; $dial_string .= ",domain_uuid=".$_SESSION['domain_uuid']; $dial_string .= ",sip_invite_domain=".$_SESSION['domain_name']; @@ -375,7 +382,7 @@ include "root.php"; if (is_numeric($row["follow_me_destination"])) { if ($_SESSION['domain']['bridge']['text'] == "outbound" || $_SESSION['domain']['bridge']['text'] == "bridge") { $bridge = outbound_route_to_bridge ($_SESSION['domain_uuid'], $row["follow_me_destination"]); - $dial_string .= $bridge[0].","; + $dial_string .= $bridge[0]; } elseif ($_SESSION['domain']['bridge']['text'] == "loopback") { $dial_string .= "loopback/".$row["follow_me_destination"]."/".$_SESSION['domain_name']; diff --git a/app/follow_me/app_config.php b/app/follow_me/app_config.php index 18c64547f4..d5803f4437 100644 --- a/app/follow_me/app_config.php +++ b/app/follow_me/app_config.php @@ -122,6 +122,10 @@ $apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)"; $apps[$x]['db'][$y]['fields'][$z]['description']['en'] = ""; $z++; + $apps[$x]['db'][$y]['fields'][$z]['name'] = "follow_me_ignore_busy"; + $apps[$x]['db'][$y]['fields'][$z]['type'] = "text"; + $apps[$x]['db'][$y]['fields'][$z]['description']['en'] = ""; + $z++; //schema details $y = 1; //table array index From 4ba483f2941f724437825c4a31f7a841fc219c16 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Wed, 5 Aug 2015 13:41:27 +0400 Subject: [PATCH 6/6] Fix. Empty comma in dialstring --- app/calls/resources/classes/follow_me.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/calls/resources/classes/follow_me.php b/app/calls/resources/classes/follow_me.php index 8afeda794d..18c18325fa 100644 --- a/app/calls/resources/classes/follow_me.php +++ b/app/calls/resources/classes/follow_me.php @@ -285,7 +285,7 @@ include "root.php"; $dial_string .= "fail_on_single_reject=USER_BUSY,"; } $dial_string .= "instant_ringback=true,"; - $dial_string .= ",ignore_early_media=true"; + $dial_string .= "ignore_early_media=true"; $dial_string .= ",domain_uuid=".$_SESSION['domain_uuid']; $dial_string .= ",sip_invite_domain=".$_SESSION['domain_name']; $dial_string .= ",domain_name=".$_SESSION['domain_name'];