";
}
function updateRecord()
{
//print " 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 (" %s=%s",$var_name,$_REQUEST[$var_name]);
if ($this->Fields[$item]['type'] == 'integer') {
$domain->$item = intval($_REQUEST[$var_name] == 1);
} else if ($this->Fields[$item]['type'] == 'boolean') {
$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 (" %s=%s",$var_name,$_REQUEST[$var_name]);
if ($this->FieldsAdminOnly[$item]['type'] == 'integer') {
$domain->$item = intval($_REQUEST[$var_name]);
} else if ($this->Fields[$item]['type'] == 'boolean') {
$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)))
);
return $this->SoapEngine->execute($function, $this->html);
}
function hide_html() {
if ($_REQUEST['action'] == 'Export') {
return true;
} else {
return false;
}
}
function exportDomain($domain) {
$exported_data= array();
// Filter
$filter=array(
'domain' => $domain,
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range=array('start' => 0,
'count' => 1000
);
// Compose query
$Query=array('filter' => $filter,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getDomains');
$result = $this->SoapEngine->soapclient->getDomains($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 {
$i = 0 ;
while ($i < $result->total) {
$domain = $result->domains[$i];
if (!in_array($domain->customer, $export_customers)) {
$export_customers[]=$domain->customer;
}
if (!in_array($domain->reseller, $export_customers)) {
$export_customers[]=$domain->reseller;
}
$i+=1;
$exported_data['sip_domains'][] = objectToArray($domain);
}
}
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getAccounts');
// Call function
$result = call_user_func_array(array($this->SoapEngine->soapclient,'getAccounts'),array($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 {
$exported_data['sip_accounts'] = objectToArray($result->accounts);
foreach ($result->accounts as $account) {
if (!in_array($account->owner, $export_customers)) {
$export_customers[]=$account->owner;
}
$sipId=array("username" => $account->id->username,
"domain" => $account->id->domain
);
$this->SoapEngine->soapclientVoicemail->addHeader($this->SoapEngine->SoapAuthVoicemail);
$result = $this->SoapEngine->soapclientVoicemail->getAccount($sipId);
if ((new 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 (" Error (VoicemailPort): %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring);
}
} else {
$exported_data['voicemail_accounts'][] = $result;
}
// Filter
$filter=array('targetUsername' => $account->id->username,
'targetDomain' => $account->id->domain
);
// Range
$range=array('start' => 0,
'count' => 20
);
// Compose query
$Query=array('filter' => $filter,
'range' => $range
);
// Call function
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getAliases');
$result = $this->SoapEngine->soapclient->getAliases($Query);
if ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf (" Error (SipPort): %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring);
} else {
foreach ($result->aliases as $alias) {
$exported_data['sip_aliases'][] = objectToArray($alias);
}
}
}
}
foreach ($export_customers as $customer) {
if (!$customer) {
continue;
}
$filter=array(
'customer' => intval($customer),
);
// Compose query
$Query=array('filter' => $filter
);
// Insert credetials
$this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getCustomers');
// Call function
$result = $this->SoapEngine->soapclientCustomers->getCustomers($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 {
$exported_data['customers'] = objectToArray($result->accounts);
}
}
//print_r($exported_data['customers']);
print_r(json_encode($exported_data));
}
}
class SipAccounts extends Records
{
var $selectionActiveExceptions=array('domain');
var $sortElements=array('changeDate' => 'Change date',
'username' => 'Username',
'domain' => 'Domain'
);
var $store_clear_text_passwords=true;
var $default_account_type = 'postpaid';
var $group_filter_list = array('blocked' => 'Blocked',
'quota' => 'Quota Exceeded',
'prepaid' => 'Prepaid',
'free-pstn' => 'PSTN Access',
'anonymous' => 'Anonymous',
'anonymous-reject' => 'Reject Anonymous',
'voicemail' => 'Has Voicemail',
'missed-calls' => 'Missed Calls',
'trunking' => 'Trunking'
);
public function __construct($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' => htmlspecialchars(trim($_REQUEST['email_filter'])),
'owner' => trim($_REQUEST['owner_filter']),
'customer' => trim($_REQUEST['customer_filter']),
'reseller' => trim($_REQUEST['reseller_filter']),
'group' => trim($_REQUEST['group_filter'])
);
parent::__construct($SoapEngine);
if (strlen($this->SoapEngine->call_limit)) {
$this->platform_call_limit = $this->SoapEngine->call_limit;
} else {
$this->platform_call_limit;
}
$this->getTimezones();
}
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']),
'groups' => array($this->filters['group'])
);
// Range
$range=array('start' => 0,
'count' => 500
);
// 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('getAccounts');
// Call function
$result = $this->SoapEngine->soapclient->getAccounts($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->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']),
'groups' => array($this->filters['group'])
);
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
// 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 credentials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getAccounts');
// Call function
$result = $this->SoapEngine->soapclient->getAccounts($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 && $action != 'PerformActions' && $action != 'Delete') {
$this->showActionsForm();
}
print "
$this->rows records found
Id |
SIP account";
$this->showSortCaret('username');
if ($this->sorting['sortBy'] == 'domain' ) {
print " (domain ";
$this->showSortCaret('domain');
print ")";
}
print " |
Full name |
Email address |
Timezone |
Capacity |
Quota |
Balance |
Owner |
Change date";
$this->showSortCaret('changeDate');
print " |
Actions |
";
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;
}
if ($this->rows) {
$i=0;
$_prepaid_accounts=array();
while ($i < $maxrows) {
if (!$result->accounts[$i]) break;
$account = $result->accounts[$i];
if ($account->prepaid) {
$_prepaid_accounts[]=array("username" => $account->id->username,
"domain" => $account->id->domain
);
}
$i++;
}
if (count($_prepaid_accounts)) {
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getPrepaidStatus');
// Call function
$result1 = $this->SoapEngine->soapclient->getPrepaidStatus($_prepaid_accounts);
if (!(new PEAR)->isError($result1)) {
$j=0;
foreach ($result1 as $_account) {
$_sip_account=sprintf("%s@%s",$_prepaid_accounts[$j]['username'], $_prepaid_accounts[$j]['domain']);
$_prepaid_balance[$_sip_account]=$_account->balance;
$j++;
}
}
}
$i=0;
while ($i < $maxrows) {
if (!$result->accounts[$i]) break;
$account = $result->accounts[$i];
$index=$this->next+$i+1;
$_url = $this->url.'&'.$this->addFiltersToURL().sprintf("&service=%s&action=Delete",
urlencode($this->SoapEngine->service)
);
if (!$this->filters['domain']) {
$_url .= sprintf("&domain_filter=%s",urlencode($account->id->domain));
}
if (!$this->filters['username']) {
$_url .= sprintf("&username_filter=%s",urlencode($account->id->username));
}
$_url.= sprintf("&key=%s",urlencode($account->id->username));
if ($action == 'Delete' &&
$_REQUEST['key'] == $account->id->username &&
$_REQUEST['domain_filter'] == $account->id->domain) {
$_url .= "&confirm=1";
$actionText = "Confirm";
} else {
$actionText = "Delete";
}
if ($account->reseller) {
$reseller_sip_settings_page=$account->reseller;
} else if ($this->SoapEngine->impersonate) {
// use the reseller from the soap engine
$reseller_sip_settings_page=$this->SoapEngine->impersonate;
} else {
// use the reseller from the login
$reseller_sip_settings_page=$this->reseller;
}
if ($this->sip_settings_page) {
$url=sprintf('%s?account=%s@%s&sip_engine=%s',
$this->sip_settings_page,urlencode($account->id->username),$account->id->domain, $this->SoapEngine->sip_engine);
if ($this->adminonly) {
$url .= sprintf('&reseller=%s',$reseller_sip_settings_page);
$url .= sprintf('&adminonly=%s',$this->adminonly);
} else {
if ($account->reseller == $this->reseller) $url .= sprintf('&reseller=%s',$reseller_sip_settings_page);
}
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("
%s@%s",$url, $account->id->username, $account->id->domain);
} else {
$sip_account=sprintf("%s@%s",$account->id->username, $account->id->domain);
}
/*
$_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
("%s",
$this->url,
urlencode($this->SoapEngine->soapEngine),
urlencode($account->owner),
$account->owner
);
} else {
$_owner_url='';
}
$prepaid_account=sprintf("%s@%s",$account->id->username, $account->id->domain);
if ($account->callLimit) {
$callLimit = $account->callLimit;
} else if ($this->platform_call_limit) {
$callLimit = $this->platform_call_limit;
} else {
$callLimit = '';
}
printf("
%s |
%s |
%s %s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
",
$index,
$sip_account,
$account->firstName,
$account->lastName,
$account->email,
$account->email,
$account->timezone,
$callLimit,
$account->quota,
$_prepaid_balance[$prepaid_account],
$_owner_url,
$account->changeDate,
$_url,
$actionText
);
$i++;
}
}
print " ";
$this->showPagination($maxrows);
return true;
}
}
function showSeachFormCustom()
{
printf ("
Account ",$this->filters['username']);
printf ("@");
if (count($this->allowedDomains) > 0) {
if ($this->filters['domain'] && !in_array($this->filters['domain'], $this->allowedDomains)) {
printf ("",$this->filters['domain']);
} else {
$selected_domain[$this->filters['domain']]='selected';
printf ("\n");
}
} else {
printf ("",$this->filters['domain']);
}
printf (" FN \n",$this->filters['firstname']);
printf (" LN \n",$this->filters['lastname']);
printf (" Email \n",$this->filters['email']);
printf (" Owner \n",$this->filters['owner']);
$selected_group[$this->filters['group']]='selected';
print "";
}
function deleteRecord($dictionary=array())
{
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "Please press on Confirm to confirm the delete. ";
return true;
}
if ($dictionary['username']) {
$username=$dictionary['username'];
} else {
$username=$_REQUEST['key'];
}
if ($dictionary['domain']) {
$domain=$dictionary['domain'];
} else {
$domain=$this->filters['domain'];
}
if (!strlen($username) || !strlen($domain)) {
print " Error: missing SIP account username or domain. ";
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',$_REQUEST['key'], $this->filters['domain'])
)
)
);
foreach (array_keys($this->filters) as $_filter) {
if ($_filter == 'username' || $_filter == 'domain') continue;
$new_filters[$_filter]=$this->filters[$_filter];
}
$this->filters=$new_filters;
return $this->SoapEngine->execute($function, $this->html);
}
function showAddForm()
{
if ($this->filters['username']) return;
if (!count($this->allowedDomains)) {
print " You must create at least one SIP domain before adding SIP accounts ";
return false;
}
printf ("
";
}
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 ("Error: Missing SIP domain");
return false;
}
if (!$this->validDomain($domain)) {
print "Error: invalid domain name";
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 {
if ($username=="") {
$lastName="Unknown";
} else {
$lastName=$username;
}
}
$lastName=trim($lastName);
if (strlen($dictionary['timezone'])) {
$timezone=$dictionary['timezone'];
} else if (strlen(trim($_REQUEST['timezone']))) {
$timezone=trim($_REQUEST['timezone']);
} else if ($this->SoapEngine->default_timezone) {
$timezone=$this->SoapEngine->default_timezone;
} else {
$timezone='Europe/Amsterdam';
}
if (!in_array($timezone, $this->timezones)) {
$timezone='Europe/Amsterdam';
}
if (strlen($dictionary['password'])) {
$password=$dictionary['password'];
} else if (strlen(trim($_REQUEST['password']))) {
$password=trim($_REQUEST['password']);
} else {
$password=$this->RandomString(10);
}
if (is_array($dictionary['groups'])) {
$groups=$dictionary['groups'];
} else {
$groups=array();
}
if (is_array($dictionary['ip_access_list'])) {
$ip_access_list=$dictionary['ip_access_list'];
} else {
$ip_access_list=array();
}
if (strlen($dictionary['call_limit'])) {
$call_limit=$dictionary['call_limit'];
} else {
$call_limit=$_REQUEST['call_limit'];
}
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['rpid'])) {
$rpid=$dictionary['rpid'];
} else {
$rpid=trim($_REQUEST['rpid']);
}
if (strlen($dictionary['owner'])) {
$owner=intval($dictionary['owner']);
} else {
$owner=intval($_REQUEST['owner']);
}
if (!$owner) {
$owner = intval($customer);
}
if (strlen($dictionary['quota'])) {
$quota=intval($dictionary['quota']);
} else {
$quota=intval($_REQUEST['quota']);
}
if ($this->prepaidChangesAllowed()) {
if (strlen($dictionary['prepaid'])) {
$prepaid=intval($dictionary['prepaid']);
} else {
$prepaid=intval($_REQUEST['prepaid']);
}
} else {
$prepaid = 1;
}
if ($prepaid) {
$groups[]='prepaid';
}
if (!$email) {
if ($username=="") {
$email='unknown@'.strtolower($domain);
} else {
$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->setCustomerProperties($_p);
}
if (is_array($dictionary['properties'])) {
$properties=$dictionary['properties'];
} else {
$properties=array();
}
if ($this->SoapEngine->login_credentials['reseller']) {
$reseller_properties=$this->getResellerProperties($this->SoapEngine->login_credentials['reseller'],'store_clear_text_passwords');
if (strlen($reseller_properties['store_clear_text_passwords'])) {
$this->store_clear_text_passwords=$reseller_properties['store_clear_text_passwords'];
}
} else {
$_reseller=$this->getResellerForDomain(strtolower($domain));
if ($_reseller) {
$reseller_properties = $this->getResellerProperties($_reseller, 'store_clear_text_passwords');
if (strlen($reseller_properties['store_clear_text_passwords'])) {
$this->store_clear_text_passwords = $reseller_properties['store_clear_text_passwords'];
}
}
}
if ($this->store_clear_text_passwords || $username == '') {
$password_final=$password;
} else {
$md1=strtolower($username).':'.strtolower($domain).':'.$password;
$md2=strtolower($username).'@'.strtolower($domain).':'.strtolower($domain).':'.$password;
$password_final=md5($md1).':'.md5($md2);
}
$account=array(
'id' => array('username' => strtolower($username),
'domain' => strtolower($domain)
),
'firstName' => $firstName,
'lastName' => $lastName,
'password' => $password_final,
'timezone' => $timezone,
'email' => strtolower($email),
'owner' => $owner,
'rpid' => $rpid,
'groups' => $groups,
'prepaid' => $prepaid,
'quota' => $quota,
'acl' => $ip_access_list,
'properties' => $properties
);
if (isset($call_limit)) {
$account['callLimit'] = intval($call_limit);
}
//print_r($account);
$deleteAccount=array('username' => $username,
'domain' => $domain);
if ($this->html) {
if ($username == '') {
$success_log=sprintf('SIP account has been generated in domain %s',$domain);
} else {
$success_log=sprintf('SIP account %s@%s has been added',$username, $domain);
}
}
$function=array('commit' => array('name' => 'addAccount',
'parameters' => array($account),
'logs' => array('success' => $success_log))
);
return $this->SoapEngine->execute($function, $this->html);
}
function getAllowedDomains()
{
// Filter
$filter = array(
'domain' => ''
);
// Range
$range = array(
'start' => 0,
'count' => 750
);
$orderBy = array(
'attribute' => 'domain',
'direction' => 'ASC'
);
// Compose query
$Query = array(
'filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getDomains');
$result = $this->SoapEngine->soapclient->getDomains($Query);
if ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf(
"Error in getAllowedDomains from %s: %s (%s): %s",
$this->SoapEngine->SOAPurl,
$error_msg,
$error_fault->detail->exception->errorcode,
$error_fault->detail->exception->errorstring
);
//return false;
} else {
foreach ($result->domains as $_domain) {
if ($this->validDomain($_domain->domain)) {
$this->allowedDomains[] = $_domain->domain;
}
}
}
}
function showPasswordReminderForm($accounts = array())
{
print "
";
}
function showPasswordReminderUpdateFormEncrypted($id, $account)
{
if ($account) {
print " ";
print _(" Please choose new passwords for your account, if you leave them empty no change will be performed ");
print " ";
print "
";
}
}
function showPasswordReminderFormEncrypted($accounts = array())
{
print " ";
if(count($accounts) < 1 && $_REQUEST['sip_filter']) {
print "";
}
}
function getAccountsForPasswordReminderEncrypted($maximum_accounts = 5)
{
$accounts=array();
//$filter = array('email' => $this->filters['email']);
if ($_REQUEST['sip_filter']) {
list($username, $domain) = explode('@', trim($_REQUEST['sip_filter']));
if ($username && $domain) {
$filter = array(
'username' => $username,
'domain' => $domain,
'email' => $this->filters['email']
);
}
} else {
$filter = array('email' => $this->filters['email']);
}
$range = array(
'start' => 0,
'count' => $maximum_accounts
);
$orderBy = array(
'attribute' => 'changeDate',
'direction' => 'DESC'
);
$Query = array(
'filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getAccounts');
$result = $this->SoapEngine->soapclient->getAccounts($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);
} else {
$i = 0;
while ($i < $result->total) {
if (!$result->accounts[$i]) break;
$account = $result->accounts[$i];
$accounts[]=array('username'=> $account->id->username,
'domain' => $account->id->domain
);
$i++;
}
}
return $accounts;
}
function getAccountsForPasswordReminder($maximum_accounts = 5)
{
$accounts = array();
$filter = array('email' => $this->filters['email']);
if ($_REQUEST['sip_filter']) {
list($username, $domain) = explode('@', trim($_REQUEST['sip_filter']));
if ($username && $domain) {
$filter = array( 'username' => $username,
'domain' => $domain
);
}
}
$range = array('start' => 0,
'count' => $maximum_accounts);
$orderBy = array('attribute' => 'changeDate',
'direction' => 'DESC');
$Query = array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getAccounts');
$result = $this->SoapEngine->soapclient->getAccounts($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);
} else {
$i=0;
while ($i < $result->total) {
if (!$result->accounts[$i]) break;
$account = $result->accounts[$i];
$accounts[]=array('username'=> $account->id->username,
'domain' => $account->id->domain
);
$i++;
}
}
return $accounts;
}
function getResellerForDomain($domain='')
{
// 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
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getDomains');
// Call function
$result = $this->SoapEngine->soapclient->getDomains($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 {
if ($result->domains[0]) {
return $result->domains[0]->reseller;
} else {
return false;
}
}
}
function getResellerProperties($reseller='',$property='')
{
$properties=array();
if (!$this->SoapEngine->customer_engine) {
dprint ("No customer_engine available");
return true;
}
if (!$reseller) {
dprint ("No customer provided");
return true;
}
if (!$property) {
dprint ("No property provided");
return true;
}
$this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers);
$result = $this->SoapEngine->soapclientCustomers->getProperties(intval($reseller));
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;
}
foreach ($result as $_property) {
$properties[$_property->name]=$_property->value;
}
return $properties;
}
function pstnChangesAllowed()
{
//dprint_r($this->loginProperties);
$_customer_pstn_changes=$this->getCustomerProperty('pstn_changes');
$_reseller_pstn_changes=$this->getCustomerProperty('pstn_changes');
if ($this->adminonly) {
return true;
} else if ($this->customer == $this->reseller && $_reseller_pstn_changes) {
return true;
} else if ($this->loginImpersonate == $this->reseller && $_reseller_pstn_changes) {
return true;
} else if ($_reseller_pstn_changes && $_customer_pstn_changes) {
return true;
}
return false;
}
function prepaidChangesAllowed()
{
//dprint_r($this->loginProperties);
$_customer_prepaid_changes=$this->getCustomerProperty('prepaid_changes');
$_reseller_prepaid_changes=$this->getCustomerProperty('prepaid_changes');
if ($this->adminonly) {
return true;
} else if ($this->customer == $this->reseller && $_reseller_prepaid_changes) {
return true;
} else if ($this->loginImpersonate == $this->reseller && $_reseller_prepaid_changes) {
return true;
} else if ($_reseller_prepaid_changes && $_customer_prepaid_changes) {
return true;
}
return false;
}
function getTimezones ()
{
$this->timezones=array();
if (!$fp = fopen("timezones", "r")) {
print _("Failed to open timezone file.");
return false;
}
while ($buffer = fgets($fp,1024)) {
$this->timezones[]=trim($buffer);
}
fclose($fp);
}
function showTextBeforeCustomerSelection()
{
print _("Domain owner");
}
}
class SipAliases extends Records
{
var $selectionActiveExceptions=array('alias_domain');
public function __construct($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)
);
parent::__construct($SoapEngine);
$this->sortElements=array(
'changeDate' => 'Change date',
'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' => 500
);
// 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);
$this->log_action('getAliases');
// Call function
$result = $this->SoapEngine->soapclient->getAliases($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->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->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('getAliases');
// Call function
$result = $this->SoapEngine->soapclient->getAliases($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 "
$this->rows records found
Id |
SIP alias |
Redirect target |
Owner |
Change date |
Actions |
";
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;
$_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 = "Confirm";
} else {
$actionText = "Delete";
}
/*
$_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
("%s",
$this->url,
urlencode($this->SoapEngine->soapEngine),
urlencode($alias->owner),
$alias->owner
);
} else {
$_owner_url='';
}
printf("
%s |
%s@%s |
%s@%s |
%s |
%s |
%s |
",
$index,
$alias->id->username,
$alias->id->domain,
$_sip_accounts_url,
$alias->target->username,
$alias->target->domain,
$_owner_url,
$alias->changeDate,
$_url,
$actionText
);
$i++;
}
}
print " ";
$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->setCustomerProperties($_properties);
*/
return true;
}
}
function deleteRecord($dictionary=array())
{
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print " Please press on Confirm to confirm the delete. ";
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 " Error: missing SIP alias username or domain. ";
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 (" SIP alias ",$this->filters['alias_username']);
printf ("@");
if (count($this->allowedDomains) > 0) {
if ($this->filters['alias_domain'] && !in_array($this->filters['alias_domain'], $this->allowedDomains)) {
printf (" ",$this->filters['alias_domain']);
} else {
$selected_domain[$this->filters['alias_domain']]='selected';
printf (" ");
}
} else {
printf (" ",$this->filters['alias_domain']);
}
printf (" Redirect target ",trim($_REQUEST['target_username_filter']));
printf (" Owner ",$this->filters['owner']);
}
function showAddForm()
{
if ($this->selectionActive) return;
if (!count($this->allowedDomains)) {
print " You must create at least one SIP domain before adding SIP aliases";
return false;
}
printf (" ";
}
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'];
}
if (preg_match("/:(.*)$/",$target_els[0], $m)) {
$target_username=$m[1];
} else {
$target_username=$target_els[0];
}
if (preg_match("/:(.*)$/",$alias_els[0], $m)) {
$username=$m[1];
} else {
$username=$alias_els[0];
}
if (strlen($alias_els[1])) {
$domain=$alias_els[1];
} else if (trim($_REQUEST['domain'])) {
$domain=trim($_REQUEST['domain']);
} else {
if ($this->html) {
printf (" Error: Missing SIP domain");
}
return false;
}
if (!$this->validDomain($domain)) {
if ($this->html) {
print "Error: invalid domain name";
}
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->setCustomerProperties($_p);
}
$alias=array(
'id' => array('username' => strtolower($username),
'domain' => strtolower($domain)
),
'target' => array('username' => strtolower($target_username),
'domain' => strtolower($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)))
);
return $this->SoapEngine->execute($function, $this->html);
}
function getAllowedDomains()
{
// Filter
$filter=array(
'domain' => ''
);
// Range
$range=array('start' => 0,
'count' => 500
);
$orderBy = array('attribute' => 'domain',
'direction' => 'ASC'
);
// Compose query
$Query=array('filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getDomains');
$result = $this->SoapEngine->soapclient->getDomains($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->domains as $_domain) {
if ($this->validDomain($_domain->domain)) {
$this->allowedDomains[]=$_domain->domain;
}
}
}
}
function showTextBeforeCustomerSelection()
{
print _("Domain owner");
}
}
class EnumRanges extends Records
{
var $selectionActiveExceptions=array('tld');
var $record_generator='';
// 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',
'help' => 'Range owner')
);
var $Fields=array(
'customer' => array('type'=>'integer',
'help' => 'Range owner'
),
'serial' => array('type'=>'integer',
'help'=>'DNS serial number',
'readonly' => 1
),
'ttl' => array('type'=>'integer',
'help'=>'Cache period in DNS clients'
),
'info' => array('type'=>'string',
'help' =>'Range description'
),
'size' => array('type'=>'integer',
'help'=>'Maximum number of telephone numbers'
),
'minDigits' => array('type'=>'integer',
'help'=>'Minimum number of digits for telephone numbers'
),
'maxDigits' => array('type'=>'integer',
'help'=>'Maximum number of digits for telephone numbers'
)
);
public function __construct($SoapEngine)
{
dprint("init EnumRanges");
$this->filters = array('prefix' => trim(ltrim($_REQUEST['prefix_filter']),'+'),
'tld' => trim($_REQUEST['tld_filter']),
'info' => trim($_REQUEST['info_filter'])
);
parent::__construct($SoapEngine);
$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'
);
*/
if ($this->login_credentials['reseller_filters'][$this->reseller]['record_generator']) {
//printf ("Engine: %s",$this->SoapEngine->soapEngine);
if (is_array($this->login_credentials['reseller_filters'][$this->reseller]['record_generator'])) {
$_rg=$this->login_credentials['reseller_filters'][$this->reseller]['record_generator'];
if ($_rg[$this->SoapEngine->soapEngine]) {
$this->record_generator=$_rg[$this->SoapEngine->soapEngine];
}
} else {
$this->record_generator=$this->login_credentials['reseller_filters'][$this->reseller]['record_generator'];
}
} else if (strlen($this->SoapEngine->record_generator)) {
$this->record_generator=$this->SoapEngine->record_generator;
}
}
function listRecords()
{
$this->getAllowedDomains();
$this->showSeachForm();
// 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);
$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 {
$this->rows = $result->total;
if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') {
$this->showActionsForm();
}
print "
$this->rows records found
Id |
Owner |
Prefix |
TLD |
Serial |
TTL |
Info |
Min |
Max |
Size |
Used |
Change date |
Actions |
";
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->ranges[$i]) break;
$range = $result->ranges[$i];
$index=$this->next+$i+1;
$_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 ($this->adminonly) $_url.= sprintf ("&reseller_filter=%s",$range->reseller);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['prefix_filter'] == $range->id->prefix &&
$_REQUEST['tld_filter'] == $range->id->tld) {
$_url .= "&confirm=1";
$actionText = "Confirm";
} else {
$actionText = "Delete";
}
if ($this->adminonly) {
$range_url=sprintf('%s',$this->url, $this->SoapEngine->service, $range->reseller, $range->id->prefix, $range->id->tld, $range->id->prefix);
} else {
$range_url=sprintf('%s',$this->url, $this->SoapEngine->service, $range->id->prefix, $range->id->tld, $range->id->prefix);
}
if ($this->record_generator) {
$generator_url=sprintf('+Numbers',$this->url, $this->record_generator, $range->id->prefix, $range->id->tld, $range->maxDigits, $range->reseller);
} else {
$generator_url='';
}
if ($range->size) {
$usage=intval(100*$range->used/$range->size);
$bar=$this->makebar($usage);
} else {
$bar="";
}
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($range->customer)
);
$_nameservers='';
foreach ($range->nameservers as $_ns) {
$_nameservers.= $_ns.' ';
}
printf("
%s |
%s.%s |
+%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s%s |
",
$index,
$_customer_url,
$range->customer,
$range->reseller,
$range_url,
$range->id->tld,
$range->serial,
$range->ttl,
$range->info,
$range->minDigits,
$range->maxDigits,
$range->size,
$range->used,
$bar,
$range->changeDate,
$_url,
$actionText,
$generator_url
);
$i++;
}
}
print " ";
if ($this->rows == 1) {
$this->showRecord($range);
} else {
$this->showPagination($maxrows);
}
return true;
}
}
function deleteRecord($dictionary = array())
{
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print " Please press on Confirm to confirm the delete. ";
return true;
}
if (!strlen($this->filters['prefix']) || !strlen($this->filters['tld'])) {
print " Error: missing ENUM range id ";
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);
$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 showAddForm()
{
if ($this->selectionActive) return;
printf (" ",$this->filters['tld']);
} else if ($_tld=$this->getCustomerProperty('enum_ranges_last_tld')) {
printf (" ",$_tld);
} else {
printf (" ");
}
printf (" TTL ");
printf (" Min Digits ");
printf (" Max Digits ");
printf (" Info ",$_REQUEST['info']);
$this->printHiddenFormElements();
print "
";
}
function addRecord($dictionary=array())
{
$tld = trim($_REQUEST['tld']);
$prefix = trim($_REQUEST['prefix']);
$size = trim($_REQUEST['size']);
$info = trim($_REQUEST['info']);
if (!strlen($tld)) {
$tld=$this->SoapEngine->default_enum_tld;
}
if (!strlen($tld) || !strlen($prefix) || !is_numeric($prefix)) {
printf(" Error: Missing TLD or prefix. ");
return false;
}
if (!$this->adminonly) {
if (in_array($prefix, $this->deniedPrefixes)) {
print " Error: Only an administrator account can create the prefix coresponding to a country code.";
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->setCustomerProperties($_p);
$function = array(
'commit' => array(
'name' => 'addRange',
'parameters' => array($range),
'logs' => array('success' => sprintf('ENUM range +%s under %s has been added',$prefix, $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 showSeachFormCustom()
{
printf (" Prefix ",$this->filters['prefix']);
printf (" TLD");
if (count($this->allowedDomains) > 0) {
$selected_tld[$this->filters['tld']]='selected';
printf (" ");
} else {
printf (" ",$this->filters['tld']);
}
printf (" Info ",$this->filters['info']);
}
function getAllowedDomains()
{
// Filter
$filter=array('prefix' => '');
// Range
$range=array('start' => 0,
'count' => 500
);
// 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);
$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 showRecord($range)
{
print " ";
print "
";
printf ("";
print "
";
}
function updateRecord()
{
//print "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 (" %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'])))
);
$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 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);
$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 {
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://")),
"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 "
$this->rows records found
|
Range Owner |
Phone number |
TLD |
Info |
Owner |
Type |
Id |
Map to |
TTL |
Change date |
Actions |
";
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;
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 ($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("
sip:%s",$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 ($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";
$actionText = "Confirm";
} 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->adminonly) $_number_url.= sprintf ("&reseller_filter=%s",$number->reseller);
$_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
("%s",
$this->url,
urlencode($this->SoapEngine->soapEngine),
urlencode($number->owner),
$number->owner
);
} else {
$_owner_url='';
}
printf("
%s |
%s.%s |
+%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
",
$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("
|
|
|
|
|
|
%s |
%s |
%s |
%s |
%s |
%s |
",
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)
);
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";
$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)
);
if ($this->adminonly) $_number_url.= sprintf ("&reseller_filter=%s",$number->reseller);
$_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
("%s",
$this->url,
urlencode($this->SoapEngine->soapEngine),
urlencode($number->owner),
$number->owner
);
} else {
$_owner_url='';
}
printf("
%s |
%s.%s |
+%s |
%s |
%s |
%s |
|
|
|
%s |
%s |
",
$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 " ";
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 ((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 {
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 ((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 "";
print "";
print "Number";
print " | ";
print "Mappings";
print " | ";
print " ";
print "";
print "";
print "";
printf ("
";
print " | ";
print "";
print " | ";
print " ";
print "
|
";
print "";
print " ";
}
function getRecord($enumid) {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getNumber');
$result = $this->SoapEngine->soapclient->getNumber($enumid);
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 $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 ((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");
}
}
class DnsZones extends Records
{
var $FieldsAdminOnly=array(
'reseller' => array('type'=>'integer',
'help' => 'Zone owner')
);
var $Fields=array(
'customer' => array('type'=>'integer',
'help' => 'Zone owner'
),
'serial' => array('type'=>'integer',
'help'=>'Serial number',
'readonly' => 1
),
'email' => array('type'=>'string',
'help'=>'Administrator address'
),
'ttl' => array('type'=>'integer',
'help'=>'Time to live of SOA record'
),
'minimum' => array('type'=>'integer',
'help'=>'Default time to live period'
),
'retry' => array('type'=>'integer',
'help'=>'Retry transfer period'
),
'expire' => array('type'=>'integer',
'help'=>'Expire period'
),
'info' => array('type'=>'string',
'help' =>'Zone description'
)
);
public function __construct($SoapEngine)
{
dprint("init DnsZones");
$this->filters = array(
'name' => trim($_REQUEST['name_filter']),
'info' => trim($_REQUEST['info_filter'])
);
parent::__construct($SoapEngine);
$this->sortElements=array('changeDate' => 'Change date',
'name' => 'Name'
);
$this->Fields['nameservers'] = array('type'=>'text',
'name'=>'Name servers',
'help'=>'Authoritative name servers'
);
}
function showAfterEngineSelection () {
if ($this->SoapEngine->name_servers) {
//printf (" Available name servers: %s",$this->SoapEngine->name_servers);
}
}
function listRecords() {
$this->showSeachForm();
// Filter
$filter=array('name' => $this->filters['name'],
'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);
$this->log_action('getZones');
$result = $this->SoapEngine->soapclient->getZones($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 "
$this->rows records found
Id |
Owner |
Zone |
Administrator |
Info |
|
Serial |
Default TTL |
Change date |
Actions |
";
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->zones[$i]) break;
$zone = $result->zones[$i];
$index=$this->next+$i+1;
$_url = $this->url.sprintf("&service=%s&action=Delete&name_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($zone->name)
);
if ($this->adminonly) $_url.= sprintf ("&reseller_filter=%s",$zone->reseller);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['name_filter'] == $zone->name) {
$_url .= "&confirm=1";
$actionText = "Confirm";
} else {
$actionText = "Delete";
}
$zone_url=sprintf('%s&service=%s&name_filter=%s',
$this->url,
$this->SoapEngine->service,
$zone->name
);
$records_url = $this->url.sprintf("&service=dns_records@%s&zone_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($zone->name)
);
if ($this->adminonly) $zone_url .= sprintf("&reseller_filter=%s",$zone->reseller);
if ($this->adminonly) $records_url .= sprintf("&reseller_filter=%s",$zone->reseller);
$customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($zone->customer)
);
sort($zone->nameservers);
$ns_text='';
foreach ($zone->nameservers as $ns) {
$ns_text.= $ns." ";
}
printf("
%s |
%s.%s |
%s |
%s |
%s |
Records |
%s |
%s |
%s |
%s |
",
$index,
$customer_url,
$zone->customer,
$zone->reseller,
$zone_url,
$zone->name,
$zone->email,
$zone->info,
$records_url,
$zone->serial,
$zone->ttl,
$zone->changeDate,
$_url,
$actionText
);
printf("
");
$i++;
}
}
print " ";
if ($this->rows == 1) {
$this->showRecord($zone);
} else {
$this->showPagination($maxrows);
}
return true;
}
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "Please press on Confirm to confirm the delete. ";
return true;
}
if (!strlen($this->filters['name'])) {
print " Error: missing Dns zone name ";
return false;
}
$name=$this->filters['name'];
$function=array('commit' => array('name' => 'deleteZone',
'parameters' => array($name),
'logs' => array('success' => sprintf('Dns zone %s has been deleted',$this->filters['name'])
)
)
);
unset($this->filters);
$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 showAddForm() {
if ($this->selectionActive) return;
printf ("
";
}
function addRecord($dictionary=array()) {
$name = trim($_REQUEST['name']);
$info = trim($_REQUEST['info']);
$name_servers = trim($_REQUEST['name_servers']);
if ($_FILES['import_file']['tmp_name']) {
$content=fread(fopen($_FILES['import_file']['tmp_name'], "r"), $_FILES['import_file']['size']);
//print_r($content);
if (!$imported_data=json_decode($content, true)) {
printf ("Error: reading imported data. ");
return false;
}
//print_r($imported_data);
if (!in_array('dns_zones', array_keys($imported_data))) {
printf (" Error: Missing zones in imported data. ");
return false;
}
if (!in_array('dns_records', array_keys($imported_data))) {
return false;
printf (" Error: Missing records in imported data. ");
}
foreach($imported_data['customers'] as $customer) {
// Insert credetials
$this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuth);
$customer['credit'] = floatval($customer['credit']);
$customer['balance'] = floatval($customer['balance']);
// Call function
$this->log_action('addAccount');
$result = $this->SoapEngine->soapclientCustomers->addAccount($customer);
if ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode == 5001) {
$result = $this->SoapEngine->soapclientCustomers->updateCustomer($customer);
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);
printf (" Error: $log");
} else {
printf(' Customer %s has been updated',$customer['id']);
}
} 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);
printf (" Error: $log");
}
} else {
printf(' Customer %s has been added',$customer['id']);
}
}
$name_servers = array();
foreach($imported_data['dns_zones'] as $zone) {
flush();
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('addZone');
$result = $this->SoapEngine->soapclient->addZone($zone);
$name_servers[$zone['name']] = $zone['nameservers'];
if ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode == 7001) {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('updateZone');
$result = $this->SoapEngine->soapclient->updateZone($zone);
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);
printf (" Error: $log");
} else {
printf(' Zone %s has been updated',$zone['name']);
}
} 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);
printf (" Error: $log");
}
} else {
printf(' Zone %s has been added',$zone['name']);
}
}
$added = 0;
$updated = 0;
foreach($imported_data['dns_records'] as $record) {
flush();
if (in_array($record['name'], $name_servers[$record['zone']]) && $record['type'] == "A") {
continue;
}
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('addRecord');
$result = $this->SoapEngine->soapclient->addRecord($record);
if ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($error_fault->detail->exception->errorcode == 7003) {
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('updateRecord');
$result = $this->SoapEngine->soapclient->updateRecord($record);
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);
printf (" Error: $log");
} else {
$added += 1;
}
} 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);
printf (" Error: $log");
}
} else {
$added += 1;
}
}
printf(' %d DNS records added and %d updated',$added, $updated);
return true;
} else {
if (isset($this->SoapEngine->allow_none_local_dns_zones)) {
$allow_none_local_dns_zones = $this->SoapEngine->allow_none_local_dns_zones;
} else {
$allow_none_local_dns_zones = false;
}
if (!strlen($name)) {
printf (" Error: Missing zone name. ");
return false;
}
$lookup1 = dns_get_record($name);
//dprint_r($lookup1);
$ns_array1=explode(" ",trim($this->SoapEngine->name_servers));
if (empty($lookup1) || $allow_none_local_dns_zones){
$valid = 1;
} else {
$valid = 0;
foreach($lookup1 as $lrecord){
if ($lrecord['type'] == 'NS') {
if(in_array($lrecord['target'],$ns_array1)){
$valid = 1 ;
}
}
}
}
if ($valid==0){
printf ("Error: DNS zone already exists on other server. Please contact our support if you plan to transfer this DNS zone to this system. ");
return false;
}
if (is_numeric($prefix)) {
printf ("Error: Numeric zone names are not allowed. Use ENUM port instead. ");
return false;
}
list($customer,$reseller)=$this->customerFromLogin($dictionary);
if (!trim($_REQUEST['ttl'])) {
$ttl=3600;
} else {
$ttl=intval(trim($_REQUEST['ttl']));
}
if ($name_servers) {
$ns_array=explode(" ",trim($name_servers));
} else if ($this->login_credentials['login_type'] != 'admin' && $this->SoapEngine->name_servers){
$ns_array=explode(" ",trim($this->SoapEngine->name_servers));
} else {
$ns_array=array();
}
$zone=array(
'name' => $name,
'ttl' => $ttl,
'info' => $info,
'customer' => intval($customer),
'reseller' => intval($reseller),
'nameservers' => $ns_array
);
$function=array('commit' => array('name' => 'addZone',
'parameters' => array($zone),
'logs' => array('success' => sprintf('DNS zone %s has been added',$name)))
);
$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 showSeachFormCustom() {
printf (" DNS zone ",$this->filters['name']);
printf (" Info ",$this->filters['info']);
}
function showRecord($zone) {
print "";
print "
";
printf ("";
print "
";
}
function updateRecord () {
if (!$_REQUEST['name_filter']) return;
//dprintf ("Updating zone %s...",$_REQUEST['name_filter']);
$filter=array('name' => $_REQUEST['name_filter']);
if (!$zone = $this->getRecord($filter)) {
return false;
}
$zone_old=$zone;
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') {
$zone->$item = intval($_REQUEST[$var_name]);
} else if ($item == 'nameservers') {
$_txt=trim($_REQUEST[$var_name]);
if (!strlen($_txt)) {
unset($zone->$item);
} else {
$_nameservers=array();
$_lines=explode("\n",$_txt);
foreach ($_lines as $_line) {
$_ns=trim($_line);
$_nameservers[]=$_ns;
}
$zone->$item=$_nameservers;
}
} else {
$zone->$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') {
$zone->$item = intval($_REQUEST[$var_name]);
} else {
$zone->$item = trim($_REQUEST[$var_name]);
}
}
}
$function=array('commit' => array('name' => 'updateZone',
'parameters' => array($zone),
'logs' => array('success' => sprintf('DNS zone %s has been updated',$filter['name'])))
);
$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 getRecord($zone) {
// Filter
if (!$zone['name']) {
print "Error in getRecord(): Missing zone name";
return false;
}
$filter=array('name' => $zone['name']);
// 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);
$this->log_action('getZones');
$result = $this->SoapEngine->soapclient->getZones($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 {
if ($result->zones[0]){
return $result->zones[0];
} else {
return false;
}
}
}
function getRecordKeys() {
// Filter
$filter=array('name' => $this->filters['name'],
'info' => $this->filters['info'],
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// 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
);
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getZones');
// Call function
$result = $this->SoapEngine->soapclient->getZones($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->zones as $zone) {
$this->selectionKeys[]=array('name' => $zone->name);
}
return true;
}
}
function hide_html() {
if ($_REQUEST['action'] == 'PerformActions' && $_REQUEST['sub_action'] == 'export') {
return true;
} else {
return false;
}
}
}
class DnsRecords extends Records
{
var $max_zones_selection = 50;
var $typeFilter = false;
var $default_ttl = 3600;
var $fancy = false;
var $sortElements = array(
'changeDate' => 'Change date',
'type' => 'Type',
'name' => 'Name'
);
var $FieldsReadOnly = array(
'customer',
'reseller'
);
var $Fields = array(
'type' => array('type'=>'string'),
'priority' => array('type'=>'integer'),
'value' => array('type'=>'string'),
'ttl' => array('type'=>'integer')
);
var $recordTypes = array(
'A' => 'IP address',
'AAAA' => 'IP v6 address',
'CNAME' => 'Hostname alias',
'MX' => 'Mail server address',
'SRV' => 'Server resource',
'NS' => 'Name server address',
'NAPTR' => 'Name authority',
'PTR' => 'Reverse IP address',
'TXT' => 'Text',
'LOC' => 'Geo location'
);
var $havePriority = array('MX','SRV','NAPTR');
var $addRecordFunction = 'addRecord';
var $deleteRecordFunction = 'deleteRecord';
var $updateRecordFunction = 'updateRecord';
var $getRecordsFunction = 'getRecords';
var $getRecordFunction = 'getRecord';
var $recordTypesTemplate = array(
'sip2sip' => array(
'name' => 'SIP2SIP infrastructure',
'records' => array(
'naptr1' => array(
'name' => '',
'type' => 'NAPTR',
'priority' => '100',
'ttl' => '600',
'value' => '20 100 "s" "SIP+D2T" "" _sip._tcp'
),
'naptr2' => array(
'name' => '',
'type' => 'NAPTR',
'priority' => '100',
'ttl' => '600',
'value' => '30 100 "s" "SIP+D2U" "" _sip._udp'
),
'naptr3' => array(
'name' => '',
'type' => 'NAPTR',
'priority' => '100',
'ttl' => '600',
'value' => '10 100 "s" "SIPS+D2T" "" _sips._tcp'
),
'srv1' => array(
'name' => '_sip._tcp',
'type' => 'SRV',
'priority' => '100',
'ttl' => '600',
'value' => '100 5060 proxy.sipthor.net'
),
'srv2' => array(
'name' => '_sip._udp',
'type' => 'SRV',
'priority' => '100',
'ttl' => '600',
'value' => '100 5060 proxy.sipthor.net'
),
'srv3' => array(
'name' => '_sips._tcp',
'type' => 'SRV',
'priority' => '100',
'ttl' => '600',
'value' => '100 5061 proxy.sipthor.net'
),
'srv4' => array(
'name' => '_stun._udp',
'type' => 'SRV',
'priority' => '0',
'value' => '10 3478 stun1.sipthor.net'
),
'srv5' => array(
'name' => '_stun._udp',
'type' => 'SRV',
'priority' => '0',
'value' => '10 3478 stun2.sipthor.net'
),
'srv6' => array(
'name' => '_msrps._tcp',
'type' => 'SRV',
'priority' => '10',
'value' => '0 2855 msrprelay.sipthor.net'
),
'txt1' => array(
'name' => 'xcap',
'type' => 'TXT',
'priority' => '10',
'value' => 'https://xcap.sipthor.net/xcap-root'
)
),
),
'siptcp' => array(
'name' => 'SIP - TCP transport',
'records' => array(
'naptr' => array(
'name' => '',
'type' => 'NAPTR',
'priority' => '100',
'ttl' => '3600',
'value' => '10 100 "s" "SIP+D2T" "" _sip._tcp'
),
'srv' => array(
'name' => '_sip._tcp',
'type' => 'SRV',
'priority' => '100',
'ttl' => '3600',
'value' => '100 5060 #VALUE#|10 5060 sip'
)
),
),
'siptls' => array(
'name' => 'SIP - TLS transport',
'records' => array(
'naptr' => array(
'name' => '',
'type' => 'NAPTR',
'priority' => '100',
'ttl' => '3600',
'value' => '20 100 "s" "SIPS+D2T" "" _sips._tcp'
),
'srv' => array(
'name' => '_sips._tcp',
'type' => 'SRV',
'priority' => '100',
'ttl' => '3600',
'value' => '100 5061 #VALUE#|10 5061 sip'
)
)
),
'sipudp' => array(
'name' => 'SIP - UDP transport',
'records' => array(
'naptr' => array(
'name' => '',
'type' => 'NAPTR',
'priority' => '100',
'ttl' => '3600',
'value' => '30 100 "s" "SIP+D2U" "" _sip._udp'
),
'srv' => array(
'name' => '_sip._udp',
'type' => 'SRV',
'priority' => '100',
'ttl' => '3600',
'value' => '100 5060 #VALUE#|10 5060 sip'
)
),
),
'stun' => array(
'name' => 'STUN - NAT mirror',
'records' => array(
'srv' => array(
'name' => '_stun._udp',
'type' => 'SRV',
'priority' => '0',
'value' => '10 3478 #VALUE#|10 3478 stun'
)
),
),
'xmpp-server' => array(
'name' => 'XMPP server-to-server over TCP',
'records' => array(
'srv' => array(
'name' => '_xmpp-server._tcp',
'type' => 'SRV',
'priority' => '0',
'value' => '10 5269 #VALUE#|10 5269 xmpp'
),
'srv1' => array(
'name' => '_jabber._tcp',
'type' => 'SRV',
'priority' => '0',
'value' => '10 5269 #VALUE#|10 5269 xmpp'
)
),
),
'xmpp-client' => array(
'name' => 'XMPP client-to-server over TCP',
'records' => array(
'srv' => array(
'name' => '_xmpp-client._tcp',
'type' => 'SRV',
'priority' => '0',
'value' => '10 5222 #VALUE#|10 5222 xmpp'
)
),
),
'xmpps-server' => array(
'name' => 'XMPP server-to-server over TLS',
'records' => array(
'srv' => array(
'name' => '_xmpps-server._tcp',
'type' => 'SRV',
'priority' => '0',
'value' => '10 5269 #VALUE#|10 5269 xmpp'
),
'srv1' => array(
'name' => '_jabbers._tcp',
'type' => 'SRV',
'priority' => '0',
'value' => '10 5269 #VALUE#|10 5269 xmpp'
)
),
),
'xmpps-client' => array(
'name' => 'XMPP client-to-server over TLS',
'records' => array(
'srv' => array(
'name' => '_xmpps-client._tcp',
'type' => 'SRV',
'priority' => '0',
'value' => '10 5222 #VALUE#|10 5222 xmpp'
)
),
),
'msrp' => array(
'name' => 'MSRP - IM relay',
'records' => array(
'srv' => array(
'name' => '_msrps._tcp',
'type' => 'SRV',
'priority' => '10',
'value' => '0 2855 msrprelay'
)
)
),
'sipthor' => array(
'name' => 'SIP - Thor network',
'records' => array(
'eventserver' => array(
'name' => '_eventserver._tcp',
'type' => 'SRV',
'priority' => '10',
'value' => '0 8000 eventserver'
),
'sipserver' => array(
'name' => '_sip._udp',
'type' => 'SRV',
'priority' => '10',
'value' => '30 5060 proxy'
),
'sipns1' => array(
'name' => 'proxy',
'type' => 'NS',
'value' => 'ns1'
),
'sipns2' => array(
'name' => 'proxy',
'type' => 'NS',
'value' => 'ns2'
),
'sipns3' => array(
'name' => 'proxy',
'type' => 'NS',
'value' => 'ns3'
),
'ngnproserver' => array(
'name' => '_ngnpro._tcp',
'type' => 'SRV',
'priority' => '10',
'value' => '0 9200 ngnpro'
),
'ngnns1' => array(
'name' => 'ngnpro',
'type' => 'NS',
'value' => 'ns1'
),
'ngnns2' => array(
'name' => 'ngnpro',
'type' => 'NS',
'value' => 'ns2'
),
'ngnns3' => array(
'name' => 'ngnpro',
'type' => 'NS',
'value' => 'ns3'
),
'xcapserver' => array(
'name' => '_xcap._tcp',
'type' => 'SRV',
'priority' => '10',
'value' => '0 443 xcap'
),
'xcapns1' => array(
'name' => 'xcap',
'type' => 'NS',
'value' => 'ns1'
),
'xcapns2' => array(
'name' => 'xcap',
'type' => 'NS',
'value' => 'ns2'
),
'xcapns3' => array(
'name' => 'xcap',
'type' => 'NS',
'value' => 'ns3'
),
'msrpserver' => array(
'name' => '_msrps._tcp',
'type' => 'SRV',
'priority' => '10',
'value' => '0 2855 msrprelay'
),
'msrpns1' => array(
'name' => 'msrprelay',
'type' => 'NS',
'value' => 'ns1'
),
'msrpns2' => array(
'name' => 'msrprelay',
'type' => 'NS',
'value' => 'ns2'
),
'msrpns3' => array(
'name' => 'msrprelay',
'type' => 'NS',
'value' => 'ns3'
),
'voicemail' => array(
'name' => '_voicemail._tcp',
'type' => 'SRV',
'priority' => '10',
'value' => '0 9200 voicemail'
),
'vmns1' => array(
'name' => 'voicemail',
'type' => 'NS',
'value' => 'ns1'
),
'vmns2' => array(
'name' => 'voicemail',
'type' => 'NS',
'value' => 'ns2'
),
'vmns3' => array(
'name' => 'voicemail',
'type' => 'NS',
'value' => 'ns3'
)
)
)
);
public function __construct($SoapEngine)
{
dprint("init DnsRecords");
$_name = trim($_REQUEST['name_filter']);
if (strlen($_name) && !strstr($_name,'.') && !strstr($_name,'%')) {
$_name .= '%';
}
if ($this->typeFilter) {
$this->filters = array(
'id' => trim($_REQUEST['id_filter']),
'zone' => trim($_REQUEST['zone_filter']),
'name' => $_name,
'type' => $this->typeFilter,
'value' => trim($_REQUEST['value_filter']),
'owner' => trim($_REQUEST['owner_filter'])
);
} else {
$this->filters = array(
'id' => trim($_REQUEST['id_filter']),
'zone' => trim($_REQUEST['zone_filter']),
'name' => $_name,
'type' => trim($_REQUEST['type_filter']),
'value' => trim($_REQUEST['value_filter']),
'owner' => trim($_REQUEST['owner_filter'])
);
}
parent::__construct($SoapEngine);
$this->getAllowedDomains();
}
function listRecords() {
$this->showSeachForm();
if ($this->typeFilter) {
$filter = array(
'id' => intval($this->filters['id']),
'zone' => $this->filters['zone'],
'name' => $this->filters['name'],
'type' => $this->typeFilter,
'value' => $this->filters['value'],
'owner' => intval($this->filters['owner']),
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
} else {
$filter = array(
'id' => intval($this->filters['id']),
'zone' => $this->filters['zone'],
'name' => $this->filters['name'],
'type' => $this->filters['type'],
'value' => $this->filters['value'],
'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($this->getRecordsFunction);
// Call function
$result = call_user_func_array(array($this->SoapEngine->soapclient,$this->getRecordsFunction),array($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 > 1 && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') {
$this->showActionsForm();
}
print "
$this->rows records found. Click on record id to edit the values.
";
if ($this->fancy) {
print "
|
Zone owner |
Zone |
Id |
Name |
Type |
Value |
Owner |
Change date |
Actions |
";
} else {
print "
|
Zone owner |
Zone |
Id |
Name |
Type |
Priority |
Value |
TTL |
Change date |
Actions |
";
}
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->records[$i]) {
break;
}
$record = $result->records[$i];
$index=$this->next+$i+1;
$_url = $this->url.sprintf(
"&service=%s&action=Delete&name_filter=%s&zone_filter=%s&id_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($record->name),
urlencode($record->zone),
urlencode($record->id)
);
if ($this->adminonly) $_url.= sprintf ("&reseller_filter=%s",$record->reseller);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['id_filter'] == $record->id) {
$_url .= "&confirm=1";
$actionText = "Confirm";
} else {
$actionText = "Delete";
}
$_customer_url = $this->url.sprintf(
"&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($record->customer)
);
$_zone_url = $this->url.sprintf(
"&service=dns_zones@%s&name_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($record->zone)
);
if ($this->adminonly) {
$_zone_url.= sprintf("&reseller_filter=%s", $record->reseller);
}
$_record_url = $this->url.sprintf(
"&service=%s@%s&zone_filter=%s&id_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($this->SoapEngine->soapEngine),
urlencode($record->zone),
urlencode($record->id)
);
if ($this->adminonly) $_record_url.= sprintf ("&reseller_filter=%s",$record->reseller);
if ($record->owner) {
$_owner_url = sprintf(
"%s",
$this->url,
urlencode($this->SoapEngine->soapEngine),
urlencode($record->owner),
$record->owner
);
} else {
$_owner_url='';
}
if ($this->fancy) {
printf(
"
%s |
%s.%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
",
$index,
$_customer_url,
$record->customer,
$record->reseller,
$_zone_url,
$record->zone,
$_record_url,
$record->id,
$record->name,
$record->type,
$record->value,
$record->owner,
$record->changeDate,
$_url,
$actionText
);
} else {
printf("
%s |
%s.%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
",
$index,
$_customer_url,
$record->customer,
$record->reseller,
$_zone_url,
$record->zone,
$_record_url,
$record->id,
$record->name,
$record->type,
$record->priority,
$record->value,
$record->ttl,
$record->changeDate,
$_url,
$actionText
);
}
$i++;
}
}
print " ";
if ($this->rows == 1 ) {
$this->showRecord($record);
} else {
$this->showPagination($maxrows);
}
return true;
}
}
function showSeachFormCustom() {
printf(
"
Record Id
",
$this->filters['id']
);
printf(
"
Name
",
$this->filters['name']
);
if (count($this->allowedDomains) > 0) {
$selected_zone[$this->filters['zone']]='selected';
print "";
} else {
printf(
"
DNS zone
",
$this->filters['zone']
);
}
if ($this->typeFilter) {
printf(
" Type %s",
$this->typeFilter,
$this->typeFilter
);
} else {
$selected_type[$this->filters['type']]='selected';
echo "
";
}
printf(
"
Value
",
$this->filters['value']
);
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "Please press on Confirm to confirm the delete. ";
return true;
}
if ($dictionary['id']) {
$id=$dictionary['id'];
} else {
$id=$this->filters['id'];
}
if (!$id) {
print " Missing record id. ";
return false;
}
$function = array(
'commit' => array(
'name' => $this->deleteRecordFunction,
'parameters' => array($id),
'logs' => array('success' => sprintf('DNS record %s has been deleted',$id))
)
);
$zone=$this->filters['zone'];
unset($this->filters);
$this->filters['zone']=$zone;
$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 showAddForm() {
/*
if ($this->adminonly) {
if (!$this->filters['reseller']) {
print " To add a new record you must search first for a customer";
return;
}
}
*/
printf("
";
}
function getAllowedDomains() {
// Filter
$filter = array(
'customer' => intval($this->filters['customer']),
'reseller' => intval($this->filters['reseller'])
);
// Range
$range = array(
'start' => 0,
'count' => $this->max_zones_selection
);
// Order
$orderBy = array(
'attribute' => 'name',
'direction' => 'ASC'
);
// Compose query
$Query = array(
'filter' => $filter,
'orderBy' => $orderBy,
'range' => $range
);
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
$this->log_action('getZones');
$result = $this->SoapEngine->soapclient->getZones($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 {
if ($result->total > $this->max_zones_selection) return false;
foreach($result->zones as $zone) {
if (in_array($zone->name,$this->allowedDomains)) continue;
$this->allowedDomains[]=$zone->name;
$seen[$zone->name]++;
}
}
}
function addRecord($dictionary=array()) {
if ($this->typeFilter) {
$type = $this->typeFilter;
} else if ($dictionary['type']) {
$type = $dictionary['type'];
} else {
$type = trim($_REQUEST['type']);
}
if ($dictionary['name']) {
$name = $dictionary['name'];
} else {
$name = trim($_REQUEST['name']);
}
$name = rtrim($name,".");
if (preg_match("/^(.+)@(.*)$/", $name, $m)) {
$zone = $m[2];
} else {
if ($dictionary['zone']) {
$zone=$dictionary['zone'];
$this->skipSaveProperties=true;
} else if ($_REQUEST['zone']) {
$zone=$_REQUEST['zone'];
}
if ($type == 'MBOXFW') {
$name .= '@'.$zone;
}
}
if (!strlen($zone)) {
if ($this->html) {
echo "Error: Missing zone name. ";
}
return false;
}
$this->filters['zone']=$zone;
if (!strlen($type)) {
if ($this->html) {
echo "Error: Missing record type. ";
}
return false;
}
if ($dictionary['value']) {
$value = $dictionary['value'];
} else {
$value = trim($_REQUEST['value']);
}
$value=rtrim($value,".");
if ($this->adminonly) {
if ($dictionary['reseller']) {
} else if ($this->filters['reseller']) {
} else {
if ($this->html) {
echo "Error: Missing reseller, please first search zones for a given reseller ";
}
return false;
}
}
if ($dictionary['ttl']) {
$ttl = intval($dictionary['ttl']);
} else {
$ttl = intval(trim($_REQUEST['ttl']));
}
if (!$ttl) $ttl=3600;
if ($dictionary['owner']) {
$owner = intval($dictionary['owner']);
} else {
$owner = intval(trim($_REQUEST['owner']));
}
if ($dictionary['priority']) {
$priority = $dictionary['priority'];
} else {
$priority = trim($_REQUEST['priority']);
}
if (in_array($type,array_keys($this->recordTypes))) {
// See RFC 1912 - Section 2.4
if (trim($name).trim($zone) == trim($zone) && $type == 'CNAME') {
printf(
"Error: CNAME (%s) equal to zone name (%s) is not allowed ",
trim($name).trim($zone),
trim($zone)
);
return false;
}
if (!strlen($value)) {
if ($this->html) {
echo "Error: Missing record value. ";
}
return false;
}
$record = array(
'name' => trim($name),
'zone' => trim($zone),
'type' => $type,
'value' => trim($value),
'owner' => intval($owner),
'ttl' => intval($ttl),
'priority' => intval($priority)
);
if (!$this->skipSaveProperties=true) {
$_p = array(
array(
'name' => 'dns_records_last_zone',
'category' => 'web',
'value' => $_REQUEST['zone'],
'permission' => 'customer'
),
array(
'name' => 'dns_records_last_type',
'category' => 'web',
'value' => "$type",
'permission' => 'customer'
)
);
$this->setCustomerProperties($_p);
}
$function = array(
'commit' => array(
'name' => $this->addRecordFunction,
'parameters' => array($record),
'logs' => array('success' => sprintf('DNS record %s under %s has been added',$name,$zone))
)
);
$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();
if ($this->html) {
$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 if (in_array($type,array_keys($this->recordTypesTemplate))) {
$push_notifications_server = $this->getResellerProperty('push_notifications_server_private') or $this->getResellerProperty('push_notifications_server');
if ($type == "sip2sip" && $push_notifications_server) {
if (preg_match("/^(.*):(\d+);transport=(.*)$/", $push_notifications_server, $m)) {
$push_hostname = $m[1];
$push_port = $m[2];
$push_transport = $m[3];
if ($push_transport == "tls") {
$naptr_type = "_sips._tcp";
$naptr_s = "SIPS+D2T";
} else if ($push_transport == "tcp") {
$naptr_type = "_sip._tcp";
$naptr_s = "SIP+D2T";
} else {
$naptr_type = "_sip._udp";
$naptr_s = "SIP+D2U";
}
$this->recordTypesTemplate[$type]['records']['push_naptr'] =
array(
'name' => 'push',
'type' => 'NAPTR',
'priority' => '100',
'ttl' => '600',
'value' => sprintf('10 100 "s" "%s" "" %s.push', $naptr_s, $naptr_type)
);
$this->recordTypesTemplate[$type]['records']['push_srv'] =
array(
'name' => sprintf('%s.push', $naptr_type),
'type' => 'SRV',
'priority' => '100',
'ttl' => '600',
'value' => sprintf('100 %d %s', $push_port, $push_hostname)
);
}
}
foreach (array_values($this->recordTypesTemplate[$type]['records']) as $_records) {
$value_new='';
if (strlen($_records['value'])) {
if (preg_match("/^_sip/",$_records['name'])) {
if (!$value) {
$value=$this->getCustomerProperty('dns_records_last_sip_server');
if (!$value) {
$value = $this->getCustomerProperty('sip_proxy');
}
if (!value) {
$value = $this->SoapEngine->default_sip_proxy;
}
$save_new_value=false;
} else {
$save_new_value=true;
}
}
$els=explode("|",$_records['value']);
foreach ($els as $el) {
if (preg_match("/#VALUE#/",$el)) {
if ($value) {
$value_new=preg_replace("/#VALUE#/",$value,$el);
} else {
continue;
}
} else {
$value_new=$el;
}
break;
}
// save value if type sip server
if ($save_new_value && $_records['name'] && preg_match("/^_sip/",$_records['name'])) {
$_p = array(
array(
'name' => 'dns_records_last_sip_server',
'category' => 'web',
'value' => $value,
'permission' => 'customer'
)
);
$this->setCustomerProperties($_p);
}
}
if (!in_array($_records['type'],array_keys($this->recordTypes))) {
continue;
}
$record = array(
'name' => $_records['name'],
'zone' => trim($zone),
'type' => $_records['type'],
'value' => $value_new,
'owner' => intval($owner),
'ttl' => intval($_records['ttl']),
'priority' => intval($_records['priority'])
);
//print_r($record);
$function=array(
'commit' => array(
'name' => $this->addRecordFunction,
'parameters' => array($record),
'logs' => array(
'success' => sprintf('Dns %s record under %s has been added', $_records['type'], $zone)
)
)
);
$result = $this->SoapEngine->execute($function,$this->html);
if ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
if ($this->html) {
$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 {
if ($this->html) {
printf ("Error: Invalid or missing record type. ");
}
return false;
}
return true;
}
function getRecordKeys() {
// Filter
$filter = array(
'id' => intval($this->filters['id']),
'zone' => $this->filters['zone'],
'name' => $this->filters['name'],
'type' => $this->filters['type'],
'value' => $this->filters['value'],
'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('getRecords');
// Call function
$result = $this->SoapEngine->soapclient->getRecords($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->records as $record) {
$this->selectionKeys[]=array('id' => $record->id);
}
return true;
}
}
function showRecord($record) {
echo "Record";
printf("";
}
function getRecord($id) {
// Filter
if (!$id) {
print "Error in getRecord(): Missing record id";
return false;
}
$filter = array('id' => $id);
// 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);
$this->log_action($this->getRecordsFunction);
// Call function
$result = call_user_func_array(array($this->SoapEngine->soapclient,$this->getRecordsFunction),array($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 {
if ($result->records[0]){
return $result->records[0];
} else {
return false;
}
}
}
function updateRecord () {
//print "Updating record ...";
if (!$_REQUEST['id_filter']) return;
if (!$record = $this->getRecord(intval($_REQUEST['id_filter']))) {
return false;
}
$record_old=$record;
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') {
$record->$item = intval($_REQUEST[$var_name]);
} else {
$record->$item = trim($_REQUEST[$var_name]);
}
}
$function=array('commit' => array('name' => $this->updateRecordFunction,
'parameters' => array($record),
'logs' => array('success' => sprintf('Record %s has been updated',$_REQUEST['id_filter'])))
);
$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 _("Zone owner");
}
}
class FancyRecords extends DnsRecords
{
var $fancy = true;
var $addRecordFunction = 'addFancyRecord';
var $deleteRecordFunction = 'deleteFancyRecord';
var $updateRecordFunction = 'updateFancyRecord';
var $getRecordsFunction = 'getFancyRecords';
var $getRecordFunction = 'getFancyRecord';
var $recordTypesTemplate=array();
var $Fields=array(
'type' => array('type'=>'string'),
'value' => array('type'=>'string')
);
}
class EmailAliases extends FancyRecords
{
var $recordTypes=array('MBOXFW' => 'Email alias');
var $typeFilter='MBOXFW';
}
class UrlRedirect extends FancyRecords
{
var $recordTypes=array('URL' => 'URL forwarding');
var $typeFilter='URL';
}
class TrustedPeers extends Records
{
var $FieldsAdminOnly=array(
'msteams' => array('type'=>'boolean', 'name' => 'MS Teams'),
'prepaid' => array('type'=>'boolean'),
'tenant' => array('type'=>'string'),
'callLimit' => array('type'=>'integer', 'name' => 'Capacity'),
'blocked' => array('type'=>'integer')
);
var $Fields=array(
'description' => array('type'=>'string'),
'authToken' => array('type'=>'string', 'name' => 'Authentication token')
);
public function __construct($SoapEngine)
{
$this->filters = array('ip' => trim($_REQUEST['ip_filter']),
'tenant' => trim($_REQUEST['tenant_filter']),
'description' => trim($_REQUEST['description_filter']),
'msteams' => trim($_REQUEST['msteams_filter'])
);
parent::__construct($SoapEngine);
$this->sortElements=array(
'changeDate' => 'Change date',
'description' => 'Description',
'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'],
'tenant' => $this->filters['tenant'],
'msteams' => 1 == intval($this->filters['msteams'])
);
// 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
$this->log_action('getTrustedPeers');
$result = $this->SoapEngine->soapclient->getTrustedPeers($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 "
$this->rows records found
Id
| Owner |
Trusted peer |
Prepaid |
Capacity |
MS Teams |
Tenant |
Description |
Blocked |
Change date |
Actions |
";
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;
$delete_url = $this->url.sprintf("&service=%s&action=Delete&ip_filter=%s&msteams_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($peer->ip),
urlencode(intval($peer->msteams))
);
$update_url = $this->url.sprintf("&service=%s&ip_filter=%s&msteams_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($peer->ip),
urlencode($peer->msteams)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['ip_filter'] == $peer->ip) {
$delete_url .= "&confirm=1";
$actionText = "Confirm";
} else {
$actionText = "Delete";
}
if ($peer->msteams) {
$msteams = 'Yes';
} else {
$msteams = 'No';
}
if ($peer->prepaid) {
$prepaid = 'Yes';
} else {
$prepaid = 'No';
}
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($peer->reseller)
);
printf("
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
%s |
",
$index,
$_customer_url,
$peer->reseller,
$update_url,
$peer->ip,
$prepaid,
$peer->callLimit,
$msteams,
$peer->tenant,
$peer->description,
$peer->blocked,
$peer->changeDate,
$delete_url,
$actionText
);
$i++;
}
}
print " ";
if ($result->total == 1) {
$this->showRecord($peer);
}
$this->showPagination($maxrows);
return true;
}
}
function showRecord($peer) {
print "";
print "
";
printf ("";
print "
";
}
function showAddForm() {
//if ($this->selectionActive) return;
printf ("
|
";
}
function addRecord($dictionary=array()) {
if ($dictionary['ipaddress']) {
$ipaddress = $dictionary['ipaddress'];
} else {
$ipaddress = trim($_REQUEST['ipaddress']);
}
if ($dictionary['msteams']) {
$msteams = $dictionary['msteams'];
} else {
$msteams = trim($_REQUEST['msteams']);
}
$this->filters['msteams'] = $msteams;
if ($dictionary['description']) {
$description = $dictionary['description'];
} else {
$description = trim($_REQUEST['description']);
}
if ($dictionary['tenant']) {
$tenant = $dictionary['tenant'];
} else {
$tenant = trim($_REQUEST['tenant']);
}
if ($dictionary['callLimit']) {
$callLimit = $dictionary['callLimit'];
} else {
$callLimit = trim($_REQUEST['callLimit']);
}
if ($dictionary['owner']) {
$owner = $dictionary['owner'];
} else {
$owner = trim($_REQUEST['owner']);
}
list($customer,$reseller)=$this->customerFromLogin($dictionary);
if (!strlen($ipaddress)) {
printf ("Error: Missing IP or description. ");
return false;
}
$peer=array(
'ip' => $ipaddress,
'description' => $description,
'callLimit' => intval($callLimit),
'msteams' => 1 == $msteams,
'tenant' => $tenant,
'blocked' => 0,
'owner' => intval($_REQUEST['owner']),
'customer' => intval($customer),
'reseller' => intval($reseller)
);
$function=array('commit' => array('name' => 'addTrustedPeer',
'parameters' => array($peer),
'logs' => array('success' => sprintf('Trusted peer %s has been added',$ipaddress)))
);
return $this->SoapEngine->execute($function,$this->html);
}
function updateRecord() {
list($customer,$reseller)=$this->customerFromLogin($dictionary);
if (!strlen($this->filters['ip'])) {
print " Error: missing peer address. ";
return false;
}
$peer=array(
'ip' => $this->filters['ip'],
'description' => $_REQUEST['description_form'],
'authToken' => $_REQUEST['authToken_form'],
'tenant' => $_REQUEST['tenant_form'],
'callLimit' => intval($_REQUEST['callLimit_form']),
'prepaid' => 1 == $_REQUEST['prepaid_form'],
'blocked' => intval($_REQUEST['blocked_form']),
'msteams' => 1 == $_REQUEST['msteams_form'],
'customer' => intval($customer),
'reseller' => intval($reseller)
);
$function=array('commit' => array('name' => 'updateTrustedPeer',
'parameters' => array($peer),
'logs' => array('success' => sprintf('Trusted peer %s has been updated',$this->filters['ip'])))
);
return $this->SoapEngine->execute($function,$this->html);
}
function deleteRecord($dictionary=array()) {
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print " Please press on Confirm to confirm the delete. ";
return true;
}
if (!strlen($this->filters['ip'])) {
print " Error: missing IP address. ";
return false;
}
$function=array('commit' => array('name' => 'deleteTrustedPeer',
'parameters' => array($this->filters['ip']),
'logs' => array('success' => sprintf('Trusted peer %s has been deleted',$this->filters['ip'])))
);
unset($this->filters);
return $this->SoapEngine->execute($function,$this->html);
}
function showSeachFormCustom() {
if (intval($this->filters['msteams']) == 1) {
$checked_msteams = 'checked';
} else {
$checked_msteams = '';
}
printf (" Address ",$this->filters['ip']);
printf (" Description ",$this->filters['description']);
printf (" Tenant ",$this->filters['tenant']);
printf (" Blocked ",$this->filters['blocked']);
printf (" MS Teams ",$checked_msteams);
}
function showCustomerTextBox () {
print "Owner";
$this->showResellerForm('reseller');
print " ";
}
function showTextBeforeCustomerSelection() {
print "Owner";
}
function showCustomerForm($name='customer_filter') {
}
}
class Carriers extends Records
{
var $carriers=array();
var $Fields=array(
'id' => array('type'=>'integer',
'readonly' => true),
'name' => array('type'=>'string')
);
var $sortElements=array(
'changeDate' => 'Change date',
'name' => 'Carrier'
);
public function __construct($SoapEngine)
{
$this->filters = array(
'id' => trim($_REQUEST['id_filter']),
'name' => trim($_REQUEST['name_filter'])
);
parent::__construct($SoapEngine);
}
function showCustomerTextBox () {
print "Reseller";
print "";
$this->showResellerForm('reseller');
print "";
}
function listRecords() {
$this->showSeachForm();
// Insert credetials
$this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth);
// Filter
$filter=array(
'id' => intval($this->filters['id']),
'name' => $this->filters['name'],
'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
);
// Call function
$this->log_action('getCarriers');
$result = $this->SoapEngine->soapclient->getCarriers($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;
print "
$this->rows records found
";
print "
Id |
Owner |
Carrier |
Name |
Gateways |
Change date |
Actions |
";
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->carriers[$i]) break;
$carrier = $result->carriers[$i];
$index=$this->next+$i+1;
$_delete_url = $this->url.sprintf("&service=%s&action=Delete&id_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($carrier->id)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['id_filter'] == $carrier->id) {
$_delete_url .= "&confirm=1";
$actionText = "Confirm";
} else {
$actionText = "Delete";
}
$_url = $this->url.sprintf("&service=%s&id_filter=%s&reseller_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($carrier->id),
urlencode($carrier->reseller)
);
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($carrier->reseller)
);
$_gateway_url = $this->url.sprintf("&service=pstn_gateways@%s&carrier_id_filter=%d&reseller_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($carrier->id),
urlencode($carrier->reseller)
);
printf("
%s |
%s |
%s |
%s |
Gateways |
%s |
%s |
",
$index,
$_customer_url,
$carrier->reseller,
$_url,
$carrier->id,
$carrier->name,
$_gateway_url,
$carrier->changeDate,
$_delete_url,
$actionText
);
printf("
");
$i++;
}
}
print " ";
if ($this->rows == 1) {
$this->showRecord($carrier);
} else {
$this->showPagination($maxrows);
}
return true;
}
}
function showAddForm() {
//if ($this->selectionActive) return;
printf (" |
",
$_REQUEST[confirm_password_form]
);
}
}
}
}
if ($_REQUEST['notify']) $checked_notify='checked';
printf ("
",$checked_notify);
$this->printHiddenFormElements();
print " | ";
print "
";
}
function addRecord($dictionary=array(),$confirmPassword=false) {
if (!$this->checkRecord($dictionary)) {
return false;
}
foreach (array_keys($this->addFields) as $item) {
if ($dictionary[$item]) {
$customer[$item] = strip_tags(trim($dictionary[$item]));
} else {
$item_form = $item.'_form';
$customer[$item] = strip_tags(trim($_REQUEST[$item_form]));
}
}
if (!strlen($customer['username'])) $customer['username'] = trim($customer['firstName']).'.'.trim($customer['lastName'].$this->RandomNumber(5));
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';
if ($dictionary['reseller']) {
$customer['reseller']=intval($dictionary['reseller']);
} else if ($this->adminonly && $this->filters['reseller']) {
$customer['reseller']=intval($this->filters['reseller']);
}
$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'];
if ($customer['address'] != 'Unknown') {
$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->RandomString(6);
if (is_array($dictionary['properties'])) {
$customer['properties']=$dictionary['properties'];
} else {
$customer['properties']=array();
}
if ($this->hide_html) {
$logs = array();
} else {
$logs = array('success' => sprintf('Customer entry %s %s has been created',$customer['firstName'],$customer['lastName']));
}
$function=array('commit' => array('name' => 'addAccount',
'parameters' => array($customer),
'logs' => $logs
)
);
if ($result = $this->SoapEngine->execute($function,$this->html)) {
// We have succesfully added customer entry
$this->showAddForm=false;
if ($dictionary['notify'] || $_REQUEST['notify']) $this->notify($customer);
return $result;
} else {
return false;
}
}
function notify($customer) {
/*
must be supplied with an array:
$customer=array('firstName' => ''
'lastName' => '',
'email' => '',
'username' => '',
'password' => ''
);
*/
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 e-mail message is for your record. You have registered a login account at %s as follows:\n\n",$url).
sprintf("Username: %s\n",$customer['username']).
sprintf("Password: %s\n",$customer['password']).
"\n".
sprintf("The registration has been performed from the IP address %s.",$_SERVER['REMOTE_ADDR']).
"\n".
"\n".
sprintf("This message was sent in clear text over the Internet and it is advisable, in order to protect your account, to login and change your password displayed in this message. ").
"\n".
"\n".
"This is an automatic message, do not reply.\n";
$from = sprintf("From: %s",$this->support_email);
$subject = sprintf("Your 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']) {
$this->log_action('getResellers');
$result = $this->SoapEngine->soapclient->getResellers($Query);
} else {
$this->log_action('getCustomers');
$result = $this->SoapEngine->soapclient->getCustomers($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->accounts as $customer) {
$this->selectionKeys[]=$customer->id;
}
}
}
function getProperty($customer,$name) {
foreach ($customer->properties as $_property) {
if ($_property->name == $name) {
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
$this->log_action('getCustomers');
$result = $this->SoapEngine->soapclient->getCustomers($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 {
if (count($result->accounts) == 1) {
return $result->accounts[0]->id;
} else {
return false;
}
}
}
function getCustomer($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
$this->log_action('getCustomers');
$result = $this->SoapEngine->soapclient->getCustomers($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 {
if (count($result->accounts) == 1) {
return $result->accounts[0];
} else {
return false;
}
}
}
function setInitialCredits($credits=array()) {
$properties=array();
foreach (array_keys($credits) as $item) {
if ($this->allProperties[$item]['category'] != 'credit') continue;
$properties[] = array('name' => $item,
'value' => "$credits[$item]",
'category' => $this->allProperties[$item]['category'],
'permission' => $this->allProperties[$item]['permission']
);
}
return $properties;
}
function showVcard($vcardDictionary) {
#http://www.stab.nu/vcard/
# This file will return an vCard Version 3.0 Compliant file to the user. Observe that you should set up #
# your web-server with the correct MIME-type. The reason to use the \r\n as breakes is because it should be #
# more compatible with MS Outlook. All other, better coded, clients sholdnt have any problems with this. #
# #
# Version 1.0 (2003-08-29) #
# #
# Author: Alf Lovbo #
# #
# This document is released under the GNU General Public License. #
# #
#############################################################################################################
# #
# USAGE #
# ----- #
# The following variables can be used togheter with this document for accessing the functions supplied. All #
# of the functions listed below takes an value described by the comment after the |-symbol. #
# #
# $vcard_birtda | Birthday YYYY-MM-DD $vcard_f_name | Family name #
# $vcard_cellul | Cellular Phone Number $vcard_compan | Company Name #
# $vcard_h_addr | Street Address (home) $vcard_h_city | City (home) #
# $vcard_h_coun | Country (home) $vcard_h_fax | Fax (home) #
# $vcard_h_mail | E-mail (home) $vcard_h_phon | Phone (home) #
# $vcard_h_zip | Zip-code (home) $vcard_nickna | Nickname #
# $vcard_note | Note $vcard_s_name | Given name #
# $vcard_uri | Homepage, URL $vcard_w_addr | Street Address (work) #
# $vcard_w_city | City (work) $vcard_w_coun | Country (work) #
# $vcard_w_fax | Fax (work) $vcard_w_mail | E-mail (work) #
# $vcard_w_phon | Phone (work) $vcard_w_role | Function (work) #
# $vcard_w_titl | Title (work) $vcard_w_zip | Zip-code (work) #
# #
#############################################################################################################
# You dont need to change anything below this comment. #
#############################################################################################################
/*
$vcardDictionary=array(
"vcard_nickna" => $this->username,
"vcard_f_name" => $this->lastname,
"vcard_s_name" => $this->firstname,
"vcard_compan" => $this->organization,
"vcard_w_addr" => $this->address,
"vcard_w_zip" => $this->postcode,
"vcard_w_city" => $this->city,
"vcard_w_state" => $this->county,
"vcard_w_coun" => $this->country,
"vcard_w_mail" => $this->email,
"vcard_w_phon" => $this->tel,
"vcard_w_fax" => $this->fax,
"vcard_enum" => $this->enum,
"vcard_sip" => $this->sip,
"vcard_uri" => $this->web,
"vcard_cellul" => $this->mobile
);
*/
foreach (array_keys($vcardDictionary) as $field) {
$value=$vcardDictionary[$field];
${$field}=$value;
}
if ($vcard_w_state=="N/A") $vcard_w_state=" ";
$vcard_w_addr = preg_replace("/[\n|\r]/"," ",$vcard_w_addr);
$vcard_sortst = $vcard_f_name;
$vcard_tz = date("O");
$vcard_rev = date("Y-m-d");
$vcard = "BEGIN:VCARD\r\n";
$vcard .= "VERSION:3.0\r\n";
$vcard .= "CLASS:PUBLIC\r\n";
$vcard .= "PRODID:-//PHP vCard Class//NONSGML Version 1//SE\r\n";
$vcard .= "REV:" . $vcard_rev . "\r\n";
$vcard .= "TZ:" . $vcard_tz . "\r\n";
if ($vcard_f_name != ""){
if ($vcard_s_name != ""){
$vcard .= "FN:" . $vcard_s_name . " " . $vcard_f_name . "\r\n";
$vcard .= "N:" . $vcard_f_name . ";" . $vcard_s_name . "\r\n";
}
else {
$vcard .= "FN:" . $vcard_f_name . "\r\n";
$vcard .= "N:" . $vcard_f_name . "\r\n";
}
}
elseif ($vcard_s_name != ""){
$vcard .= "FN:" . $vcard_s_name . "\r\n";
$vcard .= "N:" . $vcard_s_name . "\r\n";
}
if ($vcard_nickna != ""){
$vcard .= "NICKNAME:" . $vcard_nickna . "\r\n";
}
if ($vcard_compan != ""){
$vcard .= "ORG:" . $vcard_compan . "\r\n";
$vcard .= "SORTSTRING:" . $vcard_compan . "\r\n";
}
elseif ($vcard_f_name != ""){
$vcard .= "SORTSTRING:" . $vcard_f_name . "\r\n";
}
if ($vcard_birtda != ""){
$vcard .= "BDAY:" . $vcard_birtda . "\r\n";
}
if ($vcard_w_role != ""){
$vcard .= "ROLE:" . $vcard_w_role . "\r\n";
}
if ($vcard_w_titl != ""){
$vcard .= "TITLE:" . $vcard_w_titl . "\r\n";
}
if ($vcard_note != ""){
$vcard .= "NOTE:" . $vcard_note . "\r\n";
}
if ($vcard_w_mail != ""){
$item++;
$vcard .= "item$item.EMAIL;TYPE=INTERNET;type=PREF:" . $vcard_w_mail . "\r\n";
$vcard .= "item$item.X-ABLabel:email" . "\r\n";
}
if ($vcard_cellul != ""){
$vcard .= "TEL;TYPE=VOICE,CELL:" . $vcard_cellul . "\r\n";
}
if ($vcard_enum != ""){
$item++;
$vcard .= "item$item.TEL:" . $vcard_enum . "\r\n";
$vcard .= "item$item.X-ABLabel:ENUM" . "\r\n";
}
if ($vcard_sip != ""){
$item++;
$vcard .= "item$item.TEL;TYPE=INTERNET:" . $vcard_sip . "\r\n";
$vcard .= "item$item.X-ABLabel:SIP" . "\r\n";
}
if ($vcard_w_fax != ""){
$vcard .= "TEL;TYPE=FAX,WORK:" . $vcard_w_fax . "\r\n";
}
if ($vcard_w_phon != ""){
$vcard .= "TEL;TYPE=VOICE,WORK:" . $vcard_w_phon . "\r\n";
}
if ($vcard_uri != ""){
$vcard .= "URL:" . $vcard_uri . "\r\n";
}
if ($vcard_addr != ""){
$vcard .= "ADR;TYPE=HOME,POSTAL,PARCEL:" . $vcard_addr . "\r\n";
}
if ($vcard_labl != ""){
$vcard .= "LABEL;TYPE=DOM,HOME,POSTAL,PARCEL:" . $vcard_labl . "\r\n";
}
$vcard_addr = "";
$vcard_labl = "";
if ($vcard_w_addr != ""){
$vcard_addr = ";;" . $vcard_w_addr;
$vcard_labl = $vcard_w_addr;
}
if ($vcard_w_city != ""){
if ($vcard_addr != ""){
$vcard_addr .= ";" . $vcard_w_city;
}
else{
$vcard_addr .= ";;;" . $vcard_w_city;
}
if ($vcard_labl != ""){
$vcard_labl .= "\\r\\n" . $vcard_w_city;
}
else {
$vcard_labl = $vcard_w_city;
}
}
if ($vcard_w_state != ""){
if ($vcard_addr != ""){
$vcard_addr .= ";" . $vcard_w_state;
}
else{
$vcard_addr .= ";;;" . $vcard_w_state;
}
if ($vcard_labl != ""){
$vcard_labl .= "\\r\\n" . $vcard_w_state;
}
else {
$vcard_labl = $vcard_w_state;
}
}
if ($vcard_w_zip != ""){
if ($vcard_addr != ""){
$vcard_addr .= ";" . $vcard_w_zip;
}
else{
$vcard_addr .= ";;;;" . $vcard_w_zip;
}
if ($vcard_labl != ""){
$vcard_labl .= "\\r\\n" . $vcard_w_zip;
}
else {
$vcard_labl = $vcard_w_zip;
}
}
if ($vcard_w_coun != ""){
if ($vcard_addr != ""){
$vcard_addr .= ";" . $vcard_w_coun;
}
else{
$vcard_addr .= ";;;;;" . $vcard_w_coun;
}
if ($vcard_labl != ""){
$vcard_labl .= "\\r\\n" . $vcard_w_coun;
}
else {
$vcard_labl = $vcard_w_coun;
}
}
if ($vcard_addr != ""){
$vcard .= "ADR;TYPE=WORK,POSTAL,PARCEL:" . $vcard_addr . "\r\n";
}
if ($vcard_labl != ""){
$vcard .= "LABEL;TYPE=DOM,WORK,POSTAL,PARCEL:" . $vcard_labl . "\r\n";
}
if ($vcard_categ != ""){
$vcard .= "CATEGORY:" . $vcard_categ . "\r\n";
}
$vcard .= "END:VCARD\n";
return $vcard;
}
}
class Presence {
function __construct($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 ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf ("Error: %s (%s): %s",$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 ((new PEAR)->isError($result)) {
$error_msg = $result->getMessage();
$error_fault= $result->getFault();
$error_code = $result->getCode();
printf (" Error: %s (%s): %s",$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;
var $default_ip_access_list = '';
var $default_call_limit = '';
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();
print_r($this->record_generators[$generatorId]['sip_engine']);
if ($this->soapEngines[$this->record_generators[$generatorId]['sip_engine']]['ip_access_list']){
$this->default_ip_access_list = $this->soapEngines[$this->record_generators[$generatorId]['sip_engine']]['ip_access_list'];
}
if ($this->soapEngines[$this->record_generators[$generatorId]['sip_engine']]['call_limit']){
$this->default_call_limit = $this->soapEngines[$this->record_generators[$generatorId]['sip_engine']]['call_limit'];
}
}
} else {
printf ("Error: sip_engine %s does not exist",$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 ("Error: enum_engine %s does not exist",$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 ("Error: customer_engine %s does not exist",$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 "
";
print _("ENUM number generator");
print "
|
|
|
";
print "
";
print _("ENUM range");
print "
| ";
/*
if ($_REQUEST['range']) {
$selected_range[$_REQUEST['range']]='selected';
} else if ($_last_range=$this->enumRecords->getCustomerProperty('enum_generator_range')) {
$selected_range[$_last_range] = 'selected';
}
if (is_array($this->enumRecords->ranges)) {
print "";
}
*/
list($_range['prefix'],$_range['tld'])=explode("@",$_REQUEST['range']);
printf ("+%s under %s",$_REQUEST['range'],$_range['prefix'],$_range['tld']);
print " |
|
";
print "
";
print "";
print _("ENUM mapping template");
print "";
print " |
";
if ($_REQUEST['add_prefix']) {
$add_prefix=$_REQUEST['add_prefix'];
} else {
$add_prefix = $this->sipRecords->getCustomerProperty('enum_generator_add_prefix');
}
print "
";
print _("Add prefix after range:");
printf ("
|
|
|
",$add_prefix);
if ($_REQUEST['number_length']) {
$number_length=$_REQUEST['number_length'];
} else {
$number_length = $this->sipRecords->getCustomerProperty('enum_generator_number_length');
}
print "
";
print _("Number length:");
printf ("
|
|
",$number_length);
print _("SIP domain:");
print "
|
";
if (count($this->sipRecords->allowedDomains) > 0) {
if ($_REQUEST['domain']) {
$selected_domain[$_REQUEST['domain']]='selected';
} else if ($_last_domain=$this->sipRecords->getCustomerProperty('enum_generator_sip_domain')) {
$selected_domain[$_last_domain] = 'selected';
}
print "
";
} else {
print "";
}
print "
|
";
print "
|
";
if ($_REQUEST['strip_digits']) {
$strip_digits=$_REQUEST['strip_digits'];
} else if ($strip_digits = $this->sipRecords->getCustomerProperty('enum_generator_strip_digits')) {
} else {
$strip_digits=0;
}
print "
";
print _("Strip digits:");
printf ("
|
|
",$strip_digits);
print "
";
print _("Owner:");
printf ("
|
| ",$_REQUEST['owner']);
print "
|
";
print "
";
print _("Info:");
printf ("
|
| ",$_REQUEST['info']);
print "
|
";
if (count($this->sipRecords->allowedDomains) > 0) {
print "
|
";
print "
";
print "";
print _("SIP account template");
print "";
print " |
";
print "
";
print _("Create SIP records");
if ($_REQUEST['create_sip']) {
$checked_create_sip='checked';
} else {
$checked_create_sip='';
}
printf ("
|
|
",$checked_create_sip);
if ($_REQUEST['pstn']) {
$checked_pstn='checked';
} else {
$checked_pstn='';
}
print "
";
print _("PSTN access");
printf ("
|
|
",$checked_pstn);
if ($_REQUEST['prepaid']) {
$checked_prepaid='checked';
} else {
$checked_prepaid='';
}
print "
";
print _("Prepaid");
printf ("
|
|
",$checked_prepaid);
if ($_REQUEST['rpid_strip_digits']) {
$rpid_strip_digits=$_REQUEST['rpid_strip_digits'];
} else if ($rpid_strip_digits = $this->sipRecords->getCustomerProperty('enum_generator_rpid_strip_digits')) {
} else {
$rpid_strip_digits=0;
}
print "
";
print _("Strip digits from Caller-ID");
printf ("
|
|
",$rpid_strip_digits);
print "
";
print _("Quota");
printf ("
|
|
",$_REQUEST['quota']);
print "
";
print _("Password");
printf ("
|
|
",$_REQUEST['password']);
if (isset($_REQUEST['call_limit'])) {
$call_limit=$_REQUEST['call_limit'];
} else {
$call_limit = $this->sipRecords->getCustomerProperty('enum_generator_call_limit');
}
if (!strlen($call_limit) && strlen($this->default_call_limit)) {
$call_limit = $this->default_call_limit;
}
print "
";
print _("PSTN call limit");
printf ("
|
|
",$call_limit);
if (isset($_REQUEST['ip_access_list'])) {
$ip_access_list=$_REQUEST['ip_access_list'];
} else {
$ip_access_list = $this->sipRecords->getCustomerProperty('enum_generator_ip_access_list');
}
if (!$ip_access_list && $this->default_ip_access_list) {
$ip_access_list = $this->default_ip_access_list;
}
print "
";
print _("IP access list");
printf ("
|
|
",$ip_access_list);
}
if ($_REQUEST['nr_records']) {
$nr_records=$_REQUEST['nr_records'];
} else {
$nr_records=1;
}
print "
|
";
print "
";
print "";
print "";
printf (" |
Number of records:
",$nr_records);
print " | ";
print "
|
";
print "
";
print _("Existing records will not be overwritten. ");
print " |
";
$this->printHiddenFormElements();
print "
|
";
}
function checkGenerateRequest() {
// check number of records
$this->template['create_sip']=trim($_REQUEST['create_sip']);
$ip_access_list = preg_replace("/\s+/"," ", $_REQUEST['ip_access_list']);
if (strlen($ip_access_list) and !check_ip_access_list(trim($ip_access_list), true)) {
printf ("Error: IP access lists must be a space separated list of IP network/mask, example: 10.0.20.40/24");
return false;
}
$this->template['ip_access_list'] = trim($ip_access_list);
if (strlen($_REQUEST['call_limit']) && !is_numeric($_REQUEST['call_limit'])) {
printf ("Error: PSTN call limit must be numeric");
return false;
}
$this->template['call_limit']=$_REQUEST['call_limit'];
$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 ("Error: number of records must be a number between 1 and %d",$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 ("Error: number length must be a number between 4 and 15",$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 ("Error: strip digits + 3 must be smaller then %d",$number_length);
return false;
}
$this->template['strip_digits'] = $strip_digits;
// sip domain
$domain=trim($_REQUEST['domain']);
if (!strlen($domain)) {
print "Error: SIP domain is missing";
return false;
}
$this->template['domain'] = $domain;
$add_prefix=trim($_REQUEST['add_prefix']);
if (strlen($add_prefix) && !is_numeric($add_prefix)) {
print "Error: Add prefix must be numeric";
return false;
}
$this->template['add_prefix'] = $add_prefix;
$owner=trim($_REQUEST['owner']);
if (strlen($owner) && !is_numeric($owner)) {
print "Error: Owner must be an integer";
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 ("Error: Insufficient numbers in range, requested = %d, available = %d",$this->template['nr_records'],$this->template['maxNumbers']);
return false;
}
return true;
}
function generateRecords() {
print "";
if (!$this->checkGenerateRequest()) {
return false;
}
print " Generating records
";
$_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'
),
array('name' => 'enum_generator_call_limit',
'category' => 'web',
'value' => strval($this->template['call_limit']),
'permission' => 'customer'
),
array('name' => 'enum_generator_ip_access_list',
'category' => 'web',
'value' => strval($this->template['ip_access_list']),
'permission' => 'customer'
)
);
$this->enumRecords->setCustomerProperties($_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 ("Error: cannot retrieve customer information for owner %d",$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 "- ";
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();
printf ('and sip account %s@%s ',$username,$this->template['domain']);
$ip_access_list = check_ip_access_list($this->template['ip_access_list']);
$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'],
'pstn' => $this->template['pstn'],
'ip_access_list' => $ip_access_list,
'call_limit' => $this->template['call_limit']
);
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']) {
$strip_rpid=intval($this->template['rpid_strip_digits']);
if ($strip_rpid && strlen($number) > $strip_rpid) {
$sipAccount['rpid']=substr($number,intval($this->template['rpid_strip_digits']));
} else {
$sipAccount['rpid']=$number;
}
}
} else {
unset($sipAccount);
}
dprint_r($sipAccount);
if (is_array($enumMapping)) $this->enumRecords->addRecord($enumMapping);
if (is_array($sipAccount)) $this->sipRecords->addRecord($sipAccount);
$i++;
}
print "
";
return true;
}
function printHiddenFormElements () {
printf("",$this->generatorId);
if ($this->adminonly) {
printf("",$this->adminonly);
}
if ($this->template['customer']) {
printf("",$this->template['customer']);
}
if ($this->template['reseller']) {
printf("",$this->template['reseller']);
}
foreach (array_keys($this->EnumSoapEngine->extraFormElements) as $element) {
if (!strlen($this->EnumSoapEngine->extraFormElements[$element])) continue;
printf ("\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;
var $sub_action_parameter_size = 35;
var $html = true;
- function __construct($SoapEngine, $login_credentials) {
+ function __construct($SoapEngine, $login_credentials)
+ {
$this->SoapEngine = $SoapEngine;
$this->login_credentials = $login_credentials;
$this->version = $this->SoapEngine->version;
$this->adminonly = $this->SoapEngine->adminonly;
}
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);
}
+ 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;
+ }
+
function execute($selectionKeys, $action, $sub_action_parameter) {
}
function showActionsForm($filters,$sorting,$hideParameter=false) {
if (!count($this->actions)) return;
printf ("",$_SERVER['PHP_SELF']);
print "
";
print "
";
if ($this->adminonly) {
print "
adminonly>
";
}
print " ";
if (!$hideParameter) {
printf ("
",$this->sub_action_parameter_size);
}
print "
";
print " Maximum of 500 records
";
foreach (array_keys($filters) as $_filter) {
printf (" \n", $_filter,$filters[$_filter]);
}
foreach (array_keys($sorting) as $_sorting) {
printf (" \n", $_sorting,$sorting[$_sorting]);
}
printf(" ",$this->SoapEngine->service);
foreach (array_keys($this->SoapEngine->extraFormElements) as $element) {
if (!strlen($this->SoapEngine->extraFormElements[$element])) continue;
printf (" \n",$element,$this->SoapEngine->extraFormElements[$element]);
}
print "
";
}
}
require_once 'NGNPro/Actions/SipAccounts.php';
require_once 'NGNPro/Actions/SipAliases.php';
require_once 'NGNPro/Actions/EnumMappings.php';
require_once 'NGNPro/Actions/DnsRecords.php';
require_once 'NGNPro/Actions/DnsZones.php';
require_once 'NGNPro/Actions/Customers.php';
function check_ip_access_list($acl_string, $check=false) {
$list=explode(" ",$acl_string);
$ip_access_list = array();
foreach ($list as $el) {
$els = explode("/",$el);
if (count($els) != 2) {
if ($check) {
return false;
} else {
continue;
}
}
list($ip,$mask) = $els;
if ($mask <0 or $mask > 32) {
if ($check) {
return false;
} else {
continue;
}
}
if (!preg_match("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/",$ip)) {
if ($check) {
return false;
} else {
continue;
}
}
$ip_access_list[]=array('ip'=>$ip, 'mask'=>intval($mask));
}
if ($check) {
return true;
} else {
return $ip_access_list;
}
}
function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
?>
| |