2012-06-04 16:58:40 +02:00
|
|
|
<?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>
|
2016-05-11 21:23:53 +02:00
|
|
|
Copyright (C) 2010 - 2016
|
2012-06-04 16:58:40 +02:00
|
|
|
All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
Contributor(s):
|
|
|
|
|
Mark J Crane <markjcrane@fusionpbx.com>
|
2014-06-22 20:38:46 +02:00
|
|
|
Luis Daniel Lucio Quiroz <dlucio@okay.com.mx>
|
2015-03-21 10:21:29 +01:00
|
|
|
Errol Samuels <voiptology@gmail.com>
|
2016-03-11 12:56:29 +01:00
|
|
|
|
2012-06-04 16:58:40 +02:00
|
|
|
*/
|
|
|
|
|
include "root.php";
|
|
|
|
|
|
|
|
|
|
//define the call_forward class
|
|
|
|
|
class call_forward {
|
2012-12-17 22:30:49 +01:00
|
|
|
public $debug;
|
2012-06-04 16:58:40 +02:00
|
|
|
public $domain_uuid;
|
2012-12-17 22:30:49 +01:00
|
|
|
public $domain_name;
|
2012-12-16 08:39:03 +01:00
|
|
|
public $extension_uuid;
|
2012-12-17 22:30:49 +01:00
|
|
|
private $extension;
|
2015-08-24 08:34:33 +02:00
|
|
|
private $number_alias;
|
2012-12-16 08:39:03 +01:00
|
|
|
public $forward_all_destination;
|
|
|
|
|
public $forward_all_enabled;
|
2012-12-17 22:30:49 +01:00
|
|
|
private $dial_string;
|
2015-08-14 11:27:47 +02:00
|
|
|
private $toll_allow;
|
2013-05-01 20:14:13 +02:00
|
|
|
public $accountcode;
|
2015-02-28 05:07:15 +01:00
|
|
|
public $forward_caller_id_uuid;
|
2015-06-24 18:49:07 +02:00
|
|
|
public $outbound_caller_id_name;
|
|
|
|
|
public $outbound_caller_id_number;
|
2012-06-04 16:58:40 +02:00
|
|
|
|
2012-12-17 22:30:49 +01:00
|
|
|
public function set() {
|
|
|
|
|
//set the global variable
|
|
|
|
|
global $db;
|
|
|
|
|
|
2013-05-01 20:14:13 +02:00
|
|
|
//determine whether to update the dial string
|
|
|
|
|
$sql = "select * from v_extensions ";
|
|
|
|
|
$sql .= "where domain_uuid = '".$this->domain_uuid."' ";
|
|
|
|
|
$sql .= "and extension_uuid = '".$this->extension_uuid."' ";
|
|
|
|
|
$prep_statement = $db->prepare(check_sql($sql));
|
|
|
|
|
$prep_statement->execute();
|
|
|
|
|
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
|
2016-05-11 21:23:53 +02:00
|
|
|
if (is_array($result)) foreach ($result as &$row) {
|
|
|
|
|
$this->extension = $row["extension"];
|
|
|
|
|
$this->number_alias = $row["number_alias"];
|
|
|
|
|
$this->accountcode = $row["accountcode"];
|
|
|
|
|
$this->toll_allow = $row["toll_allow"];
|
|
|
|
|
$this->outbound_caller_id_name = $row["outbound_caller_id_name"];
|
|
|
|
|
$this->outbound_caller_id_number = $row["outbound_caller_id_number"];
|
2013-05-01 20:14:13 +02:00
|
|
|
}
|
|
|
|
|
unset ($prep_statement);
|
|
|
|
|
|
2012-12-17 22:30:49 +01:00
|
|
|
//set the dial string
|
|
|
|
|
if ($this->forward_all_enabled == "true") {
|
2016-11-17 19:40:22 +01:00
|
|
|
$dial_string = "{instant_ringback=true";
|
2014-05-30 01:49:17 +02:00
|
|
|
$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'];
|
2014-08-03 13:05:05 +02:00
|
|
|
$dial_string .= ",extension_uuid=".$this->extension_uuid;
|
2015-08-14 11:27:47 +02:00
|
|
|
$dial_string .= ",toll_allow='".$this->toll_allow."'";
|
2016-09-02 06:31:23 +02:00
|
|
|
$dial_string .=",sip_h_Diversion=<sip:".$this->extension."@".$_SESSION['domain_name'].">;reason=unconditional";
|
2016-11-01 20:37:43 +01:00
|
|
|
if (strlen($this->accountcode) == 0) {
|
|
|
|
|
$dial_string .= ",sip_h_X-accountcode=\${accountcode}";
|
|
|
|
|
}
|
|
|
|
|
else {
|
2015-03-21 10:21:29 +01:00
|
|
|
$dial_string .= ",sip_h_X-accountcode=".$this->accountcode;
|
2015-03-23 02:53:25 +01:00
|
|
|
$dial_string .= ",accountcode=".$this->accountcode;
|
2013-05-01 20:14:13 +02:00
|
|
|
}
|
2015-02-28 05:07:15 +01:00
|
|
|
|
2017-03-03 00:37:07 +01:00
|
|
|
if (strlen($this->forward_caller_id_uuid) > 0) {
|
|
|
|
|
$sql_caller = "select destination_number, destination_description, destination_caller_id_number, destination_caller_id_name ";
|
|
|
|
|
$sql_caller .= "from v_destinations ";
|
|
|
|
|
$sql_caller .= "where domain_uuid = '$this->domain_uuid' ";
|
|
|
|
|
$sql_caller .= "and destination_type = 'inbound' ";
|
|
|
|
|
$sql_caller .= "and destination_uuid = '$this->forward_caller_id_uuid'";
|
2015-02-28 05:07:15 +01:00
|
|
|
$prep_statement_caller = $db->prepare($sql_caller);
|
|
|
|
|
if ($prep_statement_caller) {
|
|
|
|
|
$prep_statement_caller->execute();
|
|
|
|
|
$row_caller = $prep_statement_caller->fetch(PDO::FETCH_ASSOC);
|
2015-10-23 13:40:29 +02:00
|
|
|
|
|
|
|
|
$caller_id_number = $row_caller['destination_caller_id_number'];
|
|
|
|
|
if(strlen($caller_id_number) == 0){
|
|
|
|
|
$caller_id_number = $row_caller['destination_number'];
|
|
|
|
|
}
|
|
|
|
|
$caller_id_name = $row_caller['destination_caller_id_name'];
|
|
|
|
|
if(strlen($caller_id_name) == 0){
|
|
|
|
|
$caller_id_name = $row_caller['destination_description'];
|
|
|
|
|
}
|
2015-02-28 05:07:15 +01:00
|
|
|
}
|
|
|
|
|
}
|
2017-03-03 00:37:07 +01:00
|
|
|
else {
|
|
|
|
|
if ($_SESSION['cdr']['call_forward_fix']['boolean'] === "true") {
|
|
|
|
|
if (strlen($this->outbound_caller_id_name) > 0) {
|
|
|
|
|
$dial_string .= ",origination_caller_id_name=".$this->cid_name_prefix.$this->outbound_caller_id_name;
|
|
|
|
|
}
|
|
|
|
|
if (strlen($this->outbound_caller_id_number) > 0) {
|
|
|
|
|
$dial_string .= ",origination_caller_id_number=".$this->cid_number_prefix.$this->outbound_caller_id_number;
|
|
|
|
|
}
|
2015-06-29 20:57:03 +02:00
|
|
|
}
|
2015-06-24 18:49:07 +02:00
|
|
|
}
|
2015-02-28 05:07:15 +01:00
|
|
|
|
2013-01-19 18:11:04 +01:00
|
|
|
if (extension_exists($this->forward_all_destination)) {
|
2016-11-17 19:40:22 +01:00
|
|
|
// For support load_balance we need set `dialed_extension`
|
|
|
|
|
$dial_string .= ",dialed_extension=".$this->forward_all_destination;
|
|
|
|
|
// we do not need here presence_id because user dial-string already has one
|
|
|
|
|
$dial_string .= "}";
|
2013-12-18 03:04:32 +01:00
|
|
|
$dial_string .= "user/".$this->forward_all_destination."@".$_SESSION['domain_name'];
|
2013-01-19 18:11:04 +01:00
|
|
|
}
|
|
|
|
|
else {
|
2016-11-17 19:40:22 +01:00
|
|
|
// setting here presence_id equal extension not dialed number allows work BLF and intercept.
|
|
|
|
|
$presence_id = extension_presence_id($this->extension, $this->number_alias);
|
2017-06-09 18:27:32 +02:00
|
|
|
|
|
|
|
|
if (strlen($caller_id_number) > 0) {
|
2017-05-26 23:59:14 +02:00
|
|
|
//set the caller id if it is set
|
2017-06-09 18:27:32 +02:00
|
|
|
if (strlen($caller_id_name) > 0) {
|
2017-05-26 23:41:50 +02:00
|
|
|
$dial_string .= ",origination_caller_id_name=".$caller_id_name;
|
|
|
|
|
$dial_string .= ",effective_caller_id_name=".$caller_id_name;
|
2017-06-09 18:27:32 +02:00
|
|
|
}
|
2017-05-26 23:59:14 +02:00
|
|
|
$dial_string .= ",origination_caller_id_number=".$caller_id_number;
|
2017-05-26 23:41:50 +02:00
|
|
|
$dial_string .= ",effective_caller_id_number=".$caller_id_number;
|
2017-06-09 18:27:32 +02:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
//set the outbound caller id number if the caller id number is a user
|
|
|
|
|
$dial_string .=',origination_caller_id_number=${cond(${from_user_exists} == true ? ${outbound_caller_id_number} : ${origination_caller_id_number})}';
|
|
|
|
|
$dial_string .=',effective_caller_id_number=${cond(${from_user_exists} == true ? ${outbound_caller_id_number} : ${effective_caller_id_number})}';
|
|
|
|
|
$dial_string .=',origination_caller_id_name=${cond(${from_user_exists} == true ? ${outbound_caller_id_name} : ${origination_caller_id_name})}';
|
|
|
|
|
$dial_string .=',effective_caller_id_name=${cond(${from_user_exists} == true ? ${outbound_caller_id_name} : ${effective_caller_id_name})}';
|
|
|
|
|
}
|
2017-03-03 00:37:07 +01:00
|
|
|
|
2016-11-17 19:40:22 +01:00
|
|
|
// $presence_id = $this->forward_all_destination;
|
|
|
|
|
$dial_string .= ",presence_id=".$presence_id."@".$_SESSION['domain_name'];
|
|
|
|
|
$dial_string .= "}";
|
|
|
|
|
|
2015-03-21 23:49:12 +01:00
|
|
|
if ($_SESSION['domain']['bridge']['text'] == "outbound" || $_SESSION['domain']['bridge']['text'] == "bridge") {
|
|
|
|
|
$bridge = outbound_route_to_bridge ($_SESSION['domain_uuid'], $this->forward_all_destination);
|
|
|
|
|
$dial_string .= $bridge[0];
|
|
|
|
|
}
|
|
|
|
|
elseif ($_SESSION['domain']['bridge']['text'] == "lcr") {
|
|
|
|
|
$dial_string .= "lcr/".$_SESSION['lcr']['profile']['text']."/".$_SESSION['domain_name']."/".$this->forward_all_destination;
|
|
|
|
|
}
|
|
|
|
|
elseif ($_SESSION['domain']['bridge']['text'] === "loopback") {
|
2013-01-25 22:57:39 +01:00
|
|
|
$dial_string .= "loopback/".$this->forward_all_destination;
|
2015-03-21 23:49:12 +01:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$dial_string .= "loopback/".$this->forward_all_destination;
|
|
|
|
|
}
|
2013-01-19 18:11:04 +01:00
|
|
|
}
|
2013-01-25 22:57:39 +01:00
|
|
|
$this->dial_string = $dial_string;
|
2012-12-17 22:30:49 +01:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$this->dial_string = '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//update the extension
|
|
|
|
|
$sql = "update v_extensions set ";
|
2015-09-09 14:26:41 +02:00
|
|
|
if (strlen($this->forward_all_destination) == 0) {
|
|
|
|
|
$sql .= "forward_all_destination = null, ";
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$sql .= "forward_all_destination = '$this->forward_all_destination', ";
|
|
|
|
|
}
|
2014-09-13 12:01:41 +02:00
|
|
|
if (strlen($this->forward_all_destination) == 0 || $this->forward_all_enabled == "false") {
|
|
|
|
|
$sql .= "dial_string = null, ";
|
2014-10-29 14:35:18 +01:00
|
|
|
$sql .= "forward_all_enabled = 'false' ";
|
2014-09-13 12:01:41 +02:00
|
|
|
}
|
|
|
|
|
else {
|
2015-08-14 11:27:47 +02:00
|
|
|
$sql .= "dial_string = '".check_str($this->dial_string)."', ";
|
2014-09-13 12:01:41 +02:00
|
|
|
$sql .= "forward_all_enabled = 'true' ";
|
|
|
|
|
}
|
2012-12-17 22:30:49 +01:00
|
|
|
$sql .= "where domain_uuid = '$this->domain_uuid' ";
|
|
|
|
|
$sql .= "and extension_uuid = '$this->extension_uuid' ";
|
|
|
|
|
if ($this->debug) {
|
|
|
|
|
echo $sql;
|
|
|
|
|
}
|
|
|
|
|
$db->exec(check_sql($sql));
|
|
|
|
|
unset($sql);
|
|
|
|
|
|
|
|
|
|
//delete extension from memcache
|
2015-08-24 08:34:33 +02:00
|
|
|
$cache = new cache;
|
|
|
|
|
$cache->delete("directory:".$this->extension."@".$this->domain_name);
|
|
|
|
|
if(strlen($this->number_alias) > 0){
|
|
|
|
|
$cache->delete("directory:".$this->number_alias."@".$this->domain_name);
|
2012-12-17 22:30:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} //function
|
|
|
|
|
} //class
|
2012-06-04 16:58:40 +02:00
|
|
|
|
2013-12-18 03:04:32 +01:00
|
|
|
?>
|