Copyright (C) 2010 All Rights Reserved. Contributor(s): Mark J Crane */ include "root.php"; //define the follow me class class follow_me { public $domain_uuid; public $db_type; public $follow_me_uuid; //public $cid_name_prefix; public $call_prompt; public $follow_me_enabled; private $extension; private $dial_string_update = false; public $destination_data_1; public $destination_type_1; public $destination_delay_1; public $destination_timeout_1; public $destination_data_2; public $destination_type_2; public $destination_delay_2; public $destination_timeout_2; public $destination_data_3; public $destination_type_3; public $destination_delay_3; public $destination_timeout_3; public $destination_data_4; public $destination_type_4; public $destination_delay_4; public $destination_timeout_4; public $destination_data_5; public $destination_type_5; public $destination_delay_5; public $destination_timeout_5; public $destination_timeout = 0; public $destination_order = 1; public function follow_me_add() { //set the global variable global $db; //add a new follow me $sql = "insert into v_follow_me "; $sql .= "("; $sql .= "domain_uuid, "; $sql .= "follow_me_uuid, "; //$sql .= "cid_name_prefix, "; $sql .= "call_prompt, "; $sql .= "follow_me_enabled "; $sql .= ")"; $sql .= "values "; $sql .= "("; $sql .= "'$this->domain_uuid', "; $sql .= "'$this->follow_me_uuid', "; //$sql .= "'$this->cid_name_prefix', "; $sql .= "'$this->call_prompt', "; $sql .= "'$this->follow_me_enabled' "; $sql .= ")"; if ($v_debug) { echo $sql."
"; } $db->exec(check_sql($sql)); unset($sql); $this->follow_me_destinations(); } //end function public function follow_me_update() { //set the global variable global $db; //update follow me table $sql = "update v_follow_me set "; $sql .= "follow_me_enabled = '$this->follow_me_enabled', "; //$sql .= "cid_name_prefix = '$this->cid_name_prefix', "; $sql .= "call_prompt = '$this->call_prompt' "; $sql .= "where domain_uuid = '$this->domain_uuid' "; $sql .= "and follow_me_uuid = '$this->follow_me_uuid' "; $db->exec(check_sql($sql)); unset($sql); $this->follow_me_destinations(); } //end function public function follow_me_destinations() { //set the global variable global $db; //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_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 .= "'1' "; $sql .= ")"; $db->exec(check_sql($sql)); $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_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 .= "'2' "; $sql .= ")"; $db->exec(check_sql($sql)); $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_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 .= "'3' "; $sql .= ")"; $db->exec(check_sql($sql)); $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_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 .= "'4' "; $sql .= ")"; $db->exec(check_sql($sql)); $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_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 .= "'5' "; $sql .= ")"; $db->exec(check_sql($sql)); $this->destination_order++; unset($sql); } } //function public function set() { //set the global variable global $db; //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); if (count($result) > 0) { foreach ($result as &$row) { $this->extension = $row["extension"]; } } //determine whether to update the dial string $sql = "select * from v_follow_me "; $sql .= "where domain_uuid = '".$this->domain_uuid."' "; $sql .= "and follow_me_uuid = '".$this->follow_me_uuid."' "; $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); if (count($result) > 0) { foreach ($result as &$row) { //$cid_name_prefix = $row["cid_name_prefix"]; $call_prompt = $row["call_prompt"]; if ($this->follow_me_enabled == "false" && $row["follow_me_enabled"] == "true") { $this->dial_string_update = true; } } } unset ($prep_statement); if ($this->follow_me_enabled == "true") { $this->dial_string_update = true; } //update the extension if ($this->follow_me_enabled == "true") { $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 = "{group_confirm_key=exec,group_confirm_file=lua confirm.lua,sip_invite_domain=".$_SESSION['domain_name']; if ($this->call_prompt == "true") { $dial_string .= ",call_prompt=true"; } //if (strlen($this->cid_name_prefix) > 0) { // $dial_string .= ",effective_caller_id_name=".$this->cid_name_prefix."#123"; //} $dial_string .= "}"; foreach ($result as &$row) { $dial_string .= "[presence_id=".$row["follow_me_destination"]."@".$_SESSION['domain_name'].","; $dial_string .= "leg_delay_start=".$row["follow_me_delay"].","; $dial_string .= "leg_timeout=".$row["follow_me_timeout"]."]"; if (extension_exists($row["follow_me_destination"])) { $dial_string .= "\${sofia_contact(".$row["follow_me_destination"]."@".$_SESSION['domain_name'].")},"; } else { $dial_string .= "loopback/".$row["follow_me_destination"].","; } } $this->dial_string = trim($dial_string, ","); } else { $this->dial_string = ''; } $sql = "update v_extensions set "; if ($this->dial_string_update) { $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."
"; } $db->exec($sql); unset($sql); //delete extension from memcache if ($this->dial_string_update) { $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); if ($fp) { $switch_cmd .= "memcache delete ".$this->extension."@".$this->domain_name; $switch_result = event_socket_request($fp, 'api '.$switch_cmd); } } //syncrhonize configuration if ($this->dial_string_update) { save_extension_xml(); } } //function } //class ?>