diff --git a/library/NGNPro/Records/EnumMappings.php b/library/NGNPro/Records/EnumMappings.php new file mode 100644 index 0000000..0282f39 --- /dev/null +++ b/library/NGNPro/Records/EnumMappings.php @@ -0,0 +1,1356 @@ + '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://")), + "key:https" => array("service"=>"key:https", + "webname"=>"Public key (HTTPS)", + "schemas"=>array("https://")) + ); + + public function __construct($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']) + ); + parent::__construct($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); + $this->log_action('getNumbers'); + + // Call function + $result = $this->SoapEngine->soapclient->getNumbers($Query); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $log=sprintf("SOAP request error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl, $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring); + syslog(LOG_NOTICE, $log); + return false; + } else { + + $this->rows = $result->total; + + if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { + $this->showActionsForm(); + } + + print " +
+
+ | Range Owner | +Phone number | +TLD | +Info | +Owner | +Type | +Id | +Map to | +TTL | +Change date | +Actions | +
---|---|---|---|---|---|---|---|---|---|---|---|
%s | +%s.%s | ++%s | +%s | +%s | +%s | +%s | +%s | +%s | +%s | +%s | +%s | +
+ | + | + | + | + | + | %s | +%s | +%s | +%s | +%s | +%s | +
%s | +%s.%s | ++%s | +%s | +%s | +%s | ++ | + | + | %s | +%s | +
Please press on Confirm to confirm the delete. "; + 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 "
Error: missing ENUM number or TLD "; + return false; + } + + $enum_id=array('number' => $number, + 'tld' => $tld + ); + + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('getNumber'); + $result = $this->SoapEngine->soapclient->getNumber($enum_id); + + if (!(new 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, + 'id' => $_mapping->id + ); + } + } + + 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))) + ); + + $result = $this->SoapEngine->execute($function,$this->html); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $log=sprintf("SOAP request error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); + syslog(LOG_NOTICE, $log); + return false; + } else { + return true; + } + + } 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))), + ); + + $result = $this->SoapEngine->execute($function,$this->html); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $log=sprintf("SOAP request error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); + syslog(LOG_NOTICE, $log); + return false; + } else { + return true; + } + } + + unset($this->filters); + } else { + return false; + } + } + + function showAddForm() + { + if ($this->selectionActive) return; + + //if ($this->adminonly && !$this->filters['reseller']) return; + + if (!count($this->ranges)) { + //print "
You must create at least one ENUM range before adding ENUM numbers"; + return false; + } + + printf ("
+ "; + } + + function getAllowedDomains() + { + // 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); + $this->log_action('getRanges'); + $result = $this->SoapEngine->soapclient->getRanges($Query); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $log=sprintf("SOAP request error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); + syslog(LOG_NOTICE, $log); + return false; + } else { + 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]++; + } + if (!$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)) { + $tld=$this->SoapEngine->default_enum_tld; + } + + if (!strlen($tld) || !strlen($number) || !is_numeric($number)) { + printf ("Error: Missing TLD or number. "); + return false; + } + + 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->setCustomerProperties($_p); + } + + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('getNumber'); + $result = $this->SoapEngine->soapclient->getNumber($enum_id); + + if ((new 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))) + ); + + $result = $this->SoapEngine->execute($function,$this->html); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $log=sprintf("SOAP request error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); + syslog(LOG_NOTICE, $log); + return false; + } else { + return true; + } + + } else { + $log=sprintf("SOAP request error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); + syslog(LOG_NOTICE, $log); + 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, + 'id' => $_mapping->id + ); + + if ($_mapping->mapto == $mapto) { + printf ("
Info: ENUM mapping %s for number %s already exists",$mapto,$number); + return $result; + } + } + + $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))) + ); + + $result = $this->SoapEngine->execute($function,$this->html); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $log=sprintf("SOAP request error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); + syslog(LOG_NOTICE, $log); + return false; + } else { + return true; + } + } + } + + function getRecordKeys() + { + // Filter + $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' => 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); + $this->log_action('getNumberss'); + + // Call function + $result = $this->SoapEngine->soapclient->getNumbers($Query); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $log=sprintf("SOAP request error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); + syslog(LOG_NOTICE, $log); + 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 "
";
+ print "Number"; + print " | ";
+ print "Mappings"; + print " | ";
+ print "|||||||||||||||
";
+
+ print " | ";
+
+ print "
| ";
+ print "|||||||||||||||
+ + | +
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];
+ $id = $_REQUEST['mapping_id'][$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,
+ 'id' => intval($id),
+ 'mapto' => $mapto,
+ 'priority' => $priority
+ );
+ }
+
+ $j++;
+ }
+
+ $number->mappings=$new_mappings;
+
+ if (!is_array($number->mappings)) $number->mappings=array();
+
+ foreach (array_keys($this->Fields) as $item) {
+ $var_name=$item.'_form';
+ //printf ("
%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'])))
+ );
+
+ $result = $this->SoapEngine->execute($function,$this->html);
+
+ dprint_r($result) ;
+ if ((new PEAR)->isError($result)) {
+ $error_msg = $result->getMessage();
+ $error_fault= $result->getFault();
+ $error_code = $result->getCode();
+ $log=sprintf("SOAP request error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring);
+ syslog(LOG_NOTICE, $log);
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ function showTextBeforeCustomerSelection() {
+ print _("Range owner");
+ }
+
+}
+
diff --git a/library/ngnpro_client.php b/library/ngnpro_client.php
index 7650468..39cb82a 100644
--- a/library/ngnpro_client.php
+++ b/library/ngnpro_client.php
@@ -1,12480 +1,11127 @@
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 _ or % to match one or more characters. '
);
require_once("ngnpro_client.phtml");
require("/etc/cdrtool/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
{
public $version = 1;
public $adminonly = 0;
public $customer = 0;
public $reseller = 0;
public $login_type = 'reseller';
public $allowedPorts = array();
public $timeout = 5;
public $exception = array();
public $result = false;
public $extraFormElements = array();
public $default_enum_tld = 'e164.arpa';
public $default_timezone = 'Europe/Amsterdam';
public $default_sip_proxy = "";
public $default_msrp_relay = "";
public $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 _ or % to match one or more characters. ',
),
'customers' => array(
'records_class' => 'Customers',
'name' => 'Owner Accounts',
'soap_class' => 'WebService_NGNPro_CustomerPort',
'category' => 'general',
'description' => 'Manage accounts with address information and other properties. SIP domains and ENUM ranges can be assigned to accounts. Use _ or % to match one or more characters. '
),
'sip_domains' => array(
'records_class' => 'SipDomains',
'name' => 'SIP domains',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'sip',
'description' => 'Manage SIP domains (e.g example.com) served by the SIP Proxy. Use _ or % to match one or more characters. '
),
'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_numbers' => array(
'records_class' => 'EnumMappings',
'name' => 'ENUM numbers',
'soap_class' => 'WebService_NGNPro_EnumPort',
'category' => 'dns',
'description' => 'Manage E164 numbers used for incoming calls and their mappings (e.g. +31123456789 map to sip:user@example.com). Use _ or % to match one or more characters. '
),
'enum_ranges' => array(
'records_class' => 'EnumRanges',
'name' => 'ENUM ranges',
'soap_class' => 'WebService_NGNPro_EnumPort',
'category' => 'dns',
'description' => 'Manage E164 number ranges that hold individual phone numbers. Use _ or % to match one or more characters. '
),
'dns_zones' => array(
'records_class' => 'DnsZones',
'name' => 'DNS zones',
'soap_class' => 'WebService_NGNPro_DnsPort',
'category' => 'dns',
'description' => 'Manage DNS zones. Use _ or % to match one or more characters. '
),
'dns_records' => array(
'records_class' => 'DnsRecords',
'name' => 'DNS records',
'soap_class' => 'WebService_NGNPro_DnsPort',
'category' => 'dns',
'description' => 'Manage DNS records. Use _ or % to match one or more characters. '
),
'pstn_carriers' => array(
'records_class' => 'Carriers',
'name' => 'PSTN carriers',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'pstn',
'description' => 'Manage outbound carriers for PSTN traffic. Click on Carier to edit its attributes. ',
'resellers_only'=> true
),
'pstn_gateways' => array(
'records_class' => 'Gateways',
'name' => 'PSTN gateways',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'pstn',
'description' => 'Manage outbound PSTN gateways. Click on Gateway to edit its attributes. ',
'resellers_only'=> true
),
'pstn_routes' => array(
'records_class' => 'Routes',
'name' => 'PSTN routes',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'pstn',
'description' => 'Manage outbound PSTN routes. A prefix must be formated as 00+E164, an empty prefix matches all routes. ',
'resellers_only'=> true
),
'gateway_rules' => array(
'records_class' => 'GatewayRules',
'name' => 'PSTN rules',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'pstn',
'description' => 'Manage translation rules for PSTN gateways. Rules are applied against 00+E164 prefix. Click on Rule to edit its attributes. ',
'resellers_only'=> true
),
'email_aliases' => array(
'records_class' => 'EmailAliases',
'name' => 'Email aliases',
'soap_class' => 'WebService_NGNPro_DnsPort',
'category' => 'dns',
'description' => 'Manage email aliases. Use _ or % to match one or more characters. '
),
'url_redirect' => array(
'records_class' => 'UrlRedirect',
'name' => 'URL redirect',
'soap_class' => 'WebService_NGNPro_DnsPort',
'category' => 'dns',
'description' => 'Manage WEB URL redirections. Use _ or % to match one or more characters. '
),
'sip_aliases' => array(
'records_class' => 'SipAliases',
'name' => 'SIP aliases',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'sip',
'description' => 'Manage redirections for SIP addresses e.g. redirect user1@example1.com (alias) to user2@example2.com (target). Use _ or % to match one or more characters. '
)
);
/**
* 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/'
* )
* );
*/
public function __construct($service, $soapEngines, $login_credentials = array())
{
$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'];
}
$default_port = 'customers';
if (isset($this->allowedPorts[$this->soapEngine]) ? count($this->allowedPorts[$this->soapEngine]) : 0 > 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 {
// disable some version dependent ports
foreach (array_keys($this->ports) as $_p) {
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']);
if ($this->soapEngines[$this->soapEngine]['default_enum_tld']) {
$this->default_enum_tld = $this->soapEngines[$this->soapEngine]['default_enum_tld'];
}
if ($this->soapEngines[$this->soapEngine]['default_timezone']) {
$this->default_timezone = $this->soapEngines[$this->soapEngine]['default_timezone'];
}
if ($this->soapEngines[$this->soapEngine]['sip_proxy']) {
$this->default_sip_proxy = $this->soapEngines[$this->soapEngine]['sip_proxy'];
}
if ($this->soapEngines[$this->soapEngine]['msrp_relay']) {
$this->default_msrp_relay = $this->soapEngines[$this->soapEngine]['msrp_relay'];
}
if ($this->soapEngines[$this->soapEngine]['default_country']) {
$this->default_country = $this->soapEngines[$this->soapEngine]['default_country'];
}
if (strlen($this->soapEngines[$this->soapEngine]['sip_engine'])) {
$this->sip_engine = $this->soapEngines[$this->soapEngine]['sip_engine'];
}
if (strlen($this->soapEngines[$this->soapEngine]['voicemail_engine'])) {
$this->voicemail_engine = $this->soapEngines[$this->soapEngine]['voicemail_engine'];
}
if (strlen($this->login_credentials['customer_engine'])) {
$this->customer_engine = $this->login_credentials['customer_engine'];
} elseif (strlen($this->soapEngines[$this->soapEngine]['customer_engine'])) {
$this->customer_engine = $this->soapEngines[$this->soapEngine]['customer_engine'];
} else {
$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]['call_limit'])) {
$this->call_limit = $this->soapEngines[$this->soapEngine]['call_limit'];
}
if (strlen($this->soapEngines[$this->soapEngine]['digest_settings_page'])) {
$this->digest_settings_page = $this->soapEngines[$this->soapEngine]['digest_settings_page'];
}
if (is_array($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->soapEngines[$this->soapEngine]['store_clear_text_passwords'])) {
$this->store_clear_text_passwords = $this->soapEngines[$this->soapEngine]['store_clear_text_passwords'];
}
if (strlen($this->soapEngines[$this->soapEngine]['allow_none_local_dns_zones'])) {
$this->allow_none_local_dns_zones = $this->soapEngines[$this->soapEngine]['allow_none_local_dns_zones'];
}
if (strlen($this->login_credentials['record_generator'])) {
$this->record_generator = $this->login_credentials['record_generator'];
} elseif (strlen($this->soapEngines[$this->soapEngine]['record_generator'])) {
$this->record_generator = $this->soapEngines[$this->soapEngine]['record_generator'];
}
if (strlen($this->login_credentials['name_servers'])) {
$this->name_servers = $this->login_credentials['name_servers'];
} elseif (strlen($this->soapEngines[$this->soapEngine]['name_servers'])) {
$this->name_servers = $this->soapEngines[$this->soapEngine]['name_servers'];
}
if (strlen($login_credentials['reseller'])) {
$this->reseller = $login_credentials['reseller'];
} elseif ($this->adminonly && $_REQUEST['reseller_filter']) {
$this->reseller = $_REQUEST['reseller_filter'];
}
if (strlen($login_credentials['customer'])) {
$this->customer = $login_credentials['customer'];
} elseif ($this->adminonly && $_REQUEST['customer_filter']) {
$this->customer = $_REQUEST['customer_filter'];
}
if (strlen($login_credentials['soap_username'])) {
$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'];
if ($this->customer) {
$this->SOAPlogin = array(
"username" => $this->soapUsername,
"password" => $this->soapEngines[$this->soapEngine]['password'],
"admin" => true,
"impersonate" => intval($this->customer)
);
} else {
$this->SOAPlogin = array(
"username" => $this->soapUsername,
"password" => $this->soapEngines[$this->soapEngine]['password'],
"admin" => true,
"impersonate" => intval($this->reseller)
);
}
$this->SOAPloginAdmin = array(
"username" => $this->soapUsername,
"password" => $this->soapEngines[$this->soapEngine]['password'],
"admin" => true
);
}
$this->SOAPurl = $this->soapEngines[$this->soapEngine]['url'];
$log = sprintf(
"
%s at %s as %s ", $this->soap_class, $this->SOAPurl, $this->SOAPurl, $this->soapUsername ); dprint($log); $this->SoapAuth = array('auth', $this->SOAPlogin , 'urn:AGProjects:NGNPro', 0, ''); $this->SoapAuthAdmin = array('auth', $this->SOAPloginAdmin , '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; } } if ($this->voicemail_engine) { $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->SOAPurlVoicemail = $this->soapEngines[$this->voicemail_engine]['url']; $this->soapclientVoicemail = new WebService_NGNPro_VoicemailPort($this->SOAPurlVoicemail); $this->soapclientVoicemail->setOpt('curl', 'CURLOPT_SSL_VERIFYPEER', 0); $this->soapclientVoicemail->setOpt('curl', 'CURLOPT_SSL_VERIFYHOST', 0); if (strlen($this->soapEngines[$this->voicemail_engine]['timeout'])) { $this->soapclientVoicemail->_options['timeout'] = intval($this->soapEngines[$this->voicemail_engine]['timeout']); } else { $this->soapclientVoicemail->_options['timeout'] = $this->timeout; } } } else { print "Error: No SOAP credentials defined."; } $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']; } /** * returns a list of allowed engines based on a filter * the filter format is: * engine1:port1,port2 engine2 engine3:port1 */ public function getSoapEngineAllowed($soapEngines, $filter) { 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 = array( * 'commit' => array( * 'name' => 'addAccount', * 'parameters' => array( * $param1, * $param2 * ), * 'logs' => array( * 'success' => 'The function was a success', * 'failure' => 'The function has failed' * ) * ) * ); */ public function execute($function, $html = true, $adminonly = false) { if (!$function['commit']['name']) { if ($html) { print "Error: no function name supplied"; } else { print "Error: no function name supplied\n"; } return false; } if ($adminonly) { $this->soapclient->addHeader($this->SoapAuthAdmin); } else { $this->soapclient->addHeader($this->SoapAuth); } $result = call_user_func_array( array( $this->soapclient, $function['commit']['name'] ), $function['commit']['parameters'] ); if ((new 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; $log = sprintf( "SOAP request error from %s: %s (%s): %s", $this->SOAPurl, $this->error_msg, $this->error_fault->detail->exception->errorcode, $this->error_fault->detail->exception->errorstring ); syslog(LOG_NOTICE, $log); if ($html) { $log = sprintf( "SOAP query failed: %s (%s): %s", $this->error_msg, $this->error_fault->detail->exception->errorcode, $this->error_fault->detail->exception->errorstring ); print "$log"; } return false; } else { $this->result = $result; if ($function['commit']['logs']['success']) { if ($html) { printf( "
%s \n", htmlentities($function['commit']['logs']['success']) ); } } if (is_object($result) || strlen($result)) { return $result; } else { return true; } } } } class Records { public $maxrowsperpage = '20'; public $sip_settings_page = 'sip_settings.phtml'; public $allowedDomains = array(); public $selectionActive = false; public $selectionKeys = array(); public $resellers = array(); public $customers = array(); public $record_generator = false; public $customer_properties = array(); public $loginProperties = array(); public $errorMessage = ''; public $html = true; public $filters = array(); public $selectionActiveExceptions = array(); public function log_action($action = 'Unknown') { global $CDRTool; $location = "Unknown"; $_loc = geoip_record_by_name($_SERVER['REMOTE_ADDR']); if ($_loc['country_name']) { $location = $_loc['country_name']; } $log = sprintf( "CDRTool login username=%s, type=%s, impersonate=%s, IP=%s, location=%s, action=%s:%s, script=%s", $this->login_credentials['username'], $this->login_credentials['login_type'], $CDRTool['impersonate'], $_SERVER['REMOTE_ADDR'], $location, $this->SoapEngine->port, $action, $_SERVER['PHP_SELF'] ); syslog(LOG_NOTICE, $log); } public function checkLogSoapError($result, $syslog = false) { if (!(new PEAR)->isError($result)) { return false; } $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); if ($syslog) { $log = sprintf( "SOAP request error from %s: %s (%s): %s", $this->SoapEngine->SOAPurl, $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring ); syslog(LOG_NOTICE, $log); } else { printf( "Error: %s (%s): %s", $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring ); } return true; } public function __construct($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]) && !in_array($_filter, $this->selectionActiveExceptions)) { $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; } if (strlen($this->SoapEngine->digest_settings_page)) { $this->digest_settings_page = $this->SoapEngine->digest_settings_page; } $this->support_email = $this->SoapEngine->support_email; $this->support_web = $this->SoapEngine->support_web; } function showEngineSelection() { $selected_soapEngine[$this->SoapEngine->service] =' selected'; $pstn_access = $this->getCustomerProperty('pstn_access'); printf(""); printf( "", $this->url ); } function showAfterEngineSelection() { } function showCustomerSelection() { $this->showCustomerForm(); } function showResellerSelection() { if ($this->adminonly) { $this->showResellerForm(); } else { 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 "
%s", $this->SoapEngine->ports[$this->SoapEngine->port]['description'] ); printf( "