Page MenuHomePhabricator

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/provisioning/ngnpro_client_lib.phtml b/provisioning/ngnpro_client_lib.phtml
index ca704c7..715a947 100644
--- a/provisioning/ngnpro_client_lib.phtml
+++ b/provisioning/ngnpro_client_lib.phtml
@@ -1,10485 +1,10492 @@
<?
/*
Copyright (c) 2007 AG Projects
http://ag-projects.com
Author Adrian Georgescu
This client library provide the functions for managing SIP accounts,
ENUM ranges, ENUM numbers, Trusted Peers, LCR, Rating plans
on a remote NGNPro server
// Usage example
// login using your favorite php session management and read data from the login function
// login_credentials can overwrite many defaults, see SoapEngine->SoapEngine() function
if ($adminonly) {
$login_credentials=array(
'login_type' => 'admin',
'reseller' => $reseller,
'customer' => $customer,
'extra_form_elements' => array()
);
} else {
$login_credentials=array(
'login_type' => 'reseller',
'soap_username' => $soapUsername,
'soap_password' => $soapPassword,
'reseller' => $reseller,
'customer' => $customer,
'extra_form_elements' => array()
);
}
// login_credentials can overwite SoapEngine->ports
$login_credentials['ports']['customers'] = array(
'records_class' => 'Customers',
'name' => 'Login accounts',
'soap_class' => 'WebService_NGNPro_CustomerPort',
'category' => 'general',
'description' => 'Manage login accounts, customer information and properties. Customer id can be assigned to entities like SIP domains and ENUM ranges. Use % to match a pattern. '
);
require_once("provisioning/ngnpro_soap_library.phtml");
require_once("provisioning/ngnpro_client_lib.phtml");
include_once("provisioning/ngnpro_engines.inc");
$extraFormElements=array();
////////////////////////////////
// How to create a SIP record //
////////////////////////////////
$sip_engine = 'sip_accounts@engine';
$this->SipSoapEngine = new SoapEngine($sip_engine,$soapEngines,$login_credentials);
$_sip_class = $this->SipSoapEngine->records_class;
$this->sipRecords = new $_sip_class(&$this->SipSoapEngine);
$sipAccount = array('account' => 'user@example.com',
'quota' => $quota,
'prepaid' => $prepaid,
'password' => $password,
'pstn' => true,
'owner' => $owner,
'customer' => $customer,
'reseller' => $reseller
);
$this->sipRecords->addRecord($sipAccount);
////////////////////////////////
// How to create a SIP domain //
////////////////////////////////
$sip_engine = 'sip_accounts@engine';
$this->SipSoapEngine = new SoapEngine($sip_engine,$soapEngines,$login_credentials);
$_sip_class = $this->SipSoapEngine->records_class;
$this->sipRecords = new $_sip_class(&$this->SipSoapEngine);
$sipDomain = array('domain' => 'example.com',
'customer' => $customer,
'reseller' => $reseller
);
$this->sipRecords->addRecord($sipDomain);
///////////////////////////////
// How to create a SIP alias //
///////////////////////////////
$sip_engine = 'sip_aliases@engine';
$this->SipSoapEngine = new SoapEngine($sip_engine,$soapEngines,$login_credentials);
$_sip_class = $this->SipSoapEngine->records_class;
$this->sipRecords = new $_sip_class(&$this->SipSoapEngine);
$sipAlias = array('alias' => 'user@example1.com',
'target' => 'user@example2.com',
'owner' => $owner,
'customer' => $customer,
'reseller' => $reseller
);
$this->sipRecords->addRecord($sipAlias);
///////////////////////////////////
// How to create an ENUM mapping //
///////////////////////////////////
$enum_engine = 'enum_numbers@engine';
$this->EnumSoapEngine = new SoapEngine($enum_engine,$soapEngines,$login_credentials);
$_enum_class = $this->EnumSoapEngine->records_class;
$this->enumRecords = new $_enum_class(&$this->EnumSoapEngine);
$enumMapping = array('tld' => $tld,
'number' => $number,
'type' => 'sip',
'mapto' => 'sip:user@example.com',
'owner' => $owner,
'customer' => $customer,
'reseller' => $reseller
);
$this->enumRecords->addRecord($enumMapping);
*/
class SoapEngine {
var $version = 1;
var $adminonly = 0;
var $customer = 0;
var $reseller = 0;
var $login_type = 'reseller';
var $allowedPorts = array();
var $timeout = 5;
var $exception = array();
var $extraFormElements = array();
var $ports=array(
'sip_accounts' => array(
'records_class' => 'SipAccounts',
'name' => 'SIP accounts',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'sip',
'description' => 'Manage SIP accounts and their settings. Click on the SIP account to access the settings page. Use % to match a pattern. ',
),
'enum_numbers' => array(
'records_class' => 'EnumMappings',
'name' => 'Phone numbers',
'soap_class' => 'WebService_NGNPro_EnumPort',
'category' => 'enum',
'description' => 'Manage phone numbers used for incoming calls and their mappings (e.g. +31123456789 map to sip:user@example.com). Use % to match a pattern. '
),
'customers' => array(
'records_class' => 'Customers',
'name' => 'Login accounts',
'soap_class' => 'WebService_NGNPro_CustomerPort',
'category' => 'general',
'description' => 'Manage login accounts, customer information and properties. Customer id can be assigned to entities like SIP domains and ENUM ranges. Use % to match a pattern. '
),
'sip_domains' => array(
'records_class' => 'Domains',
'name' => 'SIP domains',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'sip',
'description' => 'Manage SIP domains (e.g example.com) served by the SIP Proxy. Use % to match a pattern. '
),
'sip_aliases' => array(
'records_class' => 'SipAliases',
'name' => 'SIP aliases',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'sip',
'description' => 'Manage aliases for SIP destinations (e.g. user1@example1.com alias to user2@example2.com). Use % to match a pattern. '
),
'trusted_peers' => array(
'records_class' => 'TrustedPeers',
'name' => 'Trusted peers',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'sip',
'description' => 'Manage trusted parties that are allowed to route sessions through the SIP proxy without digest authentication. ',
'resellers_only' => true
),
'enum_ranges' => array(
'records_class' => 'EnumRanges',
'name' => 'Number ranges',
'soap_class' => 'WebService_NGNPro_EnumPort',
'category' => 'enum',
'description' => 'Manage phone number ranges that hold individual phone numbers. Use % to match a pattern. '
),
'pstn_gateway_groups' => array(
'records_class' => 'GatewayGroups',
'name' => 'PSTN groups',
'soap_class' => 'WebService_NGNPro_NetworkPort',
'category' => 'pstn',
'description' => 'Manage groups of gateways used to call to the PSTN. You must add individual gateways to each group. ',
'resellers_only' => true
),
'pstn_gateways' => array(
'records_class' => 'Gateways',
'name' => 'PSTN gateways',
'soap_class' => 'WebService_NGNPro_NetworkPort',
'category' => 'pstn',
'description' => 'Manage gateways used to call to the PSTN. Set the IP address and IP protocol. ',
'resellers_only' => true
),
'pstn_routes' => array(
'records_class' => 'Routes',
'name' => 'PSTN routes',
'soap_class' => 'WebService_NGNPro_NetworkPort',
'category' => 'pstn',
'description' => 'Assign gateways groups to PSTN prefixes. Use % to match a pattern. ',
'resellers_only' => true
)
);
function getSoapEngineAllowed($soapEngines,$filter) {
// returns a list of allowed engines based on a filter
// the filter format is:
// engine1:port1,port2 engine2 engine3:port1
if (!$filter){
$soapEngines_checked=$soapEngines;
} else {
$_filter_els=explode(" ",$filter);
foreach(array_keys($soapEngines) as $_engine) {
foreach ($_filter_els as $_filter) {
unset($_allowed_engine);
$_allowed_ports=array();
list($_allowed_engine,$_allowed_ports_els) = explode(":",$_filter);
if ($_allowed_ports_els) {
$_allowed_ports = explode(",",$_allowed_ports_els);
}
if (count($_allowed_ports) == 0) {
$_allowed_ports=array_keys($this->ports);
}
if ($_engine == $_allowed_engine) {
$soapEngines_checked[$_engine]=$soapEngines[$_engine];
$this->allowedPorts[$_engine]=$_allowed_ports;
continue;
}
}
}
}
return $soapEngines_checked;
}
function SoapEngine($service,$soapEngines,$login_credentials=array()) {
/*
service is port@engine where:
- port is an available NGNPro service
- engine is a connection to an NGNPro server
soapEngines is an array of NGNPro connections and
settings belonging to them:
$soapEngines=array(
'mdns' => array('name' => 'Managed DNS',
'username' => 'soapadmin',
'password' => 'passwd',
'url' => 'http://example.com:9200/'
)
);
*/
$this->login_credentials = &$login_credentials;
if (is_array($this->login_credentials['ports'])) {
$_ports=array();
foreach (array_keys($this->ports) as $_key) {
if (in_array($_key,array_keys($this->login_credentials['ports']))) {
if (strlen($this->login_credentials['ports'][$_key]['records_class'])){
$_ports[$_key]['records_class']=$this->login_credentials['ports'][$_key]['records_class'];
} else {
$_ports[$_key]['records_class']=$this->ports[$_key]['records_class'];
}
if (strlen($this->login_credentials['ports'][$_key]['soap_class'])){
$_ports[$_key]['soap_class']=$this->login_credentials['ports'][$_key]['soap_class'];
} else {
$_ports[$_key]['soap_class']=$this->ports[$_key]['soap_class'];
}
if (strlen($this->login_credentials['ports'][$_key]['name'])){
$_ports[$_key]['name']=$this->login_credentials['ports'][$_key]['name'];
} else {
$_ports[$_key]['name']=$this->ports[$_key]['name'];
}
if (strlen($this->login_credentials['ports'][$_key]['description'])){
$_ports[$_key]['description']=$this->login_credentials['ports'][$_key]['description'];
} else {
$_ports[$_key]['description']=$this->ports[$_key]['description'];
}
} else {
$_ports[$_key]=$this->ports[$_key];
}
}
$this->ports=$_ports;
}
//dprint_r($this->login_credentials);
if ($this->login_credentials['login_type'] == 'admin') $this->adminonly = 1;
if (strlen($this->login_credentials['soap_filter'])) {
$this->soapEngines = $this->getSoapEngineAllowed($soapEngines,$this->login_credentials['soap_filter']);
} else {
$this->soapEngines = $soapEngines;
}
if (is_array($this->soapEngines)) {
$_engines = array_keys($this->soapEngines);
if (!$service) {
// use first engine available
if (is_array($this->allowedPorts) && count($this->allowedPorts[$_engines[0]]) > 0) {
$_ports=$this->allowedPorts[$_engines[0]];
} else {
$_ports = array_keys($this->ports);
}
// default service is:
$service = $_ports[0].'@'.$_engines[0];
}
if (is_array($this->login_credentials['extra_form_elements'])) {
$this->extraFormElements = $this->login_credentials['extra_form_elements'];
}
$this->service = $service;
$_els=explode('@',$this->service);
if (!$_els[1]) {
$this->soapEngine = $_engines[0];
} else {
$this->soapEngine = $_els[1];
}
$this->sip_engine = $this->soapEngine;
if (strlen($this->soapEngines[$this->soapEngine]['version'])) {
$this->version = $this->soapEngines[$this->soapEngine]['version'];
}
if ($this->version > 1) {
$default_port='customers';
} else {
$default_port='sip_accounts';
}
if (count($this->allowedPorts[$this->soapEngine]) > 0 ) {
if (in_array($_els[0],$this->allowedPorts[$this->soapEngine])) {
$this->port=$_els[0];
} else if (in_array($default_port,$this->allowedPorts[$this->soapEngine])) {
$this->port = $default_port;
} else {
foreach (array_keys($this->ports) as $_p) {
if ($this->version <= 1 && $_p = 'customers') continue;
if (in_array($_p,$this->allowedPorts[$this->soapEngine])) {
$this->port = $_p;
break;
}
}
}
} else {
if ($_els[0]) {
$this->port = $_els[0];
} else {
$this->port = $default_port;
}
}
$this->records_class = $this->ports[$this->port]['records_class'];
$this->soap_class = $this->ports[$this->port]['soap_class'];
$this->service = $this->port.'@'.$this->soapEngine;
foreach(array_keys($this->soapEngines) as $_key ) {
$this->skip[$_key]=$this->soapEngines[$_key]['skip'];
if ($this->soapEngines[$_key]['skip_ports']) {
$this->skip_ports[$_key]=$this->soapEngines[$_key]['skip_ports'];
}
}
$this->impersonate = intval($this->soapEngines[$this->soapEngine]['impersonate']);
$this->default_enum_tld = $this->soapEngines[$this->soapEngine]['default_enum_tld'];
if (strlen($this->soapEngines[$this->soapEngine]['sip_engine'])) {
$this->sip_engine=$this->soapEngines[$this->soapEngine]['sip_engine'];
}
if (strlen($this->login_credentials['customer_engine'])) {
$this->customer_engine=$this->login_credentials['customer_engine'];
} else if (strlen($this->soapEngines[$this->soapEngine]['customer_engine'])) {
$this->customer_engine=$this->soapEngines[$this->soapEngine]['customer_engine'];
} else if ($this->version > 1) {
$this->customer_engine=$this->soapEngine;
}
if (strlen($this->soapEngines[$this->soapEngine]['sip_settings_page'])) {
$this->sip_settings_page=$this->soapEngines[$this->soapEngine]['sip_settings_page'];
}
if (strlen($this->soapEngines[$this->soapEngine]['customer_properties'])) {
$this->customer_properties=$this->soapEngines[$this->soapEngine]['customer_properties'];
}
if (strlen($this->soapEngines[$this->soapEngine]['timeout'])) {
$this->timeout=intval($this->soapEngines[$this->soapEngine]['timeout']);
}
if (strlen($this->login_credentials['record_generator'])) {
$this->record_generator=$this->login_credentials['record_generator'];
} else if (strlen($this->soapEngines[$this->soapEngine]['record_generator'])) {
$this->record_generator=$this->soapEngines[$this->soapEngine]['record_generator'];
}
if (strlen($login_credentials['reseller'])) {
$this->reseller = $login_credentials['reseller'];
} else if ($this->adminonly && $_REQUEST['reseller_filter']){
$this->reseller = $_REQUEST['reseller_filter'];
}
if (strlen($login_credentials['customer'])) {
$this->customer = $login_credentials['customer'];
} else if ($this->adminonly && $_REQUEST['customer_filter']){
$this->customer = $_REQUEST['customer_filter'];
}
if (strlen($login_credentials['soap_username']) && $this->version > 1) {
$this->soapUsername=$login_credentials['soap_username'];
$this->SOAPlogin = array(
"username" => $this->soapUsername,
"password" => $login_credentials['soap_password'],
"admin" => false
);
} else {
// use the credentials defined for the soap engine
$this->soapUsername=$this->soapEngines[$this->soapEngine]['username'];
$this->SOAPlogin = array(
"username" => $this->soapUsername,
"password" => $this->soapEngines[$this->soapEngine]['password'],
"admin" => true,
"impersonate" => intval($this->reseller)
);
}
$this->SOAPurl=$this->soapEngines[$this->soapEngine]['url'];
$log=sprintf ("<p>%s at <a href=%swsdl target=wsdl>%s</a> as %s ",$this->soap_class,$this->SOAPurl,$this->SOAPurl,$this->soapUsername);
dprint($log);
$this->SoapAuth = array('auth', $this->SOAPlogin , 'urn:AGProjects:NGNPro', 0, '');
// Instantiate the SOAP client
if (!class_exists($this->soap_class)) return ;
$this->soapclient = new $this->soap_class($this->SOAPurl);
$this->soapclient->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->soapclient->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
// set the timeout
$this->soapclient->_options['timeout'] = $this->timeout;
if ($this->customer_engine) {
$this->SOAPloginCustomers = array(
"username" => $this->soapEngines[$this->customer_engine]['username'],
"password" => $this->soapEngines[$this->customer_engine]['password'],
"admin" => true,
"impersonate" => intval($this->reseller)
);
$this->SoapAuthCustomers = array('auth', $this->SOAPloginCustomers , 'urn:AGProjects:NGNPro', 0, '');
$this->SOAPurlCustomers = $this->soapEngines[$this->customer_engine]['url'];
$this->soapclientCustomers = new WebService_NGNPro_CustomerPort($this->SOAPurlCustomers);
$this->soapclientCustomers->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->soapclientCustomers->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
if (strlen($this->soapEngines[$this->customer_engine]['timeout'])) {
$this->soapclientCustomers->_options['timeout'] = intval($this->soapEngines[$this->customer_engine]['timeout']);
} else {
$this->soapclientCustomers->_options['timeout'] = $this->timeout;
}
}
} else {
print "<font color=red>Error: No SOAP credentials defined.</font>";
}
$this->url = $_SERVER['PHP_SELF']."?1=1";
foreach (array_keys($this->extraFormElements) as $element) {
if (!strlen($this->extraFormElements[$element])) continue;
$this->url .= sprintf('&%s=%s',$element,urlencode($this->extraFormElements[$element]));
}
$this->support_email = $this->soapEngines[$this->soapEngine]['support_email'];
$this->support_web = $this->soapEngines[$this->soapEngine]['support_web'];
$this->welcome_message = $this->soapEngines[$this->soapEngine]['welcome_message'];
}
function execute($function,$html=true) {
/*
$function=array('commit' => array('name' => 'addAccount',
'parameters' => array($param1,$param2),
'logs' => array('success' => 'The function was a success',
'failure' => 'The function has failed'
)
),
'rollback' => array('name' => 'addAccount',
'parameters' => array($param1,$param2),
'logs' => array('success' => 'The function was a success',
'failure' => 'The function has failed'
)
)
);
*/
if (!$function['commit']['name']) {
if ($html) {
print "<font color=red>Error: no function name supplied</font>";
} else {
print "Error: no function name supplied\n";
}
return false;
}
$this->soapclient->addHeader($this->SoapAuth);
$result = call_user_func_array(array(&$this->soapclient,$function['commit']['name']),$function['commit']['parameters']);
if (PEAR::isError($result)) {
$this->error_msg = $result->getMessage();
$this->error_fault = $result->getFault();
$this->error_code = $result->getCode();
$this->exception = $this->error_fault->detail->exception;
if ($html) {
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>\n",$this->SOAPurl,$this->error_msg, $this->error_fault->detail->exception->errorcode,$this->error_fault->detail->exception->errorstring); return false;
} else {
printf ("Error from %s: %s (%s): %s\n",$this->SOAPurl,$this->error_msg, $this->error_fault->detail->exception->errorcode,$this->error_fault->detail->exception->errorstring); return false;
}
} else {
if ($function['commit']['logs']['success']) {
if ($html) {
printf ("<p><font color=green>%s </font>\n",$function['commit']['logs']['success']);
} else {
printf ("%s\n",$function['commit']['logs']['success']);
}
}
}
return true;
}
}
class Records {
var $maxrowsperpage = '15';
var $sip_settings_page = 'sip_settings.phtml';
var $allowedDomains = array();
var $selectionActive = false;
var $selectionKeys = array();
var $resellers = array();
var $customers = array();
var $record_generator = false;
var $customer_properties = array();
var $loginProperties = array();
var $errorMessage = '';
var $html = true;
var $filters = array();
function Records(&$SoapEngine) {
$this->SoapEngine = &$SoapEngine;
$this->version = &$this->SoapEngine->version;
$this->login_credentials = &$this->SoapEngine->login_credentials;
$this->sorting['sortBy'] = trim($_REQUEST['sortBy']);
$this->sorting['sortOrder'] = trim($_REQUEST['sortOrder']);
$this->next = $_REQUEST['next'];
$this->adminonly = $this->SoapEngine->adminonly;
$this->reseller = $this->SoapEngine->reseller;
$this->customer = $this->SoapEngine->customer;
$this->impersonate = $this->SoapEngine->impersonate;
$this->url = $this->SoapEngine->url;
foreach(array_keys($this->filters) as $_filter) {
if (strlen($this->filters[$_filter])) {
$this->selectionActive=true;
break;
}
}
if ($this->adminonly) {
$this->url .= sprintf('&adminonly=%s',$this->adminonly);
if ($this->login_credentials['reseller']) {
$this->filters['reseller']=$this->login_credentials['reseller'];
} else {
$this->filters['reseller']=trim($_REQUEST['reseller_filter']);
}
}
$this->filters['customer'] = trim($_REQUEST['customer_filter']);
//$this->getResellers();
$this->getCustomers();
$this->getLoginAccount();
if (strlen($this->SoapEngine->sip_settings_page)) {
$this->sip_settings_page=$this->SoapEngine->sip_settings_page;
}
$this->support_email = $this->SoapEngine->support_email;
$this->support_web = $this->SoapEngine->support_web;
}
function showEngineSelection() {
$selected_soapEngine[$this->SoapEngine->service]=' selected';
printf("
<script type=\"text/JavaScript\">
function jumpMenu(){
location.href=\"%s&service=\" + document.engines.service.options[document.engines.service.selectedIndex].value;
}
</script>",
$this->url
);
printf("<select name='service' onChange=\"jumpMenu('this.form')\">\n");
$j=1;
foreach (array_keys($this->SoapEngine->soapEngines) as $_engine) {
if ($this->SoapEngine->skip[$_engine]) continue;
if ($j > 1) printf ("<option value=''>--------\n");
foreach (array_keys($this->SoapEngine->ports) as $_port) {
$idx=$_port.'@'.$_engine;
if (in_array($_port,$this->SoapEngine->skip_ports[$_engine])) continue;
if (count($this->SoapEngine->allowedPorts[$_engine]) > 0 && !in_array($_port,$this->SoapEngine->allowedPorts[$_engine])) continue;
if ($_port == 'customers' && $this->SoapEngine->soapEngines[$_engine]['version'] <= 1) continue;
if ($this->SoapEngine->ports[$_port]['resellers_only']) {
if ($this->login_credentials['login_type']=='admin' || $this->loginAccount->resellerActive ) {
printf ("<option value=\"%s@%s\"%s>%s@%s\n",$_port,$_engine,$selected_soapEngine[$idx],$this->SoapEngine->ports[$_port]['name'],$this->SoapEngine->soapEngines[$_engine]['name']);
}
} else {
printf ("<option value=\"%s@%s\"%s>%s@%s\n",$_port,$_engine,$selected_soapEngine[$idx],$this->SoapEngine->ports[$_port]['name'],$this->SoapEngine->soapEngines[$_engine]['name']);
}
}
$j++;
}
printf ("</select>");
if ($this->version > 1) {
print " Customer ";
if ($this->adminonly) {
$this->showCustomerForm();
print ".";
$this->showResellerForm();
} else {
$this->showCustomerForm();
print ".";
printf ("%s",$this->reseller);
}
}
}
function showPagination($maxrows) {
$url .= $this->url.'&'.$this->addFiltersToURL().
sprintf("&service=%s&sortBy=%s&sortOrder=%s",
urlencode($this->SoapEngine->service),
urlencode($this->sorting['sortBy']),
urlencode($this->sorting['sortOrder'])
);
print "
<p>
<table border=0 align=center>
<tr>
<td>
";
if ($this->next != 0 ) {
$show_next=$this->maxrowsperpage-$this->next;
if ($show_next < 0) {
$mod_show_next = $show_next-2*$show_next;
}
if (!$mod_show_next) $mod_show_next=0;
if ($mod_show_next/$this->maxrowsperpage >= 1) {
printf ("<a href='%s&next=0'>Begin</a> ",$url);
}
printf ("<a href='%s&next=%s'>Previous</a> ",$url,$mod_show_next);
}
print "
</td>
<td>
";
if ($this->next + $this->maxrowsperpage < $this->rows) {
$show_next = $this->maxrowsperpage + $this->next;
printf ("<a href='%s&next=%s'>Next</a> ",$url,$show_next);
}
print "
</td>
</tr>
</table>
";
}
function showSeachFormCustom() {
}
function showSeachForm() {
printf ("<p><b>%s</b>",
$this->SoapEngine->ports[$this->SoapEngine->port]['description']);
print "
<p>
<table border=0 bgcolor=lightgreen class=border width=100%>
<tr>
";
printf ("<form method=post name=engines action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Search>
";
$this->showEngineSelection();
$this->showSeachFormCustom();
print "
</td>
<td align=right>
Order";
$this->showSortForm();
$this->printHiddenFormElements('skipServiceElement');
print "
</td>
</form>
</tr>
</table>
";
if ($_REQUEST['action'] != 'Delete') $this->showAddForm();
}
function listRecords() {
}
function getRecordKeys() {
}
function addRecord($dictionary=array()) {
}
function deleteRecord() {
}
function tel2enum($tel,$tld) {
if (strlen($tld) == 0) $tld="e164.arpa";
// transform telephone number in FQDN Enum style domain name
if (preg_match("/^[+]?(\d+)$/",$tel,$m)) {
$l=strlen($m[1]);
$rev_num="";
$z=0;
while ($z < $l) {
$ss=substr($m[1],$z,1);
$enum=$ss.".".$enum;
$z++;
}
preg_match("/^(.*)\.$/",$enum,$m);
$enum=$m[1];
$enum=$enum.".$tld.";
return($enum);
} else {
return($tel);
}
}
function showAddForm() {
if ($this->selectionActive) return;
}
function showSortForm() {
if (!count($this->sortElements)) {
return;
}
$selected_sortBy[$this->sorting['sortBy']]='selected';
//print " Sort ";
print "<select name=sortBy>";
foreach (array_keys($this->sortElements) as $key) {
printf ("<option value='%s' %s>%s",$key,$selected_sortBy[$key],$this->sortElements[$key]);
}
print "</select>";
$selected_sortOrder[$this->sorting['sortOrder']]='selected';
print "<select name=sortOrder>";
printf ("<option value='DESC' %s>DESC",$selected_sortOrder['DESC']);
printf ("<option value='ASC' %s>ASC",$selected_sortOrder['ASC']);
print "</select>";
}
function showTimezones() {
if (!$fp = fopen("timezones", "r")) {
print _("Failed to open timezone file.");
return false;
}
print "<select name=timezone>";
print "<option>";
while ($buffer = fgets($fp,1024)) {
$buffer=trim($buffer);
if ($this->timezone==$buffer) {
$selected="selected";
} else {
$selected="";
}
printf ("<option %s>%s>",$selected,$buffer);
}
print "</select>";
fclose($fp);
}
function printHiddenFormElements ($skipServiceElement='') {
if (!$skipServiceElement) {
printf("<input type=hidden name=service value='%s'>",$this->SoapEngine->service);
}
if ($this->adminonly) {
printf("<input type=hidden name=adminonly value='%s'>",$this->adminonly);
}
foreach (array_keys($this->SoapEngine->extraFormElements) as $element) {
if (!strlen($this->SoapEngine->extraFormElements[$element])) continue;
printf ("<input type=hidden name=%s value='%s'>\n",$element,$this->SoapEngine->extraFormElements[$element]);
}
}
function getAllowedDomains() {
}
function showActionsForm() {
if (!$this->selectionActive) {
return;
}
$class_name=get_class($this).'Actions';
if (class_exists($class_name)) {
$actions=new $class_name(&$this->SoapEngine);
$actions->showActionsForm($this->filters,$this->sorting);
}
}
function executeActions() {
$this->showSeachForm();
$this->getRecordKeys();
dprint_r($this->selectionKeys);
$class_name=get_class($this).'Actions';
if (class_exists($class_name)) {
$actions=new $class_name(&$this->SoapEngine);
$actions->execute(&$this->selectionKeys,$_REQUEST['sub_action'],trim($_REQUEST['sub_action_parameter']));
}
}
function getCustomers() {
if (!$this->SoapEngine->customer_engine) {
dprint ("No customer_engine available");
return true;
}
if (!$this->filters['reseller']) return;
// Filter
$filter=array('reseller'=>intval($this->filters['reseller']));
$range=array('start' => 0,
'count' => 100
);
// Order
$orderBy = array('attribute' => 'customer',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers);
// Call function
$result = $this->SoapEngine->soapclientCustomers->getCustomers($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($result->total > $range['count']) return;
if ($range['count'] <= $result->total) {
$max=$range['count'];
} else {
$max=$result->total;
}
$i=0;
while ($i < $max) {
$customer=$result->accounts[$i];
$this->customers[$customer->id] = $customer->firstName.' '.$customer->lastName;
$i++;
}
return true;
}
}
function getResellers() {
if (!$this->SoapEngine->customer_engine) {
dprint ("No customer_engine available");
return true;
}
if (!$this->adminonly) return;
// Filter
$filter=array('reseller'=>intval($this->filters['reseller']));
$range=array('start' => 0,
'count' => 200
);
// Order
$orderBy = array('attribute' => 'customer',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers);
// Call function
$result = $this->SoapEngine->soapclientCustomers->getResellers($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
//if ($result->total > $range['count']) return;
if ($range['count'] <= $result->total) {
$max=$range['count'];
} else {
$max=$result->total;
}
$i=0;
while ($i < $max) {
$reseller = $result->accounts[$i];
if (strlen($reseller->organization) && $reseller->organization!= 'N/A') {
$this->resellers[$reseller->id] = $reseller->organization;
} else {
$this->resellers[$reseller->id] = $reseller->firstName.' '.$reseller->lastName;
}
$i++;
}
dprint_r($this->resellers);
return true;
}
}
function getLoginAccount() {
if (!$this->SoapEngine->customer_engine) {
dprint ("No customer_engine available");
return true;
}
if (!$this->customer) {
//dprint ("No customer available");
return true;
}
$filter=array('customer'=>intval($this->customer));
$range=array('start' => 0,
'count' => 100
);
// Order
$orderBy = array('attribute' => 'customer',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers);
// Call function
$result = $this->SoapEngine->soapclientCustomers->getResellers($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$this->loginAccount=$result->accounts[0];
$this->loginProperties=$this->loginAccount->properties;
}
}
function showCustomerForm($name='customer_filter') {
if ($this->login_credentials['customer'] != $this->login_credentials['reseller']) {
printf ("%s",$this->login_credentials['customer']);
} else {
if (count($this->customers)) {
$select_customer[$this->filters['customer']]='selected';
printf ("<select name=%s>",$name);
print "<option>";
foreach (array_keys($this->customers) as $_res) {
printf ("<option value='%s' %s>%s (%s)\n",$_res,$select_customer[$_res],$_res,$this->customers[$_res]);
}
print "</select>";
} else {
printf ("<input type=text size=5 name=%s value='%s'>",$name,$this->filters['customer']);
}
}
}
function showResellerForm($name='reseller_filter') {
if (!$this->adminonly) return;
if ($this->login_credentials['reseller']) {
printf ("%s",$this->login_credentials['reseller']);
} else {
if (count($this->resellers)) {
$select_reseller[$this->filters['reseller']]='selected';
printf ("<select name=%s>",$name);
print "<option>";
foreach (array_keys($this->resellers) as $_res) {
printf ("<option value='%s' %s>%s (%s)\n",$_res,$select_reseller[$_res],$_res,$this->resellers[$_res]);
}
print "</select>";
} else {
printf ("<input type=text size=5 name=%s value='%s'>",$name,$this->filters['reseller']);
}
}
}
function addFiltersToURL() {
$j=0;
foreach(array_keys($this->filters) as $filter) {
if (strlen(trim($this->filters[$filter]))) {
if ($j) $url .='&';
$url .= sprintf('%s_filter=%s',$filter,urlencode(trim($this->filters[$filter])));
}
$j++;
}
return $url;
}
function printFiltersToForm() {
foreach(array_keys($this->filters) as $filter) {
if (strlen(trim($this->filters[$filter]))) {
printf("<input type=hidden name=%s_filter value='%s'>",$filter,trim($this->filters[$filter]));
}
}
}
function getRecord () {
}
function updateRecord () {
}
function copyRecord () {
}
function showRecord () {
}
function RandomPassword($len=11) {
$alf=array("a","b","c","d","e","f",
"h","i","j","k","l","m",
"n","p","r","s","t","w",
"x","y","1","2","3","4",
"5","6","7","8","9");
$i=0;
while($i < $len) {
srand((double)microtime()*1000000);
$randval = rand(0,28);
$string="$string"."$alf[$randval]";
$i++;
}
return $string;
}
function validDomain($domain) {
if (!preg_match ("/^[A-Za-z0-9-.]{1,}\.[A-Za-z]{2,}$/",$domain)) {
return false;
}
return true;
}
function getGatewayGroups () {
$Query=array('filter' => array('name'=>''),
'orderBy' => array('attribute' => 'name',
'direction' => 'ASC'
),
'range' => array('start' => 0,
'count' => 1000)
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getGatewayGroups($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($this->version > 1) {
foreach ($result->groups as $_grp){
$this->gatewayGroups[]=$_grp->name;
}
} else {
if (is_array($result->groups)) {
$this->gatewayGroups=$result->groups;
}
}
}
}
function updateBefore () {
return true;
}
function updateAfter () {
return true;
}
function showCustomerTextBox () {
if ($this->version < 2) return;
print "Customer";
if ($this->adminonly) {
$this->showCustomerForm('customer');
print ".";
$this->showResellerForm('reseller');
} else {
$this->showCustomerForm('customer');
}
}
function makebar($w) {
if ($w < 0) $w = 0;
if ($w > 100) $w = 100;
$width = $w;
$extra = 100 - $w;
if ($width < 50)
$color = "black";
else if ($width < 70)
$color = "darkred";
else
$color = "red";
return "
<table class=bar cellspacing=0>
<tr>
<td class=$color width=$width></td>
<td class=white width=$extra>
</td>
</tr>
</table>
";
}
function customerFromLogin($dictionary=array()) {
if ($this->login_credentials['reseller']) {
$reseller = $this->login_credentials['reseller'];
if ($dictionary['customer']) {
$customer = $dictionary['customer'];
} else if ($_REQUEST['customer']) {
$customer = $_REQUEST['customer'];
} else {
$customer = $this->login_credentials['customer'];
}
} else {
if ($dictionary['reseller']) {
$reseller = $dictionary['reseller'];
} else {
$reseller = trim($_REQUEST['reseller']);
}
if ($dictionary['customer']) {
$customer = $dictionary['customer'];
} else {
$customer = trim($_REQUEST['customer']);
}
if (!$customer) $customer=$reseller;
}
return array(intval($customer),intval($reseller));
}
function getLoginProperties() {
$log=sprintf("getLoginProperties(%s,engine=%s)",$this->customer,$this->SoapEngine->customer_engine);
dprint($log);
if (!$this->SoapEngine->customer_engine) {
dprint ("No customer_engine available");
return true;
}
if (!$this->customer) {
dprint ("No customer available");
return true;
}
$this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers);
$result = $this->SoapEngine->soapclientCustomers->getProperties(intval($this->customer));
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$this->loginProperties=$result;
}
/*
print "<pre>";
print_r($this->loginProperties);
print "</pre>";
*/
return true;
}
function setLoginProperties($properties) {
$log=sprintf("setLoginProperties(%s,engine=%s)",$this->customer,$this->SoapEngine->customer_engine);
dprint($log);
if (!$this->SoapEngine->customer_engine) {
dprint ("No customer_engine available");
return true;
}
if (!is_array($properties) || !$this->customer) return true;
$this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers);
$result = $this->SoapEngine->soapclientCustomers->setProperties(intval($this->customer),$properties);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
return true;
}
function getLoginProperty($name='') {
if (!count($this->loginProperties)) return false;
foreach ($this->loginProperties as $_property) {
if ($_property->name == $name) {
return $_property->value;
}
}
return false;
}
function checkRecord() {
return true;
}
function showWelcomeMessage() {
if (!strlen($this->SoapEngine->welcome_message)) return ;
printf ("%s",$this->SoapEngine->welcome_message);
}
}
class Domains extends Records {
var $FieldsAdminOnly=array(
'reseller' => array('type'=>'integer'),
);
var $Fields=array(
'customer' => array('type'=>'integer')
);
function Domains(&$SoapEngine) {
dprint("init Domains");
$this->filters = array(
'domain' => strtolower(trim($_REQUEST['domain_filter']))
);
$this->Records(&$SoapEngine);
if ($this->version > 1) {
// keep default maxrowsperpage
$this->sortElements=array('changeDate' => 'Change date',
'domain' => 'Domain'
);
} else {
$this->maxrowsperpage = 10000;
}
}
function listRecords() {
$this->showSeachForm();
if ($this->version > 1) {
// Filter
$filter=array(
'domain' => $this->filters['domain'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
dprint_r($Query);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getDomains($Query);
} else {
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getDomains();
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($this->version > 1) {
$this->rows = $result->total;
} else {
$this->rows = count($result);
}
if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') {
$this->showActionsForm();
}
print "
<table border=0 align=center>
<tr><td>$this->rows records found</td></tr>
</table>
<p>
<table border=0 cellpadding=2 width=100%>
<tr bgcolor=lightgrey>
";
if ($this->version > 1) {
print "
<td><b>Id</b></th>
<td><b>Customer</b></td>
<td colspan=3><b>Domain</b></td>
<td><b>Change date</b></td>
<td><b>Actions</b></td>
";
} else {
print "
<td><b>Id</b></th>
<td colspan=3><b>Domain</b></td>
<td><b>Actions</b></td>
";
}
print "
</tr>
";
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows=$this->rows;
}
$i=0;
if ($this->rows) {
while ($i < $maxrows) {
if ($this->version > 1) {
if (!$result->domains[$i]) break;
$domain = $result->domains[$i];
} else {
$domain = $result[$i];
}
$index = $this->next+$i+1;
$rr=floor($index/2);
$mod=$index-$rr*2;
if ($mod ==0) {
$bgcolor="lightgrey";
} else {
$bgcolor="white";
}
if ($this->version > 1) {
$_url = $this->url.sprintf("&service=%s&action=Delete&domain_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($domain->domain)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['domain_filter'] == $domain->domain) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($domain->customer)
);
$_sip_domains_url = $this->url.sprintf("&service=sip_domains@%s&domain_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($domain->domain)
);
$_sip_accounts_url = $this->url.sprintf("&service=sip_accounts@%s&domain_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($domain->domain)
);
$_sip_aliases_url = $this->url.sprintf("&service=sip_aliases@%s&alias_domain_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($domain->domain)
);
printf("
<tr bgcolor=%s>
<td>%s</td>
<td><a href=%s>%s.%s</a></td>
<td><a href=%s>%s</a></td>
<td><a href=%s>Sip accounts</a></td>
<td><a href=%s>Sip aliases</a></td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$_customer_url,
$domain->customer,
$domain->reseller,
$_sip_domains_url,
$domain->domain,
$_sip_accounts_url,
$_sip_aliases_url,
$domain->changeDate,
$_url,
$actionText
);
} else {
$_url = $this->url.sprintf("&service=%s&action=Delete&domain_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($domain)
);
$_sip_accounts_url = $this->url.sprintf("&service=sip_accounts@%s&domain_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($domain)
);
$_sip_aliases_url = $this->url.sprintf("&service=sip_aliases@%s&domain_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($domain)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['domain_filter'] == $domain) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
printf("
<tr bgcolor=%s>
<td>%s</td>
<td>%s</td>
<td><a href=%s>Sip accounts</a></td>
<td><a href=%s>Sip aliases</a></td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$domain,
$_sip_accounts_url,
$_sip_aliases_url,
$_url,
$actionText
);
}
$i++;
}
}
print "</table>";
if ($this->rows == 1 && $this->version > 1) {
$this->showRecord($domain);
} else {
$this->showPagination($maxrows);
}
return true;
}
}
function showSeachFormCustom() {
if ($this->version > 1) {
printf (" Domain<input type=text size=15 name=domain_filter value='%s'>",$this->filters['domain']);
}
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
return true;
}
if ($dictionary['domain']) {
$domain=$dictionary['domain'];
} else {
$domain=$this->filters['domain'];
}
if (!strlen($domain)) {
print "<p><font color=red>Error: missing SIP domain. </font>";
return false;
}
$function=array('commit' => array('name' => 'deleteDomain',
'parameters' => array($domain),
'logs' => array('success' => sprintf('SIP domain %s has been deleted',$domain))
)
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function showAddForm() {
if ($this->selectionActive) return;
print "
<p>
<table border=0 class=border width=100% bgcolor=lightblue>
<tr>
";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Add>
";
printf (" Domain<input type=text size=20 name=domain>");
$this->showCustomerTextBox();
print "
</td>
<td align=right>
";
print "
</td>
";
$this->printHiddenFormElements();
print "
</form>
</tr>
</table>
";
}
function addRecord($dictionary=array()) {
if ($dictionary['domain']) {
$domain = $dictionary['domain'];
} else {
$domain = trim($_REQUEST['domain']);
}
list($customer,$reseller)=$this->customerFromLogin($dictionary);
if (!$this->validDomain($domain)) {
print "<font color=red>Error: invalid domain name</font>";
return false;
}
if ($this->version > 1) {
$domainStructure = array('domain' => strtolower($domain),
'customer' => intval($customer),
'reseller' => intval($reseller)
);
} else {
$domainStructure = strtolower($domain);
}
$function=array('commit' => array('name' => 'addDomain',
'parameters' => array($domainStructure),
'logs' => array('success' => sprintf('SIP domain %s has been added',$domain))),
'rollback' => array('name' => 'deleteDomain',
'parameters' => array($domainStructure))
);
return $this->SoapEngine->execute($function,$this->html);
}
function getRecordKeys() {
if ($this->version > 1) {
// Filter
$filter=array(
'domain' => $this->filters['domain'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getDomains($Query);
} else {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getDomains();
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error in getAllowedDomains from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
//return false;
} else {
if ($this->version > 1) {
foreach ($result->domains as $_domain) {
$this->selectionKeys[]=$_domain->domain;
}
} else {
$this->selectionKeys[]=$result;
}
}
}
function getRecord($domain) {
if ($this->version < 2) return false;
// Filter
$filter=array(
'domain' => $domain
);
// Range
$range=array('start' => 0,
'count' => 1
);
$orderBy = array('attribute' => 'changeDate',
'direction' => 'DESC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
dprint_r($Query);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getDomains($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($result->domains[0]){
return $result->domains[0];
} else {
return false;
}
}
}
function showRecord($domain) {
print "<table border=0 cellpadding=10>";
print "
<tr>
<td valign=top>
<table border=0>";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "<input type=hidden name=action value=Update>";
print "<tr>
<td colspan=2><input type=submit value=Update>
</td></tr>";
if ($this->adminonly) {
foreach (array_keys($this->FieldsAdminOnly) as $item) {
if ($this->FieldsAdminOnly[$item]['name']) {
$item_name=$this->FieldsAdminOnly[$item]['name'];
} else {
$item_name=ucfirst($item);
}
if ($this->FieldsAdminOnly[$item]['type'] == 'text') {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border><textarea cols=30 name=%s_form rows=4>%s</textarea></td>
</tr>",
$item_name,
$item,
$domain->$item
);
} else {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border><input name=%s_form size=30 type=text value='%s'></td>
</tr>",
$item_name,
$item,
$domain->$item
);
}
}
}
foreach (array_keys($this->Fields) as $item) {
if ($this->Fields[$item]['name']) {
$item_name=$this->Fields[$item]['name'];
} else {
$item_name=ucfirst($item);
}
if ($this->Fields[$item]['type'] == 'text') {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border><textarea cols=30 name=%s_form rows=4>%s</textarea></td>
</tr>",
$item_name,
$item,
$domain->$item
);
} else {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border><input name=%s_form size=30 type=text value='%s'></td>
</tr>",
$item_name,
$item,
$domain->$item
);
}
}
printf ("<input type=hidden name=domain_filter value='%s'",$domain->domain);
$this->printFiltersToForm();
$this->printHiddenFormElements();
print "</form>";
print "
</table>
";
}
function updateRecord () {
//print "<p>Updating domain ...";
if (!$_REQUEST['domain_filter']) return false;
if (!$domain = $this->getRecord($_REQUEST['domain_filter'])) {
return false;
}
$domain_old=$domain;
foreach (array_keys($this->Fields) as $item) {
$var_name=$item.'_form';
//printf ("<br>%s=%s",$var_name,$_REQUEST[$var_name]);
if ($this->Fields[$item]['type'] == 'integer') {
$domain->$item = intval($_REQUEST[$var_name]);
} else {
$domain->$item = trim($_REQUEST[$var_name]);
}
}
if ($this->adminonly) {
foreach (array_keys($this->FieldsAdminOnly) as $item) {
$var_name=$item.'_form';
//printf ("<br>%s=%s",$var_name,$_REQUEST[$var_name]);
if ($this->FieldsAdminOnly[$item]['type'] == 'integer') {
$domain->$item = intval($_REQUEST[$var_name]);
} else {
$domain->$item = trim($_REQUEST[$var_name]);
}
}
}
$function=array('commit' => array('name' => 'updateDomain',
'parameters' => array($domain),
'logs' => array('success' => sprintf('Domain %s has been updated',$domain->domain))),
'rollback' => array('name' => 'updateDomain',
'parameters' => array($domain_old))
);
return $this->SoapEngine->execute($function,$this->html);
}
}
class SipAccounts extends Records {
var $sortElements=array('changeDate' => 'Change date',
'username' => 'Username',
'domain' => 'Domain'
);
function SipAccounts(&$SoapEngine) {
dprint("init SipAccounts");
$this->filters = array('username' => strtolower(trim($_REQUEST['username_filter'])),
'domain' => strtolower(trim($_REQUEST['domain_filter'])),
'firstname'=> trim($_REQUEST['firstname_filter']),
'lastname' => trim($_REQUEST['lastname_filter']),
'email' => trim($_REQUEST['email_filter']),
'owner' => trim($_REQUEST['owner_filter']),
'customer' => trim($_REQUEST['customer_filter']),
'reseller' => trim($_REQUEST['reseller_filter'])
);
$this->Records(&$SoapEngine);
}
function getRecordKeys() {
if (preg_match("/^(.*)@(.*)$/",$this->filters['username'],$m)) {
$this->filters['username'] = $m[1];
$this->filters['domain'] = $m[2];
}
// Filter
$filter=array('username' => $this->filters['username'],
'domain' => $this->filters['domain'],
'firstName'=> $this->filters['firstname'],
'lastName' => $this->filters['lastname'],
'email' => $this->filters['email'],
'owner' => intval($this->filters['owner']),
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => 0,
'count' => 1000
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getAccounts($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
foreach ($result->accounts as $account) {
$this->selectionKeys[]=array('username' => $account->id->username,
'domain' => $account->id->domain
);
}
return true;
}
return false;
}
function listRecords() {
$this->getAllowedDomains();
if (preg_match("/^(.*)@(.*)$/",$this->filters['username'],$m)) {
$this->filters['username'] = $m[1];
$this->filters['domain'] = $m[2];
}
$this->showSeachForm();
// Filter
$filter=array('username' => $this->filters['username'],
'domain' => $this->filters['domain'],
'firstName'=> $this->filters['firstname'],
'lastName' => $this->filters['lastname'],
'email' => $this->filters['email'],
'owner' => intval($this->filters['owner']),
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getAccounts($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$this->rows = $result->total;
if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') {
$this->showActionsForm();
}
print "
<p>
<table border=0 align=center>
<tr><td>$this->rows records found</td></tr>
</table>
<p>
<table border=0 cellpadding=2 width=100%>
<tr bgcolor=lightgrey>
<td><b>Id</b></th>
";
if ($this->version > 1) print "<td><b>Customer</b></td>";
print"
<td><b>SIP account</b></td>
<td><b>Name</b></td>
<td><b>Email</b></td>
<td><b>Caller Id</b></td>
<td><b>Quota</b></td>
<td><b>Groups</b></td>
<td><b>Owner</b></td>
<td><b>Change date</b></td>
<td><b>Actions</b></td>
</tr>
";
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows=$this->rows;
}
$i=0;
//print "<pre>";
//print_r($result->accounts);
if ($this->rows) {
while ($i < $maxrows) {
if (!$result->accounts[$i]) break;
$account = $result->accounts[$i];
$index=$this->next+$i+1;
$rr=floor($index/2);
$mod=$index-$rr*2;
if ($mod ==0) {
$bgcolor="lightgrey";
} else {
$bgcolor="white";
}
$_url = $this->url.sprintf("&service=%s&action=Delete&username_filter=%s&domain_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($account->id->username),
urlencode($account->id->domain)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['username_filter'] == $account->id->username &&
$_REQUEST['domain_filter'] == $account->id->domain) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
if ($account->reseller) {
$resellersip_settings_page=$account->reseller;
} else if ($this->SoapEngine->impersonate) {
// use the reseller from the soap engine
$resellersip_settings_page=$this->SoapEngine->impersonate;
} else {
// use the reseller from the login
$resellersip_settings_page=$this->reseller;
}
if ($this->sip_settings_page) {
$url=sprintf('%s?account=%s@%s&reseller=%s&sip_engine=%s',
$this->sip_settings_page,$account->id->username,$account->id->domain,
$resellersip_settings_page,$this->SoapEngine->sip_engine);
if ($this->adminonly) $url .= sprintf('&adminonly=%s',$this->adminonly);
foreach (array_keys($this->SoapEngine->extraFormElements) as $element) {
if (!strlen($this->SoapEngine->extraFormElements[$element])) continue;
$url .= sprintf('&%s=%s',$element,urlencode($this->SoapEngine->extraFormElements[$element]));
}
$sip_account=sprintf("
<a href=\"javascript:void(null);\" onClick=\"return window.open('%s', 'SIP_Settings',
'toolbar=1,status=1,menubar=1,scrollbars=1,resizable=1,width=800,height=720')\">
%s@%s</a>",$url,$account->id->username,$account->id->domain);
} else {
$sip_account=sprintf("%s@%s",$account->id->username,$account->id->domain);
}
unset($groups);
if (is_array($account->groups)) foreach ($account->groups as $_grp) $groups.=$_grp.' ';
if ($this->version > 1) {
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($account->customer));
if ($account->owner) {
$_owner_url = sprintf
("<a href=%s&service=customers@%s&customer_filter=%s>%s</a>",
$this->url,
urlencode($this->SoapEngine->soapEngine),
urlencode($account->owner),
$account->owner
);
} else {
$_owner_url='';
}
printf("
<tr bgcolor=%s>
<td>%s </td>
<td><a href=%s>%s.%s</a></td>
<td>%s</td>
<td>%s %s</td>
<td><a href=mailto:%s>%s</a></td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>
",
$bgcolor,
$index,
$_customer_url,
$account->customer,
$account->reseller,
$sip_account,
$account->firstName,
$account->lastName,
$account->email,
$account->email,
$account->rpid,
$account->quota,
$groups,
$_owner_url,
$account->changeDate,
$_url,
$actionText
);
} else {
printf("
<tr bgcolor=%s>
<td>%s </td>
<td>%s</td>
<td>%s %s</td>
<td><a href=mailto:%s>%s</a></td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>
",
$bgcolor,
$index,
$sip_account,
$account->firstName,
$account->lastName,
$account->email,
$account->email,
$account->rpid,
$account->quota,
$groups,
$account->owner,
$account->changeDate,
$_url,
$actionText
);
}
$i++;
}
}
print "</table>";
$this->showPagination($maxrows);
return true;
}
}
function showSeachFormCustom() {
printf (" User<input type=text size=15 name=username_filter value='%s'>",$this->filters['username']);
printf ("@");
if (count($this->allowedDomains) > 0) {
if ($this->filters['domain'] && !in_array($this->filters['domain'],$this->allowedDomains)) {
printf ("<input type=text size=15 name=domain_filter value='%s'>",$this->filters['domain']);
} else {
$selected_domain[$this->filters['domain']]='selected';
printf ("<select name=domain_filter>
<option>");
foreach ($this->allowedDomains as $_domain) {
printf ("<option value='$_domain' %s>$_domain",$selected_domain[$_domain]);
}
printf ("</select>");
}
} else {
printf ("<input type=text size=15 name=domain_filter value='%s'>",$this->filters['domain']);
}
if ($this->version > 1) {
printf (" FN<input type=text size=10 name=firstname_filter value='%s'>",$this->filters['firstname']);
printf (" LN<input type=text size=10 name=lastname_filter value='%s'>",$this->filters['lastname']);
printf (" Email<input type=text size=10 name=email_filter value='%s'>",$this->filters['email']);
}
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
return true;
}
if ($dictionary['username']) {
$username=$dictionary['username'];
} else {
$username=$this->filters['username'];
}
if ($dictionary['domain']) {
$domain=$dictionary['domain'];
} else {
$domain=$this->filters['domain'];
}
if (!strlen($username) || !strlen($domain)) {
print "<p><font color=red>Error: missing SIP account username or domain. </font>";
return false;
}
$account=array('username' => $username,
'domain' => $domain
);
$function=array('commit' => array('name' => 'deleteAccount',
'parameters' => array($account),
'logs' => array('success' => sprintf('SIP account %s@%s has been deleted',$this->filters['username'],$this->filters['domain'])
)
)
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function showAddForm() {
if ($this->selectionActive) return;
if (!count($this->allowedDomains)) {
print "<p><font color=red>You must create at least one SIP domain before adding SIP accounts</font>";
return false;
}
print "
<p>
<table border=0 class=border width=100% bgcolor=lightblue>
<tr>
";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Add>
";
if ($_REQUEST['account']) {
$_account=$_REQUEST['account'];
} else {
$_account=$this->getLoginProperty('sip_accounts_last_username');
}
printf ("User<input type=text size=15 name=account value='%s'>",$_account);
if ($_REQUEST['domain']) {
$_domain=$_REQUEST['domain'];
$selected_domain[$_REQUEST['domain']]='selected';
} else if ($_domain=$this->getLoginProperty('sip_accounts_last_domain')) {
$selected_domain[$_domain]='selected';
}
if (count($this->allowedDomains) > 0) {
print "@<select name=domain>";
foreach ($this->allowedDomains as $_domain) {
printf ("<option value='%s' %s>%s\n",$_domain,$selected_domain[$_domain],$_domain);
}
print "</select>";
} else {
printf (" <input type=text name=domain size=15 value='%s'>",$_domain);
}
if ($_REQUEST['quota']) {
$_quota=$_REQUEST['quota'];
} else {
$_quota=$this->getLoginProperty('sip_accounts_last_quota');
}
if (!$_quota) $_quota='';
if ($_prepaid=$this->getLoginProperty('sip_accounts_last_prepaid')) {
$checked_prepaid='checked';
} else {
$checked_prepaid='';
}
if ($_pstn=$this->getLoginProperty('sip_accounts_last_pstn')) {
$checked_pstn='checked';
} else {
$checked_pstn='';
}
printf (" Pass<input type=password size=10 name=password value='%s'>",$_REQUEST['password']);
printf (" Name<input type=text size=15 name=fullname value='%s'>",$_REQUEST['fullname']);
printf (" Email<input type=text size=15 name=email value='%s'>",$_REQUEST['email']);
printf ("<nobr>Owner<input type=text size=5 name=owner value='%s'></nobr> ",$_REQUEST['owner']);
printf ("<nobr>PSTN<input type=checkbox name=pstn value=1 %s></nobr> ",$checked_pstn);
printf ("<nobr>Quota<input type=text size=5 name=quota value='%s'></nobr> ",$_quota);
printf ("<nobr>Prepaid<input type=checkbox name=prepaid value=1 %s></nobr> ",$checked_prepaid);
print "
</td>
<td align=right>
";
print "
</td>
";
$this->printHiddenFormElements();
print "
</form>
</tr>
</table>
";
}
function addRecord($dictionary=array()) {
dprint_r($dictionary);
if ($dictionary['account']) {
$account_els = explode("@", $dictionary['account']);
$this->skipSaveProperties=true;
} else {
$account_els = explode("@", trim($_REQUEST['account']));
}
list($customer,$reseller)=$this->customerFromLogin($dictionary);
$username=$account_els[0];
if (strlen($account_els[1])) {
$domain=$account_els[1];
} else if ($dictionary['domain']) {
$domain=$dictionary['domain'];
} else if ($_REQUEST['domain']) {
$domain=trim($_REQUEST['domain']);
} else {
printf ("<p><font color=red>Error: Missing SIP domain</font>");
return false;
}
if (!$this->validDomain($domain)) {
print "<font color=red>Error: invalid domain name</font>";
return false;
}
if ($dictionary['fullname']) {
$name_els = explode(" ", $dictionary['fullname']);
} else {
$name_els = explode(" ", trim($_REQUEST['fullname']));
}
if (strlen($name_els[0])) {
$firstName=$name_els[0];
} else {
$firstName='Account';
}
if (strlen($name_els[1])) {
$j=1;
while ($j < count($name_els)) {
$lastName .= $name_els[$j].' ';
$j++;
}
} else {
$lastName=$username;
}
$lastName=trim($lastName);
if (strlen($dictionary['timezone'])) {
$timezone=$dictionary['timezone'];
} else if (strlen(trim($_REQUEST['timezone']))) {
$timezone=trim($_REQUEST['timezone']);
} else {
$timezone='Europe/Amsterdam';
}
if (strlen($dictionary['password'])) {
$password=$dictionary['password'];
} else if (strlen(trim($_REQUEST['password']))) {
$password=trim($_REQUEST['password']);
} else {
$password=$this->RandomPassword(6);
}
$groups=array();
if($dictionary['pstn'] || $_REQUEST['pstn']) {
$_pstn=1;
$groups[]='free-pstn';
} else {
$_pstn=0;
}
if (strlen($dictionary['email'])) {
$email=$dictionary['email'];
} else {
$email=trim($_REQUEST['email']);
}
if (strlen($dictionary['owner'])) {
$owner=intval($dictionary['owner']);
} else {
$owner=intval($_REQUEST['owner']);
}
if (strlen($dictionary['quota'])) {
$quota=intval($dictionary['quota']);
} else {
$quota=intval($_REQUEST['quota']);
}
if (strlen($dictionary['prepaid'])) {
$prepaid=intval($dictionary['prepaid']);
} else {
$prepaid=intval($_REQUEST['prepaid']);
}
if (!$email) $email=strtolower($username).'@'.strtolower($domain);
if (!$this->skipSaveProperties) {
$_p=array(
array('name' => 'sip_accounts_last_domain',
'category' => 'web',
'value' => "$domain",
'permission' => 'customer'
),
array('name' => 'sip_accounts_last_username',
'category' => 'web',
'value' => "$username",
'permission' => 'customer'
),
array('name' => 'sip_accounts_last_timezone',
'category' => 'web',
'value' => "$timezone",
'permission' => 'customer'
),
array('name' => 'sip_accounts_last_quota',
'category' => 'web',
'value' => "$quota",
'permission' => 'customer'
),
array('name' => 'sip_accounts_last_pstn',
'category' => 'web',
'value' => "$_pstn",
'permission' => 'customer'
),
array('name' => 'sip_accounts_last_prepaid',
'category' => 'web',
'value' => "$prepaid",
'permission' => 'customer'
)
);
$this->setLoginProperties($_p);
}
$account=array(
'id' => array('username' => strtolower($username),
'domain' => strtolower($domain)
),
'firstName' => $firstName,
'lastName' => $lastName,
'password' => $password,
'timezone' => $timezone,
'email' => $email,
'owner' => $owner,
'groups' => $groups,
'prepaid' => $prepaid,
'quota' => $quota,
'region' => ''
);
//print_r($account);
$deleteAccount=array('username' => $username,
'domain' => $domain);
$function=array('commit' => array('name' => 'addAccount',
'parameters' => array($account),
'logs' => array('success' => sprintf('SIP account %s@%s has been added',$username,$domain))),
'rollback' => array('name' => 'deleteAlias',
'parameters' => array($deleteAccount)
)
);
return $this->SoapEngine->execute($function,$this->html);
}
function getAllowedDomains() {
if ($this->version > 1) {
// Filter
$filter=array(
'domain' => ''
);
// Range
$range=array('start' => 0,
'count' => 1000
);
$orderBy = array('attribute' => 'domain',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getDomains($Query);
} else {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getDomains();
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error in getAllowedDomains from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
//return false;
} else {
if ($this->version > 1) {
foreach ($result->domains as $_domain) {
if ($this->validDomain($_domain->domain)) {
$this->allowedDomains[]=$_domain->domain;
}
}
} else {
foreach ($result as $_domain) {
if ($this->validDomain($_domain)) {
$this->allowedDomains[]=$_domain;
}
}
}
}
}
}
class SipAliases extends Records {
function SipAliases(&$SoapEngine) {
dprint("init SipAliases");
$target_filters_els=explode("@",trim($_REQUEST['target_username_filter']));
$target_username=$target_filters_els[0];
if (count($target_filters_els) > 1) {
$target_domain=$target_filters_els[1];
}
$this->filters = array('alias_username' => strtolower(trim($_REQUEST['alias_username_filter'])),
'alias_domain' => strtolower(trim($_REQUEST['alias_domain_filter'])),
'target_username' => strtolower($target_username),
'target_domain' => strtolower($target_domain)
);
$this->Records(&$SoapEngine);
if ($this->version > 1) {
$this->sortElements=array(
'changeDate' => 'Change date',
'aliasUsername' => 'Alias user',
'aliasDomain' => 'Alias domain',
'targetUsername' => 'Target user',
'targetDomain' => 'Target domain',
);
} else {
$this->sortElements=array(
'aliasUsername' => 'Alias user',
'aliasDomain' => 'Alias domain',
'targetUsername' => 'Target user',
'targetDomain' => 'Target domain',
);
}
}
function getRecordKeys() {
// Filter
$filter=array('aliasUsername' => $this->filters['alias_username'],
'aliasDomain' => $this->filters['alias_domain'],
'targetUsername' => $this->filters['target_username'],
'targetDomain' => $this->filters['target_domain'],
'owner' => intval($this->filters['owner']),
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => 0,
'count' => 1000
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'aliasUsername';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
//dprint_r($Query);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getAliases($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
foreach ($result->aliases as $alias) {
$this->selectionKeys[]=array('username' => $alias->id->username,
'domain' => $alias->id->domain);
}
return true;
}
}
function listRecords() {
$this->getAllowedDomains();
// Make sure we apply the domain filter from the login credetials
$this->showSeachForm();
// Filter
$filter=array('aliasUsername' => $this->filters['alias_username'],
'aliasDomain' => $this->filters['alias_domain'],
'targetUsername' => $this->filters['target_username'],
'targetDomain' => $this->filters['target_domain'],
'owner' => intval($this->filters['owner']),
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if ($this->version > 1) {
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
} else {
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'aliasUsername';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'ASC';
}
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getAliases($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$this->rows = $result->total;
if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') {
$this->showActionsForm();
}
print "
<p>
<table border=0 align=center>
<tr><td>$this->rows records found</td></tr>
</table>
<p>
<table border=0 cellpadding=2 width=100%>
<tr bgcolor=lightgrey>
<td><b>Id</b></th>
";
if ($this->version > 1) print "<td><b>Customer</b></td>";
print"
<td><b>Alias</b></td>
<td><b>Target</b></td>
<td><b>Owner</b></td>
<td><b>Change date</b></td>
<td><b>Actions</b></td>
</tr>
";
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows=$this->rows;
}
$i=0;
if ($this->rows) {
while ($i < $maxrows) {
if (!$result->aliases[$i]) break;
$alias = $result->aliases[$i];
$index=$this->next+$i+1;
$rr=floor($index/2);
$mod=$index-$rr*2;
if ($mod ==0) {
$bgcolor="lightgrey";
} else {
$bgcolor="white";
}
$_url = $this->url.sprintf("&service=%s&action=Delete&alias_username_filter=%s&alias_domain_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($alias->id->username),
urlencode($alias->id->domain)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['alias_username_filter'] == $alias->id->username &&
$_REQUEST['alias_domain_filter'] == $alias->id->domain) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
if ($this->version > 1) {
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($alias->customer)
);
$_sip_accounts_url = $this->url.sprintf("&service=sip_accounts@%s&username_filter=%s&domain_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($alias->target->username),
urlencode($alias->target->domain)
);
if ($alias->owner) {
$_owner_url = sprintf
("<a href=%s&service=customers@%s&customer_filter=%s>%s</a>",
$this->url,
urlencode($this->SoapEngine->soapEngine),
urlencode($alias->owner),
$alias->owner
);
} else {
$_owner_url='';
}
printf("
<tr bgcolor=%s>
<td>%s</td>
<td><a href=%s>%s.%s</a></td>
<td>%s@%s</td>
<td><a href=%s>%s@%s</a></td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>
",
$bgcolor,
$index,
$_customer_url,
$alias->customer,
$alias->reseller,
$alias->id->username,
$alias->id->domain,
$_sip_accounts_url,
$alias->target->username,
$alias->target->domain,
$_owner_url,
$alias->changeDate,
$_url,
$actionText
);
} else {
printf("
<tr bgcolor=%s>
<td>%s</td>
<td>%s@%s</td>
<td>%s@%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>
",
$bgcolor,
$index,
$alias->id->username,
$alias->id->domain,
$alias->target->username,
$alias->target->domain,
$alias->owner,
$alias->changeDate,
$_url,
$actionText
);
}
$i++;
}
}
print "</table>";
$this->showPagination($maxrows);
/*
$_properties=array(
array('name' => $this->SoapEngine->port.'_sortBy',
'value' => $this->sorting['sortBy'],
'permission' => 'customer',
'category' => 'web'
),
array('name' => $this->SoapEngine->port.'_sortOrder',
'value' => $this->sorting['sortOrder'],
'permission' => 'customer',
'category' => 'web'
)
);
print_r($_properties);
$this->setLoginProperties($_properties);
*/
return true;
}
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
return true;
}
if ($dictionary['alias_username']) {
$alias_username=$dictionary['alias_username'];
} else {
$alias_username=$this->filters['alias_username'];
}
if ($dictionary['alias_domain']) {
$alias_domain=$dictionary['alias_domain'];
} else {
$alias_domain=$this->filters['alias_domain'];
}
if (!strlen($alias_username) || !strlen($alias_domain)) {
print "<p><font color=red>Error: missing SIP alias username or domain. </font>";
return false;
}
$alias=array('username' => $alias_username,
'domain' => $alias_domain
);
$function=array('commit' => array('name' => 'deleteAlias',
'parameters' => array($alias),
'logs' => array('success' => sprintf('SIP alias %s@%s has been deleted',$this->filters['alias_username'],$this->filters['alias_domain'])
)
)
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function showSeachFormCustom() {
printf (" Alias<input type=text size=15 name=alias_username_filter value='%s'>",$this->filters['alias_username']);
printf ("@");
if (count($this->allowedDomains) > 0) {
if ($this->filters['alias_domain'] && !in_array($this->filters['alias_domain'],$this->allowedDomains)) {
printf ("<input type=text size=15 name=alias_domain_filter value='%s'>",$this->filters['alias_domain']);
} else {
$selected_domain[$this->filters['alias_domain']]='selected';
printf ("<select name=alias_domain_filter>
<option>");
foreach ($this->allowedDomains as $_domain) {
printf ("<option value='$_domain' %s>$_domain",$selected_domain[$_domain]);
}
printf ("</select>");
}
} else {
printf ("<input type=text size=15 name=alias_domain_filter value='%s'>",$this->filters['alias_domain']);
}
printf (" Target<input type=text size=15 name=target_username_filter value='%s'>",trim($_REQUEST['target_username_filter']));
}
function showAddForm() {
if ($this->selectionActive) return;
if (!count($this->allowedDomains)) {
print "<p><font color=red>You must create at least one SIP domain before adding SIP aliases</font>";
return false;
}
print "
<p>
<table border=0 class=border width=100% bgcolor=lightblue>
<tr>
";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Add>
";
printf (" Alias<input type=text size=15 name=alias>");
if ($_REQUEST['domain']) {
$_domain=$_REQUEST['domain'];
$selected_domain[$_REQUEST['domain']]='selected';
} else if ($_domain=$this->getLoginProperty('sip_aliases_last_domain')) {
$selected_domain[$_domain]='selected';
}
if (count($this->allowedDomains) > 0) {
print "@<select name=domain>";
foreach ($this->allowedDomains as $_domain) {
printf ("<option value='%s' %s>%s\n",$_domain,$selected_domain[$_domain],$_domain);
}
print "</select>";
} else {
printf (" <input type=text name=domain size=15 value='%s'>",$_domain);
}
printf (" Target<input type=text size=35 name=target>");
printf (" Owner<input type=text size=5 name=owner>");
print "
</td>
<td align=right>
";
print "
</td>
";
$this->printHiddenFormElements();
print "
</form>
</tr>
</table>
";
}
function addRecord($dictionary=array()) {
if ($dictionary['alias']) {
$alias_els = explode("@", $dictionary['alias']);
$this->skipSaveProperties=true;
} else {
$alias_els = explode("@", trim($_REQUEST['alias']));
}
if ($dictionary['target']) {
$target_els = explode("@", $dictionary['target']);
} else {
$target_els = explode("@", trim($_REQUEST['target']));
}
if ($dictionary['owner']) {
$owner = $dictionary['owner'];
} else {
$owner = $_REQUEST['owner'];
}
$username=$alias_els[0];
if (strlen($alias_els[1])) {
$domain=$alias_els[1];
} else if (trim($_REQUEST['domain'])) {
$domain=trim($_REQUEST['domain']);
} else {
printf ("<p><font color=red>Error: Missing SIP domain</font>");
return false;
}
if (!$this->validDomain($domain)) {
print "<font color=red>Error: invalid domain name</font>";
return false;
}
list($customer,$reseller)=$this->customerFromLogin($dictionary);
if (!$this->skipSaveProperties=true) {
$_p=array(
array('name' => 'sip_aliases_last_domain',
'category' => 'web',
'value' => strtolower($domain),
'permission' => 'customer'
)
);
$this->setLoginProperties($_p);
}
$alias=array(
'id' => array('username' => strtolower($username),
'domain' => strtolower($domain)
),
'target' => array('username' => $target_els[0],
'domain' => $target_els[1]
),
'owner' => intval($owner)
);
$deleteAlias=array('username' => strtolower($username),
'domain' => strtolower($domain)
);
$function=array('commit' => array('name' => 'addAlias',
'parameters' => array($alias),
'logs' => array('success' => sprintf('SIP alias %s@%s has been added',$username,$domain))),
'rollback' => array('name' => 'deleteAlias',
'parameters' => array($deleteAlias)
)
);
return $this->SoapEngine->execute($function,$this->html);
}
function getAllowedDomains() {
if ($this->version > 1) {
// Filter
$filter=array(
'domain' => ''
);
// Range
$range=array('start' => 0,
'count' => 1000
);
$orderBy = array('attribute' => 'domain',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getDomains($Query);
} else {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getDomains();
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($this->version > 1) {
foreach ($result->domains as $_domain) {
if ($this->validDomain($_domain->domain)) {
$this->allowedDomains[]=$_domain->domain;
}
}
} else {
foreach ($result as $_domain) {
if ($this->validDomain($_domain)) {
$this->allowedDomains[]=$_domain;
}
}
}
}
}
}
class EnumRanges extends Records {
// only admin can add prefixes below
var $deniedPrefixes=array('1','20','210','211','212','213','214','215','216','217','218','219','220','221','222','223','224','225','226','227','228','229','230','231','232','233','234','235','236','237','238','239','240','241','242','243','244','245','246','247','248','249','250','251','252','253','254','255','256','257','258','259','260','261','262','263','264','265','266','267','268','269','27','280','281','282','283','284','285','286','287','288','289','290','291','292','293','294','295','296','297','298','299','30','31','32','33','34','350','351','352','353','354','355','356','357','358','359','36','370','371','372','373','374','375','376','377','378','379','380','381','382','383','384','385','386','387','388','389','39','40','41','420','421','422','423','424','425','426','427','428','429','43','44','45','46','47','48','49','500','501','502','503','504','505','506','507','508','509','51','52','53','54','55','56','57','58','590','591','592','593','594','595','596','597','598','599','60','61','62','63','64','65','66','670','671','672','673','674','675','676','677','678','679','680','681','682','683','684','685','686','687','688','689','690','691','692','693','694','695','696','697','698','699','7','800','801','802','803','804','805','806','807','808','809','81','82','830','831','832','833','834','835','836','837','838','839','84','850','851','852','853','854','855','856','857','858','859','86','870','871','872','873','874','875','876','877','878','879','880','881','882','883','884','885','886','887','888','889','890','891','892','893','894','895','896','897','898','899','90','91','92','93','94','95','960','961','962','963','964','965','966','967','968','969','970','971','972','973','974','975','976','977','978','979','98','990','991','992','993','994','995','996','997','998','999');
var $FieldsAdminOnly=array(
'reseller' => array('type'=>'integer'),
);
var $Fields=array(
'customer' => array('type'=>'integer'),
'info' => array('type'=>'string',
'help' =>'Range description'
),
'size' => array('type'=>'integer',
'help'=>'Maximum number of telephone numbers'
),
'ttl' => array('type'=>'integer',
'help'=>'Cache period in DNS clients'
),
'minDigits' => array('type'=>'integer',
'help'=>'Minimum number of digits for telephone numbers'
),
'maxDigits' => array('type'=>'integer',
'help'=>'Maximum number of digits for telephone numbers'
)
);
function EnumRanges(&$SoapEngine) {
dprint("init EnumRanges");
$this->filters = array('prefix' => trim(ltrim($_REQUEST['prefix_filter']),'+'),
'tld' => trim($_REQUEST['tld_filter']),
'info' => trim($_REQUEST['info_filter'])
);
$this->Records(&$SoapEngine);
if ($this->version > 1) {
$this->sortElements=array('changeDate' => 'Change date',
'prefix' => 'Prefix',
'tld' => 'TLD'
);
$this->Fields['nameservers'] = array('type'=>'text',
'name'=>'Name servers',
'help'=>'Name servers authoritative for this DNS zone'
);
}
}
function listRecords() {
$this->getAllowedDomains();
$this->showSeachForm();
if ($this->version > 1) {
// Filter
$filter=array('prefix' => $this->filters['prefix'],
'tld' => $this->filters['tld'],
'info' => $this->filters['info'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getRanges($Query);
} else {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getRanges();
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($this->version > 1) {
$this->rows = $result->total;
} else {
$this->rows = count($result);
}
if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') {
$this->showActionsForm();
}
print "
<p>
<table border=0 align=center>
<tr><td>$this->rows records found</td></tr>
</table>
<p>
<table border=0 cellpadding=2 width=100%>
";
if ($this->version > 1) {
print "
<tr bgcolor=lightgrey>
<td><b>Id</b></th>
<td><b>Customer</b></td>
<td><b>Prefix </b></td>
<td><b>TLD</b></td>
<td><b>Info</b></td>
<td><b>TTL</b></td>
<td><b>Min digits</b></td>
<td><b>Max digits</b></td>
<td><b>Size</b></td>
<td colspan=2><b>Used</b></td>
<td><b>Change date</b></td>
<td><b>Actions</b></td>
</tr>
";
} else {
print "
<tr bgcolor=lightgrey>
<td><b>Id</b></th>
<td><b>Prefix </b></td>
<td><b>TLD</b></td>
<td><b>TTL</b></td>
<td><b>Min digits</b></td>
<td><b>Max digits</b></td>
<td><b>Size</b></td>
<td colspan=2><b>Used</b></td>
<td><b>Change date</b></td>
<td><b>Actions</b></td>
</tr>
";
}
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows=$this->rows;
}
$i=0;
if ($this->rows) {
while ($i < $maxrows) {
if ($this->version > 1) {
if (!$result->ranges[$i]) break;
$range = $result->ranges[$i];
} else {
$range = $result[$i];
}
$index=$this->next+$i+1;
$rr=floor($index/2);
$mod=$index-$rr*2;
if ($mod ==0) {
$bgcolor="lightgrey";
} else {
$bgcolor="white";
}
$_url = $this->url.sprintf("&service=%s&action=Delete&prefix_filter=%s&tld_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($range->id->prefix),
urlencode($range->id->tld)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['prefix_filter'] == $range->id->prefix &&
$_REQUEST['tld_filter'] == $range->id->tld) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
if ($this->adminonly) {
if ($this->login_credentials['reseller_filters'][$range->reseller]['record_generator']) {
$generator_link=sprintf('<a href=%s&generatorId=%s&range=%s@%s&number_length=%s&reseller_filter=%s target=generator>G</a>',$this->url,$this->login_credentials['reseller_filters'][$range->reseller]['record_generator'],$range->id->prefix,$range->id->tld,$range->maxDigits,$range->reseller);
} else if (strlen($this->SoapEngine->record_generator)) {
$generator_link=sprintf('<a href=%s&generatorId=%s&range=%s@%s&number_length=%s&reseller_filter=%s target=generator>G</a>',$this->url,$this->SoapEngine->record_generator,$range->id->prefix,$range->id->tld,$range->maxDigits,$range->reseller);
}
$range_link=sprintf('<a href=%s&service=%s&reseller_filter=%s&prefix_filter=%s&tld_filter=%s>%s</a>',$this->url,$this->SoapEngine->service,$range->reseller,$range->id->prefix,$range->id->tld,$range->id->prefix);
} else {
if (strlen($this->SoapEngine->record_generator)) {
$generator_link=sprintf('<a href=%s&generatorId=%s&range=%s@%s&number_length=%s&reseller_filter=%s target=generator>G</a>',$this->url,$this->SoapEngine->record_generator,$range->id->prefix,$range->id->tld,$range->maxDigits,$range->reseller);
} else {
$generator_link='';
}
$range_link=sprintf('<a href=%s&&service=%s&prefix_filter=%s&tld_filter=%s>%s</a>',$this->url,$this->SoapEngine->service,$range->id->prefix,$range->id->tld,$range->id->prefix);
}
if ($range->size) {
$usage=intval(100*$range->used/$range->size);
$bar=$this->makebar($usage);
} else {
$bar="";
}
if ($this->version > 1) {
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($range->customer)
);
printf("
<tr bgcolor=%s>
<td>%s %s</td>
<td><a href=%s>%s.%s</a></td>
<td>+%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$generator_link,
$_customer_url,
$range->customer,
$range->reseller,
$range_link,
$range->id->tld,
$range->info,
$range->ttl,
$range->minDigits,
$range->maxDigits,
$range->size,
$range->used,
$bar,
$range->changeDate,
$_url,
$actionText
);
} else {
printf("
<tr bgcolor=%s>
<td>%s</td>
<td>+%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$range_link,
$range->id->tld,
$range->ttl,
$range->minDigits,
$range->maxDigits,
$range->size,
$range->used,
$bar,
$range->changeDate,
$_url,
$actionText
);
}
printf("
</tr>
");
$i++;
}
}
print "</table>";
if ($this->rows == 1 && $this->version > 1) {
$this->showRecord($range);
} else {
$this->showPagination($maxrows);
}
return true;
}
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
return true;
}
if (!strlen($this->filters['prefix']) || !strlen($this->filters['tld'])) {
print "<p><font color=red>Error: missing ENUM range id </font>";
return false;
}
$rangeId=array('prefix'=>$this->filters['prefix'],
'tld'=>$this->filters['tld']);
$function=array('commit' => array('name' => 'deleteRange',
'parameters' => array($rangeId),
'logs' => array('success' => sprintf('ENUM range +%s under %s has been deleted',$this->filters['prefix'],$this->filters['tld'])
)
)
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function showAddForm() {
if ($this->selectionActive) return;
print "
<p>
<table border=0 class=border width=100% bgcolor=lightblue>
<tr>
";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Add>
";
printf ("Prefix +<input type=text size=15 name=prefix value='%s'> ",$_REQUEST['prefix']);
printf (" TLD");
if ($_REQUEST['tld']) {
printf ("<input type=text size=15 name=tld value='%s'>",$_REQUEST['tld']);
} else if ($_tld=$this->getLoginProperty('enum_ranges_last_tld')) {
printf ("<input type=text size=15 name=tld value='%s'>",$_tld);
} else {
printf ("<input type=text size=15 name=tld>");
}
printf ("TTL<input type=text size=5 name=ttl value=3600> ");
printf ("Min Digits<input type=text size=3 name=minDigits value=11> ");
printf ("Max Digits<input type=text size=3 name=maxDigits value=11> ");
if ($this->version > 1) {
$this->showCustomerTextBox();
printf (" Info<input type=text size=15 name=info value='%s'> ",$_REQUEST['info']);
}
print "
</td>
<td align=right>
";
print "
</td>
";
$this->printHiddenFormElements();
print "
</form>
</tr>
</table>
";
}
function addRecord() {
$tld = trim($_REQUEST['tld']);
$prefix = trim($_REQUEST['prefix']);
$size = trim($_REQUEST['size']);
$info = trim($_REQUEST['info']);
if (!strlen($tld)) {
if (strlen($this->SoapEngine->default_enum_tld)) {
$tld=$this->SoapEngine->default_enum_tld;
} else {
$tld='e164.arpa';
}
}
if (!strlen($tld) || !strlen($prefix) || !is_numeric($prefix)) {
printf ("<p><font color=red>Error: Missing TLD or prefix. </font>");
return false;
}
if (!$this->adminonly) {
if (in_array($prefix,$this->deniedPrefixes)) {
print "<p><font color=red>Error: Only an administrator account can create the prefix coresponding to a country code.</font>";
return false;
}
}
list($customer,$reseller)=$this->customerFromLogin($dictionary);
if (!trim($_REQUEST['ttl'])) {
$ttl=3600;
} else {
$ttl=intval(trim($_REQUEST['ttl']));
}
$range=array(
'id' => array('prefix' => $prefix,
'tld' => $tld),
'ttl' => $ttl,
'info' => $info,
'minDigits' => intval(trim($_REQUEST['minDigits'])),
'maxDigits' => intval(trim($_REQUEST['maxDigits'])),
'size' => intval($size),
'customer' => intval($customer),
'reseller' => intval($reseller)
);
$deleteRange=array('prefix'=>$prefix,
'tld'=>$tld);
$_p=array(
array('name' => 'enum_ranges_last_tld',
'category' => 'web',
'value' => "$tld",
'permission' => 'customer'
)
);
$this->setLoginProperties($_p);
$function=array('commit' => array('name' => 'addRange',
'parameters' => array($range),
'logs' => array('success' => sprintf('ENUM range +%s under %s has been added',$prefix,$tld))),
'rollback' => array('name' => 'deleteRange',
'parameters' => array($deleteRange)
)
);
return $this->SoapEngine->execute($function,$this->html);
}
function showSeachFormCustom() {
if ($this->version > 1) {
printf (" Prefix<input type=text size=15 name=prefix_filter value='%s'>",$this->filters['prefix']);
printf (" TLD");
if (count($this->allowedDomains) > 0) {
$selected_tld[$this->filters['tld']]='selected';
printf ("<select name=tld_filter>
<option>");
foreach ($this->allowedDomains as $_tld) {
printf ("<option value='%s' %s>%s",$_tld,$selected_tld[$_tld],$_tld);
}
printf ("</select>");
} else {
printf ("<input type=text size=10 name=tld_filter value='%s'>",$this->filters['tld']);
}
printf (" Info<input type=text size=15 name=info_filter value='%s'>",$this->filters['info']);
}
}
function getAllowedDomains() {
// Insert credetials
if ($this->version > 1) {
// Filter
$filter=array('prefix' => '');
// Range
$range=array('start' => 0,
'count' => 200
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getRanges($Query);
} else {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getRanges();
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($this->version > 1) {
foreach($result->ranges as $range) {
$this->ranges[]=array('prefix' => $range->id->prefix,
'tld' => $range->id->tld,
'minDigits' => $range->minDigits,
'maxDigits' => $range->maxDigits
);
if (in_array($range->id->tld,$this->allowedDomains)) continue;
$this->allowedDomains[]=$range->id->tld;
$seen[$range->id->tld]++;
}
} else {
foreach($result as $range) {
$this->ranges[]=array('prefix' => $range->id->prefix,
'tld' => $range->id->tld,
'minDigits' => $range->minDigits,
'maxDigits' => $range->maxDigits
);
if (in_array($range->id->tld,$this->allowedDomains)) continue;
$this->allowedDomains[]=$range->id->tld;
$seen[$range->id->tld]++;
}
}
if (strlen($this->SoapEngine->default_enum_tld) && !$seen[$this->SoapEngine->default_enum_tld]) {
$this->allowedDomains[]=$this->SoapEngine->default_enum_tld;
}
}
}
function showRecord($range) {
dprint_r($range);
print "<table border=0 cellpadding=10>";
print "
<tr>
<td valign=top>
<table border=0>";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "<input type=hidden name=action value=Update>";
print "<tr>
<td colspan=2><input type=submit value=Update>
</td></tr>";
printf ("<tr><td class=border>DNS zone</td><td class=border>%s</td></td>",
$this->tel2enum($range->id->prefix,$range->id->tld));
if ($this->adminonly) {
foreach (array_keys($this->FieldsAdminOnly) as $item) {
if ($item == 'nameservers') {
foreach ($range->$item as $_item) {
$nameservers.=$_item."\n";
}
$item_value=$nameservers;
} else {
$item_value=$range->$item;
}
if ($this->FieldsAdminOnly[$item]['name']) {
$item_name=$this->FieldsAdminOnly[$item]['name'];
} else {
$item_name=ucfirst($item);
}
if ($this->FieldsAdminOnly[$item]['type'] == 'text') {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border><textarea cols=30 name=%s_form rows=5>%s</textarea></td>
<td class=border valign=top>%s</td>
</tr>",
$item_name,
$item,
$item_value,
$this->FieldsAdminOnly[$item]['help']
);
} else {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border><input name=%s_form size=30 type=text value='%s'></td>
<td class=border>%s</td>
</tr>",
$item_name,
$item,
$item_value,
$this->FieldsAdminOnly[$item]['help']
);
}
}
}
foreach (array_keys($this->Fields) as $item) {
if ($this->Fields[$item]['name']) {
$item_name=$this->Fields[$item]['name'];
} else {
$item_name=ucfirst($item);
}
if ($item == 'nameservers') {
foreach ($range->$item as $_item) {
$nameservers.=$_item."\n";
}
$item_value=$nameservers;
} else {
$item_value=$range->$item;
}
if ($this->Fields[$item]['type'] == 'text') {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border><textarea cols=30 name=%s_form rows=5>%s</textarea></td>
<td class=border valign=top>%s</td>
</tr>",
$item_name,
$item,
$item_value,
$this->Fields[$item]['help']
);
} else {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border><input name=%s_form size=30 type=text value='%s'></td>
<td class=border>%s</td>
</tr>",
$item_name,
$item,
$item_value,
$this->Fields[$item]['help']
);
}
}
printf ("<input type=hidden name=tld_filter value='%s'",$range->id->tld);
printf ("<input type=hidden name=prefix_filter value='%s'",$range->id->prefix);
$this->printFiltersToForm();
$this->printHiddenFormElements();
print "</form>";
print "
</table>
";
}
function updateRecord () {
//print "<p>Updating range ...";
if (!$_REQUEST['prefix_filter'] || !$_REQUEST['tld_filter']) return;
$rangeid=array('prefix' => $_REQUEST['prefix_filter'],
'tld' => $_REQUEST['tld_filter']
);
if (!$range = $this->getRecord($rangeid)) {
return false;
}
$range_old=$range;
foreach (array_keys($this->Fields) as $item) {
$var_name=$item.'_form';
//printf ("<br>%s=%s",$var_name,$_REQUEST[$var_name]);
if ($this->Fields[$item]['type'] == 'integer') {
$range->$item = intval($_REQUEST[$var_name]);
} else if ($item == 'nameservers') {
$_txt=trim($_REQUEST[$var_name]);
if (!strlen($_txt)) {
unset($range->$item);
} else {
$_nameservers=array();
$_lines=explode("\n",$_txt);
foreach ($_lines as $_line) {
$_ns=trim($_line);
$_nameservers[]=$_ns;
}
$range->$item=$_nameservers;
}
} else {
$range->$item = trim($_REQUEST[$var_name]);
}
}
if ($this->adminonly) {
foreach (array_keys($this->FieldsAdminOnly) as $item) {
$var_name=$item.'_form';
if ($this->FieldsAdminOnly[$item]['type'] == 'integer') {
$range->$item = intval($_REQUEST[$var_name]);
} else {
$range->$item = trim($_REQUEST[$var_name]);
}
}
}
$function=array('commit' => array('name' => 'updateRange',
'parameters' => array($range),
'logs' => array('success' => sprintf('ENUM range +%s under %s has been updated',$rangeid['prefix'],$rangeid['tld']))),
'rollback' => array('name' => 'updateRange',
'parameters' => array($range_old))
);
return $this->SoapEngine->execute($function,$this->html);
}
function getRecord($rangeid) {
// Filter
if (!$rangeid['prefix'] || !$rangeid['tld']) {
print "Error in getRecord(): Missing prefix or tld";
return false;
}
$filter=array('prefix' => $rangeid['prefix'],
'tld' => $rangeid['tld']
);
// Range
$range=array('start' => 0,
'count' => 1
);
// Order
$orderBy = array('attribute' => 'changeDate',
'direction' => 'DESC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getRanges($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($result->ranges[0]){
return $result->ranges[0];
} else {
return false;
}
}
}
}
class EnumMappings extends Records {
var $default_ttl = 3600;
var $default_priority = 5;
var $sortElements=array('changeDate' => 'Change date',
'number' => 'Number',
'tld' => 'TLD'
);
var $ranges=array();
var $FieldsReadOnly=array(
'customer',
'reseller'
);
var $Fields=array(
'owner' => array('type'=>'integer'),
'info' => array('type'=>'string')
);
var $mapping_fields=array('id' => 'integer',
'type' => 'string',
'mapto' => 'string',
'priority' => 'integer',
'ttl' => 'integer'
);
var $NAPTR_services=array(
"sip" => array("service"=>"sip",
"webname"=>"SIP",
"schemas"=>array("sip:","sips:")),
"mailto" => array("service"=>"mailto",
"webname"=>"Email",
"schemas"=>array("mailto:")),
"web:http" => array("service"=>"web:http",
"webname"=>"WEB (http)",
"schemas"=>array("http://")),
"web:https" => array("service"=>"web:https",
"webname"=>"WEB (https)",
"schemas"=>array("https://")),
"x-skype:callto" => array("service"=>"x-skype:callto",
"webname"=>"Skype",
"schemas"=>array("callto:")),
"h323" => array("service"=>"h323",
"webname"=>"H323",
"schemas"=>array("h323:")),
"iax" => array("service"=>"iax",
"webname"=>"IAX",
"schemas"=>array("iax:")),
"iax2" => array("service"=>"iax2",
"webname"=>"IAX2",
"schemas"=>array("iax2:")),
"mms" => array("service"=>"mms",
"webname"=>"MMS",
"schemas"=>array("tel:","mailto:")),
"sms" => array("service"=>"sms",
"webname"=>"SMS",
"schemas"=>array("tel:","mailto:")),
"ems" => array("service"=>"ems",
"webname"=>"EMS",
"schemas"=>array("tel:","mailto:")),
"im" => array("service"=>"im",
"webname"=>"IM",
"schemas"=>array("im:")),
"npd:tel" => array("service"=>"npd+tel",
"webname"=>"Portability",
"schemas"=>array("tel:")),
"void:mailto" => array("service"=>"void:mailto",
"webname"=>"VOID(mail)",
"schemas"=>array("mailto:")),
"void:http" => array("service"=>"void:http",
"webname"=>"VOID(http)",
"schemas"=>array("http://")),
"void:https" => array("service"=>"void:https",
"webname"=>"VOID(https)",
"schemas"=>array("https://")),
"voice" => array("service"=>"voice",
"webname"=>"Voice",
"schemas"=>array("voice:","tel:")),
"tel" => array("service"=>"tel",
"webname"=>"Tel",
"schemas"=>array("tel:")),
"fax:tel" => array("service"=>"fax:tel",
"webname"=>"Fax",
"schemas"=>array("tel:")),
"ifax:mailto" => array("service"=>"ifax:mailto",
"webname"=>"iFax",
"schemas"=>array("mailto:")),
"pres" => array("service"=>"pres",
"webname"=>"Presence",
"schemas"=>array("pres:")),
"ft:ftp" => array("service"=>"ft:ftp",
"webname"=>"FTP",
"schemas"=>array("ftp://")),
"loc:http" => array("service"=>"loc:http",
"webname"=>"GeoLocation",
"schemas"=>array("http://")),
"key:http" => array("service"=>"key:http",
"webname"=>"Public key",
"schemas"=>array("http://"))
);
function EnumMappings(&$SoapEngine) {
dprint("init EnumMappings");
if ($_REQUEST['range_filter']) {
list($_prefix,$_tld_filter)= explode("@",$_REQUEST['range_filter']);
if ($_prefix && !$_REQUEST['number_filter']) {
$_number_filter=$_prefix.'%';
} else {
$_number_filter=$_REQUEST['number_filter'];
}
} else {
$_number_filter=$_REQUEST['number_filter'];
$_tld_filter=trim($_REQUEST['tld_filter']);
}
$_number_filter=ltrim($_number_filter,'+');
$this->filters = array('number' => ltrim($_number_filter,'+'),
'tld' => $_tld_filter,
'range' => trim($_REQUEST['range_filter']),
'type' => trim($_REQUEST['type_filter']),
'mapto' => trim($_REQUEST['mapto_filter']),
'owner' => trim($_REQUEST['owner_filter'])
);
$this->Records(&$SoapEngine);
$this->getAllowedDomains();
}
function listRecords() {
$this->showSeachForm();
$filter=array('number' => $this->filters['number'],
'tld' => $this->filters['tld'],
'type' => $this->filters['type'],
'mapto' => $this->filters['mapto'],
'owner' => intval($this->filters['owner']),
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getNumbers($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$this->rows = $result->total;
if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') {
$this->showActionsForm();
}
print "
<p>
<table border=0 align=center>
<tr><td>$this->rows records found</td></tr>
</table>
<p>
<table border=0 cellpadding=2 width=100%>
<tr bgcolor=lightgrey>
<td><b>Id</b></th>
";
if ($this->version > 1) {
print "
<td><b>Customer</b></td>
<td><b>Phone number</b></td>
<td><b>TLD</b></td>
<td><b>Info</b></td>
<td><b>Owner</b></td>
<td><b>Type</b></td>
<td><b>Map to</b></td>
<td><b>TTL</b></td>
<td><b>Prio</b></td>
<td><b>Change date</b></td>
<td><b>Actions</b></td>
";
} else {
print "
<td><b>Phone number</b></td>
<td><b>TLD</b></td>
<td><b>Info</b></td>
<td><b>Type</b></td>
<td><b>Map to</b></td>
<td><b>TTL</b></td>
<td><b>Prio</b></td>
<td><b>Owner</b></td>
<td><b>Actions</b></td>
";
}
print "
</tr>
";
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows=$this->rows;
}
$i=0;
if ($this->rows) {
while ($i < $maxrows) {
if (!$result->numbers[$i]) break;
$number = $result->numbers[$i];
$index=$this->next+$i+1;
$rr=floor($index/2);
$mod=$index-$rr*2;
if ($mod ==0) {
$bgcolor="lightgrey";
} else {
$bgcolor="white";
}
$j=1;
foreach ($number->mappings as $_mapping) {
unset($sip_engine);
foreach (array_keys($this->login_credentials['reseller_filters']) as $_res) {
if ($_res == $number->reseller) {
if ($this->login_credentials['reseller_filters'][$_res]['sip_engine']) {
$sip_engine=$this->login_credentials['reseller_filters'][$_res]['sip_engine'];
break;
}
}
}
if (!$sip_engine) {
if ($this->login_credentials['reseller_filters']['default']['sip_engine']) {
$sip_engine=$this->login_credentials['reseller_filters']['default']['sip_engine'];
} else {
$sip_engine=$this->SoapEngine->sip_engine;
}
}
if (preg_match("/^sip:(.*)$/",$_mapping->mapto,$m) && $this->sip_settings_page) {
$url=sprintf('%s?account=%s&reseller=%s&sip_engine=%s',
$this->sip_settings_page,$m[1], $number->reseller,$sip_engine);
if ($this->adminonly) $url .= sprintf('&adminonly=%s',$this->adminonly);
foreach (array_keys($this->SoapEngine->extraFormElements) as $element) {
if (!strlen($this->SoapEngine->extraFormElements[$element])) continue;
$url .= sprintf('&%s=%s',$element,urlencode($this->SoapEngine->extraFormElements[$element]));
}
$mapto=sprintf("
<a href=\"javascript:void(null);\" onClick=\"return window.open('%s', 'SIP_Settings',
'toolbar=1,status=1,menubar=1,scrollbars=1,resizable=1,width=800,height=720')\">
sip:%s</a>",$url,$m[1]);
} else {
$mapto=sprintf("%s",$_mapping->mapto);
}
$_url = $this->url.sprintf("&service=%s&action=Delete&number_filter=%s&tld_filter=%s&mapto_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($number->id->number),
urlencode($number->id->tld),
urlencode($_mapping->mapto)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['number_filter'] == $number->id->number &&
$_REQUEST['tld_filter'] == $number->id->tld &&
$_REQUEST['mapto_filter'] == $_mapping->mapto) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
if ($j==1) {
$_number_url = $this->url.sprintf("&service=%s&number_filter=%s&tld_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($number->id->number),
urlencode($number->id->tld)
);
if ($this->version > 1) {
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($number->customer)
);
if ($number->owner) {
$_owner_url = sprintf
("<a href=%s&service=customers@%s&customer_filter=%s>%s</a>",
$this->url,
urlencode($this->SoapEngine->soapEngine),
urlencode($number->owner),
$number->owner
);
} else {
$_owner_url='';
}
printf("
<tr bgcolor=%s>
<td>%s</td>
<td><a href=%s>%s.%s</a></td>
<td><a href=%s>+%s</a></td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$_customer_url,
$number->customer,
$number->reseller,
$_number_url,
$number->id->number,
$number->id->tld,
$number->info,
$_owner_url,
ucfirst($_mapping->type),
$mapto,
$_mapping->ttl,
$_mapping->priority,
$number->changeDate,
$_url,
$actionText
);
} else {
printf("
<tr bgcolor=%s>
<td>%s</td>
<td>+%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$number->id->number,
$number->id->tld,
$number->info,
$number->owner,
ucfirst($_mapping->type),
$mapto,
$_mapping->ttl,
$_mapping->priority,
$_url,
$actionText
);
}
} else {
if ($this->version > 1) {
printf("
<tr bgcolor=%s>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
ucfirst($_mapping->type),
$mapto,
$_mapping->ttl,
$_mapping->priority,
$number->changeDate,
$_url,
$actionText
);
} else {
printf("
<tr bgcolor=%s>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
ucfirst($_mapping->type),
$mapto,
$_mapping->ttl,
$_mapping->priority,
$_url,
$actionText
);
}
}
$j++;
}
if (!is_array($number->mappings) || !count($number->mappings)) {
$_url = $this->url.sprintf("&service=%s&action=Delete&number_filter=%s&tld_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($number->id->number),
urlencode($number->id->tld),
urlencode($_mapping->mapto)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['number_filter'] == $number->id->number &&
$_REQUEST['tld_filter'] == $number->id->tld &&
$_REQUEST['mapto_filter'] == $_mapping->mapto) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
$_number_url = $this->url.sprintf("&service=%s&number_filter=%s&tld_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($number->id->number),
urlencode($number->id->tld)
);
if ($this->version > 1) {
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($number->customer)
);
if ($number->owner) {
$_owner_url = sprintf
("<a href=%s&service=customers@%s&customer_filter=%s>%s</a>",
$this->url,
urlencode($this->SoapEngine->soapEngine),
urlencode($number->owner),
$number->owner
);
} else {
$_owner_url='';
}
printf("
<tr bgcolor=%s>
<td>%s</td>
<td><a href=%s>%s.%s</a></td>
<td><a href=%s>+%s</a></td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$_customer_url,
$number->customer,
$number->reseller,
$_number_url,
$number->id->number,
$number->id->tld,
$number->info,
$_owner_url,
$number->changeDate,
$_url,
$actionText
);
} else {
printf("
<tr bgcolor=%s>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$_url,
$actionText
);
}
}
printf("
</tr>
");
$i++;
}
}
print "</table>";
if ($this->rows == 1 ) {
$this->showRecord($number);
} else {
$this->showPagination($maxrows);
}
return true;
}
}
function getLastNumber() {
// Filter
$filter=array('number' => ''
);
// Range
$range=array('start' => 0,
'count' => 1
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getNumbers($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($result->total) {
$number = array('number' => $result->numbers[0]->id->number,
'tld' => $result->numbers[0]->id->tld,
'mappings' => $result->numbers[0]->mappings
);
return $number;
}
}
return false;
}
function showSeachFormCustom() {
/*
print " <select name=range_filter><option>";
$selected_range[$_REQUEST['range_filter']]='selected';
foreach ($this->ranges as $_range) {
$rangeId=$_range['prefix'].'@'.$_range['tld'];
printf ("<option value='%s' %s>%s +%s",$rangeId,$selected_range[$rangeId],$_range['tld'],$_range['prefix']);
}
print "</select>";
*/
printf (" Number <input type=text size=15 name=number_filter value='%s'>",$_REQUEST['number_filter']);
printf (" <nobr>Map to");
print "<select name=type_filter>
<option>
";
reset($this->NAPTR_services);
$selected_naptr_service[$this->filters['type']]='selected';
while (list($k,$v) = each($this->NAPTR_services)) {
printf ("<option value='%s' %s>%s",$k,$selected_naptr_service[$k],$this->NAPTR_services[$k]['webname']);
}
print "
</select>
";
printf ("<input type=text size=20 name=mapto_filter value='%s'></nobr>",$this->filters['mapto']);
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
return true;
}
if ($dictionary['number']) {
$number=$dictionary['number'];
} else {
$number=$this->filters['number'];
}
if ($dictionary['tld']) {
$tld=$dictionary['tld'];
} else {
$tld=$this->filters['tld'];
}
if ($dictionary['mapto']) {
$mapto=$dictionary['mapto'];
} else {
$mapto=$this->filters['mapto'];
}
if (!strlen($number) || !strlen($tld)) {
print "<p><font color=red>Error: missing ENUM number or TLD </font>";
return false;
}
$enum_id=array('number' => $number,
'tld' => $tld
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getNumber($enum_id);
if (!PEAR::isError($result)) {
// the number exists and we make an update
$result_new=$result;
if (count($result->mappings) > 1) {
foreach ($result->mappings as $_mapping) {
if ($_mapping->mapto != $mapto) {
$mappings_new[]=array('type' => $_mapping->type,
'mapto' => $_mapping->mapto,
'ttl' => $_mapping->ttl,
'priority' => $_mapping->priority
);
}
}
if (!is_array($mappings_new)) $mappings_new = array();
$result_new->mappings=$mappings_new;
$function=array('commit' => array('name' => 'updateNumber',
'parameters' => array($result_new),
'logs' => array('success' => sprintf('ENUM mapping %s has been deleted',$mapto))),
'rollback' => array('name' => 'updateNumber',
'parameters' => array($result)
)
);
} else {
$function=array('commit' => array('name' => 'deleteNumber',
'parameters' => array($enum_id),
'logs' => array('success' => sprintf('ENUM number +%s under %s has been deleted',$number,$tld))),
'rollback' => array('name' => 'addNumber',
'parameters' => array($result)
)
);
}
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
} else {
return false;
}
}
function showAddForm() {
//if ($this->selectionActive) return;
if (!count($this->ranges)) {
//print "<p><font color=red>You must create at least one ENUM range before adding ENUM numbers</font>";
return false;
}
print "
<p>
<table border=0 class=border width=100% bgcolor=lightblue>
<tr>
";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Add>
";
printf (" Number");
print "<select name=range>";
if ($_REQUEST['range']) {
$selected_range[$_REQUEST['range']]='selected';
} else if ($_range=$this->getLoginProperty('enum_numbers_last_range')) {
$selected_range[$_range]='selected';
}
foreach ($this->ranges as $_range) {
$rangeId=$_range['prefix'].'@'.$_range['tld'];
printf ("<option value='%s' %s>%s +%s",$rangeId,$selected_range[$rangeId],$_range['tld'],$_range['prefix']);
}
print "</select>";
if ($_REQUEST['number']) {
printf ("<input type=text size=15 name=number value='%s'>",$_REQUEST['number']);
} else if ($_number=$this->getLoginProperty('enum_numbers_last_number')) {
$_prefix=$_range['prefix'];
preg_match("/^$_prefix(.*)/",$_number,$m);
printf ("<input type=text size=15 name=number value='%s'>",$m[1]);
} else {
printf ("<input type=text size=15 name=number>");
}
printf (" Map to");
print "<select name=type>
";
if ($_REQUEST['type']) {
$selected_naptr_service[$_REQUEST['type']]='selected';
} else if ($_type=$this->getLoginProperty('enum_numbers_last_type')) {
$selected_naptr_service[$_type]='selected';
}
reset($this->NAPTR_services);
while (list($k,$v) = each($this->NAPTR_services)) {
printf ("<option value='%s' %s>%s",$k,$selected_naptr_service[$k],$this->NAPTR_services[$k]['webname']);
}
print "
</select>
";
if ($_REQUEST['type']) {
$selected_naptr_service[$_REQUEST['type']]='selected';
} else if ($_type=$this->getLoginProperty('enum_numbers_last_type')) {
$selected_naptr_service[$_type]='selected';
}
printf (" <input type=text size=25 name=mapto value='%s'>",$_REQUEST['mapto']);
print" TTL";
if ($_REQUEST['ttl']) {
printf ("<input type=text size=5 name=ttl value='%s'>",$_REQUEST['ttl']);
} else if ($_ttl=$this->getLoginProperty('enum_numbers_last_ttl')) {
printf ("<input type=text size=5 name=ttl value='%s'>",$_ttl);
} else {
printf ("<input type=text size=5 name=ttl value='3600'>");
}
printf (" Priority<input type=text size=3 name=priority value='%s'>",$_REQUEST['priority']);
printf (" Owner<input type=text size=5 name=owner value='%s'>",$_REQUEST['owner']);
printf (" Info<input type=text size=10 name=info value='%s'>",$_REQUEST['info']);
print "
</td>
<td align=right>
";
print "
</td>
";
$this->printHiddenFormElements();
print "
</form>
</tr>
</table>
";
}
function getAllowedDomains() {
if ($this->version > 1) {
// Filter
$filter=array('prefix' => '',
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => 0,
'count' => 200
);
// Order
$orderBy = array('attribute' => 'prefix',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getRanges($Query);
} else {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getRanges();
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($this->version > 1) {
foreach($result->ranges as $range) {
$this->ranges[]=array('prefix' => $range->id->prefix,
'tld' => $range->id->tld,
'minDigits' => $range->minDigits,
'maxDigits' => $range->maxDigits
);
if (in_array($range->id->tld,$this->allowedDomains)) continue;
$this->allowedDomains[]=$range->id->tld;
$seen[$range->id->tld]++;
}
} else {
foreach($result as $range) {
$this->ranges[]=array('prefix' => $range->id->prefix,
'tld' => $range->id->tld,
'minDigits' => $range->minDigits,
'maxDigits' => $range->maxDigits
);
if (in_array($range->id->tld,$this->allowedDomains)) continue;
$this->allowedDomains[]=$range->id->tld;
$seen[$range->id->tld]++;
}
}
if (strlen($this->SoapEngine->default_enum_tld) && !$seen[$this->SoapEngine->default_enum_tld]) {
$this->allowedDomains[]=$this->SoapEngine->default_enum_tld;
}
}
}
function addRecord($dictionary=array()) {
$prefix='';
if ($dictionary['range']) {
list($prefix,$tld)=explode('@',trim($dictionary['range']));
$this->skipSaveProperties=true;
} else if ($dictionary['tld']) {
$tld = $dictionary['tld'];
} else if ($_REQUEST['range']) {
list($prefix,$tld)=explode('@',trim($_REQUEST['range']));
} else {
$tld = trim($_REQUEST['tld']);
}
if ($dictionary['number']) {
$number = $dictionary['number'];
} else {
$number = trim($_REQUEST['number']);
}
$number=$prefix.$number;
if (!strlen($tld)) {
if (strlen($this->SoapEngine->default_enum_tld)) {
$tld=$this->SoapEngine->default_enum_tld;
} else {
$tld='e164.arpa';
}
}
if (!strlen($tld) || !strlen($number) || !is_numeric($number)) {
printf ("<p><font color=red>Error: Missing TLD or number. </font>");
return false;
}
list($customer,$reseller)=$this->customerFromLogin($dictionary);
if ($dictionary['ttl']) {
$ttl = intval($dictionary['ttl']);
} else {
$ttl = intval(trim($_REQUEST['ttl']));
}
if (!$ttl) $ttl=3600;
if ($dictionary['priority']) {
$priority = intval($dictionary['priority']);
} else {
$priority = intval(trim($_REQUEST['priority']));
}
if ($dictionary['owner']) {
$owner = intval($dictionary['owner']);
} else {
$owner = intval(trim($_REQUEST['owner']));
}
if ($dictionary['info']) {
$info = $dictionary['info'];
} else {
$info = trim($_REQUEST['info']);
}
if (!$priority) $priority=5;
$enum_id=array('number' => $number,
'tld' => $tld);
if ($dictionary['mapto']) {
$mapto = $dictionary['mapto'];
} else {
$mapto = trim($_REQUEST['mapto']);
}
if ($dictionary['type']) {
$type = $dictionary['type'];
} else {
$type = trim($_REQUEST['type']);
}
if (preg_match("/^([a-z0-9]+:\/\/)(.*)$/i",$mapto,$m)) {
$_scheme = $m[1];
$_value = $m[2];
} else if (preg_match("/^([a-z0-9]+:)(.*)$/i",$mapto,$m)) {
$_scheme = $m[1];
$_value = $m[2];
} else {
$_scheme = '';
$_value = $mapto;
}
if (!$_value) {
$lastNumber=$this->getLastNumber();
foreach($lastNumber['mappings'] as $_mapping) {
if ($_mapping->type == trim($type)) {
if (preg_match("/^(.*)@(.*)$/",$_mapping->mapto,$m)) {
$_value = $number.'@'.$m[2];
break;
}
}
}
}
if (!$_scheme || !in_array($_scheme,$this->NAPTR_services[trim($type)]['schemas'])) {
$_scheme=$this->NAPTR_services[trim($type)]['schemas'][0];
}
$mapto=$_scheme.$_value;
$enum_number=array('id' => $enum_id,
'owner' => $owner,
'info' => $info,
'mappings' => array(array('type' => $type,
'mapto' => $mapto,
'ttl' => $ttl,
'priority' => $priority
)
)
);
if (!$this->skipSaveProperties=true) {
$_p=array(
array('name' => 'enum_numbers_last_range',
'category' => 'web',
'value' => $_REQUEST['range'],
'permission' => 'customer'
),
array('name' => 'enum_numbers_last_type',
'category' => 'web',
'value' => "$type",
'permission' => 'customer'
),
array('name' => 'enum_numbers_last_number',
'category' => 'web',
'value' => "$number",
'permission' => 'customer'
),
array('name' => 'enum_numbers_last_ttl',
'category' => 'web',
'value' => "$ttl",
'permission' => 'customer'
)
);
$this->setLoginProperties($_p);
}
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getNumber($enum_id);
if (PEAR::isError($result)) {
$error_msg=$result->getMessage();
$error_fault=$result->getFault();
$error_code=$result->getCode();
if ($error_fault->detail->exception->errorcode == "3002") {
$function=array('commit' => array('name' => 'addNumber',
'parameters' => array($enum_number),
'logs' => array('success' => sprintf('ENUM number +%s under %s has been added',$number,$tld))),
'rollback' => array('name' => 'deleteNumber',
'parameters' => array($enumId)
)
);
return $this->SoapEngine->execute($function,$this->html);
} else {
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
} else {
// the number exists and we make an update
$result_new=$result;
foreach ($result->mappings as $_mapping) {
$mappings_new[]=array('type' => $_mapping->type,
'mapto' => $_mapping->mapto,
'ttl' => $_mapping->ttl,
'priority' => $_mapping->priority
);
if ($_mapping->mapto == $mapto) {
printf ("<p><font color=blue>Info: ENUM mapping %s for number %s already exists</font>",$mapto,$number);
return true;
break;
}
}
$mappings_new[]=array('type' => trim($type),
'mapto' => $mapto,
'ttl' => intval(trim($_REQUEST['ttl'])),
'priority'=> intval(trim($_REQUEST['priority'])),
);
// add mapping
$result_new->mappings=$mappings_new;
$function=array('commit' => array('name' => 'updateNumber',
'parameters' => array($result_new),
'logs' => array('success' => sprintf('ENUM number +%s under %s has been updated',$number,$tld))),
'rollback' => array('name' => 'updateNumber',
'parameters' => array($result))
);
return $this->SoapEngine->execute($function,$this->html);
}
}
function getRecordKeys() {
// Filter
$filter=array('number' => $this->filters['number'],
'tld' => $this->filters['tld'],
'type' => $this->filters['type'],
'mapto' => $this->filters['mapto']
);
// Range
$range=array('start' => 0,
'count' => 1000
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getNumbers($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
foreach ($result->numbers as $number) {
$this->selectionKeys[]=array('number' => $number->id->number,
'tld' => $number->id->tld);
}
return true;
}
}
function showRecord($number) {
print "<table border=0>";
print "<tr>";
print "<td>";
print "<h3>Number</h3>";
print "</td><td>";
print "<h3>Mappings</h3>";
print "</td>";
print "</tr>";
print "<tr>";
print "<td valign=top>";
print "<table border=0>";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "<input type=hidden name=action value=Update>";
printf ("<tr><td class=border>DNS name</td><td class=border>%s</td></td>",
$this->tel2enum($number->id->number,$number->id->tld));
foreach (array_keys($this->Fields) as $item) {
if ($this->Fields[$item]['name']) {
$item_name=$this->Fields[$item]['name'];
} else {
$item_name=ucfirst($item);
}
if ($this->Fields[$item]['type'] == 'text') {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border><textarea cols=30 name=%s_form rows=4>%s</textarea></td>
</tr>",
$item_name,
$item,
$number->$item
);
} else {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border><input name=%s_form size=30 type=text value='%s'></td>
</tr>",
$item_name,
$item,
$number->$item
);
}
}
printf ("<input type=hidden name=tld_filter value='%s'",$number->id->tld);
printf ("<input type=hidden name=number_filter value='%s'",$number->id->number);
$this->printFiltersToForm();
$this->printHiddenFormElements();
print "
</table>
";
print "</td><td valign=top>";
print "<table border=0>";
print "<tr>";
print "<td></td>";
print "<td class=border>Type</td>";
print "<td class=border>Map to</td>";
print "<td class=border>TTL</td>";
print "<td class=border>Priority</td>";
print "</tr>";
foreach ($number->mappings as $_mapping) {
$j++;
unset($selected_type);
print "<tr>";
print "<td>$j</td>";
$selected_type[$_mapping->type]='selected';
printf ("
<td class=border><select name=mapping_type[]>");
reset($this->NAPTR_services);
while (list($k,$v) = each($this->NAPTR_services)) {
printf ("<option value='%s' %s>%s",$k,$selected_type[$k],$this->NAPTR_services[$k]['webname']);
}
print "
</select>
</td>";
printf ("
<td class=border><input name=mapping_mapto[] size=30 value='%s'></td>
<td class=border><input name=mapping_ttl[] size=6 value='%s'></td>
<td class=border><input name=mapping_priority[] size=6 value='%s'></td>",
$_mapping->mapto,
$_mapping->ttl,
$_mapping->priority
);
print "</tr>";
}
$j++;
print "<tr>";
print "<td></td>";
printf ("
<td class=border><select name=mapping_type[]>");
reset($this->NAPTR_services);
while (list($k,$v) = each($this->NAPTR_services)) {
printf ("<option value='%s'>%s",$k,$this->NAPTR_services[$k]['webname']);
}
print "
</select>
</td>";
printf ("
<td class=border><input name=mapping_mapto[] size=30></td>
<td class=border><input name=mapping_ttl[] size=6></td>
<td class=border><input name=mapping_priority[] size=6></td>"
);
print "</tr>";
print "</table>";
print "</td>";
print "</tr>";
print "
<tr>
<td>
<input type=submit value=Update>
</td>
</tr>
";
print "</form>";
print "</table>";
}
function getRecord($enumid) {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getNumber($enumid);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
return $result;
}
}
function updateRecord () {
//print "<p>Updating number ...";
if (!$_REQUEST['number_filter'] || !$_REQUEST['tld_filter']) return;
$enumid=array('number' => $_REQUEST['number_filter'],
'tld' => $_REQUEST['tld_filter']
);
if (!$number = $this->getRecord($enumid)) {
return false;
}
$number_old=$number;
$new_mappings=array();
/*
foreach ($number->mappings as $_mapping) {
foreach (array_keys($this->mapping_fields) as $field) {
if ($this->mapping_fields[$field] == 'integer') {
$new_mapping[$field]=intval($_mapping->$field);
} else {
$new_mapping[$field]=$_mapping->$field;
}
}
$new_mappings[]=$new_mapping;
}
*/
$j=0;
while ($j< count($_REQUEST['mapping_type'])) {
$mapto = $_REQUEST['mapping_mapto'][$j];
$type = $_REQUEST['mapping_type'][$j];
$ttl = intval($_REQUEST['mapping_ttl'][$j]);
$priority = intval($_REQUEST['mapping_priority'][$j]);
if (!$ttl) $ttl = $this->default_ttl;
if (!$priority) $priority = $this->default_priority;
if (strlen($mapto)) {
if (preg_match("/^([a-z0-9]+:\/\/)(.*)$/i",$mapto,$m)) {
$_scheme = $m[1];
$_value = $m[2];
} else if (preg_match("/^([a-z0-9]+:)(.*)$/i",$mapto,$m)) {
$_scheme = $m[1];
$_value = $m[2];
} else {
$_scheme = '';
$_value = $mapto;
}
reset($this->NAPTR_services);
if (!$_scheme || !in_array($_scheme,$this->NAPTR_services[trim($type)]['schemas'])) {
$_scheme=$this->NAPTR_services[trim($type)]['schemas'][0];
}
$mapto=$_scheme.$_value;
$new_mappings[]=array('type' => $type,
'ttl' => $ttl,
'mapto' => $mapto,
'priority' => $priority
);
}
$j++;
}
$number->mappings=$new_mappings;
print_r($new_mappings2);
if (!is_array($number->mappings)) $number->mappings=array();
foreach (array_keys($this->Fields) as $item) {
$var_name=$item.'_form';
//printf ("<br>%s=%s",$var_name,$_REQUEST[$var_name]);
if ($this->Fields[$item]['type'] == 'integer') {
$number->$item = intval($_REQUEST[$var_name]);
} else {
$number->$item = trim($_REQUEST[$var_name]);
}
}
//print_r($number);
$function=array('commit' => array('name' => 'updateNumber',
'parameters' => array($number),
'logs' => array('success' => sprintf('ENUM number +%s under %s has been updated',$enumid['number'],$enumid['tld']))),
'rollback' => array('name' => 'updateNumber',
'parameters' => array($number_old))
);
return $this->SoapEngine->execute($function,$this->html);
}
}
class TrustedPeers extends Records {
function TrustedPeers(&$SoapEngine) {
$this->filters = array('ip' => trim($_REQUEST['ip_filter']),
'description' => trim($_REQUEST['description_filter'])
);
$this->Records(&$SoapEngine);
if ($this->version > 1) {
$this->sortElements=array(
'changeDate' => 'Change date',
'description' => 'Description',
'ip' => 'IP address'
);
} else {
$this->sortElements=array(
'description' => 'Description',
'ip' => 'IP address'
);
}
}
function listRecords() {
$this->showSeachForm();
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Filter
$filter=array('ip' => $this->filters['ip'],
'description' => $this->filters['description']
);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'description';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'ASC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Call function
$result = $this->SoapEngine->soapclient->getTrustedPeers($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$this->rows = $result->total;
if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') {
$this->showActionsForm();
}
print "
<table border=0 align=center>
<tr><td>$this->rows records found</td></tr>
</table>
<p>
<table border=0 cellpadding=2 width=100%>
<tr bgcolor=lightgrey>
<td><b>Id</b></th>
";
if ($this->version > 1) print "<td><b>Customer</b></td>";
print"
<td><b>IP address</b></td>
<td><b>Protocol</b></td>
<td><b>From pattern</b></td>
<td><b>Description</b></td>";
if ($this->version > 1) print "<td><b>Change date</b></td>";
print "<td><b>Actions</b></td>
</tr>
";
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows=$this->rows;
}
$i=0;
if ($this->rows) {
while ($i < $maxrows) {
if (!$result->peers[$i]) break;
$peer = $result->peers[$i];
$index=$this->next+$i+1;
$rr=floor($index/2);
$mod=$index-$rr*2;
if ($mod ==0) {
$bgcolor="lightgrey";
} else {
$bgcolor="white";
}
$_url = $this->url.sprintf("&service=%s&action=Delete&ip_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($peer->ip)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['ip_filter'] == $peer->ip) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
if ($this->version > 1) {
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($peer->customer)
);
printf("
<tr bgcolor=%s>
<td>%s</td>
<td><a href=%s>%s.%s</a></td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$_customer_url,
$peer->reseller,
$peer->customer,
$peer->ip,
$peer->protocol,
$peer->fromPattern,
$peer->description,
$peer->changeDate,
$_url,
$actionText
);
} else {
printf("
<tr bgcolor=%s>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$peer->ip,
$peer->protocol,
$peer->fromPattern,
$peer->description,
$_url,
$actionText
);
}
printf("
</tr>
");
$i++;
}
}
print "</table>";
$this->showPagination($maxrows);
return true;
}
}
function showAddForm() {
if ($this->selectionActive) return;
print "
<p>
<table border=0 class=border width=100% bgcolor=lightblue>
<tr>
";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Add>
";
printf (" IP address<input type=text size=20 name=ipaddress>");
printf (" Description<input type=text size=30 name=description>");
$this->showCustomerTextBox();
print "
</td>
<td align=right>
";
print "
</td>
";
$this->printHiddenFormElements();
print "
</form>
</tr>
</table>
";
}
function addRecord($dictionary=array()) {
if ($dictionary['ipaddress']) {
$ipaddress = $dictionary['ipaddress'];
} else {
$ipaddress = trim($_REQUEST['ipaddress']);
}
if ($dictionary['description']) {
$description = $dictionary['description'];
} else {
$description = trim($_REQUEST['description']);
}
if ($dictionary['owner']) {
$owner = $dictionary['owner'];
} else {
$owner = trim($_REQUEST['owner']);
}
list($customer,$reseller)=$this->customerFromLogin($dictionary);
if (!strlen($ipaddress) || !strlen($description)) {
printf ("<p><font color=red>Error: Missing IP or description. </font>");
return false;
}
$peer=array(
'ip' => $ipaddress,
'description' => $description,
'owner' => intval($_REQUEST['owner']),
'customer' => intval($customer),
'reseller' => intval($reseller)
);
$function=array('commit' => array('name' => 'addTrustedPeer',
'parameters' => array($peer),
'logs' => array('success' => sprintf('Trusted peers %s has been added',$ipaddress))),
'rollback' => array('name' => 'deleteTrustedPeer',
'parameters' => array($peer)
)
);
return $this->SoapEngine->execute($function,$this->html);
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
return true;
}
if (!strlen($this->filters['ip'])) {
print "<p><font color=red>Error: missing IP address. </font>";
return false;
}
$function=array('commit' => array('name' => 'deleteTrustedPeer',
'parameters' => array($this->filters['ip']),
'logs' => array('success' => sprintf('Trusted peers %s has been deleted',$this->filters['ip'])))
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function showSeachFormCustom() {
printf (" IP address<input type=text size=15 name=ip_filter value='%s'>",$this->filters['ip']);
printf (" Description<input type=text size=15 name=description_filter value='%s'>",$this->filters['description']);
}
}
class GatewayGroups extends Records {
var $gatewayGroups=array();
var $sortElements=array(
'name' => 'Name'
);
function GatewayGroups(&$SoapEngine) {
$this->filters = array('name' => trim($_REQUEST['name_filter'])
);
$this->Records(&$SoapEngine);
}
function listRecords() {
$this->showSeachForm();
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Filter
$filter=array('name' => $this->filters['name'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'name';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'ASC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Call function
$result = $this->SoapEngine->soapclient->getGatewayGroups($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$this->rows = $result->total;
print "
<table border=0 align=center>
<tr><td>$this->rows records found</td></tr>
</table>
<p>
<table border=0 cellpadding=2 width=100%>
";
print "
<tr bgcolor=lightgrey>
<td><b>Id</b></th>
";
if ($this->version > 1) print "<td><b>Customer</b></td>";
print"
<td><b>Name</b></th>";
if ($this->version > 1) print "<td><b>Change date</b></td>";
print "
<td><b>Actions</b></td>
</tr>
";
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows=$this->rows;
}
$i=0;
if ($this->rows) {
while ($i < $maxrows) {
if (!$result->groups[$i]) break;
$group = $result->groups[$i];
$index=$this->next+$i+1;
$rr=floor($index/2);
$mod=$index-$rr*2;
if ($mod ==0) {
$bgcolor="lightgrey";
} else {
$bgcolor="white";
}
if ($this->version > 1) {
$_url = $this->url.sprintf("&service=%s&action=Delete&name_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($group->name)
);
$_group_url = $this->url.sprintf("&service=pstn_gateways@%s&group_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($group->name)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['name_filter'] == $group->name) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($group->customer)
);
printf("
<tr bgcolor=%s>
<td>%s</td>
<td><a href=%s>%s.%s</a></td>
<td><a href=%s>%s</a></td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$_customer_url,
$group->customer,
$group->reseller,
$_group_url,
$group->name,
$group->changeDate,
$_url,
$actionText
);
printf("
</tr>
");
} else {
$_url = $this->url.sprintf("&service=%s&action=Delete&name_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($group)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['name_filter'] == $group) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
printf("
<tr bgcolor=%s>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$group,
$_url,
$actionText
);
printf("
</tr>
");
}
$i++;
}
}
print "</table>";
$this->showPagination($maxrows);
return true;
}
}
function showAddForm() {
if ($this->selectionActive) return;
print "
<p>
<table border=0 class=border width=100% bgcolor=lightblue>
<tr>
";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Add>
";
printf (" Name<input type=text size=20 name=name>");
$this->showCustomerTextBox();
print "
</td>
<td align=right>
";
print "
</td>
";
$this->printHiddenFormElements();
print "
</form>
</tr>
</table>
";
}
function addRecord($dictionary=array()) {
if ($this->version > 1) {
if ($dictionary['name']) {
$name=$dictionary['name'];
} else {
$name = trim($_REQUEST['name']);
}
list($customer,$reseller)=$this->customerFromLogin($dictionary);
$structure=array('name' => $name,
'customer' => intval($customer),
'reseller' => intval($reseller)
);
} else {
if ($dictionary['name']) {
$structure=$dictionary['name'];
} else {
$structure = trim($_REQUEST['name']);
}
$name = $structure;
}
if (!strlen($name)) {
printf ("<p><font color=red>Error: Missing name. </font>");
return false;
}
$function=array('commit' => array('name' => 'addGatewayGroup',
'parameters' => array($structure),
'logs' => array('success' => sprintf('Gateway group %s has been added',$name))),
'rollback' => array('name' => 'deleteGatewayGroup',
'parameters' => array($structure)
)
);
return $this->SoapEngine->execute($function,$this->html);
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
return true;
}
if ($dictionary['name']) {
$name = $dictionary['name'];
} else {
$name = trim($this->filters['name']);
}
if (!strlen($name)) {
print "<p><font color=red>Error: missing gateway group name </font>";
return false;
}
$function=array('commit' => array('name' => 'deleteGatewayGroup',
'parameters' => array($name),
'logs' => array('success' => sprintf('Gateway group %s has been deleted',$name))),
'rollback' => array('name' => 'addGatewayGroup',
'parameters' => array($this->filters['group'])
)
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function showSeachFormCustom() {
printf (" Name<input type=text size=15 name=name_filter value='%s'>",$this->filters['name']);
}
}
class Gateways extends Records {
var $gatewayGroups=array();
var $sortElements=array(
'name' => 'Name',
'group' => 'Group',
'ip' => 'IP address',
'prefix' => 'Prefix'
);
function Gateways(&$SoapEngine) {
$this->filters = array('name' => trim($_REQUEST['name_filter']),
'group' => trim($_REQUEST['group_filter'])
);
$this->Records(&$SoapEngine);
}
function listRecords() {
$this->showSeachForm();
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Filter
$filter=array('name' => $this->filters['name'],
'group' => $this->filters['group'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'name';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'ASC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Call function
$result = $this->SoapEngine->soapclient->getGateways($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$this->rows = $result->total;
print "
<table border=0 align=center>
<tr><td>$this->rows records found</td></tr>
</table>
<p>
<table border=0 cellpadding=2 width=100%>
";
print "
<tr bgcolor=lightgrey>
<td><b>Id</b></th>
";
if ($this->version > 1) {
print "
<td><b>Customer</b></td>
<td><b>Name</b></th>
<td><b>Group</b></td>
<td><b>Address</b></td>
<td><b>Strip</b></td>
<td><b>Prefix</b></td>
<td><b>Change date</b></td>
<td><b>Actions</b></td>
";
} else {
print "
<td><b>Name</b></th>
<td><b>Group</b></td>
<td><b>Address</b></td>
<td><b>Strip</b></td>
<td><b>Prefix</b></td>
<td><b>Actions</b></td>
";
}
print "
</tr>
";
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows=$this->rows;
}
$i=0;
if ($this->rows) {
while ($i < $maxrows) {
if (!$result->gateways[$i]) break;
$gateway = $result->gateways[$i];
$index=$this->next+$i+1;
$rr=floor($index/2);
$mod=$index-$rr*2;
if ($mod ==0) {
$bgcolor="lightgrey";
} else {
$bgcolor="white";
}
$_url = $this->url.sprintf("&service=%s&action=Delete&name_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($gateway->name)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['name_filter'] == $gateway->name) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
if ($this->version > 1) {
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($gateway->customer)
);
printf("
<tr bgcolor=%s>
<td>%s</td>
<td><a href=%s>%s.%s</a></td>
<td>%s</td>
<td>%s</td>
<td>%s:%s:%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$_customer_url,
$gateway->customer,
$gateway->reseller,
$gateway->name,
$gateway->group,
$gateway->transport,
$gateway->ip,
$gateway->port,
$gateway->strip,
$gateway->prefix,
$gateway->changeDate,
$_url,
$actionText
);
printf("
</tr>
");
} else {
printf("
<tr bgcolor=%s>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s:%s:%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$gateway->name,
$gateway->group,
$gateway->transport,
$gateway->ip,
$gateway->port,
$gateway->strip,
$gateway->prefix,
$_url,
$actionText
);
printf("
</tr>
");
}
$i++;
}
}
print "</table>";
$this->showPagination($maxrows);
return true;
}
}
function showAddForm() {
if ($this->selectionActive) return;
$this->getGatewayGroups();
if (!count($this->gatewayGroups)) {
print "<p>Create a gateway group first";
return false;
}
print "
<p>
<table border=0 class=border width=100% bgcolor=lightblue>
<tr>
";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Add>
";
printf (" Name<input type=text size=20 name=name>");
printf (" Group: ");
print "<select name=group> ";
foreach ($this->gatewayGroups as $_grp) {
printf ("<option value='%s'>%s",$_grp,$_grp);
}
printf (" </select>");
printf (" Address<input type=text size=25 name=address>");
printf (" Strip: <select name=strip>");
$t=0;
while ($t<10) {
print "<option value=$t>$t digits";
$t++;
}
print "</select>";
printf (" Add prefix<input type=text size=5 name=prefix>");
print "
</td>
<td align=right>
";
print "
</td>
";
$this->printHiddenFormElements();
print "
</form>
</tr>
</table>
";
}
function addRecord($dictionary=array()) {
if ($dictionary['name']) {
$name = $dictionary['name'];
} else {
$name = trim($_REQUEST['name']);
}
if ($dictionary['group']) {
$group = $dictionary['group'];
} else {
$group = trim($_REQUEST['group']);
}
if ($dictionary['address']) {
$address = $dictionary['address'];
} else {
$address = trim($_REQUEST['address']);
}
if ($dictionary['strip']) {
$strip = $dictionary['strip'];
} else {
$strip = trim($_REQUEST['strip']);
}
if ($dictionary['prefix']) {
$prefix = $dictionary['prefix'];
} else {
$prefix = trim($_REQUEST['prefix']);
}
if (!strlen($name) || !strlen($group) || !strlen($address)) {
printf ("<p><font color=red>Error: Missing gateway name, group or address</font>");
return false;
}
$address_els=explode(':',$address);
if (count($address_els) == 1) {
$ip=$address_els[0];
$transport='udp';
$port='5060';
} else if (count($address_els) == 2) {
$ip=$address_els[0];
$port=$address_els[1];
$transport='udp';
} else if (count($address_els) == 3) {
$ip=$address_els[1];
$port=intval($address_els[2]);
if ($address_els[0] == 'tcp' || $address_els[0] == 'tls' || $address_els[0] == 'udp') {
$transport=$address_els[0];
} else {
$transport='udp';
}
}
$gateway=array(
'name' => $name,
'group' => $group,
'ip' => $ip,
'port' => intval($port),
'uriScheme' => 'sip',
'transport' => $transport,
'strip' => intval($strip),
'prefix' => $prefix
);
$function=array('commit' => array('name' => 'addGateway',
'parameters' => array($gateway),
'logs' => array('success' => sprintf('Gateway grup %s has been added',$address))),
'rollback' => array('name' => 'deleteGateway',
'parameters' => array($name)
)
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
return true;
}
if ($dictionary['name']) {
$name = $dictionary['name'];
} else {
$name = trim($this->filters['name']);
}
if (!strlen($name)) {
print "<p><font color=red>Error: missing gateway name. </font>";
return false;
}
$function=array('commit' => array('name' => 'deleteGateway',
'parameters' => array($name),
'logs' => array('success' => sprintf('Gateway grup %s has been deleted',$name)))
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function showSeachFormCustom() {
printf (" Name<input type=text size=15 name=name_filter value='%s'>",$this->filters['name']);
printf (" Group<input type=text size=15 name=group_filter value='%s'>",$this->filters['group']);
}
}
class Routes extends Records {
var $gatewayGroups=array();
var $sortElements=array(
'prefix' => 'Prefix',
'priority' => 'Priority'
);
function Routes(&$SoapEngine) {
$this->filters = array('prefix' => trim($_REQUEST['prefix_filter']),
'priority' => trim($_REQUEST['priority_filter']),
'gatewayGroup' => trim($_REQUEST['gatewayGroup_filter'])
);
$this->Records(&$SoapEngine);
}
function listRecords() {
$this->getGatewayGroups();
// Get gateway groups
$this->showSeachForm();
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Filter
$filter=array('prefix' => $this->filters['prefix'],
'gatewayGroup' => $this->filters['gatewayGroup'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'prefix';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'ASC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Call function
$result = $this->SoapEngine->soapclient->getRoutes($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$this->rows = $result->total;
print "
<table border=0 align=center>
<tr><td>$this->rows records found</td></tr>
</table>
<p>
<table border=0 cellpadding=2 width=100%>
";
print "
<tr bgcolor=lightgrey>
<td><b>Id</b></th>
";
if ($this->version > 1) {
print "
<td><b>Customer</b></td>
<td><b>Prefix</b></th>
<td><b>Gateway Group</b></td>
<td><b>Priority</b></td>
<td><b>Change date</b></td>
<td><b>Actions</b></td>
";
} else {
print "
<td><b>Prefix</b></th>
<td><b>Gateway Group</b></td>
<td><b>Priority</b></td>
<td><b>Actions</b></td>
";
}
print "
</tr>
";
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows=$this->rows;
}
$i=0;
if ($this->rows) {
while ($i < $maxrows) {
if (!$result->routes[$i]) break;
$route = $result->routes[$i];
$index=$this->next+$i+1;
$rr=floor($index/2);
$mod=$index-$rr*2;
if ($mod ==0) {
$bgcolor="lightgrey";
} else {
$bgcolor="white";
}
$_url = $this->url.sprintf("&service=%s&action=Delete&prefix_filter=%s&gatewayGroup_filter=%s&priority_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($route->prefix),
urlencode($route->gatewayGroup),
urlencode($route->priority)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['prefix_filter'] == $route->prefix &&
$_REQUEST['gatewayGroup_filter'] == $route->gatewayGroup &&
$_REQUEST['priority_filter'] == $route->priority) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
if ($this->version > 1) {
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($route->customer)
);
$_group_url = $this->url.sprintf("&service=pstn_gateways@%s&group_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($route->gatewayGroup)
);
printf("
<tr bgcolor=%s>
<td>%s</td>
<td><a href=%s>%s.%s</a></td>
<td>%s</td>
<td><a href=%s>%s</a></td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$_customer_url,
$route->customer,
$route->reseller,
$route->prefix,
$_group_url,
$route->gatewayGroup,
$route->priority,
$route->changeDate,
$_url,
$actionText
);
printf("
</tr>
");
} else {
printf("
<tr bgcolor=%s>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td><a href=%s>%s</a></td>
</tr>",
$bgcolor,
$index,
$route->prefix,
$route->gatewayGroup,
$route->priority,
$_url,
$actionText
);
printf("
</tr>
");
}
$i++;
}
}
print "</table>";
$this->showPagination($maxrows);
return true;
}
}
function showAddForm() {
if ($this->selectionActive) return;
if (!count($this->gatewayGroups)) {
print "<p>Create a gateway group first";
return false;
}
print "
<p>
<table border=0 class=border width=100% bgcolor=lightblue>
<tr>
";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Add>
";
printf (" Prefix<input type=text size=20 name=prefix>");
printf (" Group: ");
print "<select name=gatewayGroup> ";
foreach ($this->gatewayGroups as $_grp) {
printf ("<option value='%s'>%s",$_grp,$_grp);
}
printf (" </select>");
printf (" Priority<input type=text size=5 name=priority>");
print "
</td>
<td align=right>
";
print "
</td>
";
$this->printHiddenFormElements();
print "
</form>
</tr>
</table>
";
}
function addRecord($dictionary=array()) {
if ($dictionary['prefix']) {
$prefix = $dictionary['prefix'];
} else {
$prefix = trim($_REQUEST['prefix']);
}
if ($dictionary['gatewayGroup']) {
$gatewayGroup = $dictionary['gatewayGroup'];
} else {
$gatewayGroup = trim($_REQUEST['gatewayGroup']);
}
if ($dictionary['priority']) {
$priority = $dictionary['priority'];
} else {
$priority = trim($_REQUEST['priority']);
}
if (!strlen($prefix) || !strlen($gatewayGroup)) {
printf ("<p><font color=red>Error: Missing prefix or gatewayGroup. </font>");
return false;
}
$route=array(
'prefix' => $prefix,
'gatewayGroup' => $gatewayGroup,
'priority' => intval($priority)
);
$routes=array($route);
$function=array('commit' => array('name' => 'addRoutes',
'parameters' => array($routes),
'logs' => array('success' => sprintf('Route %s has been added',$prefix))),
'rollback' => array('name' => 'deleteRoutes',
'parameters' => array($routes)
)
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Confirm to confirm the delete. </font>";
return true;
}
if ($dictionary['prefix']) {
$prefix = $dictionary['prefix'];
} else {
$prefix = trim($this->filters['prefix']);
}
if ($dictionary['gatewayGroup']) {
$gatewayGroup = $dictionary['gatewayGroup'];
} else {
$gatewayGroup = trim($this->filters['gatewayGroup']);
}
if ($dictionary['priority']) {
$priority = $dictionary['priority'];
} else {
$priority = trim($this->filters['priority']);
}
if (!strlen($prefix) || !strlen($gatewayGroup)) {
print "<p><font color=red>Error: missing route prefix or gatewayGroup. </font>";
return false;
}
$route=array(
'prefix' => $prefix,
'gatewayGroup' => $gatewayGroup,
'priority' => intval($priority)
);
$routes=array($route);
$function=array('commit' => array('name' => 'deleteRoutes',
'parameters' => array($routes),
'logs' => array('success' => sprintf('Route %s has been deleted',$prefix)))
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function showSeachFormCustom() {
printf (" Prefix<input type=text size=15 name=prefix_filter value='%s'>",$this->filters['prefix']);
print "<select name=gatewayGroup_filter>
<option>";
$selected_gatewayGroups[$this->filters['gatewayGroup']]='selected';
foreach ($this->gatewayGroups as $_grp) {
printf ("<option value='%s' %s>%s",$_grp,$selected_gatewayGroups[$_grp],$_grp);
}
printf (" </select>");
}
}
class Customers extends Records {
var $children = array();
var $showAddForm = false;
var $sortElements = array(
'changeDate' => 'Change date',
'username' => 'Username',
'firstName' => 'First name',
'lastName' => 'Last name',
'organization' => 'Organization',
'customer' => 'Customer'
);
var $propertiesItems = array('sip_credit' => array('name' => 'Credit for SIP accounts',
'category' => 'credit',
'permission' => 'admin',
'resellerMayManageForChildAccounts' => true
),
'sip_alias_credit' => array('name' => 'Credit for SIP aliases',
'category' => 'credit',
'permission' => 'admin',
'resellerMayManageForChildAccounts' => true
),
'enum_range_credit' => array('name' => 'Credit for ENUM ranges',
'category' => 'credit',
'permission' => 'admin',
'resellerMayManageForChildAccounts' => true
),
'enum_number_credit' => array('name' => 'Credit for ENUM numbers',
'category' => 'credit',
'permission' => 'admin',
'resellerMayManageForChildAccounts' => true
),
'dns_zone_credit' => array('name' => 'Credit for DNS zones',
'category' => 'credit',
'permission' => 'admin',
'resellerMayManageForChildAccounts' => true
),
'pstn_access' => array('name' => 'Access to PSTN',
'category' => 'sip',
'permission' => 'admin',
'resellerMayManageForChildAccounts' => true
),
'voicemail_server' => array('name' => 'Voicemail server address',
'category' => 'sip',
'permission' => 'customer'
),
'voicemail_access_number' => array('name' => 'Voicemail access number',
'category' => 'sip',
'permission' => 'customer'
),
'FUNC_access_number' => array('name' => 'Call forwarding access number',
'category' => 'sip',
'permission' => 'customer'
),
'sip_proxy' => array('name' => 'SIP Proxy server address',
'category' => 'sip',
'permission' => 'customer'
),
'xcap_root' => array('name' => 'XCAP Root URL',
'category' => 'sip',
'permission' => 'customer'
),
'absolute_voicemail_uri'=> array('name' => 'Use absolute voicemail uri',
'category' => 'sip',
'permission' => 'admin'
),
'support_web' => array('name' => 'Support web site',
'category' => 'sip',
'permission' => 'customer'
),
'support_email' => array('name' => 'Support email address',
'category' => 'sip',
'permission' => 'customer'
),
'support_company' => array('name' => 'Support organization',
'category' => 'sip',
'permission' => 'customer'
),
'cdrtool_address' => array('name' => 'CDRTool address',
'category' => 'sip',
'permission' => 'customer'
),
'sip_settings_page' => array('name' => 'SIP settings page',
'category' => 'sip',
'permission' => 'customer'
),
'records_per_page' => array('name' => 'Records per page',
'category' => 'web',
'permission' => 'customer'
)
);
var $FieldsReadOnly=array(
'id' => array('type'=>'integer'),
'reseller' => array('type'=>'integer')
);
var $Fields=array(
- 'resellerActive' => array ('type' => 'boolean',
+ 'resellerActive' => array ('type' => 'boolean',
'name' => 'Reseller active',
'adminonly' => true
),
'impersonate' => array('type' =>'integer',
'name' =>'Impersonate'),
'companyCode' => array('type' =>'text',
'name' =>'Company code',
'adminonly' => true
),
'balance' => array('type' => 'float',
'adminonly' => true
),
'credit' => array('type' => 'float',
'adminonly' => true
),
'username' => array('type' =>'text'
),
'password' => array('type'=>'text',
'name'=>'Password'),
'firstName' => array('type'=>'text',
'name'=>'First name'),
'lastName' => array('type'=>'text',
'name'=>'Last name'),
'organization'=> array('type'=>'text'),
'tel' => array('type'=>'text'),
'fax' => array('type'=>'text'),
'sip' => array('type'=>'text'),
'enum' => array('type'=>'text'),
'mobile' => array('type'=>'text'),
'email' => array('type'=>'text'),
'web' => array('type'=>'text'),
'address' => array('type'=>'textarea'),
'postcode' => array('type'=>'text'),
'city' => array('type'=>'text'),
'state' => array('type'=>'text'),
'country' => array('type'=>'text'),
'timezone' => array('type'=>'text'),
'language' => array('type'=>'text'),
'vatNumber' => array('type'=>'text',
'name'=>'VAT number'),
'bankAccount' => array('type'=>'text',
'name'=>'Bank account'
),
'billingEmail' => array('type'=>'text',
'name'=>'Billing email'
),
'billingAddress' => array('type'=>'textarea',
'name'=>'Billing address'
)
);
var $addFields=array(
'username' => array('type' =>'text'
),
'password' => array('type'=>'text',
'name'=>'Password'),
'firstName' => array('type'=>'text',
'name'=>'First name'),
'lastName' => array('type'=>'text',
'name'=>'Last name'),
'organization'=> array('type'=>'text'),
'tel' => array('type'=>'text'),
'email' => array('type'=>'text'),
'address' => array('type'=>'textarea'),
'postcode' => array('type'=>'text'),
'city' => array('type'=>'text'),
'state' => array('type'=>'text'),
'country' => array('type'=>'text'),
'timezone' => array('type'=>'text'),
);
var $states=array(
array("label"=>"", "value"=>"N/A"),
array("label"=>"-- CANADA --", "value"=>"-"),
array("label"=>"Alberta", "value"=>"AB"),
array("label"=>"British Columbia", "value"=>"BC"),
array("label"=>"Manitoba", "value"=>"MB"),
array("label"=>"New Brunswick", "value"=>"NB"),
array("label"=>"Newfoundland/Labrador", "value"=>"NL"),
array("label"=>"Northwest Territory", "value"=>"NT"),
array("label"=>"Nova Scotia", "value"=>"NS"),
array("label"=>"Nunavut", "value"=>"NU"),
array("label"=>"Ontario", "value"=>"ON"),
array("label"=>"Prince Edward Island", "value"=>"PE"),
array("label"=>"Quebec", "value"=>"QC"),
array("label"=>"Saskatchewan", "value"=>"SN"),
array("label"=>"Yukon", "value"=>"YT"),
array("label"=>"---- US -----", "value"=>"-"),
array("label"=>"Alabama", "value"=>"AL"),
array("label"=>"Alaska", "value"=>"AK"),
array("label"=>"American Samoa", "value"=>"AS"),
array("label"=>"Arizona", "value"=>"AZ"),
array("label"=>"Arkansas", "value"=>"AR"),
array("label"=>"California", "value"=>"CA"),
array("label"=>"Canal Zone", "value"=>"CZ"),
array("label"=>"Colorado", "value"=>"CO"),
array("label"=>"Connecticut", "value"=>"CT"),
array("label"=>"Delaware", "value"=>"DE"),
array("label"=>"District of Columbia", "value"=>"DC"),
array("label"=>"Florida", "value"=>"FL"),
array("label"=>"Georgia", "value"=>"GA"),
array("label"=>"Guam", "value"=>"GU"),
array("label"=>"Hawaii", "value"=>"HI"),
array("label"=>"Idaho", "value"=>"ID"),
array("label"=>"Illinois", "value"=>"IL"),
array("label"=>"Indiana", "value"=>"IN"),
array("label"=>"Iowa", "value"=>"IA"),
array("label"=>"Kansas", "value"=>"KS"),
array("label"=>"Kentucky", "value"=>"KY"),
array("label"=>"Louisiana", "value"=>"LA"),
array("label"=>"Maine", "value"=>"ME"),
array("label"=>"Mariana Islands", "value"=>"MP"),
array("label"=>"Maryland", "value"=>"MD"),
array("label"=>"Massachusetts", "value"=>"MA"),
array("label"=>"Michigan", "value"=>"MI"),
array("label"=>"Minnesota", "value"=>"MN"),
array("label"=>"Mississippi", "value"=>"MS"),
array("label"=>"Missouri", "value"=>"MO"),
array("label"=>"Montana", "value"=>"MT"),
array("label"=>"Nebraska", "value"=>"NE"),
array("label"=>"Nevada", "value"=>"NV"),
array("label"=>"New Hampshire", "value"=>"NH"),
array("label"=>"New Jersey", "value"=>"NJ"),
array("label"=>"New Mexico", "value"=>"NM"),
array("label"=>"New York", "value"=>"NY"),
array("label"=>"North Carolina", "value"=>"NC"),
array("label"=>"North Dakota", "value"=>"ND"),
array("label"=>"Ohio", "value"=>"OH"),
array("label"=>"Oklahoma", "value"=>"OK"),
array("label"=>"Oregon", "value"=>"OR"),
array("label"=>"Pennsylvania", "value"=>"PA"),
array("label"=>"Puerto Rico", "value"=>"PR"),
array("label"=>"Rhode Island", "value"=>"RI"),
array("label"=>"South Carolina", "value"=>"SC"),
array("label"=>"South Dakota", "value"=>"SD"),
array("label"=>"Tennessee", "value"=>"TN"),
array("label"=>"Texas", "value"=>"TX"),
array("label"=>"Utah", "value"=>"UT"),
array("label"=>"Vermont", "value"=>"VT"),
array("label"=>"Virgin Islands", "value"=>"VI"),
array("label"=>"Virginia", "value"=>"VA"),
array("label"=>"Washington", "value"=>"WA"),
array("label"=>"West Virginia", "value"=>"WV"),
array("label"=>"Wisconsin", "value"=>"WI"),
array("label"=>"Wyoming", "value"=>"WY"),
array("label"=>"APO", "value"=>"AP"),
array("label"=>"AEO", "value"=>"AE"),
array("label"=>"AAO", "value"=>"AA"),
array("label"=>"FPO", "value"=>"FP")
);
var $countries=array(
array("label"=>"Ascension Island", "value"=>"AC"),
array("label"=>"Afghanistan", "value"=>"AF"),
array("label"=>"Albania", "value"=>"AL"),
array("label"=>"Algeria", "value"=>"DZ"),
array("label"=>"American Samoa", "value"=>"AS"),
array("label"=>"Andorra", "value"=>"AD"),
array("label"=>"Angola", "value"=>"AO"),
array("label"=>"Anguilla", "value"=>"AI"),
array("label"=>"Antarctica", "value"=>"AQ"),
array("label"=>"Antigua And Barbuda", "value"=>"AG"),
array("label"=>"Argentina", "value"=>"AR"),
array("label"=>"Armenia", "value"=>"AM"),
array("label"=>"Aruba", "value"=>"AW"),
array("label"=>"Australia", "value"=>"AU"),
array("label"=>"Austria", "value"=>"AT"),
array("label"=>"Azerbaijan", "value"=>"AZ"),
array("label"=>"Bahamas", "value"=>"BS"),
array("label"=>"Bahrain", "value"=>"BH"),
array("label"=>"Bangladesh", "value"=>"BD"),
array("label"=>"Barbados", "value"=>"BB"),
array("label"=>"Belarus", "value"=>"BY"),
array("label"=>"Belgium", "value"=>"BE"),
array("label"=>"Belize", "value"=>"BZ"),
array("label"=>"Benin", "value"=>"BJ"),
array("label"=>"Bermuda", "value"=>"BM"),
array("label"=>"Bhutan", "value"=>"BT"),
array("label"=>"Bolivia", "value"=>"BO"),
array("label"=>"Bosnia And Herzegowina","value"=>"BA"),
array("label"=>"Botswana", "value"=>"BW"),
array("label"=>"Bouvet Island", "value"=>"BV"),
array("label"=>"Brazil", "value"=>"BR"),
array("label"=>"British Indian Ocean Territory", "value"=>"IO"),
array("label"=>"Brunei Darussalam", "value"=>"BN"),
array("label"=>"Bulgaria", "value"=>"BG"),
array("label"=>"Burkina Faso", "value"=>"BF"),
array("label"=>"Burundi", "value"=>"BI"),
array("label"=>"Cambodia", "value"=>"KH"),
array("label"=>"Cameroon", "value"=>"CM"),
array("label"=>"Canada", "value"=>"CA"),
array("label"=>"Cape Verde", "value"=>"CV"),
array("label"=>"Cayman Islands", "value"=>"KY"),
array("label"=>"Central African Republic", "value"=>"CF"),
array("label"=>"Chad", "value"=>"TD"),
array("label"=>"Chile", "value"=>"CL"),
array("label"=>"China", "value"=>"CN"),
array("label"=>"Christmas Island", "value"=>"CX"),
array("label"=>"Cocos (Keeling) Islands", "value"=>"CC"),
array("label"=>"Colombia", "value"=>"CO"),
array("label"=>"Comoros", "value"=>"KM"),
array("label"=>"Congo", "value"=>"CG"),
array("label"=>"Congo, Democratic People's Republic", "value"=>"CD"),
array("label"=>"Cook Islands", "value"=>"CK"),
array("label"=>"Costa Rica", "value"=>"CR"),
array("label"=>"Cote d'Ivoire", "value"=>"CI"),
array("label"=>"Croatia (local name: Hrvatska)", "value"=>"HR"),
array("label"=>"Cuba", "value"=>"CU"),
array("label"=>"Cyprus", "value"=>"CY"),
array("label"=>"Czech Republic","value"=>"CZ"),
array("label"=>"Denmark", "value"=>"DK"),
array("label"=>"Djibouti", "value"=>"DJ"),
array("label"=>"Dominica", "value"=>"DM"),
array("label"=>"Dominican Republic", "value"=>"DO"),
array("label"=>"East Timor", "value"=>"TP"),
array("label"=>"Ecuador", "value"=>"EC"),
array("label"=>"Egypt", "value"=>"EG"),
array("label"=>"El Salvador", "value"=>"SV"),
array("label"=>"Equatorial Guinea", "value"=>"GQ"),
array("label"=>"Eritrea", "value"=>"ER"),
array("label"=>"Estonia", "value"=>"EE"),
array("label"=>"Ethiopia", "value"=>"ET"),
array("label"=>"Falkland Islands (Malvinas)", "value"=>"FK"),
array("label"=>"Faroe Islands", "value"=>"FO"),
array("label"=>"Fiji", "value"=>"FJ"),
array("label"=>"Finland", "value"=>"FI"),
array("label"=>"France", "value"=>"FR"),
array("label"=>"French Guiana", "value"=>"GF"),
array("label"=>"French Polynesia", "value"=>"PF"),
array("label"=>"French Southern Territories", "value"=>"TF"),
array("label"=>"Gabon", "value"=>"GA"),
array("label"=>"Gambia", "value"=>"GM"),
array("label"=>"Georgia", "value"=>"GE"),
array("label"=>"Germany", "value"=>"DE"),
array("label"=>"Ghana", "value"=>"GH"),
array("label"=>"Gibraltar", "value"=>"GI"),
array("label"=>"Greece", "value"=>"GR"),
array("label"=>"Greenland", "value"=>"GL"),
array("label"=>"Grenada", "value"=>"GD"),
array("label"=>"Guadeloupe", "value"=>"GP"),
array("label"=>"Guam", "value"=>"GU"),
array("label"=>"Guatemala", "value"=>"GT"),
array("label"=>"Guernsey", "value"=>"GG"),
array("label"=>"Guinea", "value"=>"GN"),
array("label"=>"Guinea-Bissau", "value"=>"GW"),
array("label"=>"Guyana", "value"=>"GY"),
array("label"=>"Haiti", "value"=>"HT"),
array("label"=>"Heard And Mc Donald Islands", "value"=>"HM"),
array("label"=>"Honduras", "value"=>"HN"),
array("label"=>"Hong Kong", "value"=>"HK"),
array("label"=>"Hungary", "value"=>"HU"),
array("label"=>"Iceland", "value"=>"IS"),
array("label"=>"India", "value"=>"IN"),
array("label"=>"Indonesia", "value"=>"ID"),
array("label"=>"Iran (Islamic Republic Of)", "value"=>"IR"),
array("label"=>"Iraq", "value"=>"IQ"),
array("label"=>"Ireland", "value"=>"IE"),
array("label"=>"Isle of Man", "value"=>"IM"),
array("label"=>"Israel", "value"=>"IL"),
array("label"=>"Italy", "value"=>"IT"),
array("label"=>"Jamaica", "value"=>"JM"),
array("label"=>"Japan", "value"=>"JP"),
array("label"=>"Jersey", "value"=>"JE"),
array("label"=>"Jordan", "value"=>"JO"),
array("label"=>"Kazakhstan", "value"=>"KZ"),
array("label"=>"Kenya", "value"=>"KE"),
array("label"=>"Kiribati", "value"=>"KI"),
array("label"=>"Korea, Democratic People's Republic Of", "value"=>"KP"),
array("label"=>"Korea, Republic Of", "value"=>"KR"),
array("label"=>"Kuwait", "value"=>"KW"),
array("label"=>"Kyrgyzstan", "value"=>"KG"),
array("label"=>"Lao People's Democratic Republic", "value"=>"LA"),
array("label"=>"Latvia", "value"=>"LV"),
array("label"=>"Lebanon", "value"=>"LB"),
array("label"=>"Lesotho", "value"=>"LS"),
array("label"=>"Liberia", "value"=>"LR"),
array("label"=>"Libyan Arab Jamahiriya", "value"=>"LY"),
array("label"=>"Liechtenstein", "value"=>"LI"),
array("label"=>"Lithuania", "value"=>"LT"),
array("label"=>"Luxembourg", "value"=>"LU"),
array("label"=>"Macau", "value"=>"MO"),
array("label"=>"Macedonia, The Former Yugoslav", "value"=>"MK"),
array("label"=>"Of", "value"=>"Republic"),
array("label"=>"Madagascar", "value"=>"MG"),
array("label"=>"Malawi", "value"=>"MW"),
array("label"=>"Malaysia", "value"=>"MY"),
array("label"=>"Maldives", "value"=>"MV"),
array("label"=>"Mali", "value"=>"ML"),
array("label"=>"Malta", "value"=>"MT"),
array("label"=>"Marshall Islands", "value"=>"MH"),
array("label"=>"Martinique", "value"=>"MQ"),
array("label"=>"Mauritania", "value"=>"MR"),
array("label"=>"Mauritius", "value"=>"MU"),
array("label"=>"Mayotte", "value"=>"YT"),
array("label"=>"Mexico", "value"=>"MX"),
array("label"=>"Micronesia, Federated States Of", "value"=>"FM"),
array("label"=>"Moldova, Republic Of", "value"=>"MD"),
array("label"=>"Monaco", "value"=>"MC"),
array("label"=>"Mongolia", "value"=>"MN"),
array("label"=>"Montserrat", "value"=>"MS"),
array("label"=>"Morocco", "value"=>"MA"),
array("label"=>"Mozambique", "value"=>"MZ"),
array("label"=>"Myanmar", "value"=>"MM"),
array("label"=>"Namibia", "value"=>"NA"),
array("label"=>"Nauru", "value"=>"NR"),
array("label"=>"Nepal", "value"=>"NP"),
array("label"=>"Netherlands", "value"=>"NL"),
array("label"=>"Netherlands Antilles", "value"=>"AN"),
array("label"=>"New Caledonia", "value"=>"NC"),
array("label"=>"New Zealand", "value"=>"NZ"),
array("label"=>"Nicaragua", "value"=>"NI"),
array("label"=>"Niger", "value"=>"NE"),
array("label"=>"Nigeria", "value"=>"NG"),
array("label"=>"Niue", "value"=>"NU"),
array("label"=>"Norfolk Island", "value"=>"NF"),
array("label"=>"Northern Mariana Islands", "value"=>"MP"),
array("label"=>"Norway", "value"=>"NO"),
array("label"=>"Oman", "value"=>"OM"),
array("label"=>"Pakistan", "value"=>"PK"),
array("label"=>"Palau", "value"=>"PW"),
array("label"=>"Palestinian Territories", "value"=>"PS"),
array("label"=>"Panama", "value"=>"PA"),
array("label"=>"Papua New Guinea", "value"=>"PG"),
array("label"=>"Paraguay", "value"=>"PY"),
array("label"=>"Peru", "value"=>"PE"),
array("label"=>"Philippines", "value"=>"PH"),
array("label"=>"Pitcairn", "value"=>"PN"),
array("label"=>"Poland", "value"=>"PL"),
array("label"=>"Portugal", "value"=>"PT"),
array("label"=>"Puerto Rico", "value"=>"PR"),
array("label"=>"Qatar", "value"=>"QA"),
array("label"=>"Reunion", "value"=>"RE"),
array("label"=>"Romania", "value"=>"RO"),
array("label"=>"Russian Federation", "value"=>"RU"),
array("label"=>"Rwanda", "value"=>"RW"),
array("label"=>"Saint Kitts And Nevis", "value"=>"KN"),
array("label"=>"Saint Lucia", "value"=>"LC"),
array("label"=>"Saint Vincent And The Grenadines", "value"=>"VC"),
array("label"=>"Samoa", "value"=>"WS"),
array("label"=>"San Marino", "value"=>"SM"),
array("label"=>"Sao Tome And Principe", "value"=>"ST"),
array("label"=>"Saudi Arabia", "value"=>"SA"),
array("label"=>"Senegal", "value"=>"SN"),
array("label"=>"Seychelles", "value"=>"SC"),
array("label"=>"Sierra Leone", "value"=>"SL"),
array("label"=>"Singapore", "value"=>"SG"),
array("label"=>"Slovakia (Slovak Republic)", "value"=>"SK"),
array("label"=>"Slovenia", "value"=>"SI"),
array("label"=>"Solomon Islands", "value"=>"SB"),
array("label"=>"Somalia", "value"=>"SO"),
array("label"=>"South Africa", "value"=>"ZA"),
array("label"=>"South Georgia And South Sandwich", "value"=>"GS"),
array("label"=>"Spain", "value"=>"ES"),
array("label"=>"Sri Lanka", "value"=>"LK"),
array("label"=>"St. Helena", "value"=>"SH"),
array("label"=>"St. Pierre And Miquelon", "value"=>"PM"),
array("label"=>"Sudan", "value"=>"SD"),
array("label"=>"Suriname", "value"=>"SR"),
array("label"=>"Svalbard And Jan Mayen Islands", "value"=>"SJ"),
array("label"=>"Swaziland", "value"=>"SZ"),
array("label"=>"Sweden", "value"=>"SE"),
array("label"=>"Switzerland", "value"=>"CH"),
array("label"=>"Syrian Arab Republic", "value"=>"SY"),
array("label"=>"Taiwan, Province Of China", "value"=>"TW"),
array("label"=>"Tajikistan", "value"=>"TJ"),
array("label"=>"Tanzania, United Republic Of", "value"=>"TZ"),
array("label"=>"Thailand", "value"=>"TH"),
array("label"=>"Togo", "value"=>"TG"),
array("label"=>"Tokelau", "value"=>"TK"),
array("label"=>"Tonga", "value"=>"TO"),
array("label"=>"Trinidad And Tobago", "value"=>"TT"),
array("label"=>"Tunisia", "value"=>"TN"),
array("label"=>"Turkey", "value"=>"TR"),
array("label"=>"Turkmenistan", "value"=>"TM"),
array("label"=>"Turks And Caicos Islands", "value"=>"TC"),
array("label"=>"Tuvalu", "value"=>"TV"),
array("label"=>"Uganda", "value"=>"UG"),
array("label"=>"Ukraine", "value"=>"UA"),
array("label"=>"United Arab Emirates", "value"=>"AE"),
array("label"=>"United Kingdom", "value"=>"UK"),
array("label"=>"United States", "value"=>"US"),
array("label"=>"United States Minor Outlying Islands", "value"=>"UM"),
array("label"=>"Uruguay", "value"=>"UY"),
array("label"=>"Uzbekistan", "value"=>"UZ"),
array("label"=>"Vanuatu", "value"=>"VU"),
array("label"=>"Vatican City State (Holy See)", "value"=>"VA"),
array("label"=>"Venezuela", "value"=>"VE"),
array("label"=>"Viet Nam", "value"=>"VN"),
array("label"=>"Virgin Islands (British)", "value"=>"VG"),
array("label"=>"Virgin Islands (U.S.)", "value"=>"VI"),
array("label"=>"Wallis And Futuna Islands", "value"=>"WF"),
array("label"=>"Western Sahara", "value"=>"EH"),
array("label"=>"Yemen", "value"=>"YE"),
array("label"=>"Yugoslavia", "value"=>"YU"),
array("label"=>"Zaire", "value"=>"ZR"),
array("label"=>"Zambia", "value"=>"ZM"),
array("label"=>"Zimbabwe", "value"=>"ZW"),
array("label"=>"Undefined", "value"=>"N/A")
);
function Customers(&$SoapEngine) {
dprint("init Customers");
$this->filters = array(
'username' => trim($_REQUEST['username_filter']),
'firstName' => trim($_REQUEST['firstName_filter']),
'lastName' => trim($_REQUEST['lastName_filter']),
'organization' => trim($_REQUEST['organization_filter']),
'tel' => trim($_REQUEST['tel_filter']),
'email' => trim($_REQUEST['email_filter']),
'web' => trim($_REQUEST['web_filter']),
'country' => trim($_REQUEST['country_filter']),
'city' => trim($_REQUEST['city_filter']),
'only_resellers' => trim($_REQUEST['only_resellers_filter'])
);
$this->Records(&$SoapEngine);
$this->showAddForm = $_REQUEST['showAddForm'];
$this->customer_properties = &$this->SoapEngine->customer_properties;
$this->allProperties=array_merge($this->propertiesItems,$this->customer_properties);
if ($_REQUEST['action'] == 'Add' || $_REQUEST['action'] == 'Copy' ||
$_REQUEST['action'] == 'Delete' || $_REQUEST['action'] == 'Update') {
if ($this->reseller) {
$customer_engine_remote=$this->SoapEngine->login_credentials['reseller_filters'][$this->reseller]['customer_engine_remote'];
if (strlen($customer_engine_remote) && $this->SoapEngine->soapEngine != $customer_engine_remote) {
// replicate change
if (in_array($customer_engine_remote,array_keys($this->SoapEngine->soapEngines))) {
$this->SOAPloginCustomerRemote = array(
"username" => $this->SoapEngine->soapEngines[$customer_engine_remote]['username'],
"password" => $this->SoapEngine->soapEngines[$customer_engine_remote]['password'],
"admin" => true,
"impersonate" => intval($this->reseller)
);
//dprint_r($this->SOAPloginCustomerRemote);
$this->SOAPurlCustomerRemote=$this->SoapEngine->soapEngines[$customer_engine_remote]['url'];
$log=sprintf ("and syncronize changes to <a href=%swsdl target=wsdl>%s</a>",$this->SOAPurlCustomerRemote,$this->SOAPurlCustomerRemote);
dprint($log);
$this->SoapAuthCustomerRemote = array('auth', $this->SOAPloginCustomerRemote , 'urn:AGProjects:NGNPro', 0, '');
$this->SoapEngineCustomerRemote = new $this->SoapEngine->soap_class($this->SOAPurlCustomerRemote);
if (strlen($this->soapEngines[$customer_engine_remote]['timeout'])) {
$this->SoapEngineCustomerRemote->_options['timeout'] = intval($this->soapEngines[$customer_engine_remote]['timeout']);
} else {
$this->SoapEngineCustomerRemote->_options['timeout'] = $this->soapTimeout;
}
$this->SoapEngineCustomerRemote->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->SoapEngineCustomerRemote->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
}
}
}
}
}
function showSeachForm() {
printf ("<p><b>%s</b>",
$this->SoapEngine->ports[$this->SoapEngine->port]['description'],
'%'
);
print "
<p>
<table border=0 class=border width=100% bgcolor=lightgreen>
<tr>
";
printf ("<form method=post name=engines action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit name=action value=Search>
";
$this->showEngineSelection();
$this->showSeachFormCustom();
print "
</td>
<td align=right>
";
$this->showSortForm();
$this->printHiddenFormElements('skipServiceElement');
print "
</td>
</form>
</tr>
</table>
";
}
function listRecords() {
// Filter
$filter=array('username' => $this->filters['username'],
'firstName' => $this->filters['firstName'],
'lastName' => $this->filters['lastName'],
'organization' => $this->filters['organization'],
'tel' => $this->filters['tel'],
'email' => $this->filters['email'],
'web' => $this->filters['web'],
'city' => $this->filters['city'],
'country' => $this->filters['country'],
'only_resellers' => $this->filters['only_resellers'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
//print_r($filter);
// Range
$range=array('start' => intval($this->next),
'count' => intval($this->maxrowsperpage)
);
// Order
if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate';
if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC';
$orderBy = array('attribute' => $this->sorting['sortBy'],
'direction' => $this->sorting['sortOrder']
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->showSeachForm();
if ($this->showAddForm) {
$this->showAddForm();
return true;
}
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
if ($this->adminonly && $this->filters['only_resellers']) {
$result = $this->SoapEngine->soapclient->getResellers($Query);
} else {
$result = $this->SoapEngine->soapclient->getCustomers($Query);
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$this->rows = $result->total;
if ($this->rows == 1 ) {
$customer = $result->accounts[0];
$this->showRecord($customer);
return true;
}
if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') {
$this->showActionsForm();
}
print "
<table border=0 align=center width=100%>
<tr><td align=left width=33%>";
$_add_url = $this->url.sprintf("&service=%s&showAddForm=1",
urlencode($this->SoapEngine->service)
);
printf ("<a href=%s>New login account</a> ",$_add_url);
if ($this->adminonly) {
if ($this->adminonly && $this->filters['reseller']) {
$_add_url = $this->url.sprintf("&service=%s&showAddForm=1&reseller_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($this->filters['reseller'])
);
printf (" | <a href=%s>New login account under reseller %s</a> ",$_add_url,$this->filters['reseller']);
}
}
print "
<td align=center width=33%>$this->rows records found</td>
<td>
</td></tr>
</table>
<p>
<table border=0 cellpadding=2 width=100%>
<tr bgcolor=lightgrey>
<td><b>Id</b></th>
<td><b>Customer</b></td>
<td><b>Username</b></td>
<td><b>Name</b></td>
<td><b>Organization</b></td>
<td><b>Country</b></td>
<td><b>E-mail</b></td>
<td><b>Phone number</b></td>
<td><b>Change date</b></td>
<td><b>Actions</b></td>
</tr>
";
if (!$this->next) $this->next=0;
if ($this->rows > $this->maxrowsperpage) {
$maxrows = $this->maxrowsperpage + $this->next;
if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage;
} else {
$maxrows=$this->rows;
}
$i=0;
if ($this->rows) {
while ($i < $maxrows) {
if (!$result->accounts[$i]) break;
$customer = $result->accounts[$i];
$index = $this->next+$i+1;
$rr=floor($index/2);
$mod=$index-$rr*2;
if ($mod ==0) {
$bgcolor="lightgrey";
} else {
$bgcolor="white";
}
$_url = $this->url.sprintf("&service=%s&action=Delete&reseller_filter=%s&customer_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($customer->reseller),
urlencode($customer->id)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['customer_filter'] == $customer->id) {
$_url .= "&confirm=1";
$actionText = "<font color=red>Confirm</font>";
} else {
$actionText = "Delete";
}
$_customer_url = $this->url.sprintf("&service=%s&reseller_filter=%s&customer_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($customer->reseller),
urlencode($customer->id)
);
printf("
<tr bgcolor=%s>
<td>%s</td>
<td><a href=%s>%s.%s</a></td>
<td>%s</td>
<td>%s %s</td>
<td>%s</td>
<td>%s</td>
<td><a href=mailto:%s>%s</a></td>
<td>%s</td>
<td>%s</td>
<td>",
$bgcolor,
$index,
$_customer_url,
$customer->id,
$customer->reseller,
$customer->username,
$customer->firstName,
$customer->lastName,
$customer->organization,
$customer->country,
$customer->email,
$customer->email,
$customer->tel,
$customer->changeDate
);
$this->showExtraActions($customer);
print "</td>
</tr>
";
$i++;
}
}
print "</table>";
$this->showPagination($maxrows);
return true;
}
}
function showSeachFormCustom() {
printf (" User<input type=text size=10 name=username_filter value='%s'>",$this->filters['username']);
printf (" Name<input type=text size=7 name=firstName_filter value='%s'>",$this->filters['firstName']);
printf ("<input type=text size=7 name=lastName_filter value='%s'>",$this->filters['lastName']);
printf (" Organization<input type=text size=10 name=organization_filter value='%s'>",$this->filters['organization']);
printf (" Email<input type=text size=10 name=email_filter value='%s'>",$this->filters['email']);
if ($this->adminonly) {
if ($this->filters['only_resellers']) $check_only_resellers_filter='checked';
printf (" Res<input type=checkbox name=only_resellers_filter value=1 %s>",$check_only_resellers_filter);
}
}
function deleteRecord($confirm) {
if (!$confirm && !$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Delete again to confirm the delete. </font>";
return true;
}
if (!strlen($this->filters['customer'])) {
print "<p><font color=red>Error: missing customer id. </font>";
return false;
}
$function=array('commit' => array('name' => 'deleteAccount',
'parameters' => array(intval($this->filters['customer'])),
'logs' => array('success' => sprintf('Customer id %s has been deleted',$this->filters['customer'])))
);
if ($this->SoapEngine->execute($function,$this->html)) {
if (is_object($this->SoapEngineCustomerRemote)) {
$this->SoapEngineCustomerRemote->addHeader($this->SoapAuthCustomerRemote);
$result = $this->SoapEngineCustomerRemote->deleteAccount(intval($this->filters['customer']));
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode != 5000) {
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SOAPurlCustomerRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
}
} else {
return false;
}
$this->filters=array();
return true;
}
function getRecord($id) {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount(intval($id));
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
return $result;
}
}
function showRecordHeader($customer) {
}
function showRecordFooter($customer) {
}
function showExtraActions($customer) {
}
function showRecord($customer) {
$this->showRecordHeader($customer);
print "<table border=0 cellpadding=10>";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<tr>
<td align=left>";
if ($_REQUEST['action'] != 'Delete' && $_REQUEST['action'] != 'Copy') {
print "<input type=submit name=action value=Update>";
}
print "</td>
<td align=right>";
printf ("<input type=hidden name=customer_filter value=%s>",$customer->id);
if ($this->adminonly) {
printf ("<input type=hidden name=reseller_filter value=%s>",$customer->reseller);
}
if ($this->adminonly || $this->reseller == $customer->reseller) {
if ($_REQUEST['action'] != 'Delete') {
print "<input type=submit name=action value=Copy>";
}
print "<input type=submit name=action value=Delete>";
if ($_REQUEST['action'] == 'Delete' || $_REQUEST['action'] == 'Copy') {
print "<input type=hidden name=confirm value=1>";
}
}
print "</td>";
print "
</tr>
<tr>
<td valign=top>
<table border=0>
";
printf ("<tr bgcolor=lightgrey>
<td class=border>Field</td>
<td class=border>Value</td>
</tr>");
foreach (array_keys($this->FieldsReadOnly) as $item) {
printf ("<tr>
<td class=border valign=top>%s</td>
<td class=border>%s</td>
</tr>",
ucfirst($item),
$customer->$item
);
}
foreach (array_keys($this->Fields) as $item) {
if ($this->Fields[$item]['name']) {
$item_name=$this->Fields[$item]['name'];
} else {
$item_name=ucfirst($item);
}
if ($item=='timezone') {
printf ("<tr>
<td class=border valign=top>%s</td>",
$item_name
);
print "<td class=border>";
$this->showTimezones($customer->$item);
print "</td>
</tr>
";
} else if ($item=='state') {
printf ("<tr>
<td class=border valign=top>%s</td>",
$item_name
);
print "<td class=border>
<select name=state_form>";
$selected_state[$customer->state]='selected';
foreach ($this->states as $_state) {
printf ("<option value='%s' %s>%s",$_state['value'],$selected_state[$_state['value']],$_state['label']);
}
print "
</select>
</td>
</tr>
";
} else if ($item=='country') {
printf ("<tr>
<td class=border valign=top>%s</td>",
$item_name
);
print "<td class=border>
<select name=country_form>";
$selected_country[$customer->country]='selected';
foreach ($this->countries as $_country) {
printf ("<option value='%s' %s>%s",$_country['value'],$selected_country[$_country['value']],$_country['label']);
}
print "
</select>
</td>
</tr>
";
} else if ($item=='resellerActive' && ($customer->reseller != $customer->id)) {
printf ("<input name=%s_form type=hidden value='%s'>",
$item,
$customer->$item);
} else if ($item=='impersonate') {
if ($customer->reseller != $customer->id) {
- if ($this->adminonly || $this->reseller == $customer->reseller) {
+ if ($this->adminonly || $this->reseller == $customer->id) {
printf ("<tr>
<td class=border valign=top>%s</td>",
$item_name
);
print "<td class=border> ";
$this->getChildren($customer->reseller);
if (count($this->children)> 0) {
print "
<select name=impersonate_form>
<option>";
$selected_impersonate[$customer->impersonate]='selected';
foreach (array_keys($this->children) as $_child) {
printf ("<option value='%s' %s>%s. %s %s",$_child,$selected_impersonate[$_child],$_child,$this->children[$_child]['firstName'],$this->children[$_child]['lastName']);
}
print "
</select>
";
} else {
printf ("
<input name=%s_form size=30 type=text value='%s'>
",
$item,
$customer->$item
);
}
print "
</td>
</tr>
";
} else {
printf ("
<tr>
<td class=border valign=top>%s</td>
<td class=border><input name=%s_form type=hidden value='%s'>%s</td>
</tr>
",
$item_name,
$item,
$customer->$item,
$customer->$item
);
}
} else {
printf ("
<input name=%s_form type=hidden value='%s'>
",
$item,
$customer->$item
);
}
} else {
if ($this->Fields[$item]['type'] == 'textarea') {
printf ("
<tr>
<td class=border valign=top>%s</td>
<td class=border><textarea cols=30 name=%s_form rows=4>%s</textarea></td>
</tr>
",
$item_name,
$item,
$customer->$item
);
} elseif ($this->Fields[$item]['type'] == 'boolean') {
if ($this->Fields[$item]['adminonly'] && !$this->adminonly) {
printf ("
<tr>
<td class=border valign=top>%s</td>
<td class=border><input name=%s_form type=hidden value='%s'>%s</td>
</tr>
",
$item_name,
$item,
$customer->$item,
$customer->$item
);
} else {
$_var='select_'.$item;
${$_var}[$customer->$item]='selected';
printf ("
<tr>
<td class=border valign=top>%s</td>
<td class=border>
<select name=%s_form>
<option value='0' %s>False
<option value='1' %s>True
</select>
</td>
</tr>
",
$item_name,
$item,
${$_var}[0],
${$_var}[1]
);
}
} else {
if ($this->Fields[$item]['adminonly'] && !$this->adminonly) {
printf ("
<tr>
<td class=border valign=top>%s</td>
<td class=border><input name=%s_form type=hidden value='%s'>%s</td>
</tr>
",
$item_name,
$item,
$customer->$item,
$customer->$item
);
} else {
printf ("
<tr>
<td class=border valign=top>%s</td>
<td class=border><input name=%s_form size=30 type=text value='%s'></td>
</tr>
",
$item_name,
$item,
$customer->$item
);
}
}
}
}
$this->printFiltersToForm();
$this->printHiddenFormElements();
//print "</form>";
print "
</table>
";
/*
print "<pre>";
print_r($customer);
print "</pre>";
*/
print "</td>
<td valign=top>";
/*
print "<pre>";
print_r($this->login_credentials);
print "</pre>";
*/
print "
<table border=0>";
if ($this->login_credentials['login_type'] == 'admin') {
printf ("<tr bgcolor=lightgrey>
<td class=border>Category</td>
<td class=border>Permission</td>
<td class=border>Property</td>
<td class=border>Value</td>
<td class=border>Description</td>
</tr>");
} else if ($this->login_credentials['login_type'] == 'reseller') {
printf ("<tr bgcolor=lightgrey>
<td class=border>Permission</td>
<td class=border>Property</td>
<td class=border>Value</td>
</tr>"
);
} else {
printf ("<tr bgcolor=lightgrey>
<td class=border>Property</td>
<td class=border>Value</td>
</tr>"
);
}
foreach ($customer->properties as $_property) {
if (in_array($_property->name,array_keys($this->allProperties))) {
$this->allProperties[$_property->name]['value']=$_property->value;
}
}
foreach (array_keys($this->allProperties) as $item) {
$item_print=preg_replace("/_/"," ",$item);
$_permission=$this->allProperties[$item]['permission'];
if ($this->login_credentials['login_type'] == 'admin') {
if ($this->allProperties[$item]['permission'] == 'admin' &&
$customer->id != $customer->reseller &&
$this->allProperties[$item]['resellerMayManageForChildAccounts']) {
$_permission='reseller';
}
printf ("<tr>
<td class=border>%s</td>
<td class=border>%s</td>
<td class=border>%s</td>
<td class=border><input type=text size=45 name='%s_form' value='%s'></td>
<td class=border>%s</td>
</tr>",
$this->allProperties[$item]['category'],
ucfirst($_permission),
$item_print,
$item,
$this->allProperties[$item]['value'],
$this->allProperties[$item]['name']
);
} else if ($this->login_credentials['login_type'] == 'reseller') {
// logged in as reseller
if ($this->allProperties[$item]['permission'] == 'admin') {
if ($customer->id == $customer->reseller ) {
// reseller cannot modify himself for items with admin permission
if (!$this->allProperties[$item]['invisible']) {
printf ("<tr>
<td class=border>%s</td>
<td class=border>%s</td>
<td class=border>%s </td>
</tr>",
ucfirst($this->allProperties[$item]['permission']),
$this->allProperties[$item]['name'],
$this->allProperties[$item]['value']
);
}
} else {
if ($this->allProperties[$item]['resellerMayManageForChildAccounts']) {
// reseller can manage these properties for his customers
printf ("<tr>
<td class=border>%s</td>
<td class=border>%s</td>
<td class=border><input type=text size=45 name='%s_form' value='%s'></td>
</tr>",
'Reseller',
$this->allProperties[$item]['name'],
$item,
$this->allProperties[$item]['value']
);
} else {
if (!$this->allProperties[$item]['invisible']) {
// otherwise cannot modify them
printf ("<tr>
<td class=border>%s</td>
<td class=border>%s</td>
<td class=border>%s </td>
</tr>",
ucfirst($this->allProperties[$item]['permission']),
$this->allProperties[$item]['name'],
$this->allProperties[$item]['value']
);
}
}
}
} else {
printf ("<tr>
<td class=border>%s</td>
<td class=border>%s</td>
<td class=border><input type=text size=45 name='%s_form' value='%s'></td>
</tr>",
ucfirst($this->allProperties[$item]['permission']),
$this->allProperties[$item]['name'],
$item,
$this->allProperties[$item]['value']
);
}
} else {
// logged in as customer
if ($this->allProperties[$item]['permission'] == 'admin' || $this->allProperties[$item]['permission'] == 'reseller' ) {
if (!$this->allProperties[$item]['invisible']) {
printf ("<tr>
<td class=border>%s</td>
<td class=border>%s </td>
</tr>",
$this->allProperties[$item]['name'],
$this->allProperties[$item]['value']
);
}
} else {
printf ("<tr>
<td class=border>%s</td>
<td class=border><input type=text size=45 name='%s_form' value='%s'></td>
</tr>",
$this->allProperties[$item]['name'],
$item,
$this->allProperties[$item]['value']
);
}
}
}
print "
</table>
";
$this->printFiltersToForm();
$this->printHiddenFormElements();
print "</form>";
print "
</td>
</tr>
</table>
";
$this->showRecordFooter($customer);
}
function updateRecord () {
//print "<p>Updating customer ...";
if (!strlen($this->filters['customer'])) {
return false;
}
if (!$customer=$this->getRecord($this->filters['customer'])) {
return false;
}
if (!$this->updateBefore($customer)) {
return false;
}
$customer->credit = floatval($customer->credit);
$customer->balance = floatval($customer->balance);
foreach ($customer->properties as $_property) {
$properties[]=$_property;
}
$customer->properties=$properties;
$customer_old = $customer;
$properties=array();
// preserve the properties not managed by this client unchanged:
foreach ($customer->properties as $_property) {
if (!in_array($_property->name,array_keys($this->allProperties))) {
$properties[]=array('name' => $_property->name,
'value' => $_property->value,
'category' => $_property->category,
'permission' => $_property->permission
);
}
}
$customer_old->properties=$properties;
foreach (array_keys($this->allProperties) as $item) {
$var_name = $item.'_form';
$var_value = trim($_REQUEST[$var_name]);
if (strlen($var_value)) {
if ($this->allProperties[$item]['permission'] == 'admin' &&
$customer->id != $customer->reseller &&
$this->allProperties[$item]['resellerMayManageForChildAccounts']) {
$_permission='reseller';
} else {
$_permission=$this->allProperties[$item]['permission'];
}
$properties[]=array('name' => $item,
'value' => $var_value,
'category' => $this->allProperties[$item]['category'],
'permission' => $_permission
);
}
}
$customer->properties=$properties;
/*
print "<pre>";
print_r($customer->properties);
print "</pre>";
*/
foreach (array_keys($this->Fields) as $item) {
$var_name=$item.'_form';
//printf ("<br>%s=%s",$var_name,$_REQUEST[$var_name]);
if ($this->Fields[$item]['type'] == 'integer' || $this->Fields[$item]['type'] == 'boolean') {
$customer->$item = intval($_REQUEST[$var_name]);
} else if ($this->Fields[$item]['type'] == 'float') {
$customer->$item = floatval($_REQUEST[$var_name]);
} else {
$customer->$item = trim($_REQUEST[$var_name]);
}
}
$customer->tel = preg_replace("/[^\+0-9]/","",$customer->tel);
$customer->fax = preg_replace("/[^\+0-9]/","",$customer->fax);
$customer->enum = preg_replace("/[^\+0-9]/","",$customer->enum);
+ if ($customer->reseller != $customer->id) {
+ // a subaccount cannot change his own impersonate field
+ if ($customer->reseller != $customer->id || !$this->adminonly) {
+ $customer->impersonate=$customer_old->impersonate;
+ }
+ }
+
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($customer),
'logs' => array('success' => sprintf('Customer id %s has been updated',$customer->id))
),
'rollback' => array('name' => 'updateAccount',
'parameters' => array($customer_old)
)
);
if ($this->SoapEngine->execute($function,$this->html)) {
// update remote
if (is_object($this->SoapEngineCustomerRemote)) {
$this->SoapEngineCustomerRemote->addHeader($this->SoapAuthCustomerRemote);
$result = $this->SoapEngineCustomerRemote->updateAccount($customer);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SOAPurlCustomerRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
return true;
}
}
$this->updateAfter($customer);
return true;
} else {
return false;
}
}
function showTimezones($timezone) {
if (!$fp = fopen("timezones", "r")) {
print _("Failed to open timezone file.");
return false;
}
print "<select name=timezone_form>";
print "\n<option>";
while ($buffer = fgets($fp,1024)) {
$buffer=trim($buffer);
if ($timezone==$buffer) {
$selected="selected";
} else {
$selected="";
}
print "\n<option $selected>";
print "$buffer";
}
fclose($fp);
print "</select>";
}
function getChildren($reseller) {
return;
// Filter
$filter=array('reseller' => intval($reseller));
// Range
$range=array('start' => 0,
'count' => 1000
);
// Order
$orderBy = array('attribute' => 'firstName',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getCustomers($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
$i=0;
if ($result->total > 100) return;
while ($i < $result->total) {
$customer = $result->accounts[$i];
$this->children[$customer->id]=array('firstName' => $customer->firstName,
'lastName' => $customer->lastName,
'organization' => $customer->organization
);
$i++;
}
}
}
function copyRecord () {
//print "<p>Copy customer ...";
if (!strlen($this->filters['customer'])) {
return false;
}
if (!$_REQUEST['confirm']) {
print "<p><font color=red>Please press on Copy again to confirm the copy</font>";
return true;
}
if (!$customer=$this->getRecord($this->filters['customer'])) {
return false;
}
$customer->credit = floatval($customer->credit);
$customer->balance = floatval($customer->balance);
$properties=array();
foreach ($customer->properties as $_property) {
$properties[]=$_property;
}
$customer->properties=$properties;
// change username
$customer_new=$customer;
unset($customer_new->id);
$j=1;
while ($j < 9) {
$customer_new->username=$customer->username.$j;
$function=array('commit' => array('name' => 'addAccount',
'parameters' => array($customer_new),
'logs' => array('success' => sprintf('Customer id %s has been copied',$customer->id))
),
'rollback' => array('name' => 'deleteAccount',
'parameters' => array($customer_new)
)
);
if ($this->SoapEngine->execute($function,$this->html)) {
// update remote
if (is_object($this->SoapEngineCustomerRemote)) {
if ($_id = $this->getCustomerId($customer_new->username)) {
$customerRemote=$customer_new;
$customerRemote->id = intval($_id);
$this->SoapEngineCustomerRemote->addHeader($this->SoapAuthCustomerRemote);
$result = $this->SoapEngineCustomerRemote->addAccount($customerRemote);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SOAPurlCustomerRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
$function=array('commit' => array('name' => 'deleteAccount',
'parameters' => array(intval($_id)),
'logs' => array('success' => sprintf('Customer id %s could not be copied ',$this->filters['customer'])))
);
$this->SoapEngine->execute($function,$this->html);
return false;
}
}
}
// Reset filters to find the copy
$this->filters=array();
$this->filters['username']=$customer_new->username;
return true;
} else {
if ($this->SoapEngine->error_fault->detail->exception->errorcode != "5001") {
return false;
}
}
$j++;
}
}
function showAddForm($confirmPassword=false) {
print "<h3>Register new login account</h3>";
printf ("<form method=post name=addform action=%s>",$_SERVER['PHP_SELF']);
print "
<p>
<input type=submit name=action value=Add>
<p>
";
if ($_REQUEST['notify']) $checked_notify='checked';
printf ("Send notification by email <input type=checkbox name=notify value='1' %s>",$checked_notify);
print "
<p>
<input type=hidden name=showAddForm value=1>
<table border=0>
";
if ($this->adminonly && $this->filters['reseller']) {
printf ("<tr><td class=border>Reseller</td>
<td class=border>%s</td></tr>",$this->filters['reseller']);
printf ("<input type=hidden name=reseller_filter value='%s'",$this->filters['reseller']);
} else if ($this->reseller) {
printf ("<tr><td class=border>Reseller</td>
<td class=border>%s</td></tr>",$this->reseller);
}
foreach (array_keys($this->addFields) as $item) {
if ($this->addFields[$item]['name']) {
$item_name=$this->addFields[$item]['name'];
} else {
$item_name=ucfirst($item);
}
$item_form=$item.'_form';
if ($item=='timezone') {
$_value=$_REQUEST['timezone_form'];
if (!$_value) $_value='Europe/Amsterdam';
printf ("<tr>
<td class=border valign=top>%s</td>",
$item_name
);
print "<td class=border>";
$this->showTimezones($_value);
print "</td>
</tr>
";
} else if ($item=='state') {
printf ("<tr>
<td class=border valign=top>%s</td>",
$item_name
);
print "<td class=border>
<select name=state_form>";
$selected_state[$_REQUEST[$item_form]]='selected';
foreach ($this->states as $_state) {
printf ("<option value='%s' %s>%s",$_state['value'],$selected_state[$_state['value']],$_state['label']);
}
print "
</select>
</td>
</tr>
";
} else if ($item=='country') {
printf ("<tr>
<td class=border valign=top>%s</td>",
$item_name
);
print "<td class=border>
<select name=country_form>";
if (!$_REQUEST[$item_form]) {
$_value='NL';
} else {
$_value=$_REQUEST[$item_form];
}
$selected_country[$_value]='selected';
foreach ($this->countries as $_country) {
printf ("<option value='%s' %s>%s",$_country['value'],$selected_country[$_country['value']],$_country['label']);
}
print "
</select>
</td>
</tr>
";
} else {
if ($this->addFields[$item]['type'] == 'textarea') {
printf ("
<tr>
<td class=border valign=top>%s</td>
<td class=border><textarea cols=30 name=%s_form rows=4>%s</textarea></td>
</tr>
",
$item_name,
$item,
$_REQUEST[$item_form]
);
} elseif ($this->addFields[$item]['type'] == 'boolean') {
$_var='select_'.$item;
${$_var}[$_REQUEST[$item_form]]='selected';
printf ("
<tr>
<td class=border valign=top>%s</td>
<td class=border>
<select name=%s_form>
<option value='0' %s>False
<option value='1' %s>True
</select>
</td>
</tr>
",
$item_name,
$item,
${$_var}[0],
${$_var}[1]
);
} else {
$type='text';
if (strstr($item,'password')) $type='password';
printf ("
<tr>
<td class=border valign=top>%s</td>
<td class=border><input name=%s_form size=30 type=%s value='%s'></td>
</tr>
",
$item_name,
$item,
$type,
$_REQUEST[$item_form]
);
if ($item=='password' && $confirmPassword) {
printf ("
<tr>
<td class=border valign=top><font color=red>Confirm password</font></td>
<td class=border><input name=confirm_password_form size=30 type=password value='%s'></td>
</tr>
",
$_REQUEST[confirm_password_form]
);
}
}
}
}
$this->printHiddenFormElements();
print "</form>";
print "
</table>
";
}
function addRecord($dictionary=array(),$confirmPassword=false) {
foreach (array_keys($this->addFields) as $item) {
if ($dictionary[$item]) {
$customer[$item] = trim($dictionary[$item]);
} else {
$item_form = $item.'_form';
$customer[$item] = trim($_REQUEST[$item_form]);
}
}
if (!strlen($customer['username'])) $customer['username'] = trim($customer['firstName']).'.'.trim($customer['lastName']);
if (!strlen($customer['state'])) $customer['state'] = 'N/A';
if (!strlen($customer['country'])) $customer['country'] = 'N/A';
if (!strlen($customer['city'])) $customer['city'] = 'Unknown';
if (!strlen($customer['address'])) $customer['address'] = 'Unknown';
if (!strlen($customer['postcode'])) $customer['postcode'] = 'Unknown';
if (!strlen($customer['timezone'])) $customer['timezone'] = 'Europe/Amsterdam';
$customer['username'] = strtolower(preg_replace ("/\s+/",".",trim($customer['username'])));
$customer['username'] = preg_replace ("/\.{2,}/",".",$customer['username']);
if ($customer['state'] != 'N/A') {
$_state=$customer['state'].' ';
} else {
$_state='';
}
if (!strlen($customer['tel'])){
$customer['tel'] = '+19999999999';
} else {
$customer['tel'] = preg_replace("/[^0-9\+]/","",$customer['tel']);
if (preg_match("/^00(\d{1,20})$/",$customer['tel'],$m)) {
$customer['tel'] = "+".$m[1];
}
}
$customer['billingEmail'] = $customer['email'];
$customer['billingAddress'] = $customer['address']."\n".
$customer['postcode']." ".$customer['city']."\n".
$_state.$customer['country']."\n";
if ($confirmPassword) {
if (!strlen($customer['password'])) {
$this->errorMessage='Password cannot be empty';
return false;
} else if ($customer['password'] != $_REQUEST['confirm_password_form']) {
$this->errorMessage='Password is not confirmed';
return false;
}
}
if (!strlen($customer['password'])) $customer['password'] = $this->RandomPassword(6);
$customer->properties=array();
$function=array('commit' => array('name' => 'addAccount',
'parameters' => array($customer),
'logs' => array('success' => sprintf('Login account %s %s has been added',$customer['firstName'],$customer['lastName']))
)
);
if ($this->SoapEngine->execute($function,$this->html)) {
// update remote
if (is_object($this->SoapEngineCustomerRemote)) {
if ($_id = $this->getCustomerId($customer['username'])) {
$customerRemote=$customer;
$customerRemote['id'] = intval($_id);
$this->SoapEngineCustomerRemote->addHeader($this->SoapAuthCustomerRemote);
$result = $this->SoapEngineCustomerRemote->addAccount($customerRemote);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SOAPurlCustomerRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
$function=array('commit' => array('name' => 'deleteAccount',
'parameters' => array(intval($_id)),
'logs' => array('success' => sprintf('Customer id %s could not be created ',$this->filters['customer'])))
);
$this->SoapEngine->execute($function,$this->html);
return false;
}
}
}
// We have succesfully added customer entry
$this->showAddForm=false;
if ($dictionary['notify'] || $_REQUEST['notify']) $this->notify($customer);
return true;
} else {
return false;
}
}
function notify($customer) {
if ($this->support_web) {
$url=$this->support_web;
} else {
if ($_SERVER['HTTPS']=="on") {
$protocolURL="https://";
} else {
$protocolURL="http://";
}
$url=sprintf("%s%s",$protocolURL,$_SERVER['HTTP_HOST']);
}
$body=
sprintf("Dear %s,\n\n",$customer['firstName']).
sprintf("This email is for your record. You have registered a new login account on %s as follows:\n\n",$url).
sprintf("Username: %s\n",$customer['username']).
sprintf("Password: %s\n",$customer['password']).
"\n".
sprintf("You have registered this account from IP address %s\n",$_SERVER['REMOTE_ADDR']).
"\n".
"This is an automatic message, do not reply.\n";
$from = sprintf("From: %s",$this->support_email);
$subject = sprintf("Your login account at %s",$url);
return mail($customer['email'], $subject, $body, $from);
}
function getRecordKeys() {
// Filter
$filter=array('username' => $this->filters['username'],
'firstName' => $this->filters['firstName'],
'lastName' => $this->filters['lastName'],
'organization' => $this->filters['organization'],
'tel' => $this->filters['tel'],
'email' => $this->filters['email'],
'web' => $this->filters['web'],
'city' => $this->filters['city'],
'country' => $this->filters['country'],
'only_resellers' => $this->filters['only_resellers'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => 0,
'count' => 1000
);
// Order
$orderBy = array('attribute' => 'customer',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
if ($this->adminonly && $this->filters['only_resellers']) {
$result = $this->SoapEngine->soapclient->getResellers($Query);
} else {
$result = $this->SoapEngine->soapclient->getCustomers($Query);
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
foreach ($result->accounts as $customer) {
$this->selectionKeys[]=$customer->id;
}
}
}
function getProperty($customer,$name) {
foreach ($customer->properties as $_property) {
if ($_property['name'] == $name && strlen($_property['value'])) {
return $_property['value'];
}
}
return false;
}
function getCustomerId($username) {
if (!strlen($username)) return false;
$filter = array('username' => $username);
$range = array('start' => 0,'count' => 1);
$orderBy = array('attribute' => 'customer', 'direction' => 'ASC');
$Query=array('filter' => $filter,'orderBy' => $orderBy,'range' => $range);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Call function
$result = $this->SoapEngine->soapclient->getCustomers($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error from %s: %s (%s): %s</font>",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if (count($result->accounts) == 1) {
return $result->accounts[0]->id;
} else {
return false;
}
}
}
}
class Presence {
function Presence(&$SoapEngine) {
$this->SoapEngine = &$SoapEngine;
}
function publishPresence ($soapEngine,$SIPaccount=array(),$note='None',$activity='idle') {
if (!in_array($soapEngine,array_keys($this->SoapEngine->soapEngines))) {
print "Error: soapEngine '$soapEngine' does not exist.\n";
return false;
}
if (!$SIPaccount['username'] || !$SIPaccount['domain'] || !$SIPaccount['password'] ) {
print "Error: SIP account not defined\n";
return false;
}
$this->SOAPurl = $this->SoapEngine->soapEngines[$soapEngine]['url'];
$this->PresencePort = new WebService_SoapSIMPLEProxy_PresencePort($this->SOAPurl);
$this->PresencePort->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->PresencePort->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
$allowed_activities=array('open',
'idle',
'busy',
'available'
);
if (in_array($activity,$allowed_activities)) {
$presentity['activity'] = $activity;
} else {
$presentity['activity'] = 'open';
}
$presentity['note'] = $note;
$result = $this->PresencePort->setPresenceInformation(array("username" =>$SIPaccount['username'],"domain" =>$SIPaccount['domain']),$SIPaccount['password'], $presentity);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
return true;
}
function getPresenceInformation ($soapEngine,$SIPaccount) {
if (!in_array($soapEngine,array_keys($this->SoapEngine->soapEngines))) {
print "Error: soapEngine '$soapEngine' does not exist.\n";
return false;
}
if (!$SIPaccount['username'] || !$SIPaccount['domain'] || !$SIPaccount['password'] ) {
print "Error: SIP account not defined";
return false;
}
$this->SOAPurl = $this->SoapEngine->soapEngines[$soapEngine]['url'];
$this->PresencePort = new WebService_SoapSIMPLEProxy_PresencePort($this->SOAPurl);
$this->PresencePort->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->PresencePort->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
$result = $this->PresencePort->getPresenceInformation(array("username" =>$SIPaccount['username'],"domain" =>$SIPaccount['domain']),$SIPaccount['password']);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
return $result;
}
}
}
class recordGenerator extends SoapEngine {
//this class generates in bulk enum numbers and sip accounts
var $template = array();
var $allowedPorts = array();
var $maxRecords = 500;
var $minimum_number_length = 4;
var $maximum_number_length = 15;
function recordGenerator($generatorId,$record_generators,$soapEngines,$login_credentials=array()) {
$this->record_generators = $record_generators;
$this->generatorId = $generatorId;
$this->login_credentials = $login_credentials;
//dprint_r($this->login_credentials);
$keys = array_keys($this->record_generators);
if (!$generatorId) $generatorId=$keys[0];
if (!in_array($generatorId,array_keys($this->record_generators))) {
return false;
}
if (strlen($this->login_credentials['soap_filter'])) {
$this->soapEngines = $this->getSoapEngineAllowed($soapEngines,$this->login_credentials['soap_filter']);
} else {
$this->soapEngines = $soapEngines;
}
if (in_array($this->record_generators[$generatorId]['sip_engine'],array_keys($this->soapEngines))) {
// sip zones
if (count($this->allowedPorts[$this->record_generators[$generatorId]['sip_engine']]) > 1 && !in_array('sip_accounts',$this->allowedPorts[$this->record_generators[$generatorId]['sip_engine']])) {
// sip port not available
dprint("sip port not avaliable");
} else {
$sip_engine = 'sip_accounts@'.$this->record_generators[$generatorId]['sip_engine'];
$this->SipSoapEngine = new SoapEngine($sip_engine,$soapEngines,$login_credentials);
$_sip_class = $this->SipSoapEngine->records_class;
$this->sipRecords = new $_sip_class(&$this->SipSoapEngine);
$this->sipRecords->getAllowedDomains();
}
} else {
printf ("<font color=red>Error: sip_engine %s does not exist</font>",$this->record_generators[$generatorId]['sip_engine']);
}
if (in_array($this->record_generators[$generatorId]['enum_engine'],array_keys($this->soapEngines))) {
if (count($this->allowedPorts[$this->record_generators[$generatorId]['enum_engine']]) > 1 && !in_array('enum_numbers',$this->allowedPorts[$this->record_generators[$generatorId]['enum_engine']])) {
dprint("enum port not avaliable");
// enum port not available
} else {
// enum mappings
$enum_engine = 'enum_numbers@'.$this->record_generators[$generatorId]['enum_engine'];
$this->EnumSoapEngine = new SoapEngine($enum_engine,$soapEngines,$login_credentials);
$_enum_class = $this->EnumSoapEngine->records_class;
$this->enumRecords = new $_enum_class(&$this->EnumSoapEngine);
}
} else {
printf ("<font color=red>Error: enum_engine %s does not exist</font>",$this->record_generators[$generatorId]['enum_engine']);
}
if (in_array($this->record_generators[$generatorId]['customer_engine'],array_keys($this->soapEngines))) {
if (count($this->allowedPorts[$this->record_generators[$generatorId]['customer_engine']]) > 1 && !in_array('customers',$this->allowedPorts[$this->record_generators[$generatorId]['customer_engine']])) {
dprint("customer port not avaliable");
} else {
$customer_engine = 'customers@'.$this->record_generators[$generatorId]['customer_engine'];
$this->CustomerSoapEngine = new SoapEngine($customer_engine,$soapEngines,$login_credentials);
$_customer_class = $this->CustomerSoapEngine->records_class;
$this->customerRecords = new $_customer_class(&$this->CustomerSoapEngine);
}
} else {
printf ("<font color=red>Error: customer_engine %s does not exist</font>",$this->record_generators[$generatorId]['customer_engine']);
}
if ($_REQUEST['reseller_filter']) $this->template['reseller']=intval($_REQUEST['reseller_filter']);
if ($_REQUEST['customer_filter']) $this->template['customer']=intval($_REQUEST['customer_filter']);
}
function showGeneratorForm() {
print "
<form method=post target=_new>
<table cellspacing=1 cellpadding=1 bgcolor=black>
<tr>
<td>
<table cellspacing=3 cellpadding=4 width=100% bgcolor=#444444>
<tr>
<td>
<font color=white>
<b>";
print _("Record generator");
print "</b>
</font>
</td>
</tr>
</table>
</tr>
<tr>
<td colspan=100%>
<table cellpadding=2 bgcolor=white width=100%>
<tr>
<td colspan=3>
</td>
</tr>
";
print "
<tr>
<td>";
print _("ENUM range");
print "
<td align=right>";
/*
if ($_REQUEST['range']) {
$selected_range[$_REQUEST['range']]='selected';
} else if ($_last_range=$this->enumRecords->getLoginProperty('enum_generator_range')) {
$selected_range[$_last_range] = 'selected';
}
if (is_array($this->enumRecords->ranges)) {
print "<select name=range>";
foreach ($this->enumRecords->ranges as $_range) {
$rangeId=$_range['prefix'].'@'.$_range['tld'];
printf ("<option value='%s' %s>+%s under %s",$rangeId,$selected_range[$rangeId],$_range['prefix'],$_range['tld']);
}
print "</select>";
}
*/
list($_range['prefix'],$_range['tld'])=explode("@",$_REQUEST['range']);
printf ("<input type=hidden name=range value='%s'>+%s under %s",$_REQUEST['range'],$_range['prefix'],$_range['tld']);
print "<td>
</tr>
";
print "
<tr>
<td colspan=2>
";
print "<b>";
print _("ENUM mapping template");
print "</b>";
print "</td>
</tr>
";
if ($_REQUEST['add_prefix']) {
$add_prefix=$_REQUEST['add_prefix'];
} else {
$add_prefix = $this->sipRecords->getLoginProperty('enum_generator_add_prefix');
}
print "
<tr>
<td>";
print _("Add prefix after range:");
printf ("
<td align=right>
<input type=text name=add_prefix size=10 maxsize=15 value='%s'>
</td>
<td>
</td>
</tr>
",$add_prefix);
if ($_REQUEST['number_length']) {
$number_length=$_REQUEST['number_length'];
} else {
$number_length = $this->sipRecords->getLoginProperty('enum_generator_number_length');
}
print "
<tr>
<td>";
print _("Number length:");
printf ("
<td align=right>
<input type=text name=number_length size=10 maxsize=15 value='%s'>
<tr>
<td>
",$number_length);
print _("SIP domain:");
print "
<td align=right>
";
if (count($this->sipRecords->allowedDomains) > 0) {
if ($_REQUEST['domain']) {
$selected_domain[$_REQUEST['domain']]='selected';
} else if ($_last_domain=$this->sipRecords->getLoginProperty('enum_generator_sip_domain')) {
$selected_domain[$_last_domain] = 'selected';
}
print "
<select name=domain>
";
foreach ($this->sipRecords->allowedDomains as $domain) {
printf ("<option value='%s' %s>%s",$domain,$selected_domain[$domain],$domain);
}
print "</select> ";
} else {
print "<input type=text size=15 name=domain>";
}
print "
</td>
<td>";
print "
</td>
</tr>
";
if ($_REQUEST['strip_digits']) {
$strip_digits=$_REQUEST['strip_digits'];
} else if ($strip_digits = $this->sipRecords->getLoginProperty('enum_generator_strip_digits')) {
} else {
$strip_digits=0;
}
print "
<tr>
<td>";
print _("Strip digits:");
printf ("
<td align=right>
<input type=text size=10 name=strip_digits value='%s'>
</td>
</tr>
",$strip_digits);
print "
<tr>
<td>";
print _("Owner:");
printf ("
<td align=right><input type=text size=10 name=owner value='%s'>
<td>",$_REQUEST['owner']);
print "
</td>
</tr>";
print "
<tr>
<td>";
print _("Info:");
printf ("
<td align=right><input type=text size=10 name=info value='%s'>
<td>",$_REQUEST['info']);
print "
</td>
</tr>";
if (count($this->sipRecords->allowedDomains) > 0) {
print "
<tr>
<td colspan=3><hr noshade size=1>
</td>
</tr>
";
print "
<tr>
<td colspan=2>
";
print "<b>";
print _("SIP account template");
print "</b>";
print "</td>
</tr>
";
print "
<tr>
<td>";
print _("Create SIP records");
if ($_REQUEST['create_sip']) {
$checked_create_sip='checked';
} else {
$checked_create_sip='';
}
printf ("
<td align=right><input type=checkbox name=create_sip value=1 %s>
</td>
</tr>
",$checked_create_sip);
if ($_REQUEST['pstn']) {
$checked_pstn='checked';
} else {
$checked_pstn='';
}
print "
<tr>
<td>";
print _("PSTN");
printf ("
<td align=right><input type=checkbox name=pstn value=1 %s>
</td>
</tr>
",$checked_pstn);
if ($_REQUEST['prepaid']) {
$checked_prepaid='checked';
} else {
$checked_prepaid='';
}
print "
<tr>
<td>";
print _("Prepaid");
printf ("
<td align=right><input type=checkbox name=prepaid value=1 %s>
</td>
</tr>
",$checked_prepaid);
if ($_REQUEST['rpid_strip_digits']) {
$rpid_strip_digits=$_REQUEST['rpid_strip_digits'];
} else if ($rpid_strip_digits = $this->sipRecords->getLoginProperty('enum_generator_rpid_strip_digits')) {
} else {
$rpid_strip_digits=0;
}
print "
<tr>
<td>";
print _("Strip digits from Caller-ID");
printf ("
<td align=right><input type=text size=10 name=rpid_strip_digits value='%s'>
</td>
</tr>
",$rpid_strip_digits);
print "
<tr>
<td>";
print _("Quota");
printf ("
<td align=right><input type=text size=10 name=quota value='%s'>
</td>
</tr>
",$_REQUEST['quota']);
print "
<tr>
<td>";
print _("Password");
printf ("
<td align=right><input type=text size=10 name=password value='%s'>
</td>
</tr>
",$_REQUEST['password']);
}
if ($_REQUEST['nr_records']) {
$nr_records=$_REQUEST['nr_records'];
} else {
$nr_records=1;
}
print "
<tr>
<td colspan=3>
<hr noshade size=1 with=100%>
</td>
</tr>
";
print "
<tr>
<td>
";
print "<input type=hidden value=Generate>";
print "<input type=submit value=Generate>";
printf ("<td align=right>
Number of records:<input type=text size=10 name=nr_records value='%s'>
",$nr_records);
print "<td>";
print "
</tr>
";
print "
<tr>
<td colspan=2>
<br>
<input type=hidden name=action value=Generate>
<p>";
print _("Existing records will not be overwritten. ");
print "</td>
</tr>
";
$this->printHiddenFormElements();
print "
</table>
</form>
</td>
</tr>
</table>
";
}
function checkGenerateRequest() {
// check number of records
$this->template['create_sip']=trim($_REQUEST['create_sip']);
$this->template['rpid_strip_digits']=intval($_REQUEST['rpid_strip_digits']);
$this->template['info']=trim($_REQUEST['info']);
$nr_records=trim($_REQUEST['nr_records']);
if (!is_numeric($nr_records) || $nr_records < 1 || $nr_records > $this->maxRecords) {
printf ("<font color=red>Error: number of records must be a number between 1 and %d</font>",$this->maxRecords);
return false;
}
$this->template['nr_records'] = $nr_records;
$number_length=trim($_REQUEST['number_length']);
if (!is_numeric($number_length) || $number_length < $this->minimum_number_length || $number_length > $this->maximum_number_length) {
printf ("<font color=red>Error: number length must be a number between 4 and 15</font>",$this->minimum_number_length,$this->maximum_number_length);
return false;
}
$this->template['number_length'] = $number_length;
$strip_digits=trim($_REQUEST['strip_digits']);
if (!is_numeric($strip_digits) || $strip_digits < 0 || $number_length < $strip_digits + 3) {
printf ("<font color=red>Error: strip digits + 3 must be smaller then %d</font>",$number_length);
return false;
}
$this->template['strip_digits'] = $strip_digits;
// sip domain
$domain=trim($_REQUEST['domain']);
if (!strlen($domain)) {
print "<font color=red>Error: SIP domain is missing</font>";
return false;
}
$this->template['domain'] = $domain;
$add_prefix=trim($_REQUEST['add_prefix']);
if (strlen($add_prefix) && !is_numeric($add_prefix)) {
print "<font color=red>Error: Add prefix must be numeric</font>";
return false;
}
$this->template['add_prefix'] = $add_prefix;
$owner=trim($_REQUEST['owner']);
if (strlen($owner) && !is_numeric($owner)) {
print "<font color=red>Error: Owner must be an integer</font>";
return false;
}
// check ENUM TLD
list($rangePrefix,$tld)=explode('@',trim($_REQUEST['range']));
$this->template['range'] = trim($_REQUEST['range']);
$this->template['rangePrefix'] = $rangePrefix;
$this->template['tld'] = $tld;
$this->template['quota'] = intval($_REQUEST['quota']);
$this->template['owner'] = intval($owner);
$this->template['pstn'] = intval($_REQUEST['pstn']);
$this->template['prepaid'] = intval($_REQUEST['prepaid']);
$this->template['password'] = trim($_REQUEST['password']);
///////////////////////////////////////
// logical checks
if (strlen($this->template['add_prefix'])) {
$start = $this->template['add_prefix'];
} else {
$start = 0;
}
$this->template['digitsAfterRange'] = $this->template['number_length'] - strlen($this->template['rangePrefix']);
if ($this->template['number_length'] == strlen($this->template['rangePrefix']) + strlen($this->template['add_prefix'])) {
$this->template['firstNumber'] = $this->template['rangePrefix'].$this->template['add_prefix'];
$this->template['lastNumber'] = substr($this->template['firstNumber'],0,-1).'9';
$this->template['maxNumbers'] = $this->template['lastNumber'] - $this->template['firstNumber'] + 1;
} else {
$this->template['firstNumber'] = $this->template['rangePrefix'].str_pad($start,$this->template['digitsAfterRange'],'0');
$this->template['lastNumber'] = sprintf("%.0f", $this->template['firstNumber'] + pow(10,$this->template['digitsAfterRange']-strlen($this->template['add_prefix'])) - 1);
$this->template['maxNumbers'] = pow(10,$this->template['digitsAfterRange']-strlen($this->template['add_prefix']));
}
dprint_r($this->template);
if ($this->template['maxNumbers'] < $this->template['nr_records']) {
printf ("<font color=red>Error: Insufficient numbers in range, requested = %d, available = %d</font>",$this->template['nr_records'],$this->template['maxNumbers']);
return false;
}
return true;
}
function generateRecords() {
print "<p>";
if (!$this->checkGenerateRequest()) {
return false;
}
print "<p>Generating records
<ol>";
$_p=array(
array('name' => 'enum_generator_sip_domain',
'category' => 'web',
'value' => strval($this->template['domain']),
'permission' => 'customer'
),
array('name' => 'enum_generator_range',
'category' => 'web',
'value' => strval($this->template['range']),
'permission' => 'customer'
),
array('name' => 'enum_generator_strip_digits',
'category' => 'web',
'value' => strval($this->template['strip_digits']),
'permission' => 'customer'
),
array('name' => 'enum_generator_number_length',
'category' => 'web',
'value' => strval($this->template['number_length']),
'permission' => 'customer'
),
array('name' => 'enum_generator_add_prefix',
'category' => 'web',
'value' => strval($this->template['add_prefix']),
'permission' => 'customer'
),
array('name' => 'enum_generator_rpid_strip_digits',
'category' => 'web',
'value' => strval($this->template['rpid_strip_digits']),
'permission' => 'customer'
)
);
$this->enumRecords->setLoginProperties($_p);
if ($this->template['owner']) {
if ($customer = $this->customerRecords->getRecord($this->template['owner'])) {
$this->template['email'] = $customer->email;
$this->template['firstName'] = $customer->firstName;
$this->template['lastName'] = $customer->lastName;
if (!strlen($this->template['info'])) {
$this->template['info'] = $customer->firstName.' '.$customer->lastName;
}
} else {
printf ("<font color=red>Error: cannot retrieve customer information for owner %d</font>",$this->template['owner']);
}
}
dprint_r($this->template);
$i=0;
while ($i < $this->template['nr_records']) {
$number = sprintf("%.0f", $this->template['firstNumber'] + $i);
$username = substr($number,$this->template['strip_digits']);
$mapto = 'sip:'.$username.'@'.$this->template['domain'];
print "<li>";
printf ('Generating number +%s with mapping %s ',$number,$mapto);
flush();
$enumMapping = array('tld' => $this->template['tld'],
'number' => $number,
'type' => 'sip',
'mapto' => $mapto,
'info' => $this->template['info'],
'owner' => $this->template['owner']
);
if ($this->template['create_sip']) {
if (preg_match("/^0/",$username)) {
printf ('SIP accounts starting with 0 are not generated (%s@%s)',$username,$this->template['domain']);
continue;
}
$groups=array();
if ($this->template['pstn']) {
$groups[]='free-pstn';
}
printf ('and sip account %s@%s ',$username,$this->template['domain']);
$sipAccount = array('account' => $username.'@'.$this->template['domain'],
'quota' => $this->template['quota'],
'prepaid' => $this->template['prepaid'],
'password' => $this->template['password'],
'groups' => $groups,
'owner' => $this->template['owner']
);
if ($this->template['firstName']) {
$sipAccount['fullname'] = $this->template['firstName'].' '.$this->template['lastName'];
}
if ($this->template['email']) {
$sipAccount['email'] = $this->template['email'];
}
if ($this->template['pstn'] && strlen($number) > intval($this->template['rpid_strip_digits'])) {
$sipAccount['rpid']=substr($number,intval($this->template['rpid_strip_digits']));
}
} else {
unset($sipAccount);
}
//dprint_r($sipAccount);
if (is_array($enumMapping)) $this->enumRecords->addRecord($enumMapping);
if (is_array($sipAccount)) $this->sipRecords->addRecord($sipAccount);
$i++;
}
print "</ol>";
return true;
}
function printHiddenFormElements () {
printf("<input type=hidden name=generatorId value='%s'>",$this->generatorId);
if ($this->adminonly) {
printf("<input type=hidden name=adminonly value='%s'>",$this->adminonly);
}
if ($this->template['customer']) {
printf("<input type=hidden name=customer_filter value='%s'>",$this->template['customer']);
}
if ($this->template['reseller']) {
printf("<input type=hidden name=reseller_filter value='%s'>",$this->template['reseller']);
}
foreach (array_keys($this->EnumSoapEngine->extraFormElements) as $element) {
if (!strlen($this->EnumSoapEngine->extraFormElements[$element])) continue;
printf ("<input type=hidden name=%s value='%s'>\n",$element,$this->EnumSoapEngine->extraFormElements[$element]);
}
}
function getSoapEngineAllowed($soapEngines,$filter) {
// filter syntax:
// $filter="engine1:port1,port2,port3 engine2 engine3";
// where engine is a connection from ngnpro_engines.inc and
// port is valid port from that engine like sip_accounts or enum_numbers
$_filter_els=explode(" ",trim($filter));
foreach(array_keys($soapEngines) as $_engine) {
foreach ($_filter_els as $_filter) {
unset($_allowed_engine);
$_allowed_ports=array();
list($_allowed_engine,$_allowed_ports_els) = explode(":",$_filter);
if ($_allowed_ports_els) {
$_allowed_ports = explode(",",$_allowed_ports_els);
}
if ($_engine == $_allowed_engine) {
$soapEngines_checked[$_engine]=$soapEngines[$_engine];
$this->allowedPorts[$_engine]=$_allowed_ports;
continue;
}
}
}
return $soapEngines_checked;
}
}
class Actions {
// this class perfom actions on an array of entities returned by selections
var $actions = array();
var $version = 1;
function Actions(&$SoapEngine) {
$this->SoapEngine = $SoapEngine;
$this->version = $this->SoapEngine->version;
$this->adminonly = $this->SoapEngine->adminonly;
}
function execute($selectionKeys,$action,$sub_action_parameter) {
}
function showActionsForm($filters,$sorting,$hideParameter=false) {
if (!count($this->actions)) return;
print "
<p>
<table border=0 class=border width=100%>
<tr>
";
printf ("<form method=post name=actionform action=%s>",$_SERVER['PHP_SELF']);
print "
<td align=left>
";
print "
<input type=submit value='Perform this action on the selection:'>
<input type=hidden name=action value=PerformActions>
";
if ($this->adminonly) {
print "
<input type=hidden name=adminonly value=$this->adminonly>
";
}
print "<select name=sub_action>";
$j=0;
foreach (array_keys($this->actions) as $_action) {
$j++;
printf ("<option value='%s'>%d. %s",$_action,$j,$this->actions[$_action]);
}
print "</select>";
if (!$hideParameter) {
print "
<input type=text size=15 name=sub_action_parameter>
";
}
print "
</td>
<td align=right>
";
print "
</td>
";
foreach (array_keys($filters) as $_filter) {
printf ("<input type=hidden name='%s_filter' value='%s'>\n", $_filter,$filters[$_filter]);
}
foreach (array_keys($sorting) as $_sorting) {
printf ("<input type=hidden name='%s' value='%s'>\n", $_sorting,$sorting[$_sorting]);
}
printf("<input type=hidden name=service value='%s'>",$this->SoapEngine->service);
foreach (array_keys($this->SoapEngine->extraFormElements) as $element) {
if (!strlen($this->SoapEngine->extraFormElements[$element])) continue;
printf ("<input type=hidden name=%s value='%s'>\n",$element,$this->SoapEngine->extraFormElements[$element]);
}
print "
</form>
</tr>
</table>
";
}
}
class SipAccountsActions extends Actions {
var $actions=array('block' => 'Block SIP accounts',
'deblock' => 'Deblock SIP accounts',
'enable_pstn' => 'Enable access to PSTN for the SIP accounts',
'disable_pstn' => 'Disable access to PSTN for the SIP accounts',
'deblock_quota' => 'Deblock SIP accounts blocked by quota',
'prepaid' => 'Make SIP accounts prepaid',
'postpaid' => 'Make SIP accounts postpaid',
'delete' => 'Delete SIP accounts',
'setquota' => 'Set quota of SIP account to:',
'rpidasusername' => 'Set PSTN caller ID as the username',
'prefixtorpid' => 'Add to PSTN caller ID this prefix:',
'rmdsfromrpid' => 'Remove from PSTN caller ID digits:',
'addtogroup' => 'Add SIP accounts to group:',
'removefromgroup'=> 'Remove SIP accounts from group:',
'addbalance' => 'Add to prepaid balance value:',
'changeowner' => 'Change owner to:',
'changefirstname'=> 'Change first name to:',
'changelastname' => 'Change last name to:'
);
function SipAccountsActions(&$SoapEngine) {
$this->Actions(&$SoapEngine);
}
function execute($selectionKeys,$action,$sub_action_parameter) {
if (!in_array($action,array_keys($this->actions))) {
print "<font color=red>Error: Invalid action $action</font>";
return false;
}
print "<ol>";
foreach($selectionKeys as $key) {
print "<li>";
flush();
//printf ("Performing action=%s on key=%s",$action,$key);
$account=array('username' => $key['username'],
'domain' => $key['domain']
);
if ($action=='block') {
$function=array('commit' => array('name' => 'addToGroup',
'parameters' => array($account,'block'),
'logs' => array('success' => sprintf('SIP account %s@%s has been blocked',$key['username'],$key['domain'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
} else if ($action=='deblock') {
$function=array('commit' => array('name' => 'removeFromGroup',
'parameters' => array($account,'block'),
'logs' => array('success' => sprintf('SIP account %s@%s has been de-blocked',$key['username'],$key['domain'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
} else if ($action=='removefromgroup') {
if (!strlen($sub_action_parameter)) {
printf ("<font color=red>Error: you must enter a group name</font>");
break;
}
$function=array('commit' => array('name' => 'removeFromGroup',
'parameters' => array($account,$sub_action_parameter),
'logs' => array('success' => sprintf('SIP account %s@%s has been removed from group',$key['username'],$key['domain'],$sub_action_parameter)
)
)
);
$this->SoapEngine->execute($function,$this->html);
} else if ($action=='addtogroup') {
if (!strlen($sub_action_parameter)) {
printf ("<font color=red>Error: you must enter a group name</font>");
break;
}
$function=array('commit' => array('name' => 'addToGroup',
'parameters' => array($account,$sub_action_parameter),
'logs' => array('success' => sprintf('SIP account %s@%s is now in group %s',$key['username'],$key['domain'],$sub_action_parameter)
)
)
);
$this->SoapEngine->execute($function,$this->html);
} else if ($action=='deblock_quota') {
$function=array('commit' => array('name' => 'removeFromGroup',
'parameters' => array($account,'quota'),
'logs' => array('success' => sprintf('SIP account %s@%s has been deblocked from quota',$key['username'],$key['domain'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
} else if ($action=='disable_pstn') {
$function=array('commit' => array('name' => 'removeFromGroup',
'parameters' => array($account,'free-pstn'),
'logs' => array('success' => sprintf('SIP account %s@%s has no access to the PSTN',$key['username'],$key['domain'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
} else if ($action=='enable_pstn') {
$function=array('commit' => array('name' => 'addToGroup',
'parameters' => array($account,'free-pstn'),
'logs' => array('success' => sprintf('SIP account %s@%s has access to the PSTN',$key['username'],$key['domain'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
} else if ($action=='delete') {
$function=array('commit' => array('name' => 'deleteAccount',
'parameters' => array($account),
'logs' => array('success' => sprintf('SIP account %s@%s has been deleted',$key['username'],$key['domain'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
} else if ($action=='prepaid') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
//print_r($result);
// Sanitize data types due to PHP bugs
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
$result->quota = intval($result->quota);
$result->answerTimeout = intval($result->answerTimeout);
$result->prepaid=1;
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($result),
'logs' => array('success' => sprintf('SIP account %s@%s is now prepaid',$key['username'],$key['domain'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action=='postpaid') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
$result->quota = intval($result->quota);
$result->answerTimeout = intval($result->answerTimeout);
$result->prepaid=0;
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($result),
'logs' => array('success' => sprintf('SIP account %s@%s is now postpaid',$key['username'],$key['domain'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action=='setquota') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
//print_r($result);
// Sanitize data types due to PHP bugs
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
$result->quota = intval($sub_action_parameter);
$result->answerTimeout = intval($result->answerTimeout);
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($result),
'logs' => array('success' => sprintf('SIP account %s@%s has quota set to %s',$key['username'],$key['domain'],$sub_action_parameter)
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action=='rmdsfromrpid') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
//print_r($result);
// Sanitize data types due to PHP bugs
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
if (is_numeric($sub_action_parameter) && strlen($result->rpid) > $sub_action_parameter) {
printf("%s %s",$result->rpid,$sub_action_parameter);
$result->rpid=substr($result->rpid,$sub_action_parameter);
printf("%s %s",$result->rpid,$sub_action_parameter);
} else {
printf ("<font color=red>Error: '%s' must be numeric and less than caller if length</font>",$sub_action_parameter);
continue;
}
$result->quota = intval($result->quota);
$result->answerTimeout = intval($result->answerTimeout);
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($result),
'logs' => array('success' => sprintf('SIP account %s@%s has PSTN caller ID set to %s',$key['username'],$key['domain'],$result->rpid)
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action=='rpidasusername') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
//print_r($result);
// Sanitize data types due to PHP bugs
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
if (is_numeric($key['username'])) $result->rpid=$key['username'];
$result->quota = intval($result->quota);
$result->answerTimeout = intval($result->answerTimeout);
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($result),
'logs' => array('success' => sprintf('SIP account %s@%s has PSTN caller ID set to %s',$key['username'],$key['domain'],$key['username'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action=='prefixtorpid') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
//print_r($result);
// Sanitize data types due to PHP bugs
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
if (is_numeric($sub_action_parameter)) {
$result->rpid=$sub_action_parameter.$result->rpid;
} else {
printf ("<font color=red>Error: '%s' must be numeric</font>",$sub_action_parameter);
continue;
}
$result->quota = intval($result->quota);
$result->answerTimeout = intval($result->answerTimeout);
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($result),
'logs' => array('success' => sprintf('SIP account %s@%s has PSTN caller ID set to %s ',$key['username'],$key['domain'],$result->rpid)
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action=='changecustomer' && $this->version > 1) {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
//print_r($result);
// Sanitize data types due to PHP bugs
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
if (is_numeric($sub_action_parameter)) {
$result->customer=intval($sub_action_parameter);
} else {
printf ("<font color=red>Error: '%s' must be numeric</font>",$sub_action_parameter);
continue;
}
$result->quota = intval($result->quota);
$result->answerTimeout = intval($result->answerTimeout);
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($result),
'logs' => array('success' => sprintf('SIP account %s@%s has customer set to %s ',$key['username'],$key['domain'],$result->customer)
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action=='changeowner') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
//print_r($result);
// Sanitize data types due to PHP bugs
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
if (is_numeric($sub_action_parameter)) {
$result->owner=intval($sub_action_parameter);
} else {
printf ("<font color=red>Error: '%s' must be numeric</font>",$sub_action_parameter);
continue;
}
$result->quota = intval($result->quota);
$result->answerTimeout = intval($result->answerTimeout);
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($result),
'logs' => array('success' => sprintf('SIP account %s@%s has owner set to %s ',$key['username'],$key['domain'],$result->owner)
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action=='changefirstname') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
$result->firstName=trim($sub_action_parameter);
$result->quota = intval($result->quota);
$result->answerTimeout = intval($result->answerTimeout);
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($result),
'logs' => array('success' => sprintf('SIP account %s@%s first name has been set to %s ',$key['username'],$key['domain'],$result->firstName)
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action=='changelastname') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
$result->lastName=trim($sub_action_parameter);
$result->quota = intval($result->quota);
$result->answerTimeout = intval($result->answerTimeout);
$function=array('commit' => array('name' => 'updateAccount',
'parameters' => array($result),
'logs' => array('success' => sprintf('SIP account %s@%s last name has been set to %s ',$key['username'],$key['domain'],$result->lastName)
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action=='addbalance') {
if (!is_numeric($sub_action_parameter)) {
printf ("<font color=red>Error: you must enter a positive balance</font>");
break;
}
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$result = $this->SoapEngine->soapclient->getAccount($account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
}
if (!$result->prepaid) {
printf ("<font color=red>Info: SIP account %s@%s is not prepaid, no action performed</font>",$key['username'],$key['domain']);
continue;
}
$function=array('commit' => array('name' => 'addBalance',
'parameters' => array($account,$sub_action_parameter),
'logs' => array('success' => sprintf('SIP account %s@%s balance has been increased with %s',$key['username'],$key['domain'],$sub_action_parameter)
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
}
print "</ol>";
}
}
class SipAliasesActions extends Actions {
var $actions=array(
'delete' => 'Delete SIP aliases'
);
function SipAliasesActions(&$SoapEngine) {
$this->Actions(&$SoapEngine);
}
function execute($selectionKeys,$action,$sub_action_parameter) {
if (!in_array($action,array_keys($this->actions))) {
print "<font color=red>Error: Invalid action $action</font>";
return false;
}
print "<ol>";
foreach($selectionKeys as $key) {
print "<li>";
flush();
//printf ("Performing action=%s on key=%s",$action,$key);
$alias=array('username' => $key['username'],
'domain' => $key['domain']
);
if ($action=='delete') {
$function=array('commit' => array('name' => 'deleteAlias',
'parameters' => array($alias),
'logs' => array('success' => sprintf('SIP alias %s@%s has been deleted',$key['username'],$key['domain'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
}
print "</ol>";
}
}
class EnumMappingsActions extends Actions {
var $actions=array(
'delete' => 'Delete ENUM mappings',
'changettl' => 'Change TTL to:',
'changeowner' => 'Change owner to:',
'changeinfo' => 'Change info to:'
);
var $mapping_fields=array('id' => 'integer',
'type' => 'text',
'mapto' => 'text',
'priority' => 'integer',
'ttl' => 'integer'
);
function EnumMappingsActions(&$SoapEngine) {
$this->Actions(&$SoapEngine);
}
function execute($selectionKeys,$action,$sub_action_parameter) {
if (!in_array($action,array_keys($this->actions))) {
print "<font color=red>Error: Invalid action $action</font>";
return false;
}
print "<ol>";
foreach($selectionKeys as $key) {
flush();
print "<li>";
$enum_id=array('number' => $key['number'],
'tld' => $key['tld']
);
if ($action=='delete') {
//printf ("Performing action=%s on key=%s",$action,$key);
$function=array('commit' => array('name' => 'deleteNumber',
'parameters' => array($enum_id),
'logs' => array('success' => sprintf('ENUM number +%s under %s has been deleted',$key['number'],$key['tld'])
)
)
);
$this->SoapEngine->execute($function,$this->html);
} else if ($action == 'changettl') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$number = $this->SoapEngine->soapclient->getNumber($enum_id);
if (PEAR::isError($number)) {
$error_msg = $number->getMessage();
$error_fault= $number->getFault();
$error_code = $number->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
if (!is_numeric($sub_action_parameter)) {
printf ("<font color=red>Error: TTL '%s' must be numeric</font>",$sub_action_parameter);
continue;
}
$new_mappings=array();
foreach ($number->mappings as $_mapping) {
foreach (array_keys($this->mapping_fields) as $field) {
if ($field == 'ttl') {
$new_mapping[$field]=intval($sub_action_parameter);
} else {
if ($this->mapping_fields[$field] == 'integer') {
$new_mapping[$field]=intval($_mapping->$field);
} else {
$new_mapping[$field]=$_mapping->$field;
}
}
}
$new_mappings[]=$new_mapping;
}
$number->mappings=$new_mappings;
$function=array('commit' => array('name' => 'updateNumber',
'parameters' => array($number),
'logs' => array('success' => sprintf('ENUM number %s@%s TTL has been set to %d',$key['number'],$key['tld'],intval($sub_action_parameter))
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action == 'changeowner') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$number = $this->SoapEngine->soapclient->getNumber($enum_id);
if (PEAR::isError($number)) {
$error_msg = $number->getMessage();
$error_fault= $number->getFault();
$error_code = $number->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
$new_mappings=array();
foreach ($number->mappings as $_mapping) {
$new_mappings[]=$_mapping;
}
$number->mappings=$new_mappings;
if (is_numeric($sub_action_parameter)) {
$number->owner=intval($sub_action_parameter);
} else {
printf ("<font color=red>Error: Owner '%s' must be numeric</font>",$sub_action_parameter);
continue;
}
$function=array('commit' => array('name' => 'updateNumber',
'parameters' => array($number),
'logs' => array('success' => sprintf('ENUM number %s@%s owner has been set to %d',$key['number'],$key['tld'],intval($sub_action_parameter))
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
} else if ($action == 'changeinfo') {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$number = $this->SoapEngine->soapclient->getNumber($enum_id);
if (PEAR::isError($number)) {
$error_msg = $number->getMessage();
$error_fault= $number->getFault();
$error_code = $number->getCode();
printf ("<font color=red>Error: %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
break;
} else {
$new_mappings=array();
foreach ($number->mappings as $_mapping) {
$new_mappings[]=$_mapping;
}
$number->mappings=$new_mappings;
$number->info=trim($sub_action_parameter);
$function=array('commit' => array('name' => 'updateNumber',
'parameters' => array($number),
'logs' => array('success' => sprintf('ENUM number %s@%s info has been set to %s',$key['number'],$key['tld'],trim($sub_action_parameter))
)
)
);
$this->SoapEngine->execute($function,$this->html);
}
}
}
print "</ol>";
}
}
class CustomersActions extends Actions {
var $actions=array(
'delete' => 'Delete customers'
);
function CustomerActions(&$SoapEngine) {
$this->Actions(&$SoapEngine);
}
function execute($selectionKeys,$action,$sub_action_parameter) {
if (!in_array($action,array_keys($this->actions))) {
print "<font color=red>Error: Invalid action $action</font>";
return false;
}
print "<ol>";
foreach($selectionKeys as $key) {
flush();
print "<li>";
if ($action=='delete') {
$function=array('commit' => array('name' => 'deleteAccount',
'parameters' => intval($key),
'logs' => array('success' => sprintf('Customer id %s has been deleted',$key)))
);
$this->SoapEngine->execute($function,$this->html);
}
}
print "</ol>";
}
}
?>
diff --git a/provisioning/ngnpro_soap_library.phtml b/provisioning/ngnpro_soap_library.phtml
index a45617c..106a00e 100644
--- a/provisioning/ngnpro_soap_library.phtml
+++ b/provisioning/ngnpro_soap_library.phtml
@@ -1,934 +1,1113 @@
<?
/*
Copyright (c) 2007 AG Projects
http://ag-projects.com
Author Adrian Georgescu
This library provide NGN-Pro soap client functions
It requires the SOAP library from http://pear.php.net
*/
require_once('SOAP/Client.php');
class SOAP_Client_Custom extends SOAP_Client {
+
+
+
+ function _serializeValue(&$value, $name = '', $type = false, $elNamespace = NULL, $typeNamespace=NULL, $options=array(), $attributes = array(), $artype='')
+ {
+ $namespaces = array();
+ $arrayType = $array_depth = $xmlout_value = null;
+ $typePrefix = $elPrefix = $xmlout_offset = $xmlout_arrayType = $xmlout_type = $xmlns = '';
+ $ptype = $array_type_ns = '';
+
+ if (!$name || is_numeric($name)) {
+ $name = 'item';
+ }
+
+ if ($this->_wsdl)
+ list($ptype, $arrayType, $array_type_ns, $array_depth)
+ = $this->_wsdl->getSchemaType($type, $name, $typeNamespace);
+
+ if (!$arrayType) $arrayType = $artype;
+ if (!$ptype) $ptype = $this->_getType($value);
+ if (!$type) $type = $ptype;
+
+ if (strcasecmp($ptype,'Struct') == 0 || strcasecmp($type,'Struct') == 0) {
+ // struct
+ $vars = NULL;
+ if (is_object($value)) {
+ $vars = get_object_vars($value);
+ } else {
+ $vars = &$value;
+ }
+ if (is_array($vars)) {
+ foreach (array_keys($vars) as $k) {
+ if ($k[0]=='_') continue; // hide private vars
+ if (is_object($vars[$k])) {
+ if (is_a($vars[$k],'soap_value')) {
+ $xmlout_value .= $vars[$k]->serialize($this);
+ } else {
+ // XXX get the members and serialize them instead
+ // converting to an array is more overhead than we
+ // should realy do, but php-soap is on it's way.
+ $xmlout_value .= $this->_serializeValue(get_object_vars($vars[$k]), $k, false, $this->_section5?NULL:$elNamespace);
+ }
+ } else {
+ $xmlout_value .= $this->_serializeValue($vars[$k],$k, false, $this->_section5?NULL:$elNamespace);
+ }
+ }
+ }
+ } else if (strcasecmp($ptype,'Array')==0 || strcasecmp($type,'Array')==0) {
+ // array
+ $typeNamespace = SOAP_SCHEMA_ENCODING;
+ $orig_type = $type;
+ $type = 'Array';
+ $numtypes = 0;
+ // XXX this will be slow on larger array's. Basicly, it flattens array's to allow us
+ // to serialize multi-dimensional array's. We only do this if arrayType is set,
+ // which will typicaly only happen if we are using WSDL
+ if (isset($options['flatten']) || ($arrayType && (strchr($arrayType,',') || strstr($arrayType,'][')))) {
+ $numtypes = $this->_multiArrayType($value, $arrayType, $ar_size, $xmlout_value);
+ }
+
+ $array_type = $array_type_prefix = '';
+ if ($numtypes != 1) {
+ $arrayTypeQName =& new QName($arrayType);
+ $arrayType = $arrayTypeQName->name;
+ $array_types = array();
+ $array_val = NULL;
+
+ // serialize each array element
+ $ar_size = count($value);
+ foreach ($value as $array_val) {
+ if ($this->_isSoapValue($array_val)) {
+ $array_type = $array_val->type;
+ $array_types[$array_type] = 1;
+ $array_type_ns = $array_val->type_namespace;
+ $xmlout_value .= $array_val->serialize($this);
+ } else {
+ $array_type = $this->_getType($array_val);
+ $array_types[$array_type] = 1;
+ $xmlout_value .= $this->_serializeValue($array_val,'item', $array_type, $this->_section5?NULL:$elNamespace);
+ }
+ }
+
+ $xmlout_offset = " SOAP-ENC:offset=\"[0]\"";
+ if (!$arrayType) {
+ $numtypes = count($array_types);
+ if ($numtypes == 1) $arrayType = $array_type;
+ // using anyType is more interoperable
+ if ($array_type == 'Struct') {
+ $array_type = '';
+ } else if ($array_type == 'Array') {
+ $arrayType = 'anyType';
+ $array_type_prefix = 'xsd';
+ } else
+ if (!$arrayType) $arrayType = $array_type;
+ }
+ }
+ if (!$arrayType || $numtypes > 1) {
+ $arrayType = 'xsd:anyType'; // should reference what schema we're using
+ } else {
+ if ($array_type_ns) {
+ $array_type_prefix = $this->_getNamespacePrefix($array_type_ns);
+ } else if (array_key_exists($arrayType, $this->_typemap[$this->_XMLSchemaVersion])) {
+ $array_type_prefix = $this->_namespaces[$this->_XMLSchemaVersion];
+ }
+ if ($array_type_prefix)
+ $arrayType = $array_type_prefix.':'.$arrayType;
+ }
+
+ $xmlout_arrayType = " SOAP-ENC:arrayType=\"" . $arrayType;
+ if ($array_depth != null) {
+ for ($i = 0; $i < $array_depth; $i++) {
+ $xmlout_arrayType .= '[]';
+ }
+ }
+ $xmlout_arrayType .= "[$ar_size]\"";
+ } else if ($this->_isSoapValue($value)) {
+ $xmlout_value =& $value->serialize($this);
+ } else if ($type == 'string') {
+ $xmlout_value = htmlspecialchars($value);
+ } else if ($type == 'rawstring') {
+ $xmlout_value =& $value;
+ } else if ($type == 'boolean') {
+ $xmlout_value = $value?'true':'false';
+ } else {
+ $xmlout_value =& $value;
+ }
+
+ // add namespaces
+ if ($elNamespace) {
+ $elPrefix = $this->_getNamespacePrefix($elNamespace);
+ $xmlout_name = "$elPrefix:$name";
+ } else {
+ $xmlout_name = $name;
+ }
+
+ if ($typeNamespace) {
+ $typePrefix = $this->_getNamespacePrefix($typeNamespace);
+ $xmlout_type = "$typePrefix:$type";
+ } else if ($type && array_key_exists($type, $this->_typemap[$this->_XMLSchemaVersion])) {
+ $typePrefix = $this->_namespaces[$this->_XMLSchemaVersion];
+ $xmlout_type = "$typePrefix:$type";
+ }
+
+ // handle additional attributes
+ $xml_attr = '';
+ if (count($attributes) > 0) {
+ foreach ($attributes as $k => $v) {
+ $kqn =& new QName($k);
+ $vqn =& new QName($v);
+ $xml_attr .= ' '.$kqn->fqn().'="'.$vqn->fqn().'"';
+ }
+ }
+
+ // store the attachement for mime encoding
+ if (isset($options['attachment']))
+ $this->__attachments[] = $options['attachment'];
+
+ if ($this->_section5) {
+ if ($xmlout_type) $xmlout_type = " xsi:type=\"$xmlout_type\"";
+ if (is_null($xmlout_value)) {
+ $xml = "\r\n<$xmlout_name$xmlout_type$xmlns$xmlout_arrayType$xml_attr/>";
+ } else {
+ $xml = "\r\n<$xmlout_name$xmlout_type$xmlns$xmlout_arrayType$xmlout_offset$xml_attr>".
+ $xmlout_value."</$xmlout_name>";
+ }
+ } else {
+ if (is_null($xmlout_value)) {
+ $xml = "\r\n<$xmlout_name$xmlns$xml_attr/>";
+ } else {
+ $xml = "\r\n<$xmlout_name$xmlns$xml_attr>".
+ $xmlout_value."</$xmlout_name>";
+ }
+ }
+ return $xml;
+ }
+
+
+
+
function addHeader(&$soap_value) {
// add a new header to the SOAP message if not already exists
if (is_array($soap_value) && is_array($this->headersOut)) {
foreach ($this->headersOut as $_header) {
if ($_header->name == $soap_value[0]) {
return true;
}
}
}
if (is_a($soap_value,'soap_header')) {
$this->headersOut[] =& $soap_value;
} else if (gettype($soap_value) == 'array') {
// name, value, namespace, mustunderstand, actor
$this->headersOut[] =& new SOAP_Header($soap_value[0], NULL, $soap_value[1], $soap_value[2], $soap_value[3]);;
} else {
$this->_raiseSoapFault("Don't understand the header info you provided. Must be array or SOAP_Header.");
}
}
}
class WebService_NGNPro_SipPort extends SOAP_Client_Custom
{
function WebService_NGNPro_SipPort($url)
{
$this->SOAP_Client_Custom($url, 0);
}
function &addDomain($domain) {
return $this->call("addDomain",
$v = array("domain"=>$domain),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &updateDomain($domain) {
// domain is a ComplexType SipDomain,
//refer to wsdl for more info
$domain =& new SOAP_Value('domain','{urn:AGProjects:NGNPro}SipDomain',$domain);
return $this->call("updateDomain",
$v = array("domain"=>$domain),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteDomain($domain) {
return $this->call("deleteDomain",
$v = array("domain"=>$domain),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getDomains($query) {
// query is a ComplexType SipDomainQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}SipDomainQuery',$query);
return $this->call("getDomains",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getDomainStatistics($filter) {
return $this->call("getDomainStatistics",
$v = array("filter"=>$filter),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &addTrustedPeer($peer) {
// peer is a ComplexType TrustedPeer,
//refer to wsdl for more info
$peer =& new SOAP_Value('peer','{urn:AGProjects:NGNPro}TrustedPeer',$peer);
return $this->call("addTrustedPeer",
$v = array("peer"=>$peer),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteTrustedPeer($ip) {
return $this->call("deleteTrustedPeer",
$v = array("ip"=>$ip),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getTrustedPeers($query) {
// query is a ComplexType TrustedPeerQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}TrustedPeerQuery',$query);
return $this->call("getTrustedPeers",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &addAccount($account) {
// account is a ComplexType SipAccount,
//refer to wsdl for more info
$account =& new SOAP_Value('account','{urn:AGProjects:NGNPro}SipAccount',$account);
return $this->call("addAccount",
$v = array("account"=>$account),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &updateAccount($account) {
// account is a ComplexType SipAccount,
//refer to wsdl for more info
$account =& new SOAP_Value('account','{urn:AGProjects:NGNPro}SipAccount',$account);
return $this->call("updateAccount",
$v = array("account"=>$account),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteAccount($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("deleteAccount",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getAccount($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("getAccount",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getAccounts($query) {
// query is a ComplexType SipQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}SipQuery',$query);
return $this->call("getAccounts",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &addAlias($alias) {
// alias is a ComplexType SipAlias,
//refer to wsdl for more info
$alias =& new SOAP_Value('alias','{urn:AGProjects:NGNPro}SipAlias',$alias);
return $this->call("addAlias",
$v = array("alias"=>$alias),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &updateAlias($alias) {
// alias is a ComplexType SipAlias,
//refer to wsdl for more info
$alias =& new SOAP_Value('alias','{urn:AGProjects:NGNPro}SipAlias',$alias);
return $this->call("updateAlias",
$v = array("alias"=>$alias),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteAlias($id) {
// id is a ComplexType SipId,
//refer to wsdl for more info
$id =& new SOAP_Value('id','{urn:AGProjects:NGNPro}SipId',$id);
return $this->call("deleteAlias",
$v = array("id"=>$id),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getAlias($id) {
// id is a ComplexType SipId,
//refer to wsdl for more info
$id =& new SOAP_Value('id','{urn:AGProjects:NGNPro}SipId',$id);
return $this->call("getAlias",
$v = array("id"=>$id),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getAliasesForAccount($target) {
// target is a ComplexType SipId,
//refer to wsdl for more info
$target =& new SOAP_Value('target','{urn:AGProjects:NGNPro}SipId',$target);
return $this->call("getAliasesForAccount",
$v = array("target"=>$target),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getAliases($query) {
// query is a ComplexType AliasQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}AliasQuery',$query);
return $this->call("getAliases",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &addToGroup($sipId, $group) {
return $this->call("addToGroup",
$v = array("sipId"=>$sipId, "group"=>$group),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &removeFromGroup($sipId, $group) {
return $this->call("removeFromGroup",
$v = array("sipId"=>$sipId, "group"=>$group),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getGroups($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("getGroups",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &addBalance($sipId, $value) {
return $this->call("addBalance",
$v = array("sipId"=>$sipId, "value"=>$value),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &addBalanceFromVoucher($sipId, $card) {
// card is a ComplexType PrepaidCard,
//refer to wsdl for more info
$card =& new SOAP_Value('card','{urn:AGProjects:NGNPro}PrepaidCard',$card);
return $this->call("addBalanceFromVoucher",
$v = array("sipId"=>$sipId, "card"=>$card),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getPrepaidStatusNew($sipIds) {
// sipIds is a ComplexType SipIdArray,
//refer to wsdl for more info
$sipIds =& new SOAP_Value('sipIds','{urn:AGProjects:NGNPro}SipIdArray',$sipIds);
return $this->call("getPrepaidStatus",
$v = array("sipIds"=>$sipIds),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getPrepaidStatus($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("getPrepaidStatus",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getCreditHistory($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("getCreditHistory",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &addPhonebookEntry($sipId, $entry) {
// entry is a ComplexType PhonebookEntry,
//refer to wsdl for more info
$entry =& new SOAP_Value('entry','{urn:AGProjects:NGNPro}PhonebookEntry',$entry);
return $this->call("addPhonebookEntry",
$v = array("sipId"=>$sipId, "entry"=>$entry),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &updatePhonebookEntry($sipId, $entry) {
// entry is a ComplexType PhonebookEntry,
//refer to wsdl for more info
$entry =& new SOAP_Value('entry','{urn:AGProjects:NGNPro}PhonebookEntry',$entry);
return $this->call("updatePhonebookEntry",
$v = array("sipId"=>$sipId, "entry"=>$entry),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deletePhonebookEntry($sipId, $uri) {
return $this->call("deletePhonebookEntry",
$v = array("sipId"=>$sipId, "uri"=>$uri),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getPhonebookEntries($sipId, $match, $range) {
// range is a ComplexType Range,
//refer to wsdl for more info
$range =& new SOAP_Value('range','{urn:AGProjects:NGNPro}Range',$range);
return $this->call("getPhonebookEntries",
$v = array("sipId"=>$sipId, "match"=>$match, "range"=>$range),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &setRejectMembers($sipId, $members) {
// members is a ComplexType StringArray,
//refer to wsdl for more info
$members =& new SOAP_Value('members','{urn:AGProjects:NGNPro}StringArray',$members);
return $this->call("setRejectMembers",
$v = array("sipId"=>$sipId, "members"=>$members),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getRejectMembers($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("getRejectMembers",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &setAcceptRules($sipId, $rules) {
// rules is a ComplexType AcceptRules,
//refer to wsdl for more info
$rules =& new SOAP_Value('rules','{urn:AGProjects:NGNPro}AcceptRules',$rules);
return $this->call("setAcceptRules",
$v = array("sipId"=>$sipId, "rules"=>$rules),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getAcceptRules($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("getAcceptRules",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &setBarringPrefixes($sipId, $prefixes) {
// prefixes is a ComplexType StringArray,
//refer to wsdl for more info
$prefixes =& new SOAP_Value('prefixes','{urn:AGProjects:NGNPro}StringArray',$prefixes);
return $this->call("setBarringPrefixes",
$v = array("sipId"=>$sipId, "prefixes"=>$prefixes),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getBarringPrefixes($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("getBarringPrefixes",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &setCallDiversions($sipId, $diversions) {
// diversions is a ComplexType CallDiversions,
//refer to wsdl for more info
$diversions =& new SOAP_Value('diversions','{urn:AGProjects:NGNPro}CallDiversions',$diversions);
return $this->call("setCallDiversions",
$v = array("sipId"=>$sipId, "diversions"=>$diversions),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getCallDiversions($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("getCallDiversions",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getCalls($sipId, $query) {
// query is a ComplexType CallsQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}CallsQuery',$query);
return $this->call("getCalls",
$v = array("sipId"=>$sipId, "query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getCallStatistics($sipId, $query) {
// query is a ComplexType CallsQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}CallsQuery',$query);
return $this->call("getCallStatistics",
$v = array("sipId"=>$sipId, "query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getSipDeviceLocations($sipIds) {
// sipIds is a ComplexType SipIdArray,
//refer to wsdl for more info
$sipIds =& new SOAP_Value('sipIds','{urn:AGProjects:NGNPro}SipIdArray',$sipIds);
return $this->call("getSipDeviceLocations",
$v = array("sipIds"=>$sipIds),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getTrace($nodeIP, $callID, $fromTag) {
return $this->call("getTrace",
$v = array("nodeIp"=>$nodeIP, "callId"=>$callID, "fromTag"=>$fromTag),
array('namespace'=>'urn:AGProjects:NGNPro:Sip',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
}
class WebService_NGNPro_VoicemailPort extends SOAP_Client_Custom
{
function WebService_NGNPro_VoicemailPort($url)
{
$this->SOAP_Client_Custom($url, 0);
}
function &addAccount($account) {
// account is a ComplexType VoicemailAccount,
//refer to wsdl for more info
$account =& new SOAP_Value('account','{urn:AGProjects:NGNPro}VoicemailAccount',$account);
return $this->call("addAccount",
$v = array("account"=>$account),
array('namespace'=>'urn:AGProjects:NGNPro:Voicemail',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &updateAccount($account) {
// account is a ComplexType VoicemailAccount,
//refer to wsdl for more info
$account =& new SOAP_Value('account','{urn:AGProjects:NGNPro}VoicemailAccount',$account);
return $this->call("updateAccount",
$v = array("account"=>$account),
array('namespace'=>'urn:AGProjects:NGNPro:Voicemail',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteAccount($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("deleteAccount",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Voicemail',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getAccount($sipId) {
// sipId is a ComplexType SipId,
//refer to wsdl for more info
$sipId =& new SOAP_Value('sipId','{urn:AGProjects:NGNPro}SipId',$sipId);
return $this->call("getAccount",
$v = array("sipId"=>$sipId),
array('namespace'=>'urn:AGProjects:NGNPro:Voicemail',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &setAnnouncement($sipId, $message) {
return $this->call("setAnnouncement",
$v = array("sipId"=>$sipId, "message"=>$message),
array('namespace'=>'urn:AGProjects:NGNPro:Voicemail',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
}
class WebService_NGNPro_EnumPort extends SOAP_Client_Custom
{
function WebService_NGNPro_EnumPort($url)
{
$this->SOAP_Client_Custom($url, 0);
}
function &addRange($range) {
// range is a ComplexType EnumRange,
//refer to wsdl for more info
$range =& new SOAP_Value('range','{urn:AGProjects:NGNPro}EnumRange',$range);
return $this->call("addRange",
$v = array("range"=>$range),
array('namespace'=>'urn:AGProjects:NGNPro:Enum',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &updateRange($range) {
// range is a ComplexType EnumRange,
//refer to wsdl for more info
$range =& new SOAP_Value('range','{urn:AGProjects:NGNPro}EnumRange',$range);
return $this->call("updateRange",
$v = array("range"=>$range),
array('namespace'=>'urn:AGProjects:NGNPro:Enum',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteRange($range) {
// range is a ComplexType EnumRangeId,
//refer to wsdl for more info
$range =& new SOAP_Value('range','{urn:AGProjects:NGNPro}EnumRangeId',$range);
return $this->call("deleteRange",
$v = array("range"=>$range),
array('namespace'=>'urn:AGProjects:NGNPro:Enum',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getRanges($query) {
// query is a ComplexType EnumRangeQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}EnumRangeQuery',$query);
return $this->call("getRanges",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Enum',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &addNumber($number) {
// number is a ComplexType EnumNumber,
//refer to wsdl for more info
$number =& new SOAP_Value('number','{urn:AGProjects:NGNPro}EnumNumber',$number);
return $this->call("addNumber",
$v = array("number"=>$number),
array('namespace'=>'urn:AGProjects:NGNPro:Enum',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &updateNumber($number) {
// number is a ComplexType EnumNumber,
//refer to wsdl for more info
$number =& new SOAP_Value('number','{urn:AGProjects:NGNPro}EnumNumber',$number);
return $this->call("updateNumber",
$v = array("number"=>$number),
array('namespace'=>'urn:AGProjects:NGNPro:Enum',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteNumber($enumId) {
// enumId is a ComplexType EnumId,
//refer to wsdl for more info
$enumId =& new SOAP_Value('enumId','{urn:AGProjects:NGNPro}EnumId',$enumId);
return $this->call("deleteNumber",
$v = array("enumId"=>$enumId),
array('namespace'=>'urn:AGProjects:NGNPro:Enum',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getNumber($enumId) {
// enumId is a ComplexType EnumId,
//refer to wsdl for more info
$enumId =& new SOAP_Value('enumId','{urn:AGProjects:NGNPro}EnumId',$enumId);
return $this->call("getNumber",
$v = array("enumId"=>$enumId),
array('namespace'=>'urn:AGProjects:NGNPro:Enum',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getNumbers($query) {
// query is a ComplexType EnumQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}EnumQuery',$query);
return $this->call("getNumbers",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Enum',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
}
class WebService_NGNPro_RatingPort extends SOAP_Client_Custom
{
function WebService_NGNPro_RatingPort($url)
{
$this->SOAP_Client_Custom($url, 0);
}
function &setEntityProfiles($profiles) {
// profiles is a ComplexType RatingEntityProfiles,
//refer to wsdl for more info
$profiles =& new SOAP_Value('profiles','{urn:AGProjects:NGNPro}RatingEntityProfiles',$profiles);
return $this->call("setEntityProfiles",
$v = array("profiles"=>$profiles),
array('namespace'=>'urn:AGProjects:NGNPro:Rating',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteEntityProfiles($entity) {
return $this->call("deleteEntityProfiles",
$v = array("entity"=>$entity),
array('namespace'=>'urn:AGProjects:NGNPro:Rating',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getEntityProfiles($entity) {
return $this->call("getEntityProfiles",
$v = array("entity"=>$entity),
array('namespace'=>'urn:AGProjects:NGNPro:Rating',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
}
class WebService_NGNPro_CustomerPort extends SOAP_Client_Custom
{
function WebService_NGNPro_CustomerPort($url)
{
$this->SOAP_Client_Custom($url, 0);
}
function &addAccount($account) {
// account is a ComplexType CustomerAccount,
//refer to wsdl for more info
$account =& new SOAP_Value('account','{urn:AGProjects:NGNPro}CustomerAccount',$account);
return $this->call("addAccount",
$v = array("account"=>$account),
array('namespace'=>'urn:AGProjects:NGNPro:Customer',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &updateAccount($account) {
// account is a ComplexType CustomerAccount,
//refer to wsdl for more info
$account =& new SOAP_Value('account','{urn:AGProjects:NGNPro}CustomerAccount',$account);
return $this->call("updateAccount",
$v = array("account"=>$account),
array('namespace'=>'urn:AGProjects:NGNPro:Customer',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteAccount($id) {
return $this->call("deleteAccount",
$v = array("id"=>$id),
array('namespace'=>'urn:AGProjects:NGNPro:Customer',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getAccount($id) {
return $this->call("getAccount",
$v = array("id"=>$id),
array('namespace'=>'urn:AGProjects:NGNPro:Customer',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getCustomers($query) {
// query is a ComplexType CustomerQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}CustomerQuery',$query);
return $this->call("getCustomers",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Customer',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getResellers($query) {
// query is a ComplexType CustomerQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}CustomerQuery',$query);
return $this->call("getResellers",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Customer',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'' ));
}
function &setProperties($customer, $properties) {
// properties is a ComplexType CustomerPropertyArray,
//refer to wsdl for more info
$properties =& new SOAP_Value('properties','{urn:AGProjects:NGNPro}CustomerPropertyArray',$properties);
return $this->call("setProperties",
$v = array("customer"=>$customer, "properties"=>$properties),
array('namespace'=>'urn:AGProjects:NGNPro:Customer',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getProperties($customer) {
return $this->call("getProperties",
$v = array("customer"=>$customer),
array('namespace'=>'urn:AGProjects:NGNPro:Customer',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
}
class WebService_NGNPro_NetworkPort extends SOAP_Client_Custom
{
function WebService_NGNPro_NetworkPort($url)
{
$this->SOAP_Client_Custom($url, 0);
}
function &addGateway($gateway) {
// gateway is a ComplexType Gateway,
//refer to wsdl for more info
$gateway =& new SOAP_Value('gateway','{urn:AGProjects:NGNPro}Gateway',$gateway);
return $this->call("addGateway",
$v = array("gateway"=>$gateway),
array('namespace'=>'urn:AGProjects:NGNPro:Network',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteGateway($name) {
return $this->call("deleteGateway",
$v = array("name"=>$name),
array('namespace'=>'urn:AGProjects:NGNPro:Network',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getGateways($query) {
// query is a ComplexType GatewayQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}GatewayQuery',$query);
return $this->call("getGateways",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Network',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &addGatewayGroup($group) {
return $this->call("addGatewayGroup",
$v = array("group"=>$group),
array('namespace'=>'urn:AGProjects:NGNPro:Network',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteGatewayGroup($group) {
return $this->call("deleteGatewayGroup",
$v = array("group"=>$group),
array('namespace'=>'urn:AGProjects:NGNPro:Network',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getGatewayGroups($query) {
// query is a ComplexType GatewayGroupQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}GatewayGroupQuery',$query);
return $this->call("getGatewayGroups",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Network',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &addRoutes($routes) {
// routes is a ComplexType RouteArray,
//refer to wsdl for more info
$routes =& new SOAP_Value('routes','{urn:AGProjects:NGNPro}RouteArray',$routes);
return $this->call("addRoutes",
$v = array("routes"=>$routes),
array('namespace'=>'urn:AGProjects:NGNPro:Network',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deleteRoutes($routes) {
// routes is a ComplexType RouteArray,
//refer to wsdl for more info
$routes =& new SOAP_Value('routes','{urn:AGProjects:NGNPro}RouteArray',$routes);
return $this->call("deleteRoutes",
$v = array("routes"=>$routes),
array('namespace'=>'urn:AGProjects:NGNPro:Network',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getRoutes($query) {
// query is a ComplexType RouteQuery,
//refer to wsdl for more info
$query =& new SOAP_Value('query','{urn:AGProjects:NGNPro}RouteQuery',$query);
return $this->call("getRoutes",
$v = array("query"=>$query),
array('namespace'=>'urn:AGProjects:NGNPro:Network',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
}
class WebService_SoapSIMPLEProxy_PresencePort extends SOAP_Client_Custom
{
function WebService_SoapSIMPLEProxy_PresencePort($url)
{
$this->SOAP_Client_Custom($url, 0);
}
function &setPresenceInformation($sipId, $password, $information) {
// information is a ComplexType PresenceInformation,
//refer to wsdl for more info
$information =& new SOAP_Value('information','{urn:AGProjects:SoapSIMPLEProxy}PresenceInformation',$information);
return $this->call("setPresenceInformation",
$v = array("sipId"=>$sipId, "password"=>$password, "information"=>$information),
array('namespace'=>'urn:AGProjects:SoapSIMPLEProxy:Presence',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getPresenceInformation($sipId, $password) {
return $this->call("getPresenceInformation",
$v = array("sipId"=>$sipId, "password"=>$password),
array('namespace'=>'urn:AGProjects:SoapSIMPLEProxy:Presence',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &deletePresenceInformation($sipId, $password) {
return $this->call("deletePresenceInformation",
$v = array("sipId"=>$sipId, "password"=>$password),
array('namespace'=>'urn:AGProjects:SoapSIMPLEProxy:Presence',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getWatchers($sipId, $password) {
return $this->call("getWatchers",
$v = array("sipId"=>$sipId, "password"=>$password),
array('namespace'=>'urn:AGProjects:SoapSIMPLEProxy:Presence',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &setPolicy($sipId, $password, $policy) {
// policy is a ComplexType PresencePolicy,
//refer to wsdl for more info
$policy =& new SOAP_Value('policy','{urn:AGProjects:SoapSIMPLEProxy}PresencePolicy',$policy);
return $this->call("setPolicy",
$v = array("sipId"=>$sipId, "password"=>$password, "policy"=>$policy),
array('namespace'=>'urn:AGProjects:SoapSIMPLEProxy:Presence',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
function &getPolicy($sipId, $password) {
return $this->call("getPolicy",
$v = array("sipId"=>$sipId, "password"=>$password),
array('namespace'=>'urn:AGProjects:SoapSIMPLEProxy:Presence',
'soapaction'=>'',
'style'=>'rpc',
'use'=>'encoded' ));
}
}
?>
diff --git a/provisioning/sip_settings_lib.phtml b/provisioning/sip_settings_lib.phtml
index e47a6ff..cd56c27 100644
--- a/provisioning/sip_settings_lib.phtml
+++ b/provisioning/sip_settings_lib.phtml
@@ -1,5520 +1,5521 @@
<?
/*
Copyright (c) 2007 AG Projects
http://ag-projects.com
Author Adrian Georgescu
This library provide the functions for managing properties
of SIP accounts retrieved from NGN-Pro server
*/
class SipSettings {
var $soapTimeout = 5;
var $login_type = 'subscriber';
var $soapClassSipPort = 'WebService_NGNPro_SipPort';
var $soapClassEnumPort = 'WebService_NGNPro_EnumPort';
var $soapClassRatingPort = 'WebService_NGNPro_RatingPort';
var $soapClassVoicemailPort = 'WebService_NGNPro_VoicemailPort';
var $soapClassCustomerPort = 'WebService_NGNPro_CustomerPort';
var $soapClassPresencePort = 'WebService_SoapSIMPLEProxy_PresencePort';
var $showSoapConnectionInfo = false;
// this variables can be overwritten per soap engine (in ngnpro_soap_engines.inc)
// and in reseller properties
var $templates_path = './templates';
var $support_company = "Example company";
var $cdrtool_address = "https://cdrtool.example.com/CDRTool";
var $support_web = "https://www.example.com/help";
var $support_email = "Support <support@example.com>";
var $sip_settings_page = "https://cdrtool.example.com/sip_settings.phtml";
var $xcap_root = "https://cdrtool.example.com/xcap-root";
var $pstn_access = false;
var $sip_proxy = "proxy.example.com";
var $voicemail_server = "vm.example.com";
var $voicemail_access_number = "*70";
var $absolute_voicemail_uri = false; // use <voice-mailbox>
var $FUNC_access_number = "*21*";
var $FNOL_access_number = "*22*";
var $FNOA_access_number = "*23*";
var $FBUS_access_number = "*23*";
var $change_privacy_access_number = "*67";
var $check_privacy_access_number = "*68";
var $enable_thor = false;
var $sip_accounts_lite = false; // show basic settings by default, and advanced if property advanced is set to 1
// end variables
var $tab = "settings";
var $phonebook_img = "<img src=images/pb.gif border=0>";
var $call_img = "<img src=images/call.gif border=0>";
var $delete_img = "<img src=images/del_pb.gif border=0>";
var $ForwardingTargetTypes = array("Voicemail","Other","Mobile","Tel","ENUM","Disabled");
var $groups = array();
var $WEBdictionary = array(
'mailto',
'free-pstn',
'blocked',
'sip_password',
'first_name',
'last_name',
'quota',
'language',
'quota_reset',
'used_quota',
'voicemail',
'anonymous',
'advanced',
'rpid',
'timezone',
'accept',
'accept_temporary_group',
'accept_temporary_remain',
'web_timestamp',
'acceptDailyStartTime',
'acceptDailyStopTime',
'acceptDailyGroup',
'quickdial',
'delete_voicemail',
'voicemail_password',
'region',
'timeout',
'owner',
'mobile_number'
);
var $presenceStatuses = array('allow','deny','confirm');
var $presenceActivities = array('busy' => 'buddy_busy.jpg',
'open' => 'buddy_online.jpg',
'available' => 'buddy_online.jpg',
'idle' => 'buddy_idle.jpg',
'away' => 'buddy_away.jpg'
);
var $emergencyRegions = array();
var $timeoutDefault = 35;
var $timeoutEls=array(
"5" =>"5 s",
"10"=>"10 s",
"15"=>"15 s",
"20"=>"20 s",
"25"=>"25 s",
"30"=>"30 s",
"35"=>"35 s",
"40"=>"40 s",
"45"=>"45 s",
"50"=>"50 s",
"55"=>"55 s",
"60"=>"60 s"
);
var $exportFilename = "export.txt";
var $presenceRules=array();
var $enums=array();
var $barringPrefixes=array();
var $presenceWatchers=array();
var $SipUaAImagesPath="status/images";
function SipSettings($account,$loginCredentials=array(),$soapEngines=array()) {
$this->soapEngines = $soapEngines;
$debug=sprintf("<font color=blue><p><b>Initialize class %s(%s)</b></font>",get_class($this),$account);
dprint($debug);
//dprint_r($loginCredentials);
$this->loginCredentials = &$loginCredentials;
if ($loginCredentials['login_type']) {
$this->login_type = $loginCredentials['login_type'];
}
if ($this->login_type == "admin") {
if ($_REQUEST['reseller']) {
$this->reseller = $_REQUEST['reseller'];
} else {
$this->reseller = $loginCredentials['reseller'];
}
if ($_REQUEST['customer']) {
$this->customer = $_REQUEST['customer'];
} else {
$this->customer = $loginCredentials['customer'];
}
} else {
$this->reseller = $loginCredentials['reseller'];
$this->customer = $loginCredentials['customer'];
}
if (strlen($loginCredentials['sip_engine'])) {
$this->sip_engine=$loginCredentials['sip_engine'];
}
//dprint("Using engine: $this->sip_engine");
$this->settingsPage = $_SERVER['PHP_SELF'];
$this->tab = $_REQUEST['tab'];
$this->initSoapClient();
$this->getAccount($account);
if ($this->login_type == "admin") {
$this->pageURL=$this->settingsPage."?account=$this->account&adminonly=1&reseller=$this->reseller&sip_engine=$this->sip_engine";
$this->hiddenElements="
<input type=hidden name=account value=\"$this->account\">
<input type=hidden name=reseller value=$this->reseller>
<input type=hidden name=sip_engine value=$this->sip_engine>
<input type=hidden name=adminonly value=1>
";
} else if ($this->login_type == "reseller") {
$this->pageURL=$this->settingsPage."?account=$this->account&reseller=$this->reseller&sip_engine=$this->sip_engine";
$this->hiddenElements="
<input type=hidden name=account value=\"$this->account\">
<input type=hidden name=reseller value=$this->reseller>
<input type=hidden name=sip_engine value=$this->sip_engine>
";
} else {
$this->pageURL=$this->settingsPage."?account=$this->account";
$this->hiddenElements="
<input type=hidden name=account value=\"$this->account\">
<input type=hidden name=sip_engine value=$this->sip_engine>
";
}
$this->setLanguage();
if (!$this->username) {
dprint ("Record not found.");
return false;
}
$this->getResellerSettings();
$this->tabs=array('summary'=>_('Info'),
'settings'=>_('Settings'),
'locations'=>_('Devices'),
'calls'=>_('Calls')
);
$this->acceptDailyProfiles=array('127' => _('Every day'),
'31' => _('Weekday'),
'96' => _('Weekend'),
'1' => _('Monday'),
'2' => _('Tuesday'),
'4' => _('Wednesday'),
'8' => _('Thursday'),
'16' => _('Friday'),
'32' => _('Saturday'),
'64' => _('Sunday')
);
$this->PhonebookGroups=array(
"vip" =>sprintf(_("VIP")),
"business" =>sprintf(_("Business")),
"coworkers" =>sprintf(_("Coworkers")),
"friends" =>sprintf(_("Friends")),
"family" =>sprintf(_("Family"))
);
$this->CallPrefDictionary=array(
"FUNC"=>sprintf(_("All calls")),
"FNOL"=>sprintf(_("If Not-Online")),
"FBUS"=>sprintf(_("If Busy")),
"FNOA"=>sprintf(_("If No-Answer")),
"FUNV"=>sprintf(_("If Unavailable"))
);
$this->CallPrefDictionaryUNV=array(
"FUNV"=>sprintf(_("If Unavailable"))
);
$this->VoicemailCallPrefDictionary=array(
"FNOL"=>sprintf(_("If Not-Online")),
"FBUS"=>sprintf(_("If Busy")),
"FNOA"=>sprintf(_("If No-Answer")),
"FUNV"=>sprintf(_("If Unavailable"))
);
if ($this->Preferences['advanced']) {
// Advanced accounts has access to call control and Phonebook
$this->tabs[phonebook]=_("Contacts");
$this->tabs[accept] =_("Accept");
$this->tabs[reject] =_("Reject");
if (in_array("free-pstn",$this->groups)) {
$this->tabs[barring]=_("Barring");
}
}
if ($this->prepaid) {
$this->tabs[prepaid]=_("Prepaid");
}
if ($this->presence_engine) {
$this->tabs[presence]=_("Presence");
}
$this->access_numbers=array("FUNC"=>$this->FUNC_access_number,
"FNOA"=>$this->FNOA_access_number,
"FBUS"=>$this->FBUS_access_number,
"FNOL"=>$this->FNOL_access_number
);
}
function initSoapClient() {
dprint("initSoapClient()");
require_once('SOAP/Client.php');
require_once("ngnpro_soap_library.phtml");
// Sip, Voicemail and Customer ports share same login
$this->SOAPurl=$this->soapEngines[$this->sip_engine]['url'];
$this->SOAPversion=$this->soapEngines[$this->sip_engine]['version'];
if (strlen($this->loginCredentials['soapUsername'])) {
$this->SOAPlogin = array(
"username" => $this->loginCredentials['soapUsername'],
"password" => $this->loginCredentials['soapPassword'],
"admin" => false
);
$this->soapUsername = $this->loginCredentials['soapUsername'];
} else {
$this->SOAPlogin = array(
"username" => $this->soapEngines[$this->sip_engine]['username'],
"password" => $this->soapEngines[$this->sip_engine]['password'],
"admin" => true,
"impersonate" => intval($this->reseller)
);
$this->soapUsername = $this->soapEngines[$this->sip_engine]['username'];
}
$this->SoapAuth = array('auth', $this->SOAPlogin , 'urn:AGProjects:NGNPro', 0, '');
//dprint_r($this->SoapAuth);
// Presence
$this->SOAPurlPresence=$this->soapEngines[$this->presence_engine]['url'];
if (strlen($this->loginCredentials['customer_engine'])) {
$this->customer_engine=$this->loginCredentials['customer_engine'];
} else if (strlen($this->soapEngines[$this->sip_engine]['customer_engine'])) {
$this->customer_engine=$this->soapEngines[$this->sip_engine]['customer_engine'];
} else {
$this->customer_engine=$this->sip_engine;
}
if (strlen($this->loginCredentials['presence_engine'])) {
$this->presence_engine=$this->loginCredentials['presence_engine'];
} else if (strlen($this->soapEngines[$this->sip_engine]['presence_engine'])) {
$this->presence_engine=$this->soapEngines[$this->sip_engine]['presence_engine'];
}
if (strlen($this->loginCredentials['voicemail_engine'])) {
$this->voicemail_engine=$this->loginCredentials['voicemail_engine'];
} else if (strlen($this->soapEngines[$this->sip_engine]['voicemail_engine'])) {
$this->voicemail_engine=$this->soapEngines[$this->sip_engine]['voicemail_engine'];
} else {
$this->voicemail_engine=$this->sip_engine;
}
if (strlen($this->loginCredentials['enum_engine'])) {
$this->enum_engine=$this->loginCredentials['enum_engine'];
} else if (strlen($this->soapEngines[$this->sip_engine]['enum_engine'])) {
$this->enum_engine=$this->soapEngines[$this->sip_engine]['enum_engine'];
} else {
$this->enum_engine=$this->sip_engine;
}
if (strlen($this->loginCredentials['rating_engine'])) {
$this->rating_engine=$this->loginCredentials['rating_engine'];
} else if (strlen($this->soapEngines[$this->sip_engine]['rating_engine'])) {
$this->rating_engine=$this->soapEngines[$this->sip_engine]['rating_engine'];
} else {
$this->rating_engine=$this->sip_engine;
}
// overwrite default settings
if (strlen($this->soapEngines[$this->sip_engine]['sip_proxy'])) {
$this->sip_proxy = $this->soapEngines[$this->sip_engine]['sip_proxy'];
}
if (strlen($this->soapEngines[$this->sip_engine]['support_company'])) {
$this->support_company = $this->soapEngines[$this->sip_engine]['support_company'];
}
if (strlen($this->soapEngines[$this->sip_engine]['support_web'])) {
$this->support_web = $this->soapEngines[$this->sip_engine]['support_web'];
}
if (strlen($this->soapEngines[$this->sip_engine]['support_email'])) {
$this->support_email = $this->soapEngines[$this->sip_engine]['support_email'];
}
if (strlen($this->soapEngines[$this->sip_engine]['sip_settings_page'])) {
$this->sip_settings_page = $this->soapEngines[$this->sip_engine]['sip_settings_page'];
}
if (strlen($this->soapEngines[$this->sip_engine]['xcap_root'])) {
$this->xcap_root = $this->soapEngines[$this->sip_engine]['xcap_root'];
}
if (strlen($this->soapEngines[$this->sip_engine]['cdrtool_address'])) {
$this->cdrtool_address = $this->soapEngines[$this->sip_engine]['cdrtool_address'];
}
if ($this->soapEngines[$this->sip_engine]['pstn_access']) {
$this->pstn_access = $this->soapEngines[$this->sip_engine]['pstn_access'];
}
if ($this->soapEngines[$this->sip_engine]['voicemail_server']) {
$this->voicemail_server = $this->soapEngines[$this->sip_engine]['voicemail_server'];
}
if ($this->soapEngines[$this->sip_engine]['voicemail_access_number']) {
$this->voicemail_access_number = $this->soapEngines[$this->sip_engine]['voicemail_access_number'];
}
if ($this->soapEngines[$this->sip_engine]['FUNC_access_number']) {
$this->FUNC_access_number = $this->soapEngines[$this->sip_engine]['FUNC_access_number'];
}
if ($this->soapEngines[$this->sip_engine]['FNOA_access_number']) {
$this->FNOA_access_number = $this->soapEngines[$this->sip_engine]['FNOA_access_number'];
}
if ($this->soapEngines[$this->sip_engine]['FBUS_access_number']) {
$this->FBUS_access_number = $this->soapEngines[$this->sip_engine]['FBUS_access_number'];
}
if (isset($this->soapEngines[$this->sip_engine]['absolute_voicemail_uri'])) {
$this->absolute_voicemail_uri = $this->soapEngines[$this->sip_engine]['absolute_voicemail_uri'];
}
if (isset($this->soapEngines[$this->sip_engine]['enable_thor'])) {
$this->enable_thor=$this->soapEngines[$this->sip_engine]['enable_thor'];
}
if (isset($this->soapEngines[$this->sip_engine]['sip_accounts_lite'])) {
$this->sip_accounts_lite=$this->soapEngines[$this->sip_engine]['sip_accounts_lite'];
}
if (strlen($this->soapEngines[$this->sip_engine]['timeout'])) {
$this->soapTimeout=intval($this->soapEngines[$this->sip_engine]['timeout']);
}
if ($this->loginCredentials['templates_path']) {
$this->templates_path = $this->loginCredentials['templates_path'];
} else if ($this->soapEngines[$this->sip_engine]['templates_path']) {
$this->templates_path = $this->soapEngines[$this->sip_engine]['templates_path'];
}
// Instantiate the SOAP clients
// sip
$this->SipPort = new $this->soapClassSipPort($this->SOAPurl);
$this->SipPort->_options['timeout'] = $this->soapTimeout;
$this->SipPort->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->SipPort->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
if ($this->showSoapConnectionInfo) {
printf ("<p>%s at <a href=%swsdl target=wsdl>%s</a> as %s ",$this->soapClassSipPort,$this->SOAPurl,$this->SOAPurl,$this->soapUsername);
}
// voicemail
$this->SOAPurlVoicemail = $this->soapEngines[$this->voicemail_engine]['url'];
$this->SOAPloginVoicemail = array(
"username" => $this->soapEngines[$this->voicemail_engine]['username'],
"password" => $this->soapEngines[$this->voicemail_engine]['password'],
"admin" => true,
"impersonate" => intval($this->reseller)
);
$this->SoapAuthVoicemail = array('auth', $this->SOAPloginVoicemail , 'urn:AGProjects:NGNPro', 0, '');
$this->VoicemailPort = new $this->soapClassVoicemailPort($this->SOAPurlVoicemail);
if (strlen($this->soapEngines[$this->voicemail_engine]['timeout'])) {
$this->VoicemailPort->_options['timeout'] = intval($this->soapEngines[$this->voicemail_engine]['timeout']);
} else {
$this->VoicemailPort->_options['timeout'] = $this->soapTimeout;
}
$this->VoicemailPort->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->VoicemailPort->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
if ($this->showSoapConnectionInfo && $this->SOAPurlVoicemail != $this->SOAPurl) {
printf ("<br>%s at <a href=%swsdl target=wsdl>%s</a> as %s ",$this->soapClassVoicemailPort,$this->SOAPurlVoicemail,$this->SOAPurlVoicemail,$this->soapEngines[$this->voicemail_engine]['username']);
}
// enum
$this->SOAPurlEnum = $this->soapEngines[$this->enum_engine]['url'];
$this->SOAPloginEnum = array(
"username" => $this->soapEngines[$this->enum_engine]['username'],
"password" => $this->soapEngines[$this->enum_engine]['password'],
"admin" => true,
"impersonate" => intval($this->reseller)
);
$this->SoapAuthEnum = array('auth', $this->SOAPloginEnum , 'urn:AGProjects:NGNPro', 0, '');
$this->EnumPort = new $this->soapClassEnumPort($this->SOAPurlEnum);
if (strlen($this->soapEngines[$this->enum_engine]['timeout'])) {
$this->EnumPort->_options['timeout'] = intval($this->soapEngines[$this->enum_engine]['timeout']);
} else {
$this->EnumPort->_options['timeout'] = $this->soapTimeout;
}
$this->EnumPort->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->EnumPort->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
if ($this->showSoapConnectionInfo && $this->SOAPurlEnum != $this->SOAPurl) {
printf ("<br>%s at <a href=%swsdl target=wsdl>%s</a> as %s ",$this->soapClassEnumPort,$this->SOAPurlEnum,$this->SOAPurlEnum,$this->soapEngines[$this->enum_engine]['username']);
}
// rating
$this->SOAPurlRating = $this->soapEngines[$this->rating_engine]['url'];
$this->SOAPloginRating = array(
"username" => $this->soapEngines[$this->rating_engine]['username'],
"password" => $this->soapEngines[$this->rating_engine]['password'],
"admin" => true,
"impersonate" => intval($this->reseller)
);
$this->SoapAuthRating = array('auth', $this->SOAPloginRating , 'urn:AGProjects:NGNPro', 0, '');
$this->RatingPort = new $this->soapClassRatingPort($this->SOAPurlRating);
if (strlen($this->soapEngines[$this->rating_engine]['timeout'])) {
$this->RatingPort->_options['timeout'] = intval($this->soapEngines[$this->rating_engine]['timeout']);
} else {
$this->RatingPort->_options['timeout'] = $this->soapTimeout;
}
$this->RatingPort->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->RatingPort->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
if ($this->showSoapConnectionInfo && $this->SOAPurlRating != $this->SOAPurl) {
printf ("<br>%s at <a href=%swsdl target=wsdl>%s</a> as %s ",$this->soapClassRatingPort,$this->SOAPurlRating,$this->SOAPurlRating,$this->soapEngines[$this->rating_engine]['username']);
}
// customer
$this->SOAPurlCustomer = $this->soapEngines[$this->customer_engine]['url'];
$this->SOAPloginCustomer = array(
"username" => $this->soapEngines[$this->customer_engine]['username'],
"password" => $this->soapEngines[$this->customer_engine]['password'],
"admin" => true
);
$this->SoapAuthCustomer = array('auth', $this->SOAPloginCustomer , 'urn:AGProjects:NGNPro', 0, '');
$this->CustomerPort = new $this->soapClassCustomerPort($this->SOAPurlCustomer);
if (strlen($this->soapEngines[$this->customer_engine]['timeout'])) {
$this->CustomerPort->_options['timeout'] = intval($this->soapEngines[$this->customer_engine]['timeout']);
} else {
$this->CustomerPort->_options['timeout'] = $this->soapTimeout;
}
$this->CustomerPort->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->CustomerPort->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
if ($this->showSoapConnectionInfo && $this->SOAPurlCustomer != $this->SOAPurl) {
printf ("<br>%s at <a href=%swsdl target=wsdl>%s</a> as %s ",$this->soapClassCustomerPort,$this->SOAPurlCustomer,$this->SOAPurlCustomer,$this->soapEngines[$this->customer_engine]['username']);
}
// presence
if ($this->presence_engine) {
$this->SOAPurlPresence = $this->soapEngines[$this->presence_engine]['url'];
$this->PresencePort = new $this->soapClassPresencePort($this->SOAPurlPresence);
if (strlen($this->soapEngines[$this->presence_engine]['timeout'])) {
$this->PresencePort->_options['timeout'] = intval($this->soapEngines[$this->presence_engine]['timeout']);
} else {
$this->PresencePort->_options['timeout'] = $this->soapTimeout;
}
$this->PresencePort->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$this->PresencePort->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
if ($this->showSoapConnectionInfo) {
printf ("<br>%s at <a href=%swsdl target=wsdl>%s</a> ",$this->soapClassPresencePort,$this->SOAPurlPresence,$this->SOAPurlPresence);
}
}
}
function getAccount($account) {
dprint("getAccount($account, engine=$this->sip_engine)");
list($username,$domain)=explode("@",trim($account));
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getAccount(array("username" =>$username,"domain" =>$domain));
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
//dprint_r($result);
$this->owner = $result->owner;
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
foreach ($result->properties as $_property) {
$this->Preferences[$_property->name]=$_property->value;
}
if (!$this->sip_accounts_lite) {
$this->Preferences['advanced']=1;
}
if (!$this->Preferences['language']) {
$this->Preferences['language'] ='en';
}
$this->username = $result->id->username;
$this->domain = $result->id->domain;
$this->password = $result->password;
$this->firstName = $result->firstName;
$this->lastName = $result->lastName;
$this->rpid = $result->rpid;
$this->owner = $result->owner;
$this->timezone = $result->timezone;
$this->email = $result->email;
$this->groups = $result->groups;
if ($this->SOAPversion > 1) {
$this->quickdial = $result->quickdialPrefix;
$this->timeout = intval($result->timeout);
} else {
$this->quickdial = $result->quickdial;
$this->timeout = intval($result->answerTimeout);
}
$this->quota = $result->quota;
$this->prepaid = $result->prepaid;
$this->region = $result->region;
$this->account = $this->username."@".$this->domain;
$this->fullName = $this->firstName." ".$this->lastName;
$this->name = $this->firstName." ".$this->lastName;
$this->sipId=array("username" => $this->username,
"domain"=> $this->domain
);
$this->getOwnerSettings();
if ($result->reseller) {
$this->reseller = $result->reseller;
}
if ($result->customer) {
$this->customer = $result->customer;
}
$this->result = $result;
if (!$this->timeout) {
$this->timeoutWasNotSet=1;
$this->timeout=intval($this->timeoutDefault);
}
$this->xcap_root = rtrim($this->xcap_root,'/')."@".$this->domain."/";
$this->getMobileNumber();
}
function showAccount() {
if (!$this->account) {
print "<tr><td colspan=>";
printf ("Error: SIP account information cannot be retrieved");
return 0;
print "</td></tr>";
}
print "
<SCRIPT>
var _action = '';
function checkForm(form) {
if (_action=='send' && form.mailto.value=='') {
window.alert('Please fill in the Email address');
form.mailto.focus();
return false;
} else {
return true;
}
}
function saveHandler(elem) {
_action = 'save';
}
function sendHandler(elem) {
_action = 'send';
}
</SCRIPT>
";
$this->logoTableStart();
$this->chapterTableStart();
print "
<tr>
<td colspan=2>
";
$this->showTabs();
print "
</td>
</tr>
";
$this->showTitleBar();
if (!array_key_exists($this->tab,$this->tabs)) $this->tab="settings";
if ($this->tab=="summary") $this->showSummary();
if ($this->tab=="settings") $this->showSettings();
if ($this->tab=="locations") $this->showDeviceLocations();
if ($this->tab=="calls") $this->showLastCalls();
if ($this->tab=="phonebook") $this->showPhonebook();
if ($this->tab=="prepaid") $this->showPrepaidForm();
if ($this->tab=="upgrade") $this->showUpgrade();
if ($this->tab=="barring") $this->showBarringPrefixes();
if ($this->tab=="reject") $this->showRejectMembers();
if ($this->tab=="accept") $this->showAcceptRules();
if ($this->tab=="presence") $this->showPresence();
print "
<tr>
<td height=30 colspan=2 align=right valign=bottom>";
if ($this->footerFile) {
include ("$this->footerFile");
} else {
print "<a href=http://ag-projects.com target=agprojects><img src=images/PoweredbyAGProjects.gif border=0></a>";
}
print "</td>
</tr>
";
print "
</table>
<p>
";
}
function getMobileNumber() {
$this->mobile_number='';
if ($this->Preferences['mobile_number']) {
$this->mobile_number=$this->Preferences['mobile_number'];
} else if ($this->SIP['customer']['mobile']) {
$this->mobile_number=$this->SIP['customer']['mobile'];
}
}
function setLanguage() {
dprint("setLanguage()");
if ($this->login_type == 'reseller') {
$lang = $this->ResellerLanguage;
} else if ($this->login_type == 'subscriber') {
$lang = $this->Preferences['language'];
} else {
$lang = "en";
}
dprint("Set language to $lang");
changeLanguage($lang);
}
function getOwnerSettings() {
dprint("getOwnerSettings($this->owner, engine=$this->customer_engine)");
if (!$this->owner) {
return false;
}
$this->CustomerPort->addHeader($this->SoapAuthCustomer);
//dprint_r($this->CustomerPort);
$result = $this->CustomerPort->getAccount($this->owner);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (CustomerPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
$this->SIP['customer']=array(
"firstName" => $result->firstName,
"lastName" => $result->lastName,
"organization" => $result->organization,
"timezone" => $result->timezone,
"tel" => $result->tel,
"enum" => $result->enum,
"mobile" => $result->mobile,
"fax" => $result->fax,
"email" => $result->email,
"web" => $result->web
);
}
function getAliases() {
// Get Aliases
dprint("getAliases()");
$this->aliases=array();
$this->SipPort->addHeader($this->SoapAuth);
if ($this->SOAPversion > 1) {
// Filter
$filter=array('targetUsername' => $this->username,
'targetDomain' => $this->domain
);
// Range
$range=array('start' => 0,
'count' => 20
);
// Order
$orderBy = array('attribute' => 'aliasUsername',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Call function
$result = $this->SipPort->getAliases($Query);
} else {
$result = $this->SipPort->getAliasesForAccount($this->sipId);
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
//dprint_r($result);
if ($this->SOAPversion > 1) {
foreach ($result->aliases as $_alias) {
$this->aliases[]=$_alias->id->username.'@'.$_alias->id->domain;
}
} else {
foreach ($result as $_alias) {
if ($_alias->domain == $this->domain) {
$this->aliases[]=$_alias->username.'@'.$_alias->domain;
}
}
}
}
function getRatingEntityProfiles() {
dprint("getRatingEntityProfiles()");
$this->EntityProfiles=array();
$this->RatingPort->addHeader($this->SoapAuth);
$entity="subscriber://".$this->username."@".$this->domain;
$result = $this->RatingPort->getEntityProfiles($entiry);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (RatingPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
$this->EntityProfiles=$result;
}
function setAliases() {
dprint("setAliases()");
$aliases_new=$_REQUEST['aliases'];
$this->getAliases();
$aliases_old=$this->aliases;
$addAliases = array_unique(array_diff($aliases_new,$aliases_old));
$deleteAliases = array_unique(array_diff($aliases_old,$aliases_new));
/*
dprint ("Add aliases:");
dprint_r($addAliases );
dprint ("Delete aliases:");
dprint_r($deleteAliases );
*/
foreach ($addAliases as $_alias) {
$_alias=trim(strtolower($_alias));
if (!preg_match("/^[a-z0-9-_.@]+$/i",$_alias)) continue;
$els=explode("@",$_alias);
if (count($els) ==1 ) {
$_alias_username=$_alias;
$_alias_domain=$this->domain;
} else if (count($els) ==2) {
$_alias_username=$els[0];
$_alias_domain=$this->domain;
} else {
continue ;
}
$_aliasObject=array("id"=>array("username"=>$_alias_username,
"domain"=>$_alias_domain),
"owner"=>intval($this->owner),
"target"=>$this->sipId);
//dprint_r($_aliasObject);
dprint("addAlias");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->addAlias($_aliasObject);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
foreach ($deleteAliases as $_alias) {
$_alias=trim($_alias);
if (!strlen($_alias)) continue;
$els=explode("@",$_alias);
if (count($els) ==1 ) {
$_alias_username=$_alias;
$_alias_domain=$this->domain;
} else if (count($els) ==2) {
$_alias_username=$els[0];
$_alias_domain=$els[1];
} else {
continue ;
}
$_aliasObject=array("username"=>$_alias_username,
"domain" =>$_alias_domain
);
dprint_r($_aliasObject);
dprint("deleteAlias");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->deleteAlias($_aliasObject);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
unset($this->aliases);
}
function getVoicemail () {
dprint("getVoicemail(engine=$this->voicemail_engine)");
$this->VoicemailPort->addHeader($this->SoapAuthVoicemail);
$result = $this->VoicemailPort->getAccount($this->sipId);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode != "2000" && $error_fault->detail->exception->errorcode != "1010") {
printf ("<p><font color=red>Error (VoicemailPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
return true;
}
}
if (!$result->mailbox) {
dprint ("No voicemail account found");
return false;
}
$this->voicemail['Mailbox'] = $result->mailbox;
$this->voicemail['Password'] = $result->password;
$this->voicemail['Name'] = $result->name;
$this->voicemail['Email'] = $result->email;
$this->voicemail['Info'] = $result->info;
$this->voicemail['Options'] = $result->options;
$this->voicemail['Account'] = $result->mailbox.'@'.$this->voicemail_server;
// used by template system
$this->voicemailMailbox = $result->mailbox;
//dprint_r($this->voicemail);
return true;
}
function showTitleBar() {
print "
<tr>
<td class=border colspan=2 bgcolor=lightgrey>
";
print "
<table border=0 width=100% cellpadding=1 cellspacing=1 bgcolor=lightgrey>
<tr>
<td align=left>
";
printf (("%s &lt;sip:%s@%s&gt;"),$this->fullName,$this->username,$this->domain);
if ($this->enable_thor) {
if ($this->homeNode=getSipThorHomeNode($this->account,$this->sip_proxy)) {
printf (" on SipThor node %s ",$this->homeNode);
}
}
print "
</td>
<td align=right valign=top>
";
if ($this->login_type == 'subscriber') {
print "<a href=sip_logout.phtml>";
print _("Logout");
print "</a>";
}
print "
</td>
</tr>
</table>
";
print "
</td>
</tr>
";
}
function getDivertTargets () {
dprint("getDivertTargets()");
if (!$this->Preferences['advanced']) {
return true;
}
$this->divertTargets[] = array("name" => _("No diversion"),
"value" => "",
"description" => "Disabled"
);
if ($this->voicemail['Account']) {
$vmf=$this->getVoicemailForwarding();
if (is_array($vmf)) {
$this->divertTargets[]=$vmf;
}
}
if ($this->owner) {
if (in_array("free-pstn",$this->groups)) {
if ($this->SIP['customer']['tel']) {
$tel = preg_replace("/[^\d+]/", "", $this->SIP['customer']['tel']);
$tel_enum = str_replace("+", "00", $tel);
$telf = $tel_enum . "@" . $this->domain;
if (!$seen[$tel_enum] && !in_array($tel_enum,$this->enums)) {
$this->divertTargets[]=array("name" => sprintf (_("Tel %s"),$tel),
"value" => $telf,
"description" => "Tel");
}
$seen[$tel_enum]++;
}
if ($this->SIP['customer']['enum']) {
$tel = preg_replace("/[^\d+]/", "", $this->SIP['customer']['enum']);
$tel_enum = str_replace("+", "00", $tel);
$telf = $tel_enum . "@" . $this->domain;
if (!$seen[$tel_enum] && !in_array($tel_enum,$this->enums)) {
$this->divertTargets[]=array("name" => sprintf (_("Tel %s"),$tel),
"value" => $telf,
"description" => "ENUM");
}
$seen[$tel_enum]++;
}
}
}
if ($this->mobile_number) {
$tel = preg_replace("/[^\d+]/", "", $this->mobile_number);
$tel_enum = str_replace("+", "00", $tel);
$telf = $tel_enum . "@" . $this->domain;
if (!$seen[$tel_enum] && !in_array($tel_enum,$this->enums)) {
$this->divertTargets[] = array("name" => sprintf (_("Mobile %s"),$tel),
"value" => $telf,
"description" => "Mobile"
);
}
$seen[$tel_enum]++;
}
$this->divertTargets[]=array("name" => sprintf (_("Other")),
"value" => "",
"description" => "Other"
);
//dprint_r($this->divertTargets);
}
function getResellerSettings () {
dprint("getResellerSettings($this->reseller,engine=$this->customer_engine)");
$this->logoFile = $this->getFileTemplate("logo","logo");
$this->headerFile = $this->getFileTemplate("header.phtml");
$this->footerFile = $this->getFileTemplate("footer.phtml");
$this->cssFile = $this->getFileTemplate("main.css");
$this->SIPACLS['blocked'] =array("Group"=>"blocked",
"WEBName" =>sprintf(_("Account blocked")),
"SubscriberMayEditIt"=>"0",
"SubscriberMaySeeIt"=>0
);
/*
$this->SIPACLS['intercept'] =array("Group"=>"Intercept",
"WEBName" =>sprintf(_("SIP trace")),
"SubscriberMayEditIt"=>"0",
"SubscriberMaySeeIt"=>0
);
*/
if ($this->Preferences['advanced']) {
$this->SIPACLS['voicemail']=array("Group"=>"voicemail",
"WEBName" =>sprintf (_("Voice mailbox")),
"SubscriberMayEditIt"=>"0",
"SubscriberMaySeeIt"=>0
);
$this->SIPACLS['anonymous']=array("Group"=>"anonymous",
"WEBName" =>sprintf (_("Privacy")),
"WEBComment"=>sprintf(_("Dial %s to change or %s to check status "),$this->change_privacy_access_number, $this->check_privacy_access_number),
"SubscriberMaySeeIt"=>1,
"SubscriberMayEditIt"=>1
);
$this->SIPACLS['anonymous-reject']=array("Group"=>$this->anonymous-reject,
"WEBName" =>sprintf (_("Reject anonymous")),
"SubscriberMaySeeIt"=>1,
"SubscriberMayEditIt"=>1
);
}
$this->SIPACLS['prepaid'] = array("Group" => "prepaid",
"WEBName" => sprintf (_("Prepaid")),
"SubscriberMayEditIt" => "0",
"SubscriberMaySeeIt" => 0
);
if (!$this->reseller) {
return true;
}
$this->CustomerPort->addHeader($this->SoapAuthCustomer);
$result = $this->CustomerPort->getAccount(intval($this->reseller));
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (CustomerPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
foreach ($result->properties as $_property) {
$this->resellerProperties[$_property->name]=$_property->value;
}
$this->resellerProperties['language'] = $result->language;
$this->resellerProperties['timezone'] = $result->timezone;
//dprint_r($this->resellerProperties);
// overwrite settings from soap engine
if ($this->resellerProperties['sip_proxy']) {
$this->sip_proxy = $this->resellerProperties['sip_proxy'];
}
if ($this->resellerProperties['support_company']) {
$this->support_company = $this->resellerProperties['support_company'];
}
if ($this->resellerProperties['support_web']) {
$this->support_web = $this->resellerProperties['support_web'];
}
if ($this->resellerProperties['support_email']) {
$this->support_email = $this->resellerProperties['support_email'];
}
if ($this->resellerProperties['sip_settings_page']) {
$this->sip_settings_page = $this->resellerProperties['sip_settings_page'];
}
if ($this->resellerProperties['xcap_root']) {
$this->xcap_root = rtrim($this->resellerProperties['xcap_root'],'/');
$this->xcap_root .= "@".$this->domain."/";
}
if ($this->resellerProperties['cdrtool_address']) {
$this->cdrtool_address = $this->resellerProperties['cdrtool_address'];
}
if (isset($this->resellerProperties['pstn_access'])) {
$this->pstn_access = $this->resellerProperties['pstn_access'];
}
if (isset($this->resellerProperties['voicemail_server'])) {
$this->voicemail_server = $this->resellerProperties['voicemail_server'];
}
if (isset($this->resellerProperties['voicemail_access_number'])) {
$this->voicemail_access_number = $this->resellerProperties['voicemail_access_number'];
}
if (isset($this->resellerProperties['FUNC_access_number'])) {
$this->FUNC_access_number = $this->resellerProperties['FUNC_access_number'];
}
if (isset($this->resellerProperties['FNOA_access_number'])) {
$this->FNOA_access_number = $this->resellerProperties['FNOA_access_number'];
}
if (isset($this->resellerProperties['FBUS_access_number'])) {
$this->FBUS_access_number = $this->resellerProperties['FBUS_access_number'];
}
if (isset($this->resellerProperties['absolute_voicemail_uri'])) {
$this->absolute_voicemail_uri = $this->resellerProperties['absolute_voicemail_uri'];
}
if ($this->pstn_access) {
$this->SIPACLS['free-pstn'] =array("Group"=>"free-pstn",
"WEBName" => sprintf(_("Access to PSTN")),
"WEBComment"=> sprintf(_("Caller-ID")),
"SubscriberMayEditIt"=>"0",
"SubscriberMaySeeIt"=>1
);
}
}
function getDiversions() {
dprint("getDiversions()");
if (!$this->Preferences['advanced']) {
return true;
}
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getCallDiversions($this->sipId);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
//dprint_r($result);
reset($this->CallPrefDictionary);
foreach(array_keys($this->CallPrefDictionary) as $condition) {
$uri=$result->$condition;
if ($uri == "<voice-mailbox>" && $this->absolute_voicemail_uri) {
$uri = $this->voicemail['Account'];
}
if (preg_match("/^(sip:|sips:)(.*)$/i",$uri,$m)) {
$uri=$m[2];
}
$this->CallPrefDbURI[$condition]=$uri;
}
//dprint_r($this->CallPrefDbURI);
}
function getDeviceLocations() {
dprint("getDeviceLocations()");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getSipDeviceLocations(array($this->sipId));
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
foreach ($result[0]->locations as $locationStructure) {
$contact=$locationStructure->address.":".$locationStructure->port;
if ($locationStructure->publicAddress) {
$publicContact=$locationStructure->publicAddress.":".$locationStructure->publicPort;
} else {
$publicContact=$contact;
}
$this->locations[]=array("contact" => $contact,
"publicContact" => $publicContact,
"expires" => $locationStructure->expires,
"user_agent" => $locationStructure->userAgent,
"transport" => $locationStructure->transport
);
}
}
dprint_r($this->locations);
}
function getVoicemailForwarding () {
dprint("getVoicemailForwarding()");
if (!$this->voicemail['Account']) {
return;
}
if ($this->absolute_voicemail_uri) {
$value=$this->voicemail['Account'];
} else {
$value="<voice-mailbox>";
}
return array("name" => sprintf (_("Voice mailbox")),
"value" => $value,
"description" => "Voicemail");
}
function showTabs() {
print "
<table class=border2 border=0 cellspacing=0 cellpadding=0 align=right>
<tr>
";
$items=0;
while (list($k,$v)= each($this->tabs)) {
if ($this->tab==$k) {
$tabcolor="orange";
$fontcolor="white";
} else {
$tabcolor="#4A69A5";
$fontcolor="white";
}
print "<td class=border2 bgcolor=$tabcolor>&nbsp;";
print "<a class=b href=$this->pageURL&tab=$k><font color=$fontcolor>$v</font>";
print "&nbsp;</td>";
}
print "
</tr>
</table>
";
}
function showSummary() {
$this->getVoicemail();
$this->getENUMmappings();
$this->getAliases();
print "
</td>
</tr>
";
$chapter=sprintf(_("SIP settings"));
$this->showChapter($chapter);
print "
<tr>
<td class=border>";
print _("Address");
print "
</td>
<td class=border>sip:$this->account
</td>
</tr>
";
print "
<tr>
<td class=border>";
print _("Full name");
print "
</td>
<td class=border>$this->fullName
</td>
</tr>
<tr>
<td class=border>";
print _("Username");
print "
</td>
<td class=border>$this->username
</td>
</tr>
";
print "
<tr>
<td class=border>";
print _("Domain");
print "
</td>
<td class=border>$this->domain
</td>
</tr>
";
print "
<tr>
<td class=border>";
print _("Outbound proxy");
print "
</td>
<td class=border>$this->sip_proxy
</td>
</tr>
<tr>
<td height=3 colspan=2></td>
</tr>
";
if ($this->presence_engine) {
$chapter=sprintf(_("Presence settings"));
$this->showChapter($chapter);
print "
<tr>
<td class=border>Presence mode
</td>
<td class=border>Presence agent (RFC3903) with XCAP policy (RFC4825)
</td>
</tr>
<tr>
<td class=border>XCAP root URL
</td>
<td class=border>$this->xcap_root
</td>
</tr>
";
}
$chapter=sprintf(_("ENUM and aliases"));
$this->showChapter($chapter);
$t=0;
foreach($this->enums as $e) {
$t++;
print "
<tr>
<td class=border>ENUM $t</td>
<td class=border>$e</td>
</tr>
";
}
if (!$t) {
print "
<tr>
<td class=border>ENUM</td>
<td class=border>";
print _("None");
print "
</td>
</tr>
";
}
$t=0;
print "
<form method=post name=sipsettings onSubmit=\"return checkForm(this)\">
";
foreach($this->aliases as $a) {
$t++;
print "
<tr>
<td class=border>";
print _("Alias");
print " $t
</td>
<td class=border> <input type=text size=35 name=aliases[] value=\"$a\"></td>
</tr>
";
}
print "
<tr>
<td class=border>";
print _("New alias");
print "
</td>
<td class=border> <input type=text size=35 name=aliases[]></td>
</tr>
";
print "
<tr>
<td align=left>
<input type=hidden name=action value=\"set aliases\">
";
print "
<input type=submit value=\"";
print _("Save aliases");
print "\"
onClick=saveHandler(this)>
";
print "
</td>
<td align=right>
</td>
</tr>
";
print $this->hiddenElements;
print "
</form>
";
$chapter=sprintf(_("Notifications address"));
$this->showChapter($chapter);
print "
<tr>
<td class=border>";
print _("Email address");
print "
</td>
<td class=border align=left>";
if ($this->email) {
print "$this->email";
} else {
print _("Unassigned");
}
print "
</td>
</tr>
";
print "
<tr>
<td height=3 colspan=2></td>
</tr>
";
print "
<form method=post>";
print "
<tr>
<td align=left colspan=2>
";
if ($this->email) {
printf (_("Email account information to %s"),$this->email);
print "
<input type=hidden name=action value=\"Send settings\">
<input type=submit value=";
print _("Send");
print ">";
}
print "
</td>
<td align=right>";
print "
</td>
</tr>
";
print $this->hiddenElements;
print "
</form>
";
}
function showSettings() {
$this->getVoicemail();
$this->getENUMmappings();
$this->getDivertTargets();
$this->getDiversions();
print "
<form method=post name=sipsettings onSubmit=\"return checkForm(this)\">
";
$chapter=sprintf(_("Account settings"));
$this->showChapter($chapter);
print "
<tr>
<td class=border>";
print _("First name");
print "
</td>
<td class=borderns>";
print "<input type=text size=15 name=first_name value=\"$this->firstName\">";
print "
</td>
</tr>
";
print "
<tr>
<td class=border>";
print _("Last name");
print "
</td>
<td class=borderns>";
print "<input type=text size=15 name=last_name value=\"$this->lastName\">";
print "
</td>
</tr>
";
print "
<tr>
<td class=border>";
print _("Password");
print "
</td>
<td class=borderns>";
print "<input type=password size=15 name=sip_password value=\"$this->password\">";
print _("Language");
print "
<select name=language>
";
$languages=array("en"=>"English",
"nl"=>"Nederlands",
"ro"=>"Romaneste",
"de"=>"Deutsch"
);
$selected_lang[$this->Preferences['language']]="selected";
while (list ($value, $name) = each($languages)) {
print "<option value=$value $selected_lang[$value]>$name\n";
}
print "
</select>
";
print "
</td>
</tr>
";
print "
<tr>
<td class=border>";
print _("Timezone");
print "
</td>
<td class=border>
";
$this->showTimezones('timezone',$this->timezone);
print " ";
$timestamp=time();
$LocalTime=getLocalTime($this->timezone,$timestamp);
print _("Local time");
print ": $LocalTime";
//dprint_r($this->SIPACLS);
print "
</td>
</tr>
";
if (count($this->emergencyRegions) > 0) {
print "
<tr>
<td class=border>";
print _("Location");
print "
</td>
<td class=border>
";
print "<select name=region>";
$selected_region[$this->region]="selected";
foreach (array_keys($this->emergencyRegions) as $_region) {
printf ("<option value=\"%s\" %s>%s",$_region,$selected_region[$_region],$this->emergencyRegions[$_region]);
}
print "</select>";
print "
</td>
</tr>
";
}
/*
print "
<tr>
<td class=border>";
print _("Language");
print "</td>
<td class=border>
<select name=language>
";
$languages=array("en"=>"English",
"nl"=>"Nederlands",
"ro"=>"Romaneste",
"de"=>"Deutsch"
);
$selected_lang[$this->Preferences['language']]="selected";
while (list ($value, $name) = each($languages)) {
print "<option value=$value $selected_lang[$value]>$name\n";
}
print "
</select>
</td>
</tr>
";
*/
if ($this->login_type != 'subscriber' && in_array("free-pstn",$this->groups)) {
if (in_array("quota",$this->groups)) {
$td_class="orange";
} else {
$td_class="border";
}
print "
<tr>
<td class=border>";
print _("Monthly quota");
print "
</td>
<td class=$td_class>
<table cellspacing=0 cellpadding=0 width=100%>
<tr>
<td>";
printf ("<input type=text size=6 maxsize=6 name=quota value='%s'> %s",$this->quota,$this->currency);
if ($this->quota || in_array("quota",$this->groups)) {
$this->getCallStatistics();
if ($this->thisMonth['price']) {
print "&nbsp;&nbsp;&nbsp;";
printf (_("This month usage: %.2f %s"),$this->thisMonth['price'], $this->currency);
printf (" / %d ",$this->thisMonth['calls']);
print _("Calls");
}
}
print "
</td>
<td align=right>
";
printf ("<input type=hidden name=used_quota value='%s'>",$this->thisMonth['price']);
print _("De-block account");
print "
<input type=checkbox name=quota_reset value=1>
</td>
</tr>
</table>
</td>
</tr>
";
} else {
printf ("<input type=hidden name=quota value='%s'>",$this->quota);
}
foreach (array_keys($this->SIPACLS) as $key) {
if ($this->login_type == 'subscriber' && !$this->SIPACLS[$key]['SubscriberMaySeeIt']) {
continue;
}
if ($key=="voicemail") {
continue;
}
if ($key=="prepaid") {
continue;
}
if (in_array($key,$this->groups)) {
$checked_box[$key]="checked";
}
if ($this->login_type == 'subscriber' && !$checked_box[$key] && $key=="free-pstn") {
continue;
}
$elementName = $this->SIPACLS[$key]["WEBName"];
$elementComment = $this->SIPACLS[$key]["WEBComment"];
if ($this->login_type == 'subscriber') {
if ($this->SIPACLS[$key]["SubscriberMayEditIt"]) {
$disabled_box = "";
} else {
$disabled_box = "disabled=true";
}
}
if ($key=="blocked" && $checked_box[$key]) {
$td_class="orange";
} else {
$td_class="border";
}
print "
<tr $bgcolor>
<td class=border valign=top>$elementName</td>
<td class=$td_class>
<input type=checkbox value=1 name=$key $checked_box[$key] $disabled_box>
";
if ($this->login_type != 'subscriber') {
if ($key=="free-pstn") {
print "$elementComment: <input type=text size=15 maxsize=15 name=rpid value=\"$this->rpid\">";
} else {
print "$elementComment";
}
} else {
if ($key=="free-pstn") {
if ($this->rpid) print "$elementComment: $this->rpid";
} else {
print "$elementComment";
}
}
print "
</td>
</tr>
";
}
if ($this->login_type != 'subscriber') {
// prepaid
if ($this->prepaid) $checked_prepaid="checked";
print "
<tr $bgcolor>
<td class=border>";
print _("Prepaid");
print "</td>
<td class=border>
<input type=checkbox value=1 name=prepaid $checked_prepaid $disabled_box>
</td>
</tr>
";
}
$this->showOwner();
if ($this->Preferences['advanced']) {
$this->showQuickDial();
$this->showMobileNumber();
$this->showVoicemail();
}
$this->showBillingProfiles();
if (!$this->Preferences['advanced']) {
print "
<tr>
<td class=border>";
print _("Advanced options");
print "
</td>
<td class=ag1>";
print "<input type=checkbox name=advanced value=1> ";
print _("Check this box and click save to enable advanced options");
print "
</td>
</tr>
";
}
if ($this->Preferences['advanced']) {
$chapter=sprintf(_("Divert calls"));
$this->showChapter($chapter);
$this->showDiversions();
}
$chapter=sprintf(_("Notifications address"));
$this->showChapter($chapter);
print "
<tr>
<td class=border>";
print _("Email address");
print "
</td>
<td class=border align=left>
<input type=text size=40 maxsize=255 name=mailto value=\"$this->email\">
</td>
</tr>
";
print "
<tr>
<td height=3 colspan=2></td>
</tr>
";
print "
<tr>
<td align=left>
<input type=hidden name=action value=\"Save settings\">
";
print "
<input type=submit value=\"";
print _("Save");
print "\"
onClick=saveHandler(this)>
";
print "
</td>
<td align=right>
</td>
</tr>
";
print $this->hiddenElements;
print "
</form>
";
}
function showVoicemail() {
if ($this->voicemail['Account']) {
$checked_voicemail="checked";
}
$chapter=sprintf(_("Voicemail"));
$this->showChapter($chapter);
print "
<tr $bgcolor>
<td class=border>";
print _("Enable");
print "</td>
<td class=border>
<input type=checkbox value=1 name=voicemail $checked_voicemail $disabled_box>
";
if ($this->voicemail['Account'] &&
($this->login_type == 'admin' || $this->login_type == 'reseller')) {
printf (" (Mailbox %s) ",$this->voicemail['Account']);
}
print "
</td>
</tr>
";
if ($this->voicemail['Account']) {
print "
<tr $bgcolor>
<td class=border>";
print _("Delivery");
print "</td>
<td class=border>
";
if ($this->voicemail['Options']->delete=="True") {
$checked_delete_voicemail="checked";
$selected_store_voicemail['email'] ="selected";
$selected_store_voicemail['server'] ="";
} else {
$selected_store_voicemail['email'] ="";
$selected_store_voicemail['server'] ="selected";
}
if (!$this->voicemail['DisableOptions']) {
print "<select name=delete_voicemail>";
$_text=sprintf("Send messages by e-mail to %s",$this->email);
printf ("<option value=1 %s>%s",$selected_store_voicemail['email'],$_text);
printf ("<option value=0 %s>%s",$selected_store_voicemail['server'],_("Send messages by e-mail and store messages on the server"));
print "</select>";
print "<br>";
} else {
printf (_("Voice messages are sent by email to %s"),$this->email);
}
print "
</td>
</tr>
";
if (!$this->voicemail['DisableOptions']) {
print "
<tr $bgcolor>
<td class=border>";
print _("Password");
print "</td>
<td class=border>
";
printf ("<input type=text size=15 name=voicemail_password value=\"%s\">",$this->voicemail['Password']);
print "
</td>
</tr>
";
if ($this->voicemail_access_number) {
print "
<tr $bgcolor>
<td colspan=2 class=border>";
printf(_("Dial %s to listen to your messages or change preferences. "),$this->voicemail_access_number);
print "</td>
</tr>
";
}
}
}
}
function showOwner() {
if ($this->login_type == 'admin' || $this->login_type == 'reseller') {
print "
<tr $bgcolor>
<td class=border>";
print _("Owner");
print "</td>
<td class=border>
<input type=text name=owner size=6 value=\"$this->owner\">
";
print "
</td>
</tr>
";
}
}
function showDeviceLocations() {
$this->getDeviceLocations();
if (count($this->locations)) {
print "
<tr>
<td height=3 colspan=2></td>
</tr>
<tr>
<td class=border colspan=2 bgcolor=lightgrey>";
print "
<table border=0 cellpadding=0 cellspacing=0 width=100%>
<tr>
<td align=left>
";
print "<b>";
print _("Online status");
print "</b>
</td>
<td align=right><b>";
print _("Expires in");
print "</b>
</td>
</tr>
</table>
";
print "
</td>
</tr>
";
$j=0;
foreach (array_keys($this->locations) as $location) {
$j++;
$contact = $this->locations[$location]['contact'];
$publicContact = $this->locations[$location]['publicContact'];
$expires = normalizeTime($this->locations[$location]['expires']);
$user_agent = $this->locations[$location]['user_agent'];
$transport = $this->locations[$location]['transport'];
$UAImage = getImageForUserAgent($user_agent);
print "<tr>";
print "<td class=border align=center>";
if (preg_match("/(unidata|snom|eyebeam|csco)/i",$user_agent,$m)) {
$_ua=strtolower($m[1]);
print "<a href=$this->pageURL&tab=phonebook&export=1&userAgent=$_ua target=export>";
printf("<img src='%s/30/%s' border=0>",$this->SipUaAImagesPath,$UAImage);
print "</a>";
} else {
printf ("<img src='%s/30/%s' border=0>",$this->SipUaAImagesPath,$UAImage);
}
print "</td>";
print "<td class=border align=left>";
print "<table border=0 width=100%>";
print "<tr>";
print "<td align=left><i>$user_agent</i></td>";
print "<td align=right>";
if ($transport == 'tls') print "<img src=images/lock15.gif border=0><br>";
print "</td>";
print "</tr>";
print "<tr>";
print "<td align=left>";
print _("Location");
print ": ";
if (strlen($transport)) print "$transport:";
print "$contact ";
if ($publicContact != $contact) {
print " ($publicContact)";
}
print "</td>";
print "<td align=right>$expires</td>";
print "</tr>";
print "</table>";
print "</td>";
print "</tr>";
}
}
}
function getBarringPrefixes() {
dprint("getBarringPrefixes()");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getBarringPrefixes($this->sipId);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
$this->barringPrefixes=$result;
return true;
}
function setBarringPrefixes() {
dprint("setBarringPrefixes");
$prefixes=array();
$barringPrefixes=$_REQUEST['barringPrefixes'];
foreach ($barringPrefixes as $_prefix) {
if (preg_match("/^\+[1-9][0-9]*$/",$_prefix)) {
$prefixes[]=$_prefix;
}
}
dprint("setBarringPrefixes");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->setBarringPrefixes($this->sipId,$prefixes);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
function showBarringPrefixes() {
$chapter=sprintf(_("Blocked destinations"));
$this->showChapter($chapter);
print "
<form method=post name=sipsettings onSubmit=\"return checkForm(this)\">
";
print "
<tr>
<td class=border colspan=2 align=left>";
print _("You can use this feature to deny calls to expensive or unwanted destinations on the classic telephone network. ");
print "<p>";
print "
</td>
</tr>
";
print "
<tr>
<td class=border align=left>";
print _("Destination prefix");
print "</td>";
print "<td class=border align=left>
<input type=text name=barringPrefixes[]>
";
print _("Example: +31900");
print "
</td>
</tr>
";
if ($this->getBarringPrefixes()) {
foreach ($this->barringPrefixes as $_prefix) {
print "<tr>";
print "<td class=border align=left>";
print _("Destination prefix");
print "</td>";
print "<td class=border align=left>
<input type=text name=barringPrefixes[] value=\"$_prefix\">
</td>";
print "<tr>";
}
}
print "
<tr>
<td align=left>
<input type=hidden name=action value=\"set barring prefixes\">
";
print "
<input type=submit value=\"";
print _("Save");
print "\"
onClick=saveHandler(this)>
";
print "
</td>
<td align=right>
</td>
</tr>
";
print $this->hiddenElements;
print "
</form>
";
}
function saveSettings() {
dprint("saveSettings()");
$this->getVoicemail();
$this->getENUMmappings();
$this->getDivertTargets();
$this->getDiversions();
foreach ($this->WEBdictionary as $el) {
${$el} = $_REQUEST[$el];
}
$newACLarray = array();
$result = $this->result;
if (!is_array($result->properties)) $result->properties=array();
if (!is_array($result->groups)) $result->groups=array();
if ($mailto && $this->email != $mailto) {
$result->email=$mailto;
$this->email=$mailto;
$this->somethingChanged=1;
$this->voicemailOptionsHaveChanged=1;
}
if ($first_name && $this->firstName != $first_name) {
$result->firstName = $first_name;
$this->firstName = $first_name;
$this->somethingChanged=1;
$this->voicemailOptionsHaveChanged=1;
}
if ($last_name && $this->lastName != $last_name) {
$result->lastName = $last_name;
$this->lastName = $last_name;
$this->somethingChanged=1;
}
$this->properties=$result->properties;
if ($advanced) {
if (!$this->Preferences['advanced']) {
$this->setPreference("advanced","1");
$this->somethingChanged=1;
}
$voicemail=1;
$this->SIPACLS['voicemail']=array("Group"=>"voicemail",
"WEBName" =>sprintf (_("Voice mailbox")),
"SubscriberMayEditIt"=>"1",
"SubscriberMaySeeIt"=>0
);
}
if (!$this->voicemail['Account'] && $voicemail) {
if ($this->addVoicemail()) {
$this->setVoicemailDiversions();
$this->createdVoicemailnow=1;
}
} else if ($this->voicemail['Account'] && !$voicemail) {
if ($this->deleteVoicemail()) {
$this->voicemail['Account']="";
}
}
if ($this->login_type != 'subscriber') {
if (strcmp($quota,$this->quota) != 0) {
if (!$quota) $quota=0;
$result->quota=intval($quota);
dprint ("change the quota");
$this->somethingChanged=1;
}
if ($quota_reset) {
$result->groups = array_unique(array_diff($this->groups,array('quota')));
$this->somethingChanged=1;
$this->SipPort->addHeader($this->SoapAuth);
$this->SipPort->removeFromGroup(array("username" => $this->username,"domain"=> $this->domain), "quota");
}
if (strcmp($rpid,$this->rpid) != 0) {
dprint ("change the rpid");
$result->rpid=$rpid;
$this->somethingChanged=1;
}
$owner=intval($owner);
if ($owner != $this->owner) {
dprint ("change the owner");
$result->owner=$owner;
$this->somethingChanged=1;
}
}
reset($this->SIPACLS);
foreach (array_keys($this->SIPACLS) as $key) {
// $val is set to 1 if web checkbox is ticked
$val = $_REQUEST[$key];
if ($this->login_type != 'subscriber' || $this->SIPACLS[$key]['SubscriberMayEditIt']) {
// toggle prepaid
if ($key == "prepaid") $result->prepaid=intval($val);
if ($val) $newACLarray[]=trim($key);
} else {
// copy old setting if exists
if (in_array($key,$this->groups)) {
$newACLarray[]=trim($key);
}
}
}
$grantACLarray = array_unique(array_diff($newACLarray,$this->groups));
$revokeACLarray = array_unique(array_diff($this->groups,$newACLarray));
/*
dprint_r($this->groups);
dprint_r($newACLarray);
dprint_r($grantACLarray);
dprint_r($revokeACLarray);
*/
if (count($revokeACLarray) > 0 || count($grantACLarray)) {
$result->groups=$newACLarray;
$this->somethingChanged=1;
}
if ($language && $language != $this->Preferences['language'] ) {
if ($this->login_type == 'subscriber') {;
dprint("Set lang $language");
changeLanguage($language);
}
$this->setPreference("language",$language);
$this->somethingChanged=1;
}
if ($sip_password && $sip_password != $this->password) {
$result->password=$sip_password;
$this->somethingChanged=1;
}
if (!$result->password) unset($result->password);
if ($timezone && $timezone != $this->timezone) {
$result->timezone=$timezone;
$this->somethingChanged=1;
}
if ($region != $this->region) {
$result->region=$region;
$this->somethingChanged=1;
}
if ($this->Preferences['advanced']) {
if (strcmp($quickdial,$this->quickdial) != 0) {
if ($this->SOAPversion > 1) {
$result->quickdialPrefix=$quickdial;
} else {
$result->quickdial=$quickdial;
}
$this->somethingChanged=1;
}
$mobile_number = preg_replace("/[^\+0-9]/","",$mobile_number);
if ($this->Preferences['mobile_number'] != $mobile_number) {
$this->setPreference('mobile_number',$mobile_number);
$this->somethingChanged=1;
}
if (!$this->createdVoicemailnow) {
$this->setDiversions();
}
if ($this->timeoutWasNotSet || $timeout != $this->timeout) {
$this->somethingChanged=1;
if ($this->SOAPversion > 1) {
$result->timeout=intval($timeout);
} else {
$result->answerTimeout=intval($timeout);
}
}
}
if ($this->SOAPversion > 1) {
$result->timeout=intval($result->timeout);
} else {
$result->answerTimeout=intval($result->answerTimeout);
}
if ($this->somethingChanged) {
$result->properties=$this->properties;
if (!$result->quota) $result->quota=0;
//dprint_r($result);
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->updateAccount($result);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
dprint("Call updateAccount");
}
}
if ($this->voicemail['Account'] && !$this->createdVoicemailnow) {
$delete_voicemail = $_REQUEST['delete_voicemail'];
//$log=sprintf("delete_voicemail_orig=%s",$this->voicemail['Options']->delete);
//dprint($log);
if (($delete_voicemail && !$this->voicemail['Options']->delete) ||
(!$delete_voicemail && $this->voicemail['Options']->delete)) {
$this->voicemail['Options']=array("delete"=>intval($delete_voicemail));
$this->voicemailOptionsHaveChanged=1;
}
$voicemail_password=preg_replace("/[^0-9]/","",$voicemail_password);
if ($this->voicemail['Password'] != $voicemail_password) {
$this->voicemailOptionsHaveChanged=1;
$this->voicemail['Password']=$voicemail_password;
}
if ($this->voicemailOptionsHaveChanged) {
$this->updateVoicemail();
}
}
$this->updateBillingProfiles();
}
function setDiversions() {
dprint ("setDiversions()");
if (!$this->Preferences['advanced']) {
return true;
}
foreach (array_keys($this->CallPrefDictionary) as $condition) {
$select_name = $condition."_select";
$selectedIdx = $_REQUEST[$select_name];
$textboxURI = $_REQUEST[$condition];
if ($textboxURI && !preg_match("/@/",$textboxURI)) {
$textboxURI=$textboxURI."@".$this->domain;
}
if (preg_match("/^([\+|0].*)@/",$textboxURI,$m)) {
$textboxURI=$m[1]."@".$this->domain;
}
$uri_description = $this->divertTargets[$selectedIdx]['description'];
if ($uri_description == 'Other' || $textboxURI == "<voice-mailbox>") {
$selectedURI = $textboxURI;
} else {
$selectedURI = $this->divertTargets[$selectedIdx]['value'];
}
$uri = $selectedURI;
if (!$this->voicemail['Account'] && $uri_description == 'Voicemail') {
dprint("No voicemail account found");
$uri_description='Disabled';
}
if ($this->CallPrefDbURI[$condition]) {
if ($uri_description=='Disabled' && $this->CallPrefUriType[$condition]!='Disabled') {
$diversions[$condition]="";
} else if ($uri_description != 'Disabled' && $selectedURI) {
if (checkURI($selectedURI)) {
if ($this->CallPrefUriType[$condition]=='Disabled') {
$diversions[$condition]="";
} else {
if ($this->CallPrefDbURI[$condition] != $uri) {
$diversions[$condition]=$uri;
} else {
$diversions[$condition]=$this->CallPrefDbURI[$condition];
}
}
} else {
$diversions[$condition]=$this->CallPrefDbURI[$condition];
dprint("Failed to check address $selectedURI");
}
}
} else if ($uri_description!='Disabled' && $selectedURI) {
if (checkURI($selectedURI)) {
$diversions[$condition]=$uri;
} else {
dprint("Failed to check address $condition=\"$selectedURI\"");
$diversions[$condition]=$this->CallPrefDbURI[$condition];
}
}
if (!$uri_description) $uri_description="Other";
if ($uri_description == 'Other') {
$last_other=$uri;
} else {
$last_other = $this->CallPrefLastOther[$condition];
}
$_prefLast = $condition."_lastOther";
if ($uri_description=='Other' && $this->Preferences[$_prefLast] != $last_other ) {
$this->setPreference($_prefLast,$last_other);
}
}
//dprint_r($this->CallPrefDbURI);
foreach(array_keys($this->CallPrefDbURI) as $key) {
if ($this->CallPrefDbURI[$key] != $diversions[$key]) {
$divert_changed=1;
}
if ($diversions[$key]) {
if ($diversions[$key] == "<voice-mailbox>") {
if ($this->absolute_voicemail_uri) {
$diversionsSOAP[$key] = 'sip:'.$this->voicemail['Account'];
}
} else {
$diversionsSOAP[$key]='sip:'.$diversions[$key];
}
} else {
if ($diversions[$key]) $diversionsSOAP[$key]=$diversions[$key];
}
}
if (!is_array($diversionsSOAP) || count($diversionsSOAP) == 0) {
$diversionsSOAP=array("nocondition"=>"empty");
}
if ($divert_changed) {
//dprint_r($diversionsSOAP);
dprint("setDiversions");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->setCallDiversions($this->sipId,$diversionsSOAP);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error2 (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
}
function setDiversion($condition,$uri) {
dprint ("setDiversion($condition,$uri)");
$condition=trim($condition);
$uri=trim($uri);
$this->getVoicemail();
$this->getDivertTargets();
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getCallDiversions($this->sipId);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
$_uri_saved=$uri;
if ($_uri_saved == "voicemail") {
$uri="";
foreach ($this->divertTargets as $target) {
if ($target['description'] == 'Voicemail') {
$uri=$target['value'];
break;
}
}
}
if ($_uri_saved == "mobile") {
$uri="";
foreach ($this->divertTargets as $target) {
dprint_r($target);
if ($target['description'] == 'Mobile') {
$uri=$target['value'];
break;
}
}
}
if ($_uri_saved == "other" && $this->CallPrefLastOther[$condition]) {
$uri=$this->CallPrefLastOther[$condition];
}
if (strlen($uri)) {
if ($uri != "<voice-mailbox>") {
if (!preg_match("/^(sip:|sips:)/",$uri)) $uri="sip:".$uri;
}
} else {
$uri=NULL;
}
reset($this->CallPrefDictionary);
foreach(array_keys($this->CallPrefDictionary) as $_condition) {
$uri=$result->$_condition;
if ($this->absolute_voicemail_uri && $uri == "<voice-mailbox>") {
$uri = $this->voicemail['Account'];
}
if (preg_match("/^(sip:|sips:)(.*)$/i",$uri,$m)) {
$uri=$m[2];
}
//if (!$uri) $uri=NULL;
$this->CallPrefDbURI[$condition]=$uri;
}
dprint_r($this->CallPrefDbURI);
dprint("setDiversions");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->setCallDiversions($this->sipId,$result);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
function setVoicemailDiversions() {
dprint ("setVoicemailDiversions()");
if ($this->getVoicemail()) {
if (!$this->absolute_voicemail_uri) {
$diversions['FBUS']="<voice-mailbox>";
$diversions['FNOA']="<voice-mailbox>";
$diversions['FNOL']="<voice-mailbox>";
} else {
$diversions['FBUS']="sip:".$this->voicemail['Account'];
$diversions['FNOA']="sip:".$this->voicemail['Account'];
$diversions['FNOL']="sip:".$this->voicemail['Account'];
}
dprint("setDiversions");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->setCallDiversions($this->sipId,$diversions);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
}
function updateVoicemail() {
dprint("updateVoicemail()");
$account=array("sipId" => $this->sipId,
"email" => $this->email,
"name" => $this->firstName.' '.$this->lastName,
"password" => $this->voicemail['Password'],
"options" => $this->voicemail['Options']
);
dprint_r($account);
$this->VoicemailPort->addHeader($this->SoapAuthVoicemail);
$result = $this->VoicemailPort->updateAccount($account);
if (PEAR::isError($result)) {
$error_msg=$result->getMessage();
$error_fault=$result->getFault();
$error_code=$result->getCode();
print "$error_msg\n";
printf ("<p><font color=red>Error (VoicemailPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
return true;
}
function addVoicemail() {
dprint("addVoicemail()");
$password=$this->RandomPassword();
$_account = array("sipId" => $this->sipId,
"name" => $this->fullName,
"password" => $password,
"email" => $this->email,
"options" => array("delete"=>1)
);
$this->VoicemailPort->addHeader($this->SoapAuthVoicemail);
$result = $this->VoicemailPort->addAccount($_account);
if (PEAR::isError($result)) {
$error_msg=$result->getMessage();
$error_fault=$result->getFault();
$error_code=$result->getCode();
print "$error_msg\n";
printf ("<p><font color=red>Error (VoicemailPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
return true;
}
function deleteVoicemail() {
dprint("deleteVoicemail()");
$this->VoicemailPort->addHeader($this->SoapAuthVoicemail);
$result = $this->VoicemailPort->deleteAccount($this->sipId);
if (PEAR::isError($result)) {
$error_msg=$result->getMessage();
$error_fault=$result->getFault();
$error_code=$result->getCode();
print "$error_msg\n";
printf ("<p><font color=red>Error (VoicemailPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
return true;
}
function setPreference($name,$value) {
dprint("setPreference($name,$value)");
if (!$name) return;
if (!is_array($this->properties)) {
$this->properties=array();
}
foreach (array_keys($this->properties) as $_key) {
$_prop=$this->properties[$_key];
if ($_prop->name == $name) {
if (strlen($value)) {
$newProperties[]=array('name'=> $name,
'value' => $value);
}
$found=1;
} else {
$newProperties[]=$_prop;
}
}
if (!$found) {
$newProperties[]=array('name' => $name,
'value' => $value);
}
if ($this->properties!=$newProperties) $this->somethingChanged=1;
$this->properties=$newProperties;
//dprint_r($this->properties);
}
function showPrepaidForm() {
$task = $_REQUEST['task'];
$prepaidCard = $_REQUEST['prepaidCard'];
$prepaidId = $_REQUEST['prepaidId'];
print "
<tr>
<form action=$this->pageURL method=post>
<input type=hidden name=tab value=prepaid>
<input type=hidden name=task value=Add>
<td class=h colspan=2 align=left> ";
dprint("prepaidCard=$prepaidCard && prepaidId=$prepaidId");
if ($prepaidCard && $prepaidId && $result = $this->AddPrepaidBalance($prepaidCard,$prepaidId)) {
print "<p><font color=green>";
printf (_("Added %d to your account balance. "),$result);
print "</font>";
}
print "
</td>
</tr>
";
$prepaidAccount=$this->GetPrepaidAccountInfo();
if ($prepaidAccount) {
$chapter=sprintf(_("Current balance"));
$this->showChapter($chapter);
print "
<tr>
<td class=h align=left>";
dprint_r($prepaidAccount);
print _("Balance");
print ": $prepaidAccount->balance $this->currency";
print "</td><td align=right><nobr>";
if ($prepaidAccount->callInProgress) {
$remain=$prepaidAccount->maxSessionTime-$prepaidAccount->sessionTime;
print "<font color=blue>";
print _("Call in progress");
print "</font>";
$sessionTime=normalizeTime($prepaidAccount->sessionTime);
printf (": %s (%s)",$sessionTime,$prepaidAccount->destination);
} else {
if ($prepaidAccount->lastCallPrice) {
print _("Last call price");
printf (": %s (%s)",$prepaidAccount->lastCallPrice,$prepaidAccount->destination);
}
}
print "</nobr>
</td>
</form>
</tr>
";
$chapter=sprintf(_("Increase balance"));
$this->showChapter($chapter);
print "
<tr>
<form action=$this->pageURL method=post>
<input type=hidden name=tab value=prepaid>
<input type=hidden name=task value=Add>
<td class=h align=left><nobr>
";
print _("Prepaid card");
print "
<input type=text size=20 name=prepaidCard>
";
print "Id:
<input type=text size=10 name=prepaidId>
<input type=submit value=";
print _("Add");
print "></nobr>
</td>
</form>
</tr>
";
flush();
$this->showBalanceHistory();
}
}
function GetPrepaidAccountInfo() {
dprint("GetPrepaidAccountInfo()");
$this->SipPort->addHeader($this->SoapAuth);
if ($this->SOAPversion > 1) {
$result = $this->SipPort->getPrepaidStatusNew(array($this->sipId));
} else {
$result = $this->SipPort->getPrepaidStatus($this->sipId);
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
if ($this->SOAPversion > 1) {
return $result[0];
} else {
return $result;
}
}
}
function AddPrepaidBalance($prepaidCard,$prepaidId) {
dprint("AddPrepaidBalance($prepaidCard,$prepaidId)");
if ($this->SOAPversion > 1) {
$card = array('id' => intval($prepaidId),
'number' => intval($prepaidCard)
);
} else {
$card = array('id' => $prepaidId,
'number' => $prepaidCard
);
}
dprint("AddPrepaidBalanceLocal($prepaidCard,$prepaidId)");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->addBalanceFromVoucher($this->sipId,$card);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
} else {
return $result;
}
}
function showBalanceHistory() {
$chapter=sprintf(_("Balance history"));
$this->showChapter($chapter);
print "
<tr>
<td colspan=2>
<p>
<table width=100% cellpadding=1 cellspacing=1 border=0 bgcolor=lightgrey> ";
print "<tr bgcolor=#CCCCCC>";
print "<td class=h>";
print _("Id");
print "</td>";
print "<td class=h>";
print _("Date");
print "</td>";
print "<td class=h>";
print _("Action");
print "</td>";
print "<td class=h>";
print _("Card");
print "</td>";
print "<td class=h align=right>";
print _("Value");
print "</td>";
print "<td class=h align=right>";
print _("Balance");
print "</td>";
print "</tr>";
dprint("showBalanceHistory");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getCreditHistory($this->sipId);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode != "2000") {
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
}
}
if (is_array($result)) {
foreach ($result as $_line) {
$found++;
print "
<tr bgcolor=white>
<td>$found</td>
<td>$_line->date</td>
<td>$_line->action</td>
<td>$_line->number</td>
<td align=right>$_line->value</td>
<td align=right>$_line->balance</td>
</tr>
";
}
}
print "
</td>
</tr>
</table>
";
print "</td></tr>";
}
function showDiversions($conditions=array()) {
// for busy not online or unconditional
foreach (array_keys($this->CallPrefDictionary) as $condition) {
$_prefName = $condition."_lastOther";
$this->CallPrefLastOther[$condition]= $this->Preferences[$_prefName];
}
if (!count($conditions)) {
$conditions=$this->CallPrefDictionary;
}
foreach (array_keys($conditions) as $condition) {
$found++;
$rr=floor($found/2);
$mod=$found-$rr*2;
$pref_name = $conditions[$condition];
$pref_value = $this->CallPrefDbURI[$condition];
$select_name=$condition."_select";
$set_uri_java="set_uri_" . $condition;
$update_text_java="update_text_" . $condition;
print "
<tr valign=top>
<td class=border valign=middle>$pref_name</td>
<td class=border valign=middle align=left>
";
$phoneValues = array();
foreach ($this->divertTargets as $phones) {
$phoneValues[] = $phones['value'];
}
$lastOther = $this->CallPrefLastOther[$condition];
$otherIdx = count($this->divertTargets) - 1;
$phoneValues[$otherIdx] = $lastOther;
$targets = sprintf("'%s'", join("', '", $phoneValues));
print "
<SCRIPT>
var ${condition}_other = '$lastOther';
function $set_uri_java(elem) {
var index;
var targets = [$targets];
index = elem.selectedIndex;
if (index == $otherIdx) {
document.sipsettings.$condition.value=${condition}_other;
document.sipsettings.$condition.style.display = 'block';
} else {
document.sipsettings.$condition.style.display = 'none';
document.sipsettings.$condition.value=targets[index];
}
}
function $update_text_java(elem) {
${condition}_other = elem.value;
}
</SCRIPT>
";
print "<table border=0 cellspacing=0 cellpadding=0>
<tr><td>";
print "<select name=$select_name onChange=$set_uri_java(this)>\n";
if ($this->CallPrefDbURI[$condition]) {
$this->CallPrefUriType[$condition]=='Other';
} else {
$this->CallPrefUriType[$condition]=='Disabled';
}
$foundSelected=0;
$nr_targets=count($this->divertTargets);
foreach ($this->divertTargets as $idx => $phone) {
$name = $phone['name'];
if ($this->access_numbers[$condition]) {
if ($phone['description'] == "Mobile") {
$name .= sprintf(' (Dial %s0)',$this->access_numbers[$condition]);
} else if ($phone['description'] == "Voicemail") {
$name .= sprintf(' (Dial %s1)',$this->access_numbers[$condition]);
} else if ($phone['description'] == "Disabled") {
$name .= sprintf(' (Dial %s)',$this->access_numbers[$condition]);
} else if ($phone['description'] == "Other") {
$name .= sprintf(' (Dial %s+ NUMBER)',$this->access_numbers[$condition]);
}
}
if ($phone['description'] == 'Other')
$value = $lastOther;
else
$value = $phone['value'];
if (!$foundSelected &&
($this->CallPrefDbURI[$condition]==$phone['value'] || $idx==$nr_targets-1)) {
print "<option value=\"$idx\" selected>$name</option>\n";
$pref_value = $value;
$this->CallPrefUriType[$condition]=$phone['description'];
$foundSelected=1;
} else {
print "<option value=\"$idx\">$name</option>\n";
}
}
print "</select>";
print "
</td><td>";
if ($this->CallPrefUriType[$condition]=='Other')
$style = "visible";
else
$style = "hidden";
$pref_value=$this->CallPrefDbURI[$condition];
print "
<span>
<td>
<input class=$style type=text size=40
name=$condition value=\"$pref_value\"
onChange=$update_text_java(this)>
</span>
";
if ($condition=="FNOA") {
print " ";
print _("Timeout");
print " ";
$selected_timeout[$this->timeout]="selected";
print "<select name=timeout>";
foreach (array_keys($this->timeoutEls) as $_el) {
printf ("<option value=\"%s\" %s>%s",$_el,$selected_timeout[$_el],$this->timeoutEls[$_el]);
}
print "</select>";
}
if ($condition=="FUNV") {
printf ("Dial %s2*X where X = number of minutes, 0 to reset", $this->access_numbers['FUNC']);
}
print "
</td>
</tr>
</table>";
print "
</td>
</tr>
";
}
}
function logoTableStart() {
print "
<table class=settings border=0 width=650>
<tr>
<td colspan=2 align=right>
";
if ($this->logoFile) {
print "<img src=./$this->logoFile border=0>";
print "<p>";
}
print "
</td>
</tr>
</table>
";
}
function chapterTableStart() {
print "
<table class=settings border=0 width=650>
";
}
function getENUMmappings () {
dprint("getENUMmappings(engine=$this->enum_engine)");
$filter=array(
'type' => 'sip',
'mapto' => $this->account,
'owner' => $this->owner
);
// Range
$range=array('start' => 0,
'count' => 10
);
// Order
$orderBy = array('attribute' => 'changeDate',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
// Insert credetials
$this->EnumPort->addHeader($this->SoapAuthEnum);
$result = $this->EnumPort->getNumbers($Query);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (EnumPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
foreach($result->numbers as $_number) {
$enum='+'.$_number->id->number;
$this->voicemailUsernameOptions[]=$enum;
$this->enums[]=$enum;
}
}
function enum2tel($enum_text) {
// transform enum style domain name in forward telephone number
$enum_text=trim($enum_text);
if (preg_match("/^\+\d+$/",$enum_text)) {
return $enum_text;
}
$z=0;
$tel_text="";
while ($z < strlen($enum_text)) {
$char = substr($enum_text,$z,1);
if (preg_match("/[a-zA-Z]/",$char)) {
break;
} else if (preg_match("/[0-9]/",$char)) {
$tel_text=$char.$tel_text;
$z++;
} else {
$z++;
}
}
if ($tel_text) {
$tel_text="+".$tel_text;
return ($tel_text);
} else {
return $enum_text;
}
}
function showTimezones($name,$value) {
if (!$fp = fopen("timezones", "r")) {
print _("Failed to open timezone file.");
return false;
}
printf ("<select name=%s>",$name);
print "\n<option>";
while ($buffer = fgets($fp,1024)) {
$buffer=trim($buffer);
if ($value==$buffer) {
$selected="selected";
} else {
$selected="";
}
print "\n<option $selected>";
print "$buffer";
}
fclose($fp);
print "</select>";
}
function showQuickDial() {
if (!preg_match("/^\d+$/",$this->username)) return 1;
print "
<tr>
<td class=border>";
print _("Quick dial");
print "
</td>
<td class=border align=left>
<input type=text size=15 maxsize=64 name=quickdial value=\"$this->quickdial\">
";
if ($this->quickdial && preg_match("/^$this->quickdial/",$this->username)) {
$dial_suffix=strlen($this->username) - strlen($this->quickdial);
if ($dial_suffix > 0) {
printf (_("%d digits extension"),$dial_suffix);
}
}
print "
</td>
</tr>
";
}
function showMobileNumber() {
if ($this->SOAPversion <= 1) return;
print "
<tr>
<td class=border>";
print _("Mobile number");
printf ("
</td>
<td class=border align=left>
<input type=text size=15 maxsize=64 name=mobile_number value='%s'>
</td>
</tr>
",$this->Preferences['mobile_number']);
}
function showLastCalls() {
$this->getCalls();
if ($this->calls) {
$chapter=sprintf(_("Call statistics"));
$this->showChapter($chapter);
$calltime=normalizeTime($this->duration);
print "
<tr>
<td class=border>";
if ($this->cdrtool_address) {
print "<a href=$this->cdrtool_address target=cdrtool>";
print _("Summary");
print "</a>";
} else {
print _("Usage data");
}
print "
</td>
<td class=border>";
printf (_("%s calls / %s / %s / %.2f %s"), $this->calls, $calltime,$this->trafficPrint,$this->price,$this->currency);
print "
</td>
</tr>
";
print "
<tr>
<td class=border>";
print _("First / Last call");
print "
</td>
<td class=border>
$this->firstCall / $this->lastCall
</td>
</tr>
";
}
if (count($this->calls_received)) {
$chapter=sprintf(_("Last received calls"));
$this->showChapter($chapter);
$j=0;
foreach (array_keys($this->calls_received) as $call) {
$j++;
$uri = $this->calls_received[$call][from];
$duration = normalizeTime($this->calls_received[$call][duration]);
$dialURI = $this->PhoneDialURL($uri) ;
$htmlDate = $this->colorizeDate($this->calls_received[$call][date]);
$htmlURI = $this->htmlURI($uri);
$urlURI = urlencode($this->normalizeURI($uri));
if (!$this->calls_received[$call][duration]) {
$htmlURI = "<font color=red>$htmlURI</font>";
}
print "
<tr>
<td class=border>$htmlDate</td>
<td class=border>
<table border=0 width=100% cellspacing=0 cellpadding=0>
<tr>
<td align=left width=10>$dialURI</td>
<td align=right width=40>$duration</td>
<td align=right width=10></td>
<td align=left><nobr>$htmlURI</nobr></td>
";
if ($this->Preferences['advanced']) {
print "<td align=right><a href=$this->pageURL&tab=phonebook&task=add&uri=$urlURI&search_text=$urlURI>$this->phonebook_img</a></td>";
}
print "
</tr>
</table>";
print "</td>
</tr>
";
}
}
if (count($this->calls_placed)) {
$chapter=sprintf(_("Last placed calls"));
$this->showChapter($chapter);
$j=0;
foreach (array_keys($this->calls_placed) as $call) {
$j++;
if ($this->calls_placed[$call][to] == "sip:".$this->voicemail['Account'] ) {
continue;
}
$uri = $this->calls_placed[$call][to];
$price = $this->calls_placed[$call][price];
$status = $this->calls_placed[$call][status];
$duration = normalizeTime($this->calls_placed[$call][duration]);
$dialURI = $this->PhoneDialURL($uri) ;
$htmlDate = $this->colorizeDate($this->calls_placed[$call][date]);
$htmlURI = $this->htmlURI($uri);
$urlURI = urlencode($this->normalizeURI($uri));
if ($price) {
$price_print =sprintf(" (%s %s)",$price,$this->currency);
} else {
$price_print = '';
}
print "
<tr>
<td class=border>$htmlDate</td>
<td class=border>
<table border=0 width=100% cellspacing=0 cellpadding=0>
<tr>
<td align=left width=10>$dialURI</td>
<td align=right width=40>$duration</td>
<td align=right width=10></td>
<td align=left><nobr>$htmlURI $price_print</nobr></td>
";
if ($this->Preferences['advanced']) {
print "<td align=right><a href=$this->pageURL&tab=phonebook&task=add&uri=$urlURI&search_text=$urlURI>$this->phonebook_img</a></td>";
}
print "
</tr>
</table>";
print "</td>
</tr>
";
}
}
}
function getCalls () {
dprint("getCalls()");
$fromDate=time()-3600*24*60; // last two months
$toDate=time();
$CallQuery=array("fromDate"=>$fromDate,
"toDate"=>$toDate,
"limit"=>30
);
$CallsQuery=array("placed"=>$CallQuery,
"received"=>$CallQuery
);
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getCalls($this->sipId,$CallsQuery);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
//dprint_r($result);
// received calls
foreach ($result->received as $callStructure) {
$this->calls_received[]=array(
"from" =>quoted_printable_decode($callStructure->fromURI),
"duration"=>$callStructure->duration,
"status" => $callStructure->status,
"date" =>getLocalTime($this->timezone,$callStructure->startTime)
);
}
// placed calls
foreach ($result->placed as $callStructure) {
if ($callStructure->status == 435) continue;
$this->calls_placed[]=array(
"to" => quoted_printable_decode($callStructure->toURI),
"duration" => $callStructure->duration,
"price" => $callStructure->price,
"status" => $callStructure->status,
"date" => getLocalTime($this->timezone,$callStructure->startTime)
);
}
}
function getCallStatistics () {
dprint("getCallStatistics");
$fromDate=mktime(0, 0, 0, date("m"), "01", date("Y"));
$toDate=time();
$CallQuery=array("fromDate"=>$fromDate,
"toDate"=>$toDate
);
$CallQuery=array("limit"=>1
);
$CallsQuery=array("placed"=>$CallQuery);
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getCallStatistics($this->sipId,$CallsQuery);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
dprint_r($result);
$this->thisMonth['calls'] = $result->placed->calls;
$this->thisMonth['price'] = $result->placed->price;
}
function addPhonebookEntry() {
dprint("addPhonebookEntry()");
$uri = trim($_REQUEST['uri']);
if (!strlen($uri)) return false;
$phonebookEntry=array('uri' => $uri);
dprint("addPhonebookEntry");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->addPhoneBookEntry($this->sipId,$phonebookEntry);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
return true;
}
function updatePhonebookEntry() {
dprint("updatePhonebookEntry()");
$uri = trim($_REQUEST['uri']);
$group = trim($_REQUEST['group']);
if ($this->SOAPversion > 1) {
$name = trim($_REQUEST['name']);
$phonebookEntry=array('name' => $name,
'uri' => $uri,
'group' => $group
);
} else {
$firstName = trim($_REQUEST['first_name']);
$lastName = trim($_REQUEST['last_name']);
$phonebookEntry=array('firstName' => $firstName,
'lastName' => $lastName,
'uri' => $uri,
'group' => $group
);
}
//dprint_r($phonebookEntry);
dprint("updatePhonebookEntry");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->updatePhoneBookEntry($this->sipId,$phonebookEntry);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
return true;
}
function deletePhonebookEntry() {
dprint("deletePhonebookEntry()");
$uri = $_REQUEST['uri'];
dprint("deletePhonebookEntry");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->deletePhoneBookEntry($this->sipId,$uri);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
return true;
}
function getPhoneBookEntries() {
dprint("getPhoneBookEntries()");
$search_text = trim($_REQUEST['search_text']);
$group = trim($_REQUEST['group']);
if (!strlen($search_text)) $search_text="%" ;
if ($this->SOAPversion > 1) {
$match=array('uri' => $search_text,
'name' => $search_text
);
} else {
$match=array('uri' => $search_text,
'firstName' => $search_text,
'lastName' => $search_text
);
}
if (strlen($group)) {
if ($group=="empty") {
$match['group']='';
} else {
$match['group']=$group;
}
}
$range=array('start'=>0,
'count'=>100);
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getPhoneBookEntries($this->sipId,$match,$range);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
$this->PhonebookEntries=$result->entries;
//dprint_r($this->PhonebookEntries);
}
function showPhonebook() {
dprint("showPhonebook()");
$chapter=sprintf(_("Contacts"));
$this->showChapter($chapter);
if (!$this->Preferences['advanced']) {
return ;
}
print "
<tr>
<td class=border colspan=2 align=left>";
print _("You can organize, export and group your contacts. ");
print _("Groups can be used to Accept selected incoming calls. ");
print "
</td>
</tr>
";
print '
<SCRIPT>
function toggleVisibility(rowid) {
if (document.getElementById) {
row = document.getElementById(rowid);
if (row.style.display == "block") {
row.style.display = "none";
} else {
row.style.display = "block";
}
return false;
} else {
return true;
}
}
</SCRIPT>
';
print "<tr><td colspan=2>";
$adminonly = $_REQUEST['adminonly'];
$search_text = $_REQUEST['search_text'];
$accept = $_REQUEST['accept']; // selected search group;
$task = $_REQUEST['task'];
$confirm = $_REQUEST['confirm'];
$group = $_REQUEST['group'];
$uri = $_REQUEST['uri'];
if ($this->SOAPversion > 1) {
$name = $_REQUEST['name'];
} else {
$first_name = $_REQUEST['first_name'];
$last_name = $_REQUEST['last_name'];
}
if ($task=="deleteContact" && $confirm) {
$this->deletePhonebookEntry();
unset($task);
unset($confirm);
} else if ($task=="update") {
$this->updatePhonebookEntry();
unset($task);
} else if ($task=="add") {
$this->addPhonebookEntry();
unset($task);
}
$this->getPhoneBookEntries();
$maxrowsperpage=250;
$url_string=$this->pageURL."&tab=phonebook";
print "
<p>
<table width=100% cellpadding=1 cellspacing=1 border=0>
<tr>
<form action=$this->pageURL method=post>
<input type=hidden name=tab value=phonebook>
<input type=hidden name=task value=add>
<td class=h align=left valign=top>
<input type=submit value=";
print _("Add");
print ">
<input type=text size=20 name=uri>
";
print _("(wildcard %)");
print "
</td>
</form>
<form action=$this->pageURL method=post>
<input type=hidden name=tab value=phonebook>
<td class=h align=right valign=top>
<input type=text size=20 name=search_text value=\"$search_text\">
";
$selected[$group]="selected";
print "<select name=group>";
print "<option value=\"\">";
foreach(array_keys($this->PhonebookGroups) as $key) {
printf ("<option value=\"%s\" %s>%s",$key,$selected[$key],$this->PhonebookGroups[$key]);
}
print "<option value=\"\">------";
printf ("<option value=\"empty\" %s>No group",$selected['empty']);
print "</select>";
print "<input type=submit value=";
print _("Search");
print ">";
print "
<a href=$this->pageURL&tab=phonebook&export=1 target=export>";
print _("Export");
print "</a>
</td>
</form>
</tr>
</table>
";
if (count($this->PhonebookEntries)){
print "
<p>
<table width=100% cellpadding=1 cellspacing=1 border=0 bgcolor=lightgrey>
<tr bgcolor=#CCCCCC>
<td class=h align=right>Id</td>
";
print "<td class=h>";
print _("Address");
print "</td>";
print "<td class=h>";
print "</td>";
print "<td class=h>";
print _("Name");
print "</td>";
print "<td class=h>";
print _("Group");
print "</td>";
print "<td class=h>";
print _("Action");
print "</td>";
print "</tr>";
foreach(array_keys($this->PhonebookEntries) as $_entry) {
$found=$i+1;
print "
<tr bgcolor=white valign=top>
<form name=\"Entry$found\" action=\"$this->pageURL&tab=$this->tab\">
$this->hiddenElements
<input type=hidden name=tab value=\"$this->tab\">
<input type=hidden name=task value=\"update\">
";
printf ("<input type=hidden name=uri value=\"%s\">",$this->PhonebookEntries[$_entry]->uri);
print "<td valign=top>$found</td>
<td>";
print $this->PhonebookEntries[$_entry]->uri;
printf ("</td>
<td valign=top>%s</td>
<td valign=top>",
$this->PhoneDialURL($this->PhonebookEntries[$_entry]->uri));
if ($this->SOAPversion > 1) {
print _("Name");
printf ("<input type=text name=name value='%s'>",$this->PhonebookEntries[$_entry]->name);
print "<a href=\"javascript: document.Entry$found.submit()\">Update</a>";
} else {
$fname = $this->PhonebookEntries[$_entry]->firstName;
$lname = $this->PhonebookEntries[$_entry]->lastName;
if ($fname || $lname) {
print "<a onClick=\"return toggleVisibility('row$found')\" href=#>$fname $lname</a>";
} else {
print "<a onClick=\"return toggleVisibility('row$found')\" href=#>Edit</a>";
}
print "
<table border=0 class=extrainfo id=row$found cellpadding=0 cellspacing=0 width=100%>
<tr>
<td>";
print _("First");
print "</td>";
print "<td><input type=text name=first_name value=\"$fname\"></td>
</tr>
<tr>
<td>
";
print _("Last");
print "</td>";
print "<td><input type=text name=last_name value=\"$lname\"></td>";
print "</tr>";
print "<tr><td><input type=submit value=Save></td></tr>";
print "
</table>
";
}
print "
</td>
<td valign=top>";
if ($this->SOAPversion > 1) {
printf ("<select name=group onChange=\"location.href='%s&task=update&uri=%s&name=%s&group='+this.options[this.selectedIndex].value\">",$url_string,urlencode($this->PhonebookEntries[$_entry]->uri),urlencode($this->PhonebookEntries[$_entry]->name));
} else {
printf ("<select name=group onChange=\"location.href='%s&task=update&uri=%s&first_name=%s&last_name=%s&group='+this.options[this.selectedIndex].value\">",$url_string,urlencode($this->PhonebookEntries[$_entry]->uri),urlencode($fname),urlencode($lname));
}
print "<option value=\"\">";
$selected_grp[$this->PhonebookEntries[$_entry]->group]="selected";
foreach(array_keys($this->PhonebookGroups) as $_key) {
printf ("<option value=\"%s\" %s>%s",$_key,$selected_grp[$_key],$this->PhonebookGroups[$_key]);
}
unset($selected_grp);
print "</select>";
print "</td>
";
if ($task=="deleteContact" && $uri==$this->PhonebookEntries[$_entry]->uri) {
print "
<td bgcolor=red valign=top>
";
printf ("<a href=%s&task=deleteContact&uri=%s&confirm=1>",$url_string,urlencode($this->PhonebookEntries[$_entry]->uri));
print _("Confirm");
} else {
print "
<td valign=top>";
printf ("<a href=%s&task=deleteContact&uri=%s>",$url_string,urlencode($this->PhonebookEntries[$_entry]->uri));
if ($this->delete_img) {
print $this->delete_img;
} else {
print _("Delete");
}
}
print "</a>";
print "</td>
</form>
</tr>";
$i++;
}
print "</table>";
print "
<p>
<center>
<table border=0>
<tr>
<td>
";
print "
</td>
</tr>
</table>
";
}
}
function exportPhonebook($userAgent) {
dprint("exportPhonebook()");
$this->getPhonebookEntries();
$this->contentType="Content-type: text/csv";
if (!is_array($this->PhonebookEntries) || !count($this->PhonebookEntries)) return true;
if (!$userAgent) $userAgent='snom';
if ($userAgent=='snom') {
$this->exportFilename="tbook.csv";
$phonebook.=sprintf("Name,Address,Group\n");
} else if ($userAgent == 'eyebeam') {
$phonebook.=sprintf("Name,Group Name,SIP URL,Proxy ID\n");
} else if ($userAgent == 'csco') {
$this->contentType="Content-type: text/xml";
$this->exportFilename="directory.xml";
$phonebook.=sprintf ("<CiscoIPPhoneDirectory>\n\t<Title>%s</Title>\n\t<Prompt>Directory</Prompt>\n",$this->account);
} else if ($userAgent == 'unidata') {
$this->exportFilename="phonebook.csv";
$phonebook.=sprintf("Index,Name,,,,\n");
$phonebook.=sprintf("0,Undefined,,,,\n");
$z=1;
foreach($this->PhonebookGroups as $_group) {
$this->groupIndex[$_group]=$z;
$phonebook.=sprintf ("%s,%s,,,,\n",$z,$_group);
$z++;
}
$phonebook.=sprintf("\nIndex,Name,RdNm,Tel,Group\n");
}
$found=0;
foreach (array_keys($this->PhonebookEntries) as $_entry) {
$fname = $this->PhonebookEntries[$_entry]->firstName;
$lname = $this->PhonebookEntries[$_entry]->lastName;
$uri = $this->PhonebookEntries[$_entry]->uri;
$group = $this->PhonebookEntries[$_entry]->group;
if (!preg_match("/[_%]/",$uri)) {
$uri=substr($uri,4);
$els=explode("@",$uri);
if ($els[1]==$this->domain) $uri=$els[0];
if ($userAgent=='snom') {
$phonebook.=sprintf ("%s %s,%s,%s\n",$fname,$lname,$uri,$this->PhonebookGroups[$group]);
} else if ($userAgent == 'unidata' && $fname && $lname) {
$phonebook.=sprintf ("%s,%s,%s %s,%s,%s\n",$found,$fname,$fname,$lname,$uri,$this->PhonebookGroups[$group]);
} else if ($userAgent == 'eyebeam') {
$phonebook.=sprintf ("%s %s,%s,1\n",$fname,$lname,$this->PhonebookEntries[$_entry]->uri,$this->PhonebookGroups[$group]);
} else if ($userAgent == 'csco') {
$phonebook.=sprintf ("\n\t<DirectoryEntry>\n\t<Name>%s %s</Name>\n\t<Telephone>%s</Telephone>\n\t</DirectoryEntry>\n",$fname,$lname,$uri);
}
$found++ ;
}
}
if ($userAgent == 'csco') {
$phonebook.=sprintf ("\n</CiscoIPPhoneDirectory>\n");
}
Header($this->contentType);
$_header=sprintf("Content-Disposition: inline; filename=%s",$this->exportFilename);
Header($_header);
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache");
print $phonebook;
}
function getRejectMembers() {
dprint("getRejectMembers()");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getRejectMembers($this->sipId);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
$this->rejectMembers=$result;
dprint_r($this->rejectMembers);
return true;
}
function setRejectMembers() {
$members=array();
$rejectMembers=$_REQUEST['rejectMembers'];
foreach ($rejectMembers as $_member) {
if (strlen($_member) && !preg_match("/^sip:/",$_member)) {
$_member = 'sip:'.$_member;
}
if (strlen($_member)) $members[]=$_member;
}
dprint("setRejectMembers");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->setRejectMembers($this->sipId,$members);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
function showRejectMembers() {
$chapter=sprintf(_("Rejected callers"));
$this->showChapter($chapter);
print "
<form method=post name=sipsettings onSubmit=\"return checkForm(this)\">
";
print "
<tr>
<td class=border colspan=2 align=left>";
print _("Use %Number@% to match PSTN callers and user@domain to match SIP callers");
print "
</td>
</tr>
";
print "<tr>";
print "<td class=border align=left>";
print _("SIP caller");
print "</td>";
print "<td class=border align=left>
<input type=text size=35 name=rejectMembers[]>
</td>";
print "<tr>";
if ($this->getRejectMembers()) {
foreach ($this->rejectMembers as $_member) {
print "<tr>";
print "<td class=border align=left>";
print _("SIP caller");
print "</td>";
print "<td class=border align=left>
<input type=text size=35 name=rejectMembers[] value=\"$_member\">
</td>";
print "<tr>";
}
}
print "
<tr>
<td align=left>
<input type=hidden name=action value=\"set reject members\">
";
print "
<input type=submit value=\"";
print _("Save");
print "\"
onClick=saveHandler(this)>
";
print "
</td>
<td align=right>
</td>
</tr>
";
print $this->hiddenElements;
print "
</form>
";
}
function getAcceptRules() {
dprint("getAcceptRules()");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->getAcceptRules($this->sipId);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
foreach(array_keys($result->rules->persistent) as $_rule) {
$_key=$result->rules->persistent[$_rule]->days;
$this->acceptRules['persistent'][$_key]=array('start' =>$result->rules->persistent[$_rule]->start,
'stop' =>$result->rules->persistent[$_rule]->stop,
'groups'=>$result->rules->persistent[$_rule]->groups);
}
$this->acceptRules['temporary']=array('groups' => $result->rules->temporary->groups,
'duration'=> $result->rules->temporary->duration
);
$this->acceptRules['groups'] = $result->nonEmptyGroups;
//dprint_r($this->acceptRules);
return true;
}
function setAcceptRules() {
dprint("setAcceptRules()");
//dprint_r($_REQUEST);
$persistentAcceptArray=array();
$temporaryAcceptArray=array();
foreach (array_keys($this->acceptDailyProfiles) as $profile) {
unset($groups);
$radio_persistentVarName='radio_persistent_'.$profile;
$radio_persistent=$_REQUEST[$radio_persistentVarName];
if ($radio_persistent=="0") {
$groups[]='everybody';
} else if ($radio_persistent=="1") {
$groups[]='nobody';
} else if ($radio_persistent=="2") {
$groupsVarName='groups_'.$profile;
$groups=$_REQUEST[$groupsVarName];
}
$startVarName='start_'.$profile;
$start=$_REQUEST[$startVarName];
$stopVarName='stop_'.$profile;
$stop=$_REQUEST[$stopVarName];
if (!preg_match("/^[0-2][0-9]:[0-5][0-9]$/",$start) ||
!preg_match("/^[0-2][0-9]:[0-5][0-9]$/",$stop) ||
($start=="00:00" && $stop=="00:00") ||
!$start ||
!$stop ||
($radio_persistent=="2" && (!is_array($groups) || !count($groups) )) ) {
continue;
}
$persistentAcceptArray[]=array('start' => $start,
'stop' => $stop,
'groups' => $groups,
'days' => intval($profile)
);
}
// temporary
$radio_temporary=$_REQUEST['radio_temporary'];
unset($groups_temporary);
if ($radio_temporary=="0") {
$groups_temporary[]='everybody';
} else if ($radio_temporary=="1") {
$groups_temporary[]='nobody';
} else if ($radio_temporary=="2") {
$groups_temporary=$_REQUEST['groups_temporary'];
}
if (!is_array($groups_temporary)) $groups_temporary=array();
$duration=$_REQUEST['duration'];
$temporaryAccept=array("groups" => $groups_temporary,
"duration"=> intval($duration)
);
// combine persistent and temporary
$rules=array("persistent" =>$persistentAcceptArray,
"temporary" =>$temporaryAccept);
//dprint_r($rules);
dprint("setAcceptRules");
$this->SipPort->addHeader($this->SoapAuth);
$result = $this->SipPort->setAcceptRules($this->sipId,$rules);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (SipPort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
return true;
}
function showAcceptRules() {
$chapter=sprintf(_("Accept rules"));
$this->showChapter($chapter);
$this->getAcceptRules();
$this->getVoicemail();
$this->getDivertTargets();
$this->getDiversions();
print "
<form method=post name=sipsettings onSubmit=\"return checkForm(this)\">
";
print "
<tr>
<td class=border colspan=2 align=left>";
print _("You can use these features to accept or reject calls depending on the time of day and caller id. ");
print _("You can create custom groups in the Contacts page like Family or Coworkers. ");
print _("Rejected calls are diverted based on the Unavailable condition in the settings page. ");
print "<p>";
print "<p class=desc>";
printf (_("Your current timezone is: %s"),$this->timezone);
$timestamp=time();
$LocalTime=getLocalTime($this->timezone,$timestamp);
print " $LocalTime";
print "
</td>
</tr>
";
print "
<tr>
<td class=ag1 colspan=2 bgcolor=white align=left>";
print _("If Unavailable");
print " ";
print _("divert calls to: ");
foreach ($this->divertTargets as $idx => $phone) {
//dprint_r($phone);
if ($this->CallPrefDbURI['FUNV'] == "<voice-mailbox>") {
$this->CallPrefDbURI['FUNV'] = $this->voicemail['Account'];
}
if ($this->CallPrefDbURI['FUNV']==$phone['value']) {
printf ($phone['name']);
break;
}
}
print "
</td>
</tr>
";
$chapter=sprintf(_("Temporary rule"));
$this->showChapter($chapter);
print "
<tr>
<td class=border colspan=2 align=left>";
print _("This will override the permanent rules for the chosen duration. ");
print "
</td>
</tr>
";
print "<tr>";
print "<td colspan=2 class=border>";
print "<table border=0 width=100%>
<tr>
<td>
";
print _("Duration:");
if ($this->acceptRules['temporary']['duration']) {
printf ('
<script LANGUAGE="JavaScript">
var minutes = %s;
ID=window.setTimeout("update();", 1000*60);
function update() {
minutes--;
document.sipsettings.minutes.value = minutes;
ID=window.setTimeout("update();",1000*60);
}
</script>
',$this->acceptRules['temporary']['duration']);
print " <font color=red>";
print " <input type=text name=minutes size=3 maxsize=3 value=\"";
print $this->acceptRules['temporary']['duration'];
print "\" disabled=true>";
print " <input type=hidden name=accept_temporary_remain value=\"";
print $this->acceptRules['temporary']['duration'];
print "\"> ";
print "</font>";
} else {
print "<select name=duration> ";
print "<option>";
print "<option value=1 > 1";
print "<option value=5 > 5";
print "<option value=10 > 10";
print "<option value=20 > 20";
print "<option value=30 > 30";
print "<option value=45 > 45";
print "<option value=60 > 60";
print "<option value=90 > 90";
print "<option value=120>120";
print "<option value=150>150";
print "<option value=180>180";
print "<option value=240>240";
print "<option value=480>480";
print "</select> ";
}
print _("minute(s)");
$_name="radio_temporary";
$_checked_everybody="";
$_checked_nobody="";
$_checked_groups="";
print "<td>";
if (is_array($this->acceptRules['temporary']['groups']) &&in_array("everybody",$this->acceptRules['temporary']['groups'])) {
$_checked_everybody="checked";
} else if (is_array($this->acceptRules['temporary']['groups']) && in_array("nobody",$this->acceptRules['temporary']['groups'])) {
$_checked_nobody="checked";
} else if (!in_array('everybody',$this->acceptRules['temporary']['groups']) &&
!in_array('nobody',$this->acceptRules['temporary']['groups']) &&
count($this->acceptRules['temporary']['groups'])) {
$_checked_groups="checked";
}
if ($_checked_nobody) {
$class_nobody="ag1";
} else {
$class_nobody="note";
}
printf ("<td class=note><input type=radio name=%s value=0 %s>%s",$_name,$_checked_everybody,_("Everybody"));
printf ("<td class=$class_nobody><input type=radio name=%s value=1 %s>%s",$_name,$_checked_nobody,_("Nobody"));
$c=count($this->acceptRules['groups']);
if ($_checked_groups) {
$class_groups="ag1";
} else {
$class_groups="note";
}
print "<td class=$class_groups>";
//dprint_r($this->acceptRules['groups']);
if (count($this->acceptRules['groups'])>2) {
printf ("<input type=radio name=%s value=2 %s class=hidden>",$_name,$_checked_groups);
$i=0;
foreach(array_keys($this->acceptRules['groups']) as $_group) {
$i++;
if (preg_match("/(everybody|nobody)/",$this->acceptRules['groups'][$_group])) continue;
if (in_array($this->acceptRules['groups'][$_group],$this->acceptRules['temporary']['groups'])) {
$_checked="checked";
} else {
$_checked="";
}
$_name="groups_temporary[]";
printf ("<input type=checkbox name=%s value=%s onClick=\"document.sipsettings.radio_temporary[2].checked=true\" %s>%s ",
$_name,
$this->acceptRules['groups'][$_group],
$_checked,
$this->PhonebookGroups[$this->acceptRules['groups'][$_group]]
);
}
}
print "
</tr>
</table>
";
print "
</td>
</tr>
";
$chapter=sprintf(_("Permanent rules"));
$this->showChapter($chapter);
print "
<tr valign=top>
<td colspan=2 class=border align=left valign=top>
";
print "<table border=0 width=100%>";
print "<tr bgcolor=lightgrey>
<td>";
print _("Days");
print "</td>
<td colspan=2>";
print _("Time interval");
print "</td>
<td colspan=3>";
print _("Groups");
print "</td>
</tr>
";
foreach (array_keys($this->acceptDailyProfiles) as $profile) {
if ($this->acceptRules['persistent'][$profile]['start'] || $this->acceptRules['persistent'][$profile]['stop']) {
$class="ag1";
} else {
$class="mhj";
}
if ($profile==1) {
print "<tr><td colspan=6 heigth=5 bgcolor=lightgrey></td></tr>";
}
print "
<tr>
<td valign=top class=$class>";
printf ("%s",$this->acceptDailyProfiles[$profile]);
unset($selected_StartTime);
$selected_StartTime[$this->acceptRules['persistent'][$profile]['start']]="selected";
printf ("<td valign=top><select name=start_%s>",$profile);
$t=0;
$j=0;
print "<option>";
while ($t<24) {
if (!$j) {
if (strlen($t)==1) {
$t1="0".$t.":00";
} else {
$t1=$t.":00";
}
$j++;
} else {
if (strlen($t)==1) {
$t1="0".$t.":30";
} else {
$t1=$t.":30";
}
$j=0;
$t++;
}
print "<option $selected_StartTime[$t1]>$t1";
}
printf ("<option %s>23:59",$selected_StartTime['23:59']);
print "</select>";
unset($selected_StopTime);
$selected_StopTime[$this->acceptRules['persistent'][$profile]['stop']]="selected";
printf ("<td valign=top><select name=stop_%s>",$profile);
$t=0;
$j=0;
print "<option>";
while ($t<24) {
if (!$j) {
if (strlen($t)==1) {
$t1="0".$t.":00";
} else {
$t1=$t.":00";
}
$j++;
} else {
if (strlen($t)==1) {
$t1="0".$t.":30";
} else {
$t1=$t.":30";
}
$j=0;
$t++;
}
print "<option $selected_StopTime[$t1]> $t1";
}
printf ("<option %s>23:59",$selected_StopTime['23:59']);
print "</select>";
$_name="radio_persistent_".$profile;
$_checked_everybody="";
$_checked_nobody="";
$_checked_groups="";
if (is_array($this->acceptRules['persistent'][$profile]['groups']) && in_array("everybody",$this->acceptRules['persistent'][$profile]['groups'])) {
$_checked_everybody="checked";
} else if (is_array($this->acceptRules['persistent'][$profile]['groups']) && in_array("nobody",$this->acceptRules['persistent'][$profile]['groups'])) {
$_checked_nobody="checked";
} else if (!in_array('everybody',$this->acceptRules['persistent'][$profile]['groups']) &&
!in_array('nobody',$this->acceptRules['persistent'][$profile]['groups']) &&
count($this->acceptRules['persistent'][$profile]['groups'])) {
$_checked_groups="checked";
} else {
$_checked_everybody="checked";
}
if ($_checked_nobody) {
$class_nobody="ag1";
} else {
$class_nobody="note";
}
printf ("<td class=note><input type=radio name=%s value=0 %s>%s",$_name,$_checked_everybody,_("Everybody"));
printf ("<td class=$class_nobody><input type=radio name=%s value=1 %s>%s",$_name,$_checked_nobody,_("Nobody"));
$c=count($this->acceptRules['groups']);
if ($_checked_groups) {
$class_groups="ag1";
} else {
$class_groups="note";
}
print "<td class=$class_groups>";
if (count($this->acceptRules['groups'])>2) {
printf ("<input type=radio name=%s value=2 %s class=hidden>",$_name,$_checked_groups);
$i=0;
foreach(array_keys($this->acceptRules['groups']) as $_group) {
$i++;
if (preg_match("/(everybody|nobody)/",$this->acceptRules['groups'][$_group])) continue;
if (in_array($this->acceptRules['groups'][$_group],$this->acceptRules['persistent'][$profile]['groups'])) {
$_checked="checked";
} else {
$_checked="";
}
$_name="groups_".$profile."[]";
printf ("<input type=checkbox name=%s value=%s onClick=\"document.sipsettings.radio_persistent_%s[2].checked=true\" %s>%s ",
$_name,
$this->acceptRules['groups'][$_group],
$profile,
$_checked,
$this->PhonebookGroups[$this->acceptRules['groups'][$_group]]
);
}
}
print "
</tr>
";
}
print "</table>";
print "</td>
</tr>";
print "
<tr>
<td align=left>
<input type=hidden name=action value=\"set accept rules\">
";
print "
<input type=submit value=\"";
print _("Save");
print "\"
onClick=saveHandler(this)>
";
print "
</td>
<td align=right>
</td>
</tr>
";
print $this->hiddenElements;
print "
</form>
";
}
function sendEmail() {
dprint ("SipSettings->sendEmail($this->email)");
$this->getVoicemail();
$this->getENUMmappings();
$this->getAliases();
$this->countAliases=count($this->aliases);
if (!$this->email) {
print "<p><font color=blue>";
print _("Please fill in the e-mail address.");
print "</font>";
return false;
}
$subject = "SIP account settings of $this->name";
$tpl = $this->getEmailTemplate($this->reseller, $this->Preferences['language']);
if (in_array("free-pstn",$this->groups)) $this->allowPSTN=1;
define("SMARTY_DIR", "/usr/share/php/smarty/libs/");
include_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty;
$smarty->template_dir = '.';
//$smarty->use_sub_dirs = true;
//$smarty->cache_dir = 'templates_c';
$smarty->assign('client', $this);
$body = $smarty->fetch($tpl);
if (mail($this->email, $subject, $body, "From: $this->support_email")) {
print "<p>";
printf (_("SIP settings have been sent to %s"), $this->email);
}
}
function checkSettings() {
dprint ("checkSettings()");
foreach ($this->WEBdictionary as $el) {
${$el}=trim($_REQUEST[$el]);
}
if ($accept_temporary_remain && !is_numeric($accept_temporary_remain)) {
$this->error=_("Invalid expiration period. ");
return false;
}
if ($quota && !is_numeric($quota) && !is_float($quota)) {
$this->error=_("Invalid quota. ");
return false;
}
if (!$timezone && !$this->timezone) {
$this->error=_("Missing time zone. ");
return false;
}
if (!$this->checkEmail($mailto)) {
$this->error=_("Invalid e-mail address. ");
return false;
}
$rpid=preg_replace("/[^0-9\x]/","",$rpid);
if (preg_match("/^0+([1-9]\d*)$/",$rpid,$m)) $rpid=$m[1];
$quickdial=preg_replace("/[^0-9]/","",$quickdial);
if (!strlen($accept_temporary_group)) $accept_temporary_remain=0;
if (!$accept_temporary_remain) $accept_temporary_group="";
if (!$anonymous) $anonymous="0";
return true;
}
function RandomPassword($len=6) {
$alf=array("1","2","3","4","5","6","7","8","9");
$i=0;
while($i < $len) {
srand((double)microtime()*1000000);
$randval = rand(0,8);
$string="$string"."$alf[$randval]";
$i++;
}
return $string;
}
function cleanURI($uri) {
$uri=preg_replace("/.*sips?:([^;><=]+).*/", "\$1", $uri);
return urlencode($uri);
}
function showUpgrade () {
}
function PhoneDialURL($uri) {
$uri=$this->normalizeURI($uri);
$uri_print="<a href=$uri>$this->call_img</a>";
return $uri_print;
}
function showChapter($chapter) {
print "
<tr>
<td height=3 colspan=2></td>
</tr>
<tr>
<td class=border colspan=2 bgcolor=lightgrey><b>";
print $chapter;
print "</b>
</td>
</tr>
";
}
function normalizeURI($uri) {
$uri=quoted_printable_decode($uri);
$uri=preg_replace("/.*(sips?:[^;><=]+).*/", "\$1", $uri);
if (preg_match("/^(sips?:.*):/", $uri, $m)) $uri=$m[1];
if (preg_match("/^(.*sips?:0\d+)@(.*)(>?)$/",$uri,$m)) {
$uri=$m[1]."@".$this->domain.$m[3];
}
return $uri;
}
function htmlURI($uri) {
if (preg_match("/^sips?:00(\d+)@/",$uri,$m)) {
$uri="+".$m[1];
}
return htmlentities($uri);
}
function colorizeDate($call_date) {
list($date,$time)=explode(" ",$call_date);
if ($date== Date("Y-m-d",time())) {
$datePrint="<b><font color=green>".sprintf(_("Today"))."</font></b> ".$time;
} else if ($date== Date("Y-m-d",time()-3600*24)) {
$datePrint="<font color=blue>".sprintf(_("Yesterday"))."</font> ".$time;
} else {
$datePrint=$call_date;
}
return $datePrint;
}
function checkEmail($email) {
dprint ("checkEmail($email)");
$regexp = "/^([a-z0-9][a-z0-9_.-]*)@([a-z0-9][a-z0-9-]*\.)+([a-z]{2,})$/i";
if (stristr($email,"-.") ||
!preg_match($regexp, $email)) {
return false;
}
return true;
}
function showPresence() {
$this->getPresenceWatchers();
$this->getPresenceRules();
$this->getPresenceInformation();
print "
<form method=post name=sipsettings onSubmit=\"return checkForm(this)\">
";
$chapter=sprintf(_("Published information"));
$this->showChapter($chapter);
printf ("
<tr>
<td class=border>Note</td>
<td class=border>Activity</td>
</tr>");
printf ("
<tr>
<td class=border><input type=text size=50 name=note value='%s'>
<td class=border>
<select name=activity>
<option>
",$this->presentity['note']);
$selected_activity[$this->presentity['activity']]='selected';
foreach (array_keys($this->presenceActivities) as $_activity) {
printf ("<option %s value='%s'>%s",$selected_activity[$_activity],$_activity,ucfirst($_activity));
}
print "</select>";
if ($this->presenceActivities[$this->presentity['activity']]) {
printf ("<img src=images/%s border=0>",$this->presenceActivities[$this->presentity['activity']]);
}
print "
</td>
</tr>
";
$chapter=sprintf(_("Watchers"));
$this->showChapter($chapter);
$j=0;
foreach (array_keys($this->presenceWatchers) as $_watcher) {
$j++;
$online_icon='';
if (is_array($this->presenceRules['allow']) && in_array($_watcher,$this->presenceRules['allow'])) {
$display_status = 'allow';
} elseif (is_array($this->presenceRules['deny']) && in_array($_watcher,$this->presenceRules['deny'])) {
$display_status = 'deny';
} else {
$display_status = $this->presenceWatchers[$_watcher]['status'];
}
if ($this->presenceWatchers[$_watcher]['online'] == 1) {
$online_icon="<img src=images/buddy_online.jpg border=0>";
} else {
$online_icon="<img src=images/buddy_offline.jpg border=0>";
}
if ($display_status == 'deny') {
$online_icon="<img src=images/buddy_banned.jpg border=0>";
$color='red';
} else if ($display_status == 'confirm') {
$color='blue';
} else {
$color='green';
}
printf ("
<tr>
<input type=hidden name=watcher[] value=%s>
<td class=border><font color=%s>%s</font></td>
<td class=border>
<select name=watcher_status[]>
",
$_watcher,
$color,
$_watcher);
unset($selected);
$selected[$display_status]='selected';
foreach ($this->presenceStatuses as $_status) {
if ($_status== 'confirm' && !$selected[$_status]) continue;
printf ("<option %s value=%s>%s",$selected[$_status],$_status,ucfirst($_status));
}
print "
</select>
$online_icon
</td>
</tr>
";
}
$chapter=sprintf(_("Rules"));
$this->showChapter($chapter);
$j=0;
foreach (array_keys($this->presenceRules) as $_key) {
$j++;
foreach ($this->presenceRules[$_key] as $_tmp) {
if (in_array($_tmp,array_keys($this->presenceWatchers))) {
continue;
}
printf ("
<tr>
<input type=hidden name=watcher[] value=%s>
<td class=border>%s</td>
<td class=border>
<select name=watcher_status[]>
",$_tmp,$_tmp);
unset($selected);
$selected[$_key]='selected';
foreach ($this->presenceStatuses as $_status) {
+ if ($_status== 'confirm' && !$selected[$_status]) continue;
printf ("<option %s value=%s>%s",$selected[$_status],$_status,ucfirst($_status));
}
print "
<option value=delete>Delete
</select>
";
if ($_key == 'deny') {
print "<img src=images/buddy_banned.jpg border=0>";
}
print "
</td>
</tr>
";
}
}
printf ("
<tr>
<td class=border><input type=text name=watcher[]></td>
<td class=border>
<select name=watcher_status[]>
");
$selected['deny']='selected';
foreach ($this->presenceStatuses as $_status) {
printf ("<option %s value=%s>%s",$selected[$_status],$_status,ucfirst($_status));
}
print "
</select>
</td>
</tr>
";
print "
<tr>
<td align=left>
<input type=hidden name=action value=\"set presence\">
";
print "
<input type=submit value=\"";
print _("Save");
print "\"
onClick=saveHandler(this)>
";
print "
</td>
<td align=right>
</td>
</tr>
";
print $this->hiddenElements;
print "
</form>
";
}
function setPresence() {
// publish information
$this->setPresenceInformation();
// set policy
unset($policy);
foreach ($this->presenceStatuses as $_status) {
$policy[$_status]=array();
}
$j=0;
$seen_watcher=array();
foreach($_REQUEST['watcher'] as $_w) {
if (!strlen($_w)) continue;
if ($seen_watcher[$_w]) continue;
$seen_watcher[$_w]++;
if (!strstr($_w,'@')) {
if ($_REQUEST['watcher_status'][$j] == 'delete') continue;
$domain_policy[$_REQUEST['watcher_status'][$j]][]=$_w;
}
$j++;
}
$j=0;
$seen_watcher=array();
foreach($_REQUEST['watcher'] as $_w) {
if (!strlen($_w)) continue;
if ($seen_watcher[$_w]) continue;
$seen_watcher[$_w]++;
if ($_REQUEST['watcher_status'][$j] == 'delete') continue;
$status=$_REQUEST['watcher_status'][$j];
list($u,$d)=explode('@',$_w);
if (!in_array($d,$domain_policy[$status])) {
$policy[$status][]=$_w;
}
$j++;
}
//dprint_r($policy);
$result = $this->PresencePort->setPolicy(array("username" =>$this->username,"domain" =>$this->domain),$this->password,$policy);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (PresencePort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
function getPresenceWatchers () {
dprint("getPresenceWatchers()");
$result = $this->PresencePort->getWatchers(array("username" =>$this->username,"domain" =>$this->domain),$this->password);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (PresencePort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
//dprint_r($result);
foreach ($result as $_watcher) {
$this->presenceWatchers[$_watcher->id]['status']=$_watcher->status;
$this->presenceWatchers[$_watcher->id]['online']=$_watcher->online;
$this->watchersOnline=0;
if ($this->presenceWatchers[$_watcher->id]['online']) {
$this->watchersOnline++;
}
}
//dprint_r($this->presenceWatchers);
}
function getPresenceInformation() {
dprint("getPresenceInformation()");
$result = $this->PresencePort->getPresenceInformation(array("username" =>$this->username,"domain" =>$this->domain),$this->password);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (PresencePort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
dprint_r($result);
$this->presentity['activity'] = $result->activity;
$this->presentity['note'] = $result->note;
}
function setPresenceInformation() {
$presentity['activity'] = $_REQUEST['activity'];
$presentity['note'] = $_REQUEST['note'];
if (strlen($presentity['activity']) && strlen($presentity['note'])) {
$result = $this->PresencePort->setPresenceInformation(array("username" =>$this->username,"domain" =>$this->domain),$this->password, $presentity);
} else if (!strlen($presentity['note'])) {
$result = $this->PresencePort->deletePresenceInformation(array("username" =>$this->username,"domain" =>$this->domain),$this->password);
} else {
return true;
}
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (PresencePort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
return true;
}
function getPresenceRules () {
dprint("getPresenceRules()");
$result = $this->PresencePort->getPolicy(array("username" =>$this->username,"domain" =>$this->domain),$this->password);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("<p><font color=red>Error (PresencePort): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
foreach ($this->presenceStatuses as $_status) {
$this->presenceRules[$_status] = $result->$_status;
}
//dprint_r($this->presenceRules);
}
function getFileTemplate($name, $type="file") {
//dprint("getFileTemplate(name=$name, type=$type, path=$this->templates_path)");
if ($type=='logo') {
$extensions=array('png','gif','jpg');
foreach ($extensions as $_ext) {
$file=$this->templates_path.'/'.$this->reseller.'/'.$name.'.'.$_ext;
if (file_exists($file)) {
return $file;
}
}
foreach ($extensions as $_ext) {
if (file_exists("$this->templates_path/default/$name.$_ext")) {
return "$this->templates_path/default/$name.$_ext";
}
}
return false;
} else {
if (file_exists("$this->templates_path/$this->reseller/$name")) {
return "$this->templates_path/$this->reseller/$name";
} elseif (file_exists("$this->templates_path/default/$name")) {
return "$this->templates_path/default/$name";
} else {
return false;
}
}
}
function getEmailTemplate($language='en') {
$file = "sip_settings_email_$language.tpl";
$file2 = "sip_settings_email.tpl";
dprint("templates_path = $this->templates_path");
if (file_exists("$this->templates_path/$this->reseller/$file")) {
return "$this->templates_path/$this->reseller/$file";
} elseif (file_exists("$this->templates_path/$this->reseller/$file2")) {
return "$this->templates_path/$this->reseller/$file2";
} elseif (file_exists("$this->templates_path/default/$file")) {
return "$this->templates_path/default/$file";
} elseif (file_exists("$this->templates_path/default/$file2")) {
return "$this->templates_path/default/$file2";
} else {
return false;
}
}
function getBillingProfiles() {
// Get getBillingProfiles
if ($this->SOAPversion < 2) return true;
dprint("getBillingProfiles()");
$this->RatingPort->addHeader($this->SoapAuth);
$result = $this->RatingPort->getEntityProfiles("subscriber://".$this->account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode != "4001") {
printf ("<p><font color=red>Error (Rating): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
$this->billingProfiles=$result;
//dprint_r($this->billingProfiles);
}
function showBillingProfiles() {
if ($this->login_type != 'admin' && $this->login_type != 'reseller' || !in_array("free-pstn",$this->groups)) {
return true;
}
$this->getBillingProfiles();
$chapter=sprintf(_("Billing profiles"));
$this->showChapter($chapter);
print "
<tr>
<td class=border>";
print _("Profiles");
printf ("
</td>
<td class=border align=left>
Weekday:
<input type=text size=10 maxsize=64 name=profileWeekday value='%s'>
Weekend:
<input type=text size=10 maxsize=64 name=profileWeekend value='%s'>
",
$this->billingProfiles->profileWeekday,
$this->billingProfiles->profileWeekend
);
if ($this->billingProfiles->timezone) {
$_timezone=$this->billingProfiles->timezone;
} else {
$_timezone=$this->resellerProperties['timezone'];
}
$this->showTimezones('profileTimezone',$_timezone);
print "
</td>
</tr>
";
}
function updateBillingProfiles() {
if ($this->login_type != 'admin' && $this->login_type != 'reseller') {
return true;
}
$this->RatingPort->addHeader($this->SoapAuth);
$result = $this->RatingPort->getEntityProfiles("subscriber://".$this->account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode != "4001") {
printf ("<p><font color=red>Error (Rating): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
$this->billingProfiles=$result;
$profiles=array("entity" =>'subscriber://'.$this->account ,
"profileWeekday" => trim($_REQUEST['profileWeekday']),
"profileWeekend" => trim($_REQUEST['profileWeekend']),
"timezone" => trim($_REQUEST['profileTimezone'])
);
//dprint_r($profiles);
$this->RatingPort->addHeader($this->SoapAuth);
if ($this->billingProfiles->profileWeekday && !$profiles['profileWeekday']) {
// delete profile
$result = $this->RatingPort->deleteEntityProfiles('subscriber://'.$this->account);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode != "4001") {
printf ("<p><font color=red>Error (Rating): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
} else if ($profiles['profileWeekday']) {
// update profile
$result = $this->RatingPort->setEntityProfiles($profiles);
if (PEAR::isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode != "4001") {
printf ("<p><font color=red>Error (Rating): %s (%s): %s</font>",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
return false;
}
}
} else {
// do nothing
}
}
}
function normalizeURI($uri) {
$uri=quoted_printable_decode($uri);
if (preg_match("/^(.*<sips?:.*)@(.*>)/",$uri,$m)) {
if (preg_match("/^(.*):/U",$m[2],$p)){
$uri=$m[1]."@".$p[1].">";
} else {
$uri=$m[1]."@".$m[2];
}
} else if (preg_match("/^(sips?:.*)[=:;]/U",$uri,$p)) {
$uri=$p[1];
}
return $uri;
}
function normalizeTime($period) {
$sec=$period%60;
$min=floor($period/60);
$h=floor($min/60);
if (!$period) return ;
if ($h>0) {
$min=$min-60*$h;
}
if ($h >= 1) {
return sprintf('%dh%02d\'%02d"', $h, $min, $sec);
} else {
return sprintf('%d\'%02d"', $min, $sec);
}
}
function getImageForUserAgent($agent) {
// array with mappings between User Agents and images
$userAgentImages = array(
"Asterisk" => "asterisk.png",
"AVM FRITZ" => "avm-fritzbox-wlan.png",
"Cisco ATA" => "cisco-ata.png",
"Cisco.*Gateway" => "cisco.png",
"CSCO" => "cisco-7960.png",
"DrayTek" => "draytek-vigor2600vg.png",
"eStara" => "eStara.png",
"Eyebeam" => "eyebeam.png",
"Grandstream" => "handytone.png",
"ipDialog" => "ipDialog.png",
"Linksys" => "linksys-pap2.png",
"Session.*Wave" => "session.png",
"SIPPS" => "sipps.png",
"Sipura" => "spa2000.png",
"sjphone" => "sjphone.png",
"Snom100" => "snom100.png",
"Snom(190|200)" => "snom200.png",
"Snom320" => "snom320.png",
"Snom360" => "snom360.png",
"snomSoft" => "snom360.png",
"Talkin" => "xten.png",
"unidata" => "hitachi-wip5000.png",
"Vizufon" => "vizufon.png",
"voipster" => "zoep.png",
"Windows RTC" => "messenger.png",
"X-Lite" => "xten.png",
"X-PRO" => "xten.png",
"ZyXEL P2000W" => "zyxel-p2000.png",
"-IMVP" => "innomedia-mta5000.png",
"3610\/" => "siemens-3610.png",
"cirpack" => "cirpack.png",
"Brcm-Callctrl" => "webstarepx2203.png",
"Audiocodes-Sip" => "audiocodes-mp124.png",
"Nokia" => "nokia.png",
"CopperJet" => "copperjet16162p.png",
"Ekiga" => "ekiga.png",
"sofia-sip" => "Nokia810.png"
);
foreach ($userAgentImages as $agentRegexp => $image) {
if (preg_match("/$agentRegexp/i", $agent)) {
return $image;
}
}
return "unknown.png";
}
function checkSIPURI($uri) {
if ($uri == "<voice-mailbox>") return true;
$regexp = "/^sips?:([a-z0-9][a-z0-9_.-]*)@([a-z0-9][a-z0-9-]*\.)+([a-z0-9]{2,})$/i";
if (stristr($contact,"-.") || !preg_match($regexp, $uri)) {
return false;
}
return true;
}
function checkURI($uri) {
//dprint ("<b>checkURI($uri) </b>");
if ($uri == "<voice-mailbox>") return true;
if (preg_match("/^(sip:|sips:)(.*)$/",$uri,$m)) $uri=$m[2];
$regexp = "/^(\+?[a-z0-9*][a-z0-9_.*-]*)@([a-z0-9][a-z0-9-]*\.)+(([a-z]{2,})|(\d+))$/i";
if (stristr($uri,"-.") ||
!preg_match($regexp, $uri)) {
print "Invalid URI \"$uri\". ";
return false;
}
return true;
}
function checkPhonebookURI($uri) {
$regexp = "/^sip:([a-z0-9%_.-]*)@([a-z0-9%.-]*)$/i";
if (stristr($contact,"-.") || !preg_match($regexp, $uri)) {
print "Invalid URI \"$uri\". ";
return false;
}
return true;
}
function getLocalTime($timezone,$timestamp) {
$tz=getenv('TZ');
putenv("TZ=$timezone");
$LocalTime=date("Y-m-d H:i:s", $timestamp);
putenv("TZ=$tz");
return $LocalTime;
}
function getSipThorHomeNode ($account,$sip_proxy) {
if (!$account || !$sip_proxy) return false;
$socket = fsockopen($sip_proxy, 9500, $errno, $errstr, 1);
if (!$socket) {
return false;
}
$request=sprintf("lookup sip_proxy for %s",$account);
if (fputs($socket,"$request\r\n") !== false) {
$ret = fgets($socket,4096);
}
fclose($socket);
return $ret;
}
?>

File Metadata

Mime Type
text/x-diff
Expires
Sat, Feb 1, 6:42 AM (1 d, 11 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3488870
Default Alt Text
(651 KB)

Event Timeline