diff --git a/library/NGNPro/Records/EnumMappings.php b/library/NGNPro/Records/EnumMappings.php index 4d97f10..58f394f 100644 --- a/library/NGNPro/Records/EnumMappings.php +++ b/library/NGNPro/Records/EnumMappings.php @@ -1,1306 +1,1359 @@ '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 ($this->checkLogSoapError($result, true)) { return false; } else { $this->rows = $result->total; if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "
$this->rows records found

"; 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; $j=1; + $base_url_data = array( + 'service' => $this->SoapEngine->service, + 'number_filter' => $number->id->number, + 'tld_filter' => $number->id->tld + ); + 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,urlencode($m[1]), $number->reseller,$sip_engine); + if (preg_match("/^sip:(.*)$/", $_mapping->mapto, $m) && $this->sip_settings_page) { + $mapto_url_data = array( + 'account' => $m[1], + 'reseller' => $number->reseller, + 'sip_engine' => $sip_engine + ); - if ($this->adminonly) $url .= sprintf('&adminonly=%s',$this->adminonly); + if ($this->adminonly) { + $mapto_url_data['adminonly'] = $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_url_data[$element] = $this->SoapEngine->extraFormElements[$element]; } - $mapto=sprintf(" - - sip:%s",$url,$m[1]); + $mapto = sprintf( + " + sip:%s", + $this->sip_settings_page, + http_build_query($mapto_url_data), + $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) + $delete_url_data = array_merge( + $base_url_data, + array( + 'action' => 'Delete', + 'mapto_filter' => $_mapping->mapto + ) ); - if ($this->adminonly) $_url.= sprintf ("&reseller_filter=%s",$number->reseller); - - if ($_REQUEST['action'] == 'Delete' && - $_REQUEST['number_filter'] == $number->id->number && - $_REQUEST['tld_filter'] == $number->id->tld && - $_REQUEST['mapto_filter'] == $_mapping->mapto) { - $_url .= "&confirm=1"; + if ($_REQUEST['action'] == 'Delete' + && $_REQUEST['number_filter'] == $number->id->number + && $_REQUEST['tld_filter'] == $number->id->tld + && $_REQUEST['mapto_filter'] == $_mapping->mapto + ) { + $delete_url_data['confirm'] = 1; $actionText = "Confirm"; } else { $actionText = "Delete"; } + $_url = sprintf( + "%s&%s", + $this->url, + http_build_query($delete_url_data) + ); if ($j==1) { + $number_url_data = $base_url_data; - $_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->adminonly) $_number_url_data['reseller_filter'] = $number->reseller; - if ($this->adminonly) $_number_url.= sprintf ("&reseller_filter=%s",$number->reseller); + $_number_url = sprintf( + "%s&%s", + $this->url, + http_build_query($number_url_data) + ); - $_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s", - urlencode($this->SoapEngine->customer_engine), - urlencode($number->customer) + $_customer_url = sprintf( + 's&%s', + $this->url, + http_build_query( + array( + 'service' => sprintf('customers@%s', $this->SoapEngine->customer_engine), + 'customer_filter' => $number->customer + ) + ) ); if ($number->owner) { - $_owner_url = sprintf - ("%s", - $this->url, - urlencode($this->SoapEngine->soapEngine), - urlencode($number->owner), - $number->owner + $_owner_url = sprintf( + '%s', + $this->url, + http_build_query( + array( + 'service' => sprintf('customers@%s', $this->SoapEngine->customer_engine), + 'customer_filter' => $number->owner + ) + ), + $number->owner ); } else { $_owner_url=''; } - printf(" - - - - - - - - - - - - - - ", - $index, - $_customer_url, - $number->customer, - $number->reseller, - $_number_url, - $number->id->number, - $number->id->tld, - $number->info, - $_owner_url, - ucfirst($_mapping->type), - $_mapping->id, - $mapto, - $_mapping->ttl, - $number->changeDate, - $_url, - $actionText + printf( + " + + + + + + + + + + + + + + + ", + $index, + $_customer_url, + $number->customer, + $number->reseller, + $_number_url, + $number->id->number, + $number->id->tld, + $number->info, + $_owner_url, + ucfirst($_mapping->type), + $_mapping->id, + $mapto, + $_mapping->ttl, + $number->changeDate, + $_url, + $actionText ); } else { - printf(" - - - - - - - - - - - - - - ", - ucfirst($_mapping->type), - $_mapping->id, - $mapto, - $_mapping->ttl, - $number->changeDate, - $_url, - $actionText + printf( + " + + + + + + + + + + + + + + ", + ucfirst($_mapping->type), + $_mapping->id, + $mapto, + $_mapping->ttl, + $number->changeDate, + $_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) + $delete_url_data = array_merge( + $base_url_data, + array( + 'action' => 'Delete', + 'mapto_filter' => $_mapping->mapto + ) ); - if ($this->adminonly) $_url.= sprintf ("&reseller_filter=%s",$number->reseller); - - if ($_REQUEST['action'] == 'Delete' && - $_REQUEST['number_filter'] == $number->id->number && - $_REQUEST['tld_filter'] == $number->id->tld && - $_REQUEST['mapto_filter'] == $_mapping->mapto) { - $_url .= "&confirm=1"; + if ($_REQUEST['action'] == 'Delete' + && $_REQUEST['number_filter'] == $number->id->number + && $_REQUEST['tld_filter'] == $number->id->tld + && $_REQUEST['mapto_filter'] == $_mapping->mapto + ) { + $delete_url_data['confirm'] = 1; $actionText = "Confirm"; } 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) + $_url = sprintf( + "%s&%s", + $this->url, + http_build_query($delete_url_data) ); - if ($this->adminonly) $_number_url.= sprintf ("&reseller_filter=%s",$number->reseller); + $number_url_data = $base_url_data; + + if ($this->adminonly) $_number_url_data['reseller_filter'] = $number->reseller; - $_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s", - urlencode($this->SoapEngine->customer_engine), - urlencode($number->customer) + $_number_url = sprintf( + "%s&%s", + $this->url, + http_build_query($number_url_data) ); - if ($number->owner) { - $_owner_url = sprintf - ("%s", + $_customer_url = sprintf( + 's&%s', $this->url, - urlencode($this->SoapEngine->soapEngine), - urlencode($number->owner), - $number->owner + http_build_query( + array( + 'service' => sprintf('customers@%s', $this->SoapEngine->customer_engine), + 'customer_filter' => $number->customer + ) + ) + ); + + if ($number->owner) { + $_owner_url = sprintf( + '%s', + $this->url, + http_build_query( + array( + 'service' => sprintf('customers@%s', $this->SoapEngine->customer_engine), + 'customer_filter' => $number->owner + ) + ), + $number->owner ); } else { $_owner_url=''; } - printf(" - - - - - - - - - - - - - ", - $index, - $_customer_url, - $number->customer, - $number->reseller, - $_number_url, - $number->id->number, - $number->id->tld, - $number->info, - $_owner_url, - $number->changeDate, - $_url, - $actionText + printf( + " + + + + + + + + + + + + + + ", + $index, + $_customer_url, + $number->customer, + $number->reseller, + $_number_url, + $number->id->number, + $number->id->tld, + $number->info, + $_owner_url, + $number->changeDate, + $_url, + $actionText ); } printf(" "); $i++; - } - } 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%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
"; 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); $this->log_action('getNumbers'); // Call function $result = $this->SoapEngine->soapclient->getNumbers($Query); if ($this->checkLogSoapError($result, true)) { 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 " "; */ printf ("

Number
",$_REQUEST['number_filter']); printf ("
Map to"); print " "; printf ("
",$this->filters['mapto']); printf ("
Owner
",$this->filters['owner']); } function deleteRecord($dictionary=array()) { if (!$dictionary['confirm'] && !$_REQUEST['confirm']) { print "

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 ($this->checkLogSoapError($result, true)) { 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 ($this->checkLogSoapError($result, true)) { 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 ("

",$_SERVER['PHP_SELF']); print "
"; if ($this->adminonly) { printf (" ",$this->filters['reseller']); } print "
"; printf (" Number"); print ""; if ($_REQUEST['number']) { printf ("",$_REQUEST['number']); } else if ($_number=$this->getCustomerProperty('enum_numbers_last_number')) { $_prefix=$_range['prefix']; preg_match("/^$_prefix(.*)/",$_number,$m); printf ("",$m[1]); } else { printf (""); } print "
"; printf ("Map to"); print " "; if ($_REQUEST['type']) { $selected_naptr_service[$_REQUEST['type']]='selected'; } else if ($_type=$this->getCustomerProperty('enum_numbers_last_type')) { $selected_naptr_service[$_type]='selected'; } printf (" ",$_REQUEST['mapto']); print "
"; print "TTL"; print ""; if ($_REQUEST['ttl']) { printf ("
",$_REQUEST['ttl']); } else if ($_ttl=$this->getCustomerProperty('enum_numbers_last_ttl')) { printf ("
",$_ttl); } else { printf (""); } printf ("
Owner
",$_REQUEST['owner']); printf ("
Info
",$_REQUEST['info']); $this->printHiddenFormElements(); print "
"; } 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 ($this->checkLogSoapError($result, true)) { 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 ($this->checkLogSoapError($result, true)) { 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 ($this->checkLogSoapError($result, true)) { 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 ($this->checkLogSoapError($result, true)) { 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 ""; print ""; print ""; print ""; print ""; print ""; print " "; print ""; print "
"; print "

Number

"; print "
"; print "

Mappings

"; print "
"; print ""; printf ("",$_SERVER['PHP_SELF']); print ""; printf ("", $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 ("", $item_name, $item, $number->$item ); } else { printf ("", $item_name, $item, $number->$item ); } } printf ("",$number->id->tld); printf ("",$number->id->number); $this->printFiltersToForm(); $this->printHiddenFormElements(); print "
DNS name%s
%s
%s
"; print "
"; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print ""; foreach ($number->mappings as $_mapping) { $j++; unset($selected_type); print ""; print ""; printf ("",$_mapping->id,$_mapping->id); $selected_type[$_mapping->type]='selected'; printf (" "; printf (" ", $_mapping->mapto, $_mapping->ttl ); print ""; } $j++; print ""; print ""; print ""; printf (" "; printf (" " ); print ""; print "
IdTypeMap toTTL
$j%d
"; print "
"; } function getRecord($enumid) { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getNumber'); $result = $this->SoapEngine->soapclient->getNumber($enumid); if ($this->checkLogSoapError($result, true)) { return false; } else { return $result; } } function updateRecord () { //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 ($this->checkLogSoapError($result, true)) { return false; } else { return true; } } function showTextBeforeCustomerSelection() { print _("Range owner"); } }