fixed sending exten num to outbound calleees. Fixed presence bug (set presence for non-extension). Correct caller id num will show for internally generated calls and externally generated calls (inbound). Can also view presence ringing for devices set to follow to only an external (mobile) number.

This commit is contained in:
James Rose 2013-11-08 21:04:28 +00:00
parent 5bf11c919c
commit d5153df99e
1 changed files with 379 additions and 359 deletions

View File

@ -1,359 +1,379 @@
<?php <?php
/* /*
FusionPBX FusionPBX
Version: MPL 1.1 Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version 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 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 the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/ http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis, Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the for the specific language governing rights and limitations under the
License. License.
The Original Code is FusionPBX The Original Code is FusionPBX
The Initial Developer of the Original Code is The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com> Mark J Crane <markjcrane@fusionpbx.com>
Copyright (C) 2010 Copyright (C) 2010
All Rights Reserved. All Rights Reserved.
Contributor(s): Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com> Mark J Crane <markjcrane@fusionpbx.com>
*/ */
include "root.php"; include "root.php";
//define the follow me class //define the follow me class
class follow_me { class follow_me {
public $domain_uuid; public $domain_uuid;
public $db_type; public $db_type;
public $follow_me_uuid; public $follow_me_uuid;
public $cid_name_prefix; public $cid_name_prefix;
public $cid_number_prefix; public $cid_number_prefix;
public $accountcode; public $accountcode;
public $call_prompt; public $call_prompt;
public $follow_me_enabled; public $follow_me_enabled;
private $extension; private $extension;
public $destination_data_1; public $destination_data_1;
public $destination_type_1; public $destination_type_1;
public $destination_delay_1; public $destination_delay_1;
public $destination_timeout_1; public $destination_timeout_1;
public $destination_data_2; public $destination_data_2;
public $destination_type_2; public $destination_type_2;
public $destination_delay_2; public $destination_delay_2;
public $destination_timeout_2; public $destination_timeout_2;
public $destination_data_3; public $destination_data_3;
public $destination_type_3; public $destination_type_3;
public $destination_delay_3; public $destination_delay_3;
public $destination_timeout_3; public $destination_timeout_3;
public $destination_data_4; public $destination_data_4;
public $destination_type_4; public $destination_type_4;
public $destination_delay_4; public $destination_delay_4;
public $destination_timeout_4; public $destination_timeout_4;
public $destination_data_5; public $destination_data_5;
public $destination_type_5; public $destination_type_5;
public $destination_delay_5; public $destination_delay_5;
public $destination_timeout_5; public $destination_timeout_5;
public $destination_timeout = 0; public $destination_timeout = 0;
public $destination_order = 1; public $destination_order = 1;
public function add() { public function add() {
//set the global variable //set the global variable
global $db; global $db;
//add a new follow me //add a new follow me
$sql = "insert into v_follow_me "; $sql = "insert into v_follow_me ";
$sql .= "("; $sql .= "(";
$sql .= "domain_uuid, "; $sql .= "domain_uuid, ";
$sql .= "follow_me_uuid, "; $sql .= "follow_me_uuid, ";
$sql .= "cid_name_prefix, "; $sql .= "cid_name_prefix, ";
if (strlen($this->cid_number_prefix) > 0) { if (strlen($this->cid_number_prefix) > 0) {
$sql .= "cid_number_prefix, "; $sql .= "cid_number_prefix, ";
} }
$sql .= "call_prompt, "; $sql .= "call_prompt, ";
$sql .= "follow_me_enabled "; $sql .= "follow_me_enabled ";
$sql .= ")"; $sql .= ")";
$sql .= "values "; $sql .= "values ";
$sql .= "("; $sql .= "(";
$sql .= "'$this->domain_uuid', "; $sql .= "'$this->domain_uuid', ";
$sql .= "'$this->follow_me_uuid', "; $sql .= "'$this->follow_me_uuid', ";
$sql .= "'$this->cid_name_prefix', "; $sql .= "'$this->cid_name_prefix', ";
if (strlen($this->cid_number_prefix) > 0) { if (strlen($this->cid_number_prefix) > 0) {
$sql .= "'$this->cid_number_prefix', "; $sql .= "'$this->cid_number_prefix', ";
} }
$sql .= "'$this->call_prompt', "; $sql .= "'$this->call_prompt', ";
$sql .= "'$this->follow_me_enabled' "; $sql .= "'$this->follow_me_enabled' ";
$sql .= ")"; $sql .= ")";
if ($v_debug) { if ($v_debug) {
echo $sql."<br />"; echo $sql."<br />";
} }
$db->exec(check_sql($sql)); $db->exec(check_sql($sql));
unset($sql); unset($sql);
$this->follow_me_destinations(); $this->follow_me_destinations();
} //end function } //end function
public function update() { public function update() {
//set the global variable //set the global variable
global $db; global $db;
//update follow me table //update follow me table
$sql = "update v_follow_me set "; $sql = "update v_follow_me set ";
$sql .= "follow_me_enabled = '$this->follow_me_enabled', "; $sql .= "follow_me_enabled = '$this->follow_me_enabled', ";
$sql .= "cid_name_prefix = '$this->cid_name_prefix', "; $sql .= "cid_name_prefix = '$this->cid_name_prefix', ";
if (strlen($this->cid_number_prefix) > 0) { if (strlen($this->cid_number_prefix) > 0) {
$sql .= "cid_number_prefix = '$this->cid_number_prefix', "; $sql .= "cid_number_prefix = '$this->cid_number_prefix', ";
} }
$sql .= "call_prompt = '$this->call_prompt' "; $sql .= "call_prompt = '$this->call_prompt' ";
$sql .= "where domain_uuid = '$this->domain_uuid' "; $sql .= "where domain_uuid = '$this->domain_uuid' ";
$sql .= "and follow_me_uuid = '$this->follow_me_uuid' "; $sql .= "and follow_me_uuid = '$this->follow_me_uuid' ";
$db->exec(check_sql($sql)); $db->exec(check_sql($sql));
unset($sql); unset($sql);
$this->follow_me_destinations(); $this->follow_me_destinations();
} //end function } //end function
public function follow_me_destinations() { public function follow_me_destinations() {
//set the global variable //set the global variable
global $db; global $db;
//delete related follow me destinations //delete related follow me destinations
$sql = "delete from v_follow_me_destinations where follow_me_uuid = '$this->follow_me_uuid' "; $sql = "delete from v_follow_me_destinations where follow_me_uuid = '$this->follow_me_uuid' ";
$db->exec(check_sql($sql)); $db->exec(check_sql($sql));
//insert the follow me destinations //insert the follow me destinations
if (strlen($this->destination_data_1) > 0) { if (strlen($this->destination_data_1) > 0) {
$sql = "insert into v_follow_me_destinations "; $sql = "insert into v_follow_me_destinations ";
$sql .= "("; $sql .= "(";
$sql .= "follow_me_destination_uuid, "; $sql .= "follow_me_destination_uuid, ";
$sql .= "domain_uuid, "; $sql .= "domain_uuid, ";
$sql .= "follow_me_uuid, "; $sql .= "follow_me_uuid, ";
$sql .= "follow_me_destination, "; $sql .= "follow_me_destination, ";
$sql .= "follow_me_timeout, "; $sql .= "follow_me_timeout, ";
$sql .= "follow_me_delay, "; $sql .= "follow_me_delay, ";
$sql .= "follow_me_order "; $sql .= "follow_me_order ";
$sql .= ") "; $sql .= ") ";
$sql .= "values "; $sql .= "values ";
$sql .= "("; $sql .= "(";
$sql .= "'".uuid()."', "; $sql .= "'".uuid()."', ";
$sql .= "'$this->domain_uuid', "; $sql .= "'$this->domain_uuid', ";
$sql .= "'$this->follow_me_uuid', "; $sql .= "'$this->follow_me_uuid', ";
$sql .= "'$this->destination_data_1', "; $sql .= "'$this->destination_data_1', ";
$sql .= "'$this->destination_timeout_1', "; $sql .= "'$this->destination_timeout_1', ";
$sql .= "'$this->destination_delay_1', "; $sql .= "'$this->destination_delay_1', ";
$sql .= "'1' "; $sql .= "'1' ";
$sql .= ")"; $sql .= ")";
$db->exec(check_sql($sql)); $db->exec(check_sql($sql));
$this->destination_order++; $this->destination_order++;
unset($sql); unset($sql);
} }
if (strlen($this->destination_data_2) > 0) { if (strlen($this->destination_data_2) > 0) {
$sql = "insert into v_follow_me_destinations "; $sql = "insert into v_follow_me_destinations ";
$sql .= "("; $sql .= "(";
$sql .= "follow_me_destination_uuid, "; $sql .= "follow_me_destination_uuid, ";
$sql .= "domain_uuid, "; $sql .= "domain_uuid, ";
$sql .= "follow_me_uuid, "; $sql .= "follow_me_uuid, ";
$sql .= "follow_me_destination, "; $sql .= "follow_me_destination, ";
$sql .= "follow_me_timeout, "; $sql .= "follow_me_timeout, ";
$sql .= "follow_me_delay, "; $sql .= "follow_me_delay, ";
$sql .= "follow_me_order "; $sql .= "follow_me_order ";
$sql .= ") "; $sql .= ") ";
$sql .= "values "; $sql .= "values ";
$sql .= "("; $sql .= "(";
$sql .= "'".uuid()."', "; $sql .= "'".uuid()."', ";
$sql .= "'$this->domain_uuid', "; $sql .= "'$this->domain_uuid', ";
$sql .= "'$this->follow_me_uuid', "; $sql .= "'$this->follow_me_uuid', ";
$sql .= "'$this->destination_data_2', "; $sql .= "'$this->destination_data_2', ";
$sql .= "'$this->destination_timeout_2', "; $sql .= "'$this->destination_timeout_2', ";
$sql .= "'$this->destination_delay_2', "; $sql .= "'$this->destination_delay_2', ";
$sql .= "'2' "; $sql .= "'2' ";
$sql .= ")"; $sql .= ")";
$db->exec(check_sql($sql)); $db->exec(check_sql($sql));
$this->destination_order++; $this->destination_order++;
unset($sql); unset($sql);
} }
if (strlen($this->destination_data_3) > 0) { if (strlen($this->destination_data_3) > 0) {
$sql = "insert into v_follow_me_destinations "; $sql = "insert into v_follow_me_destinations ";
$sql .= "("; $sql .= "(";
$sql .= "follow_me_destination_uuid, "; $sql .= "follow_me_destination_uuid, ";
$sql .= "domain_uuid, "; $sql .= "domain_uuid, ";
$sql .= "follow_me_uuid, "; $sql .= "follow_me_uuid, ";
$sql .= "follow_me_destination, "; $sql .= "follow_me_destination, ";
$sql .= "follow_me_timeout, "; $sql .= "follow_me_timeout, ";
$sql .= "follow_me_delay, "; $sql .= "follow_me_delay, ";
$sql .= "follow_me_order "; $sql .= "follow_me_order ";
$sql .= ") "; $sql .= ") ";
$sql .= "values "; $sql .= "values ";
$sql .= "("; $sql .= "(";
$sql .= "'".uuid()."', "; $sql .= "'".uuid()."', ";
$sql .= "'$this->domain_uuid', "; $sql .= "'$this->domain_uuid', ";
$sql .= "'$this->follow_me_uuid', "; $sql .= "'$this->follow_me_uuid', ";
$sql .= "'$this->destination_data_3', "; $sql .= "'$this->destination_data_3', ";
$sql .= "'$this->destination_timeout_3', "; $sql .= "'$this->destination_timeout_3', ";
$sql .= "'$this->destination_delay_3', "; $sql .= "'$this->destination_delay_3', ";
$sql .= "'3' "; $sql .= "'3' ";
$sql .= ")"; $sql .= ")";
$db->exec(check_sql($sql)); $db->exec(check_sql($sql));
$this->destination_order++; $this->destination_order++;
unset($sql); unset($sql);
} }
if (strlen($this->destination_data_4) > 0) { if (strlen($this->destination_data_4) > 0) {
$sql = "insert into v_follow_me_destinations "; $sql = "insert into v_follow_me_destinations ";
$sql .= "("; $sql .= "(";
$sql .= "follow_me_destination_uuid, "; $sql .= "follow_me_destination_uuid, ";
$sql .= "domain_uuid, "; $sql .= "domain_uuid, ";
$sql .= "follow_me_uuid, "; $sql .= "follow_me_uuid, ";
$sql .= "follow_me_destination, "; $sql .= "follow_me_destination, ";
$sql .= "follow_me_timeout, "; $sql .= "follow_me_timeout, ";
$sql .= "follow_me_delay, "; $sql .= "follow_me_delay, ";
$sql .= "follow_me_order "; $sql .= "follow_me_order ";
$sql .= ") "; $sql .= ") ";
$sql .= "values "; $sql .= "values ";
$sql .= "("; $sql .= "(";
$sql .= "'".uuid()."', "; $sql .= "'".uuid()."', ";
$sql .= "'$this->domain_uuid', "; $sql .= "'$this->domain_uuid', ";
$sql .= "'$this->follow_me_uuid', "; $sql .= "'$this->follow_me_uuid', ";
$sql .= "'$this->destination_data_4', "; $sql .= "'$this->destination_data_4', ";
$sql .= "'$this->destination_timeout_4', "; $sql .= "'$this->destination_timeout_4', ";
$sql .= "'$this->destination_delay_4', "; $sql .= "'$this->destination_delay_4', ";
$sql .= "'4' "; $sql .= "'4' ";
$sql .= ")"; $sql .= ")";
$db->exec(check_sql($sql)); $db->exec(check_sql($sql));
$this->destination_order++; $this->destination_order++;
unset($sql); unset($sql);
} }
if (strlen($this->destination_data_5) > 0) { if (strlen($this->destination_data_5) > 0) {
$sql = "insert into v_follow_me_destinations "; $sql = "insert into v_follow_me_destinations ";
$sql .= "("; $sql .= "(";
$sql .= "follow_me_destination_uuid, "; $sql .= "follow_me_destination_uuid, ";
$sql .= "domain_uuid, "; $sql .= "domain_uuid, ";
$sql .= "follow_me_uuid, "; $sql .= "follow_me_uuid, ";
$sql .= "follow_me_destination, "; $sql .= "follow_me_destination, ";
$sql .= "follow_me_timeout, "; $sql .= "follow_me_timeout, ";
$sql .= "follow_me_delay, "; $sql .= "follow_me_delay, ";
$sql .= "follow_me_order "; $sql .= "follow_me_order ";
$sql .= ") "; $sql .= ") ";
$sql .= "values "; $sql .= "values ";
$sql .= "("; $sql .= "(";
$sql .= "'".uuid()."', "; $sql .= "'".uuid()."', ";
$sql .= "'$this->domain_uuid', "; $sql .= "'$this->domain_uuid', ";
$sql .= "'$this->follow_me_uuid', "; $sql .= "'$this->follow_me_uuid', ";
$sql .= "'$this->destination_data_5', "; $sql .= "'$this->destination_data_5', ";
$sql .= "'$this->destination_timeout_5', "; $sql .= "'$this->destination_timeout_5', ";
$sql .= "'$this->destination_delay_5', "; $sql .= "'$this->destination_delay_5', ";
$sql .= "'5' "; $sql .= "'5' ";
$sql .= ")"; $sql .= ")";
$db->exec(check_sql($sql)); $db->exec(check_sql($sql));
$this->destination_order++; $this->destination_order++;
unset($sql); unset($sql);
} }
} //function } //function
public function set() { public function set() {
//set the global variable //set the global variable
global $db; global $db;
//determine whether to update the dial string //determine whether to update the dial string
$sql = "select * from v_extensions "; $sql = "select * from v_extensions ";
$sql .= "where domain_uuid = '".$this->domain_uuid."' "; $sql .= "where domain_uuid = '".$this->domain_uuid."' ";
$sql .= "and extension_uuid = '".$this->extension_uuid."' "; $sql .= "and extension_uuid = '".$this->extension_uuid."' ";
$prep_statement = $db->prepare(check_sql($sql)); $prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute(); $prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
if (count($result) > 0) { if (count($result) > 0) {
foreach ($result as &$row) { foreach ($result as &$row) {
$this->extension = $row["extension"]; $this->extension = $row["extension"];
} }
} }
//determine whether to update the dial string //determine whether to update the dial string
$sql = "select * from v_follow_me "; $sql = "select * from v_follow_me ";
$sql .= "where domain_uuid = '".$this->domain_uuid."' "; $sql .= "where domain_uuid = '".$this->domain_uuid."' ";
$sql .= "and follow_me_uuid = '".$this->follow_me_uuid."' "; $sql .= "and follow_me_uuid = '".$this->follow_me_uuid."' ";
$prep_statement = $db->prepare(check_sql($sql)); $prep_statement = $db->prepare(check_sql($sql));
$prep_statement->execute(); $prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
if (count($result) > 0) { if (count($result) > 0) {
foreach ($result as &$row) { foreach ($result as &$row) {
$follow_me_uuid = $row["follow_me_uuid"]; $follow_me_uuid = $row["follow_me_uuid"];
$this->call_prompt = $row["call_prompt"]; $this->call_prompt = $row["call_prompt"];
$this->cid_name_prefix = $row["cid_name_prefix"]; $this->cid_name_prefix = $row["cid_name_prefix"];
$this->cid_number_prefix = $row["cid_number_prefix"]; $this->cid_number_prefix = $row["cid_number_prefix"];
} }
} }
unset ($prep_statement); unset ($prep_statement);
//is follow me enabled //is follow me enabled
if ($this->follow_me_enabled == "true") { if ($this->follow_me_enabled == "true") {
//add follow me //add follow me
if (strlen($follow_me_uuid) == 0) { if (strlen($follow_me_uuid) == 0) {
$this->follow_me_add(); $this->follow_me_add();
} }
//set the extension dial string //set the extension dial string
$sql = "select * from v_follow_me_destinations "; $sql = "select * from v_follow_me_destinations ";
$sql .= "where follow_me_uuid = '".$this->follow_me_uuid."' "; $sql .= "where follow_me_uuid = '".$this->follow_me_uuid."' ";
$sql .= "order by follow_me_order asc "; $sql .= "order by follow_me_order asc ";
$prep_statement_2 = $db->prepare(check_sql($sql)); $prep_statement_2 = $db->prepare(check_sql($sql));
$prep_statement_2->execute(); $prep_statement_2->execute();
$result = $prep_statement_2->fetchAll(PDO::FETCH_NAMED); $result = $prep_statement_2->fetchAll(PDO::FETCH_NAMED);
$dial_string = "{instant_ringback=true,ignore_early_media=true,sip_invite_domain=".$_SESSION['domain_name']; $dial_string = "{instant_ringback=true,ignore_early_media=true,sip_invite_domain=".$_SESSION['domain_name'];
if (strlen($this->cid_name_prefix) > 0) { if (strlen($this->cid_name_prefix) > 0) {
$dial_string .= ",origination_caller_id_name=".$this->cid_name_prefix."#\${caller_id_name}"; $dial_string .= ",origination_caller_id_name=".$this->cid_name_prefix."#\${caller_id_name}";
} }
if (strlen($this->cid_number_prefix) > 0) { else
//$dial_string .= ",origination_caller_id_number=".$this->cid_number_prefix.""; $dial_string .= ",origination_caller_id_name=\${caller_id_name}";
$dial_string .= ",origination_caller_id_number=".$this->cid_number_prefix."#\${caller_id_number}";
} if (strlen($this->cid_number_prefix) > 0) {
if (strlen($this->accountcode) > 0) { //$dial_string .= ",origination_caller_id_number=".$this->cid_number_prefix."";
$dial_string .= ",accountcode=".$this->accountcode; $dial_string .= ",origination_caller_id_number=".$this->cid_number_prefix."#\${caller_id_number}";
} }
//if ($this->call_prompt == "true") { else
//$dial_string .= ",group_confirm_key=exec,group_confirm_file=lua confirm.lua"; $dial_string .= ",origination_caller_id_number=\${caller_id_number}";
//}
$dial_string .= "}"; if (strlen($this->accountcode) > 0) {
foreach ($result as &$row) { $dial_string .= ",accountcode=".$this->accountcode;
$dial_string .= "[presence_id=".$row["follow_me_destination"]."@".$_SESSION['domain_name'].","; }
if ($this->call_prompt == "true") { $dial_string .= "}";
$dial_string .= "group_confirm_key=exec,group_confirm_file=lua confirm.lua,"; foreach ($result as &$row) {
}
$dial_string .= "leg_delay_start=".$row["follow_me_delay"].","; $dial_string .= "[";
$dial_string .= "leg_timeout=".$row["follow_me_timeout"]."]";
if (extension_exists($row["follow_me_destination"])) { if (extension_exists($row["follow_me_destination"])) {
$dial_string .= "\${sofia_contact(".$row["follow_me_destination"]."@".$_SESSION['domain_name'].")},";
} $dial_string .= "outbound_caller_id_number=\${caller_id_number},";
else {
$bridge = outbound_route_to_bridge ($_SESSION['domain_uuid'], $row["follow_me_destination"]); $dial_string .= "presence_id=".$row["follow_me_destination"]."@".$_SESSION['domain_name'].",";
//if (strlen($bridge[0]) > 0) { if ($this->call_prompt == "true") {
// $dial_string .= "".$bridge[0].","; $dial_string .= "group_confirm_key=exec,group_confirm_file=lua confirm.lua,";
//} }
//else { $dial_string .= "leg_delay_start=".$row["follow_me_delay"].",";
$dial_string .= "loopback/".$row["follow_me_destination"].","; $dial_string .= "leg_timeout=".$row["follow_me_timeout"]."]";
//}
} $dial_string .= "\${sofia_contact(".$row["follow_me_destination"]."@".$_SESSION['domain_name'].")},";
} }
$this->dial_string = trim($dial_string, ","); else {
}
else { $dial_string .= "outbound_caller_id_number=\${outbound_caller_id_number},";
$this->dial_string = '';
} $dial_string .= "presence_id=".$this->extension."@".$_SESSION['domain_name'].",";
if ($this->call_prompt == "true") {
$sql = "update v_extensions set "; $dial_string .= "group_confirm_key=exec,group_confirm_file=lua confirm.lua,";
$sql .= "dial_string = '".$this->dial_string."', "; }
$sql .= "dial_domain = '".$_SESSION['domain_name']."' "; $dial_string .= "leg_delay_start=".$row["follow_me_delay"].",";
$sql .= "where domain_uuid = '".$this->domain_uuid."' "; $dial_string .= "leg_timeout=".$row["follow_me_timeout"]."]";
$sql .= "and follow_me_uuid = '".$this->follow_me_uuid."' ";
if ($this->debug) { $bridge = outbound_route_to_bridge ($_SESSION['domain_uuid'], $row["follow_me_destination"]);
echo $sql."<br />"; //if (strlen($bridge[0]) > 0) {
} // $dial_string .= "".$bridge[0].",";
$db->exec($sql); //}
unset($sql); //else {
$dial_string .= "loopback/".$row["follow_me_destination"].",";
} //function //}
} //class }
}
?> $this->dial_string = trim($dial_string, ",");
}
else {
$this->dial_string = '';
}
$sql = "update v_extensions set ";
$sql .= "dial_string = '".$this->dial_string."', ";
$sql .= "dial_domain = '".$_SESSION['domain_name']."' ";
$sql .= "where domain_uuid = '".$this->domain_uuid."' ";
$sql .= "and follow_me_uuid = '".$this->follow_me_uuid."' ";
if ($this->debug) {
echo $sql."<br />";
}
$db->exec($sql);
unset($sql);
} //function
} //class
?>