Copyright (C) 2010 - 2013 All Rights Reserved. Contributor(s): Mark J Crane */ //define the directory class class extension { public $db; public $domain_uuid; public $domain_name; private $app_uuid; public $extension_uuid; public $extension; public $voicemail_id; public $number_alias; public $password; public $provisioning_list; public $vm_password; public $accountcode; public $effective_caller_id_name; public $effective_caller_id_number; public $outbound_caller_id_name; public $outbound_caller_id_number; public $emergency_caller_id_number; public $directory_full_name; public $directory_visible; public $directory_exten_visible; public $limit_max; public $limit_destination; public $vm_enabled; public $vm_mailto; public $vm_attach_file; public $vm_keep_local_after_email; public $user_context; public $toll_allow; public $call_timeout; public $call_group; public $hold_music; public $auth_acl; public $cidr; public $sip_force_contact; public $sip_force_expires; public $nibble_account; public $mwi_account; public $sip_bypass_media; public $dial_string; public $enabled; public $description; public function __construct() { require_once "resources/classes/database.php"; $this->app_uuid = 'e68d9689-2769-e013-28fa-6214bf47fca3'; } public function __destruct() { foreach ($this as $key => $value) { unset($this->$key); } } public function get_domain_uuid() { return $this->domain_uuid; } public function set_domain_uuid($domain_uuid){ $this->domain_uuid = $domain_uuid; } public function voicemail() { //determine the voicemail_id if (is_numeric($this->extension)) { $this->voicemail_id = $this->extension; } else { $this->voicemail_id = $this->number_alias; } //update the voicemail settings $sql = "select * from v_voicemails "; $sql .= "where domain_uuid = '".$this->domain_uuid."' "; $sql .= "and voicemail_id = '".$this->voicemail_id."' "; $prep_statement = $this->db->prepare(check_sql($sql)); $prep_statement->execute(); $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); if (count($result) == 0) { //add the voicemail box $sql = "insert into v_voicemails "; $sql .= "("; $sql .= "domain_uuid, "; $sql .= "voicemail_uuid, "; $sql .= "voicemail_id, "; $sql .= "voicemail_password, "; if (strlen($this->greeting_id) > 0) { $sql .= "greeting_id, "; } $sql .= "voicemail_mail_to, "; $sql .= "voicemail_attach_file, "; $sql .= "voicemail_local_after_email, "; $sql .= "voicemail_enabled, "; $sql .= "voicemail_description "; $sql .= ") "; $sql .= "values "; $sql .= "("; $sql .= "'".$this->domain_uuid."', "; $sql .= "'".uuid()."', "; $sql .= "'".$this->voicemail_id."', "; $sql .= "'".$this->vm_password."', "; $sql .= "'".$this->vm_mailto."', "; $sql .= "'".$this->vm_attach_file."', "; $sql .= "'".$this->vm_keep_local_after_email."', "; $sql .= "'".$this->vm_enabled."', "; $sql .= "'".$this->description."' "; $sql .= ")"; $this->db->exec(check_sql($sql)); unset($sql); } else { //update the voicemail box $sql = "update v_voicemails set "; $sql .= "voicemail_password = '".$this->vm_password."', "; $sql .= "voicemail_mail_to = '".$this->vm_mailto."', "; $sql .= "voicemail_attach_file = '".$this->vm_attach_file."', "; $sql .= "voicemail_local_after_email = '".$this->vm_keep_local_after_email."', "; $sql .= "voicemail_enabled = '".$this->vm_enabled."', "; $sql .= "voicemail_description = '".$this->description."' "; $sql .= "where domain_uuid = '".$this->domain_uuid."' "; $sql .= "and voicemail_id = '".$this->voicemail_id."' "; $this->db->exec(check_sql($sql)); unset($sql); } unset ($prep_statement); } public function xml() { if (isset($_SESSION['switch']['extensions']['dir'])) { //declare global variables global $config, $db, $domain_uuid; //get the context based from the domain_uuid if (count($_SESSION['domains']) == 1) { $user_context = "default"; } else { $user_context = $_SESSION['domains'][$domain_uuid]['domain_name']; } //delete all old extensions to prepare for new ones $dialplan_list = glob($_SESSION['switch']['extensions']['dir']."/".$user_context."/v_*.xml"); foreach($dialplan_list as $name => $value) { unlink($value); } //write the xml files $sql = "select * from v_extensions "; $sql .= "where domain_uuid = '$domain_uuid' "; $sql .= "order by call_group asc "; $prep_statement = $db->prepare(check_sql($sql)); $prep_statement->execute(); $i = 0; $extension_xml_condensed = false; while($row = $prep_statement->fetch(PDO::FETCH_ASSOC)) { $call_group = $row['call_group']; $call_group = str_replace(";", ",", $call_group); $tmp_array = explode(",", $call_group); foreach ($tmp_array as &$tmp_call_group) { $tmp_call_group = trim($tmp_call_group); if (strlen($tmp_call_group) > 0) { if (strlen($call_group_array[$tmp_call_group]) == 0) { $call_group_array[$tmp_call_group] = $row['extension']; } else { $call_group_array[$tmp_call_group] = $call_group_array[$tmp_call_group].','.$row['extension']; } } $i++; } $call_timeout = $row['call_timeout']; $user_context = $row['user_context']; //$vm_password = $row['vm_password']; //$vm_password = str_replace("#", "", $vm_password); //preserves leading zeros //echo "enabled: ".$row['enabled']; if ($row['enabled'] != "false") { $extension_uuid = $row['extension_uuid']; //remove invalid characters from the file names $extension = $row['extension']; $extension = str_replace(" ", "_", $extension); $extension = preg_replace("/[\*\:\\/\<\>\|\'\"\?]/", "", $extension); $dial_string = $row['dial_string']; if (strlen($dial_string) == 0) { $dial_string = "{sip_invite_domain=\${domain_name},leg_timeout=".$call_timeout.",presence_id=\${dialed_user}@\${dialed_domain}}\${sofia_contact(\${dialed_user}@\${dialed_domain})}"; } $xml .= "\n"; $cidr = ''; if (strlen($row['cidr']) > 0) { $cidr = " cidr=\"" . $row['cidr'] . "\""; } $number_alias = ''; if (strlen($row['number_alias']) > 0) { $number_alias = " number-alias=\"".$row['number_alias']."\""; } $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; /* $xml .= " \n"; switch ($row['vm_enabled']) { case "true": $xml .= " \n"; break; case "false": $xml .= " \n"; break; default: $xml .= " \n"; } if (strlen($row['vm_mailto']) > 0) { $xml .= " \n"; switch ($row['vm_attach_file']) { case "true": $xml .= " \n"; break; case "false": $xml .= " \n"; break; default: $xml .= " \n"; } switch ($row['vm_keep_local_after_email']) { case "true": $xml .= " \n"; break; case "false": $xml .= " \n"; break; default: $xml .= " \n"; } $xml .= " \n"; } */ if (strlen($row['mwi_account']) > 0) { $xml .= " \n"; } if (strlen($row['auth_acl']) > 0) { $xml .= " \n"; } if (strlen($row['directory_exten_visible']) > 0) { $xml .= " \n"; } $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; if (strlen($row['call_group']) > 0) { $xml .= " \n"; } if (strlen($row['hold_music']) > 0) { $xml .= " \n"; } $xml .= " \n"; if (strlen($switch_account_code) > 0) { $xml .= " \n"; } else { $xml .= " \n"; } $xml .= " \n"; if (strlen($row['effective_caller_id_name']) > 0) { $xml .= " \n"; } if (strlen($row['effective_caller_id_number']) > 0) { $xml .= " \n"; } if (strlen($row['outbound_caller_id_name']) > 0) { $xml .= " \n"; } if (strlen($row['outbound_caller_id_number']) > 0) { $xml .= " \n"; } if (strlen($row['emergency_caller_id_number']) > 0) { $xml .= " \n"; } if (strlen($row['directory_full_name']) > 0) { $xml .= " \n"; } if (strlen($row['directory_visible']) > 0) { $xml .= " \n"; } if (strlen($row['limit_max']) > 0) { $xml .= " \n"; } else { $xml .= " \n"; } if (strlen($row['limit_destination']) > 0) { $xml .= " \n"; } if (strlen($row['sip_force_contact']) > 0) { $xml .= " \n"; } if (strlen($row['sip_force_expires']) > 0) { $xml .= " \n"; } if (strlen($row['nibble_account']) > 0) { $xml .= " \n"; } switch ($row['sip_bypass_media']) { case "bypass-media": $xml .= " \n"; break; case "bypass-media-after-bridge": $xml .= " \n"; break; case "proxy-media": $xml .= " \n"; break; } $xml .= " \n"; $xml .= " \n"; if (!is_readable($_SESSION['switch']['extensions']['dir']."/".$row['user_context'])) { mkdir($_SESSION['switch']['extensions']['dir']."/".$row['user_context'],0755,true); } if (strlen($extension) > 0) { $fout = fopen($_SESSION['switch']['extensions']['dir']."/".$row['user_context']."/v_".$extension.".xml","w"); } $xml .= "\n"; fwrite($fout, $xml); unset($xml); fclose($fout); } } unset ($prep_statement); //prepare extension $extension_dir = realpath($_SESSION['switch']['extensions']['dir']); $user_context = str_replace(" ", "_", $user_context); $user_context = preg_replace("/[\*\:\\/\<\>\|\'\"\?]/", "", $user_context); //define the group members $xml = "\n"; $xml .= "\n"; $xml .= "\n"; $xml .= " \n"; if ($user_context == "default") { $xml .= " \n"; } else { $xml .= " \n"; } $xml .= " \n"; //$xml .= " \n"; $xml .= " \n"; $xml .= "\n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= "\n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $xml .= "\n"; $previous_call_group = ""; foreach ($call_group_array as $key => $value) { $call_group = trim($key); $extension_list = trim($value); if (strlen($call_group) > 0) { if ($previous_call_group != $call_group) { $xml .= " \n"; $xml .= " \n"; $xml .= " \n"; $extension_array = explode(",", $extension_list); foreach ($extension_array as &$tmp_extension) { $xml .= " \n"; } $xml .= " \n"; $xml .= " \n"; $xml .= "\n"; } $previous_call_group = $call_group; } unset($call_group); } $xml .= " \n"; $xml .= "\n"; $xml .= " \n"; $xml .= ""; //write the xml file if (is_readable($extension_dir) && strlen($extension_dir) > 0) { $fout = fopen($extension_dir."/".$user_context.".xml","w"); fwrite($fout, $xml); unset($xml); fclose($fout); } //apply settings $_SESSION["reload_xml"] = true; } } } ?>