diff --git a/library/NGNPro/Records/SipAccounts.php b/library/NGNPro/Records/SipAccounts.php index 8d190e8..d015dee 100644 --- a/library/NGNPro/Records/SipAccounts.php +++ b/library/NGNPro/Records/SipAccounts.php @@ -1,1267 +1,1278 @@ '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

"; 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) + $deleteUrl = array( + 'service' => $this->SoapEngine->service, + 'action' => 'Delete', + 'key' => $account->id->username ); if (!$this->filters['domain']) { - $_url .= sprintf("&domain_filter=%s",urlencode($account->id->domain)); + $deleteUrl['domain_filter'] = $account->id->domain; } if (!$this->filters['username']) { - $_url .= sprintf("&username_filter=%s",urlencode($account->id->username)); + $deleteUrl['username_filter'] = $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"; + $deleteUrl['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); + $settingsUrl = array( + 'account' => sprintf('%s@%s', $account->id->username, $account->id->domain), + 'sip_engine' => $this->SoapEngine->sip_engine + ); if ($this->adminonly) { - $url .= sprintf('&reseller=%s',$reseller_sip_settings_page); - $url .= sprintf('&adminonly=%s',$this->adminonly); + $settingsUrl['reseller'] = $reseller_sip_settings_page; + $settingsUrl['adminonly'] = $this->adminonly; } else { - if ($account->reseller == $this->reseller) $url .= sprintf('&reseller=%s',$reseller_sip_settings_page); + if ($account->reseller == $this->reseller) $settingsUrl['reseller'] = $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])); + $settingsUrl[$element] = $this->SoapEngine->extraFormElements[$elememt]; } - $sip_account=sprintf(" - - %s@%s",$url, $account->id->username, $account->id->domain); + $sip_account = sprintf( + " + %s@%s", + $this->sip_settings_page, + http_build_query($settingsUrl), + $account->id->username, + $account->id->domain + ); } else { - $sip_account=sprintf("%s@%s",$account->id->username, $account->id->domain); + $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 + $ownersUrlData = array( + 'service' => sprintf('customers@%s', $this->SoapEngine->soapEngine), + 'customer_filter' => $account->owner + ); + $_owner_url = sprintf( + '%s', + $this->url, + http_build_query($ownersUrlData), + $account->owner ); } else { $_owner_url=''; } - $prepaid_account=sprintf("%s@%s",$account->id->username, $account->id->domain); + $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(" - - - - - - - - - - - - - - ", - $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 + printf( + ' + + + + + + + + + + + + + + ', + $index, + $sip_account, + $account->firstName, + $account->lastName, + $account->email, + $account->email, + $account->timezone, + $callLimit, + $account->quota, + $_prepaid_balance[$prepaid_account], + $_owner_url, + $account->changeDate, + $this->url.'&'.$this->addFiltersToURL().'&'.http_build_query($deleteUrl), + $actionText ); $i++; } } print "
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
%s%s%s %s%s%s%s%s%s%s%s%s
%s%s%s %s%s%s%s%s%s%s%s%s
"; $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 ("
",$_SERVER['PHP_SELF']); print "
"; print " "; if ($_REQUEST['account']) { $_account=$_REQUEST['account']; } else { $_account=$this->getCustomerProperty('sip_accounts_last_username'); } printf ("
Account
",$_account); if ($_REQUEST['domain']) { $_domain=$_REQUEST['domain']; $selected_domain[$_REQUEST['domain']]='selected'; } else if ($this->filters['domain']) { $_domain=$this->filters['domain']; $selected_domain[$this->filters['domain']]='selected'; } else if ($_domain=$this->getCustomerProperty('sip_accounts_last_domain')) { $selected_domain[$_domain]='selected'; } if (count($this->allowedDomains) > 0) { print "@"; } else { printf("", $_domain); } if ($_REQUEST['quota']) { $_quota = $_REQUEST['quota']; } else { $_quota = $this->getCustomerProperty('sip_accounts_last_quota'); } if (!$_quota) $_quota=''; if ($_prepaid = $this->getCustomerProperty('sip_accounts_last_prepaid')) { $checked_prepaid='checked'; } else { $checked_prepaid=''; } if ($_pstn=$this->getCustomerProperty('sip_accounts_last_pstn')) { $checked_pstn='checked'; } else { $checked_pstn=''; } printf ("
Password
",$_REQUEST['password']); printf ("
Name
",$_REQUEST['fullname']); printf ("
Email
",$_REQUEST['email']); printf ("
Owner
",$_REQUEST['owner']); if ($this->getResellerProperty('pstn_access')) { printf (" PSTN ",$checked_pstn); printf ("
Quota
",$_quota); if ($this->prepaidChangesAllowed()) { printf (" Prepaid ",$checked_prepaid); } else { printf (" Prepaid "); } } $this->printHiddenFormElements(); print "
"; } 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 "

"; print _("Login account reminder"); print "

"; print _("

Fill in the e-mail address used during the registration of the SIP account:

"); printf( ""; if (count($accounts) > 1 || $_REQUEST['sip_filter']) { print "

"; print _("Warning"); print " "; print _("More than one account uses this email address. If you wish to receive the password for a particular account fill in the SIP account below, default it has been send it to the first 5 accounts found"); print "
"; printf( "", htmlspecialchars($_REQUEST['sip_filter']) ); } print "
"; } function showPasswordReminderUpdateFormEncrypted($id, $account) { if ($account) { print "

"; print _("Update passwords"); print ""; print " (for "; print $account; print ")

"; print _("

Please choose new passwords for your account, if you leave them empty no change will be performed

"); print "
"; print "
"; print "
"; print ""; print "
"; print ""; print ""; print "
"; print "
"; print ""; print "
"; print ""; print ""; print "
"; print "
"; print "
"; } } function showPasswordReminderFormEncrypted($accounts = array()) { print "

"; print _("Sip Account Reminder/Password Reset"); print "

"; //print _("

Please fill in the SIP account and e-mail address used during the registration of the SIP account to receive a login reminder and a possiblity to reset your passwords.

"); if (count($accounts) < 1 && $_REQUEST['sip_filter'] && $_REQUEST['email_filter']) { print "
"; print _("Error"); print "
"; print _("The email adress does not match email address in the SIP account, or the SIP account does not exist."); print "
"; print _("An email has not been sent."); print "
"; } elseif (count($accounts) < 1 && $_REQUEST['email_filter']) { print "
"; print _("Error"); print ": "; print _("The email adress does not match the email address in any SIP account."); print "
"; print _("An email has not been sent."); print "
"; } print " "; print ""; print ""; 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"); } }