Copyright (C) 2010-2015 All Rights Reserved. Contributor(s): Mark J Crane */ include "root.php"; //define the directory class class switch_fax { public $db; public $domain_uuid; public $domain_name; public $dialplan_uuid; public $context; public $fax_uuid; public $fax_name; public $fax_extension; public $fax_email; public $fax_pin_number; public $fax_caller_id_name; public $fax_caller_id_number; public $fax_forward_number; public $fax_user_list; public $fax_description; public function __construct() { require_once "resources/classes/database.php"; $this->app_uuid = '24108154-4ac3-1db6-1551-4731703a4440'; } public function __destruct() { foreach ($this as $key => $value) { unset($this->$key); } } public function count() { $database = new database; $database->domain_uuid = $this->domain_uuid; $database->table = "v_fax"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; return $database->count(); } public function find() { $database = new database; $database->table = "v_fax"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; if ($this->fax_uuid) { $database->where[1]['name'] = 'fax_uuid'; $database->where[1]['value'] = $this->fax_uuid; $database->where[1]['operator'] = '='; } if ($this->order_by) { $database->order_by = $this->order_by; } if ($this->order_type) { $database->order_type = $this->order_type; } return $database->find(); } public function add() { //add the fax if (strlen($this->fax_extension) > 0) { //add the dialplan $database = new database; $database->table = "v_dialplans"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_name'] = $this->fax_name; $database->fields['dialplan_order'] = '333'; $database->fields['dialplan_context'] = $this->context; $database->fields['dialplan_enabled'] = $this->fax_enabled; $database->fields['dialplan_description'] = $this->fax_description; $database->fields['app_uuid'] = $this->app_uuid; $database->add(); //add the dialplan details $detail_data = '^'.$this->fax_extension.'$'; $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'condition'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'destination_number'; $database->fields['dialplan_detail_data'] = $detail_data; $database->fields['dialplan_detail_order'] = '005'; $database->add(); if (file_exists(PHP_BINDIR."/php5")) { define(PHP_BIN, 'php5'); } if (file_exists(PHP_BINDIR."/php.exe")) { define(PHP_BIN, 'php.exe'); } $dialplan_detail_data = "api_hangup_hook=system ".PHP_BINDIR."/".PHP_BIN." ".$_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/secure/fax_to_email.php "; $dialplan_detail_data .= "email=".$this->fax_email." "; $dialplan_detail_data .= "extension=".$this->fax_extension." "; $dialplan_detail_data .= "name=\\\\\\\${last_fax} "; $dialplan_detail_data .= "messages='result: \\\\\\\${fax_result_text} sender:\\\\\\\${fax_remote_station_id} pages:\\\\\\\${fax_document_total_pages}' "; $dialplan_detail_data .= "domain=".$domain_name." "; $dialplan_detail_data .= "caller_id_name='\\\\\\\${caller_id_name}' "; $dialplan_detail_data .= "caller_id_number=\\\\\\\${caller_id_number} "; $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'set'; $database->fields['dialplan_detail_data'] = $dialplan_detail_data; $database->fields['dialplan_detail_order'] = '010'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'answer'; $database->fields['dialplan_detail_data'] = ''; $database->fields['dialplan_detail_order'] = '015'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'set'; $database->fields['dialplan_detail_data'] = 'fax_enable_t38=true'; $database->fields['dialplan_detail_order'] = '020'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'set'; $database->fields['dialplan_detail_data'] = 'fax_enable_t38_request=true'; $database->fields['dialplan_detail_order'] = '025'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'playback'; $database->fields['dialplan_detail_data'] = 'silence_stream://2000'; $database->fields['dialplan_detail_order'] = '030'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'set'; $database->fields['dialplan_detail_data'] = 'last_fax=${caller_id_number}-${strftime(%Y-%m-%d-%H-%M-%S)}'; $database->fields['dialplan_detail_order'] = '035'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'rxfax'; $dialplan_detail_data = $_SESSION['switch']['storage']['dir'].'/fax/'.$_SESSION['domains'][$this->domain_uuid]['domain_name'].'/'.$this->fax_extension.'/inbox/${last_fax}.tif'; $database->fields['dialplan_detail_data'] = $dialplan_detail_data; $database->fields['dialplan_detail_order'] = '040'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'hangup'; $database->fields['dialplan_detail_data'] = ''; $database->fields['dialplan_detail_order'] = '045'; $database->add(); } //add the fax $fax_uuid = uuid(); $database = new database; $database->table = "v_fax"; $database->fields['domain_uuid'] = $this->domain_uuid; if (strlen($this->fax_extension) > 0) { $database->fields['fax_extension'] = $this->fax_extension; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; } $database->fields['fax_uuid'] = $this->fax_uuid; $database->fields['fax_name'] = $this->fax_name; $database->fields['fax_email'] = $this->fax_email; $database->fields['fax_pin_number'] = $this->fax_pin_number; $database->fields['fax_caller_id_name'] = $this->fax_caller_id_name; $database->fields['fax_caller_id_number'] = $this->fax_caller_id_number; $database->fields['fax_forward_number'] = $this->fax_forward_number; $database->fields['fax_user_list'] = $this->fax_user_list; $database->fields['fax_description'] = $this->fax_description; $database->add(); } public function update() { //udate the fax //get the dialplan uuid $database = new database; $database->table = "v_fax"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'fax_uuid'; $database->where[1]['value'] = $this->fax_uuid; $database->where[1]['operator'] = '='; $result = $database->find(); foreach($result as $row) { $this->dialplan_uuid = $row['dialplan_uuid']; } //if the extension number is empty and the dialplan exists then delete the dialplan if (strlen($this->fax_extension) == 0) { if (strlen($this->dialplan_uuid) > 0) { //delete dialplan entry $database = new database; $database->table = "v_dialplan_details"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'dialplan_uuid'; $database->where[1]['value'] = $this->dialplan_uuid; $database->where[1]['operator'] = '='; $database->delete(); //delete the child dialplan information $database = new database; $database->table = "v_dialplans"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'dialplan_uuid'; $database->where[1]['value'] = $this->dialplan_uuid; $database->where[1]['operator'] = '='; $database->delete(); //update the table to remove the dialplan_uuid $this->dialplan_uuid = ''; } } //update the fax $fax_uuid = uuid(); $database = new database; $database->table = "v_fax"; $database->fields['fax_uuid'] = $this->fax_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['fax_name'] = $this->fax_name; $database->fields['fax_extension'] = $this->fax_extension; $database->fields['fax_email'] = $this->fax_email; $database->fields['fax_pin_number'] = $this->fax_pin_number; $database->fields['fax_caller_id_name'] = $this->fax_caller_id_name; $database->fields['fax_caller_id_number'] = $this->fax_caller_id_number; $database->fields['fax_forward_number'] = $this->fax_forward_number; $database->fields['fax_user_list'] = $this->fax_user_list; $database->fields['fax_description'] = $this->fax_description; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'fax_uuid'; $database->where[1]['value'] = $this->fax_uuid; $database->where[1]['operator'] = '='; $database->update(); if (strlen($this->fax_extension) > 0) { //update the dialplan $database = new database; $database->table = "v_dialplans"; $database->fields['dialplan_name'] = $this->fax_name; $database->fields['dialplan_order'] = '333'; $database->fields['dialplan_context'] = $this->context; $database->fields['dialplan_enabled'] = $this->fax_enabled; $database->fields['dialplan_description'] = $this->dialplan_description; $database->fields['app_uuid'] = $this->app_uuid; if ($this->dialplan_uuid) { $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'dialplan_uuid'; $database->where[1]['value'] = $this->dialplan_uuid; $database->where[1]['operator'] = '='; $database->update(); } else { $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->add(); } //delete the old dialplan details to prepare for new details $database = new database; $database->table = "v_dialplan_details"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'dialplan_uuid'; $database->where[1]['value'] = $this->dialplan_uuid; $database->where[1]['operator'] = '='; $database->delete(); //add the dialplan details $detail_data = '^'.$this->fax_extension.'$'; $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'condition'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'destination_number'; $database->fields['dialplan_detail_data'] = $detail_data; $database->fields['dialplan_detail_order'] = '005'; $database->add(); if (file_exists(PHP_BINDIR."/php")) { define(PHP_BIN, 'php'); } if (file_exists(PHP_BINDIR."/php.exe")) { define(PHP_BIN, 'php.exe'); } $dialplan_detail_data = "api_hangup_hook=system ".PHP_BINDIR."/".PHP_BIN." ".$_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/secure/fax_to_email.php "; $dialplan_detail_data .= "email=".$this->fax_email." "; $dialplan_detail_data .= "extension=".$this->fax_extension." "; $dialplan_detail_data .= "name=\\\\\\\${last_fax} "; $dialplan_detail_data .= "messages='result: \\\\\\\${fax_result_text} sender:\\\\\\\${fax_remote_station_id} pages:\\\\\\\${fax_document_total_pages}' "; $dialplan_detail_data .= "domain=".$domain_name." "; $dialplan_detail_data .= "caller_id_name='\\\\\\\${caller_id_name}' "; $dialplan_detail_data .= "caller_id_number=\\\\\\\${caller_id_number} "; $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'set'; $database->fields['dialplan_detail_data'] = $dialplan_detail_data; $database->fields['dialplan_detail_order'] = '010'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'answer'; $database->fields['dialplan_detail_data'] = ''; $database->fields['dialplan_detail_order'] = '015'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'set'; $database->fields['dialplan_detail_data'] = 'fax_enable_t38=true'; $database->fields['dialplan_detail_order'] = '020'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'set'; $database->fields['dialplan_detail_data'] = 'fax_enable_t38_request=true'; $database->fields['dialplan_detail_order'] = '025'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'playback'; $database->fields['dialplan_detail_data'] = 'silence_stream://2000'; $database->fields['dialplan_detail_order'] = '030'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'set'; $database->fields['dialplan_detail_data'] = 'last_fax=${caller_id_number}-${strftime(%Y-%m-%d-%H-%M-%S)}'; $database->fields['dialplan_detail_order'] = '035'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'rxfax'; $dialplan_detail_data = $_SESSION['switch']['storage']['dir'].'/fax/'.$_SESSION['domains'][$this->domain_uuid]['domain_name'].'/'.$this->fax_extension.'/inbox/${last_fax}.tif'; $database->fields['dialplan_detail_data'] = $dialplan_detail_data; $database->fields['dialplan_detail_order'] = '040'; $database->add(); $database->table = "v_dialplan_details"; $database->fields['domain_uuid'] = $this->domain_uuid; $database->fields['dialplan_uuid'] = $this->dialplan_uuid; $database->fields['dialplan_detail_uuid'] = uuid(); $database->fields['dialplan_detail_tag'] = 'action'; //condition, action, antiaction $database->fields['dialplan_detail_type'] = 'hangup'; $database->fields['dialplan_detail_data'] = ''; $database->fields['dialplan_detail_order'] = '045'; $database->add(); } } function delete() { //create the database object $database = new database; //start the transaction //$count = $database->db->exec("BEGIN;"); //delete the fax if (strlen($this->fax_uuid) > 0) { $database->table = "v_fax"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'fax_uuid'; $database->where[1]['value'] = $this->fax_uuid; $database->where[1]['operator'] = '='; $database->delete(); unset($this->fax_uuid); } //delete the fax if (strlen($this->fax_uuid) == 0) { //select the dialplan entries $database->table = "v_fax"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'fax_uuid'; $database->where[1]['value'] = $this->fax_uuid; $database->where[1]['operator'] = '='; $result = $database->find(); foreach($result as $row) { $this->dialplan_uuid = $row['dialplan_uuid']; //delete the child dialplan information $database->table = "v_dialplan_details"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'dialplan_uuid'; $database->where[1]['value'] = $this->dialplan_uuid; $database->where[1]['operator'] = '='; $database->delete(); //delete the dialplan information $database->table = "v_dialplans"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'dialplan_uuid'; $database->where[1]['value'] = $this->dialplan_uuid; $database->where[1]['operator'] = '='; $database->delete(); } //delete the fax if (strlen($this->fax_uuid) > 0) { $database->table = "v_fax"; $database->where[0]['name'] = 'domain_uuid'; $database->where[0]['value'] = $this->domain_uuid; $database->where[0]['operator'] = '='; $database->where[1]['name'] = 'fax_uuid'; $database->where[1]['value'] = $this->fax_uuid; $database->where[1]['operator'] = '='; $database->delete(); unset($this->fax_uuid); } //commit the transaction //$count = $database->db->exec("COMMIT;"); } } } /* require_once "resources/classes/database.php"; require_once "resources/classes/fax.php"; $fax = new switch_fax; $fax->domain_uuid = $_SESSION["domain_uuid"]; print_r($fax->find()); */ ?>