diff --git a/library/ngnpro_client.php b/library/ngnpro_client.php index 3a3aa01..382b350 100644 --- a/library/ngnpro_client.php +++ b/library/ngnpro_client.php @@ -1,16125 +1,16161 @@ SoapEngine() function if ($adminonly) { $login_credentials=array( 'login_type' => 'admin', 'reseller' => $reseller, 'customer' => $customer, 'extra_form_elements' => array() ); } else { $login_credentials=array( 'login_type' => 'reseller', 'soap_username' => $soapUsername, 'soap_password' => $soapPassword, 'reseller' => $reseller, 'customer' => $customer, 'extra_form_elements' => array() ); } // login_credentials can overwite SoapEngine->ports $login_credentials['ports']['customers'] = array( 'records_class' => 'Customers', 'name' => 'Login accounts', 'soap_class' => 'WebService_NGNPro_CustomerPort', 'category' => 'general', 'description' => 'Manage login accounts, customer information and properties. Customer id can be assigned to entities like SIP domains and ENUM ranges. Use _ or % to match one or more characters. ' ); require_once("ngnpro_client.phtml"); require("/etc/cdrtool/ngnpro_engines.inc"); $extraFormElements=array(); //////////////////////////////// // How to create a SIP record // //////////////////////////////// $sip_engine = 'sip_accounts@engine'; $this->SipSoapEngine = new SoapEngine($sip_engine,$soapEngines,$login_credentials); $_sip_class = $this->SipSoapEngine->records_class; $this->sipRecords = new $_sip_class($this->SipSoapEngine); $sipAccount = array('account' => 'user@example.com', 'quota' => $quota, 'prepaid' => $prepaid, 'password' => $password, 'pstn' => true, 'owner' => $owner, 'customer' => $customer, 'reseller' => $reseller ); $this->sipRecords->addRecord($sipAccount); //////////////////////////////// // How to create a SIP domain // //////////////////////////////// $sip_engine = 'sip_accounts@engine'; $this->SipSoapEngine = new SoapEngine($sip_engine,$soapEngines,$login_credentials); $_sip_class = $this->SipSoapEngine->records_class; $this->sipRecords = new $_sip_class($this->SipSoapEngine); $sipDomain = array('domain' => 'example.com', 'customer' => $customer, 'reseller' => $reseller ); $this->sipRecords->addRecord($sipDomain); /////////////////////////////// // How to create a SIP alias // /////////////////////////////// $sip_engine = 'sip_aliases@engine'; $this->SipSoapEngine = new SoapEngine($sip_engine,$soapEngines,$login_credentials); $_sip_class = $this->SipSoapEngine->records_class; $this->sipRecords = new $_sip_class($this->SipSoapEngine); $sipAlias = array('alias' => 'user@example1.com', 'target' => 'user@example2.com', 'owner' => $owner, 'customer' => $customer, 'reseller' => $reseller ); $this->sipRecords->addRecord($sipAlias); /////////////////////////////////// // How to create an ENUM mapping // /////////////////////////////////// $enum_engine = 'enum_numbers@engine'; $this->EnumSoapEngine = new SoapEngine($enum_engine,$soapEngines,$login_credentials); $_enum_class = $this->EnumSoapEngine->records_class; $this->enumRecords = new $_enum_class($this->EnumSoapEngine); $enumMapping = array('tld' => $tld, 'number' => $number, 'type' => 'sip', 'mapto' => 'sip:user@example.com', 'owner' => $owner, 'customer' => $customer, 'reseller' => $reseller ); $this->enumRecords->addRecord($enumMapping); */ class SoapEngine { public $version = 1; public $adminonly = 0; public $customer = 0; public $reseller = 0; public $login_type = 'reseller'; public $allowedPorts = array(); public $timeout = 5; public $exception = array(); public $result = false; public $extraFormElements = array(); public $default_enum_tld = 'e164.arpa'; public $default_timezone = 'Europe/Amsterdam'; public $default_sip_proxy = ""; public $default_msrp_relay = ""; public $ports = array( 'sip_accounts' => array( 'records_class' => 'SipAccounts', 'name' => 'SIP accounts', 'soap_class' => 'WebService_NGNPro_SipPort', 'category' => 'sip', 'description' => 'Manage SIP accounts and their settings. Click on the SIP account to access the settings page. Use _ or % to match one or more characters. ', ), 'customers' => array( 'records_class' => 'Customers', 'name' => 'Owner Accounts', 'soap_class' => 'WebService_NGNPro_CustomerPort', 'category' => 'general', 'description' => 'Manage accounts with address information and other properties. SIP domains and ENUM ranges can be assigned to accounts. Use _ or % to match one or more characters. ' ), 'sip_domains' => array( 'records_class' => 'SipDomains', 'name' => 'SIP domains', 'soap_class' => 'WebService_NGNPro_SipPort', 'category' => 'sip', 'description' => 'Manage SIP domains (e.g example.com) served by the SIP Proxy. Use _ or % to match one or more characters. ' ), 'trusted_peers' => array( 'records_class' => 'TrustedPeers', 'name' => 'Trusted peers', 'soap_class' => 'WebService_NGNPro_SipPort', 'category' => 'sip', 'description' => 'Manage trusted parties that are allowed to route sessions through the SIP proxy without digest authentication. ', 'resellers_only'=> true ), 'enum_numbers' => array( 'records_class' => 'EnumMappings', 'name' => 'ENUM numbers', 'soap_class' => 'WebService_NGNPro_EnumPort', 'category' => 'dns', 'description' => 'Manage E164 numbers used for incoming calls and their mappings (e.g. +31123456789 map to sip:user@example.com). Use _ or % to match one or more characters. ' ), 'enum_ranges' => array( 'records_class' => 'EnumRanges', 'name' => 'ENUM ranges', 'soap_class' => 'WebService_NGNPro_EnumPort', 'category' => 'dns', 'description' => 'Manage E164 number ranges that hold individual phone numbers. Use _ or % to match one or more characters. ' ), 'dns_zones' => array( 'records_class' => 'DnsZones', 'name' => 'DNS zones', 'soap_class' => 'WebService_NGNPro_DnsPort', 'category' => 'dns', 'description' => 'Manage DNS zones. Use _ or % to match one or more characters. ' ), 'dns_records' => array( 'records_class' => 'DnsRecords', 'name' => 'DNS records', 'soap_class' => 'WebService_NGNPro_DnsPort', 'category' => 'dns', 'description' => 'Manage DNS records. Use _ or % to match one or more characters. ' ), 'pstn_carriers' => array( 'records_class' => 'Carriers', 'name' => 'PSTN carriers', 'soap_class' => 'WebService_NGNPro_SipPort', 'category' => 'pstn', 'description' => 'Manage outbound carriers for PSTN traffic. Click on Carier to edit its attributes. ', 'resellers_only'=> true ), 'pstn_gateways' => array( 'records_class' => 'Gateways', 'name' => 'PSTN gateways', 'soap_class' => 'WebService_NGNPro_SipPort', 'category' => 'pstn', 'description' => 'Manage outbound PSTN gateways. Click on Gateway to edit its attributes. ', 'resellers_only'=> true ), 'pstn_routes' => array( 'records_class' => 'Routes', 'name' => 'PSTN routes', 'soap_class' => 'WebService_NGNPro_SipPort', 'category' => 'pstn', 'description' => 'Manage outbound PSTN routes. A prefix must be formated as 00+E164, an empty prefix matches all routes. ', 'resellers_only'=> true ), 'gateway_rules' => array( 'records_class' => 'GatewayRules', 'name' => 'PSTN rules', 'soap_class' => 'WebService_NGNPro_SipPort', 'category' => 'pstn', 'description' => 'Manage translation rules for PSTN gateways. Rules are applied against 00+E164 prefix. Click on Rule to edit its attributes. ', 'resellers_only'=> true ), 'email_aliases' => array( 'records_class' => 'EmailAliases', 'name' => 'Email aliases', 'soap_class' => 'WebService_NGNPro_DnsPort', 'category' => 'dns', 'description' => 'Manage email aliases. Use _ or % to match one or more characters. ' ), 'url_redirect' => array( 'records_class' => 'UrlRedirect', 'name' => 'URL redirect', 'soap_class' => 'WebService_NGNPro_DnsPort', 'category' => 'dns', 'description' => 'Manage WEB URL redirections. Use _ or % to match one or more characters. ' ), 'sip_aliases' => array( 'records_class' => 'SipAliases', 'name' => 'SIP aliases', 'soap_class' => 'WebService_NGNPro_SipPort', 'category' => 'sip', 'description' => 'Manage redirections for SIP addresses e.g. redirect user1@example1.com (alias) to user2@example2.com (target). Use _ or % to match one or more characters. ' ) ); /** * service is port@engine where: * * - port is an available NGNPro service * - engine is a connection to an NGNPro server * * - soapEngines is an array of NGNPro connections and * settings belonging to them: * * $soapEngines = array( * 'mdns' => array( * 'name' => 'Managed DNS', * 'username' => 'soapadmin', * 'password' => 'passwd', * 'url' => 'http://example.com:9200/' * ) * ); */ public function __construct($service, $soapEngines, $login_credentials = array()) { $this->login_credentials = &$login_credentials; if (is_array($this->login_credentials['ports'])) { $_ports = array(); foreach (array_keys($this->ports) as $_key) { if (in_array($_key, array_keys($this->login_credentials['ports']))) { if (strlen($this->login_credentials['ports'][$_key]['records_class'])) { $_ports[$_key]['records_class'] = $this->login_credentials['ports'][$_key]['records_class']; } else { $_ports[$_key]['records_class'] = $this->ports[$_key]['records_class']; } if (strlen($this->login_credentials['ports'][$_key]['soap_class'])) { $_ports[$_key]['soap_class'] = $this->login_credentials['ports'][$_key]['soap_class']; } else { $_ports[$_key]['soap_class'] = $this->ports[$_key]['soap_class']; } if (strlen($this->login_credentials['ports'][$_key]['name'])) { $_ports[$_key]['name'] = $this->login_credentials['ports'][$_key]['name']; } else { $_ports[$_key]['name'] = $this->ports[$_key]['name']; } if (strlen($this->login_credentials['ports'][$_key]['description'])) { $_ports[$_key]['description'] = $this->login_credentials['ports'][$_key]['description']; } else { $_ports[$_key]['description'] = $this->ports[$_key]['description']; } } else { $_ports[$_key] = $this->ports[$_key]; } } $this->ports = $_ports; } //dprint_r($this->login_credentials); if ($this->login_credentials['login_type'] == 'admin') $this->adminonly = 1; if (strlen($this->login_credentials['soap_filter'])) { $this->soapEngines = $this->getSoapEngineAllowed($soapEngines, $this->login_credentials['soap_filter']); } else { $this->soapEngines = $soapEngines; } if (is_array($this->soapEngines)) { $_engines = array_keys($this->soapEngines); if (!$service) { // use first engine available if (is_array($this->allowedPorts) && count($this->allowedPorts[$_engines[0]]) > 0) { $_ports = $this->allowedPorts[$_engines[0]]; } else { $_ports = array_keys($this->ports); } // default service is: $service = $_ports[0].'@'.$_engines[0]; } if (is_array($this->login_credentials['extra_form_elements'])) { $this->extraFormElements = $this->login_credentials['extra_form_elements']; } $this->service = $service; $_els = explode('@', $this->service); if (!$_els[1]) { $this->soapEngine = $_engines[0]; } else { $this->soapEngine = $_els[1]; } $this->sip_engine = $this->soapEngine; if (strlen($this->soapEngines[$this->soapEngine]['version'])) { $this->version = $this->soapEngines[$this->soapEngine]['version']; } $default_port = 'customers'; if (count($this->allowedPorts[$this->soapEngine]) > 0) { if (in_array($_els[0], $this->allowedPorts[$this->soapEngine])) { $this->port = $_els[0]; } else if (in_array($default_port, $this->allowedPorts[$this->soapEngine])) { $this->port = $default_port; } else { // disable some version dependent ports foreach (array_keys($this->ports) as $_p) { if (in_array($_p, $this->allowedPorts[$this->soapEngine])) { $this->port = $_p; break; } } } } else { if ($_els[0]) { $this->port = $_els[0]; } else { $this->port = $default_port; } } $this->records_class = $this->ports[$this->port]['records_class']; $this->soap_class = $this->ports[$this->port]['soap_class']; $this->service = $this->port.'@'.$this->soapEngine; foreach (array_keys($this->soapEngines) as $_key) { $this->skip[$_key] = $this->soapEngines[$_key]['skip']; if ($this->soapEngines[$_key]['skip_ports']) { $this->skip_ports[$_key] = $this->soapEngines[$_key]['skip_ports']; } } $this->impersonate = intval($this->soapEngines[$this->soapEngine]['impersonate']); if ($this->soapEngines[$this->soapEngine]['default_enum_tld']) { $this->default_enum_tld = $this->soapEngines[$this->soapEngine]['default_enum_tld']; } if ($this->soapEngines[$this->soapEngine]['default_timezone']) { $this->default_timezone = $this->soapEngines[$this->soapEngine]['default_timezone']; } if ($this->soapEngines[$this->soapEngine]['sip_proxy']) { $this->default_sip_proxy = $this->soapEngines[$this->soapEngine]['sip_proxy']; } if ($this->soapEngines[$this->soapEngine]['msrp_relay']) { $this->default_msrp_relay = $this->soapEngines[$this->soapEngine]['msrp_relay']; } if ($this->soapEngines[$this->soapEngine]['default_country']) { $this->default_country = $this->soapEngines[$this->soapEngine]['default_country']; } if (strlen($this->soapEngines[$this->soapEngine]['sip_engine'])) { $this->sip_engine = $this->soapEngines[$this->soapEngine]['sip_engine']; } if (strlen($this->soapEngines[$this->soapEngine]['voicemail_engine'])) { $this->voicemail_engine = $this->soapEngines[$this->soapEngine]['voicemail_engine']; } if (strlen($this->login_credentials['customer_engine'])) { $this->customer_engine = $this->login_credentials['customer_engine']; } else if (strlen($this->soapEngines[$this->soapEngine]['customer_engine'])) { $this->customer_engine = $this->soapEngines[$this->soapEngine]['customer_engine']; } else { $this->customer_engine = $this->soapEngine; } if (strlen($this->soapEngines[$this->soapEngine]['sip_settings_page'])) { $this->sip_settings_page = $this->soapEngines[$this->soapEngine]['sip_settings_page']; } if (strlen($this->soapEngines[$this->soapEngine]['call_limit'])) { $this->call_limit = $this->soapEngines[$this->soapEngine]['call_limit']; } if (strlen($this->soapEngines[$this->soapEngine]['digest_settings_page'])) { $this->digest_settings_page = $this->soapEngines[$this->soapEngine]['digest_settings_page']; } if (is_array($this->soapEngines[$this->soapEngine]['customer_properties'])) { $this->customer_properties = $this->soapEngines[$this->soapEngine]['customer_properties']; } if (strlen($this->soapEngines[$this->soapEngine]['timeout'])) { $this->timeout = intval($this->soapEngines[$this->soapEngine]['timeout']); } if (strlen($this->soapEngines[$this->soapEngine]['store_clear_text_passwords'])) { $this->store_clear_text_passwords = $this->soapEngines[$this->soapEngine]['store_clear_text_passwords']; } if (strlen($this->soapEngines[$this->soapEngine]['allow_none_local_dns_zones'])) { $this->allow_none_local_dns_zones = $this->soapEngines[$this->soapEngine]['allow_none_local_dns_zones']; } if (strlen($this->login_credentials['record_generator'])) { $this->record_generator = $this->login_credentials['record_generator']; } else if (strlen($this->soapEngines[$this->soapEngine]['record_generator'])) { $this->record_generator = $this->soapEngines[$this->soapEngine]['record_generator']; } if (strlen($this->login_credentials['name_servers'])) { $this->name_servers = $this->login_credentials['name_servers']; } else if (strlen($this->soapEngines[$this->soapEngine]['name_servers'])) { $this->name_servers = $this->soapEngines[$this->soapEngine]['name_servers']; } if (strlen($login_credentials['reseller'])) { $this->reseller = $login_credentials['reseller']; } else if ($this->adminonly && $_REQUEST['reseller_filter']) { $this->reseller = $_REQUEST['reseller_filter']; } if (strlen($login_credentials['customer'])) { $this->customer = $login_credentials['customer']; } else if ($this->adminonly && $_REQUEST['customer_filter']) { $this->customer = $_REQUEST['customer_filter']; } if (strlen($login_credentials['soap_username'])) { $this->soapUsername=$login_credentials['soap_username']; $this->SOAPlogin = array( "username" => $this->soapUsername, "password" => $login_credentials['soap_password'], "admin" => false ); } else { // use the credentials defined for the soap engine $this->soapUsername = $this->soapEngines[$this->soapEngine]['username']; if ($this->customer) { $this->SOAPlogin = array( "username" => $this->soapUsername, "password" => $this->soapEngines[$this->soapEngine]['password'], "admin" => true, "impersonate" => intval($this->customer) ); } else { $this->SOAPlogin = array( "username" => $this->soapUsername, "password" => $this->soapEngines[$this->soapEngine]['password'], "admin" => true, "impersonate" => intval($this->reseller) ); } $this->SOAPloginAdmin = array( "username" => $this->soapUsername, "password" => $this->soapEngines[$this->soapEngine]['password'], "admin" => true ); } $this->SOAPurl = $this->soapEngines[$this->soapEngine]['url']; $log = sprintf( "

%s at %s as %s ", $this->soap_class, $this->SOAPurl, $this->SOAPurl, $this->soapUsername ); dprint($log); $this->SoapAuth = array('auth', $this->SOAPlogin , 'urn:AGProjects:NGNPro', 0, ''); $this->SoapAuthAdmin = array('auth', $this->SOAPloginAdmin , 'urn:AGProjects:NGNPro', 0, ''); // Instantiate the SOAP client if (!class_exists($this->soap_class)) return ; $this->soapclient = new $this->soap_class($this->SOAPurl); $this->soapclient->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0); $this->soapclient->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0); // set the timeout $this->soapclient->_options['timeout'] = $this->timeout; if ($this->customer_engine) { $this->SOAPloginCustomers = array( "username" => $this->soapEngines[$this->customer_engine]['username'], "password" => $this->soapEngines[$this->customer_engine]['password'], "admin" => true, "impersonate" => intval($this->reseller) ); $this->SoapAuthCustomers = array('auth', $this->SOAPloginCustomers , 'urn:AGProjects:NGNPro', 0, ''); $this->SOAPurlCustomers = $this->soapEngines[$this->customer_engine]['url']; $this->soapclientCustomers = new WebService_NGNPro_CustomerPort($this->SOAPurlCustomers); $this->soapclientCustomers->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0); $this->soapclientCustomers->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0); if (strlen($this->soapEngines[$this->customer_engine]['timeout'])) { $this->soapclientCustomers->_options['timeout'] = intval($this->soapEngines[$this->customer_engine]['timeout']); } else { $this->soapclientCustomers->_options['timeout'] = $this->timeout; } } if ($this->voicemail_engine) { $this->SOAPloginVoicemail = array( "username" => $this->soapEngines[$this->voicemail_engine]['username'], "password" => $this->soapEngines[$this->voicemail_engine]['password'], "admin" => true, "impersonate" => intval($this->reseller) ); $this->SoapAuthVoicemail = array('auth', $this->SOAPloginVoicemail , 'urn:AGProjects:NGNPro', 0, ''); $this->SOAPurlVoicemail = $this->soapEngines[$this->voicemail_engine]['url']; $this->soapclientVoicemail = new WebService_NGNPro_VoicemailPort($this->SOAPurlVoicemail); $this->soapclientVoicemail->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0); $this->soapclientVoicemail->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0); if (strlen($this->soapEngines[$this->voicemail_engine]['timeout'])) { $this->soapclientVoicemail->_options['timeout'] = intval($this->soapEngines[$this->voicemail_engine]['timeout']); } else { $this->soapclientVoicemail->_options['timeout'] = $this->timeout; } } } else { print "Error: No SOAP credentials defined."; } $this->url = $_SERVER['PHP_SELF']."?1=1"; foreach (array_keys($this->extraFormElements) as $element) { if (!strlen($this->extraFormElements[$element])) continue; $this->url .= sprintf( '&%s=%s', $element, urlencode($this->extraFormElements[$element]) ); } $this->support_email = $this->soapEngines[$this->soapEngine]['support_email']; $this->support_web = $this->soapEngines[$this->soapEngine]['support_web']; $this->welcome_message = $this->soapEngines[$this->soapEngine]['welcome_message']; } /** * returns a list of allowed engines based on a filter * the filter format is: * engine1:port1,port2 engine2 engine3:port1 */ public function getSoapEngineAllowed($soapEngines, $filter) { if (!$filter) { $soapEngines_checked = $soapEngines; } else { $_filter_els = explode(" ", $filter); foreach (array_keys($soapEngines) as $_engine) { foreach ($_filter_els as $_filter) { unset($_allowed_engine); $_allowed_ports = array(); list($_allowed_engine, $_allowed_ports_els) = explode(":", $_filter); if ($_allowed_ports_els) { $_allowed_ports = explode(",", $_allowed_ports_els); } if (count($_allowed_ports) == 0) { $_allowed_ports = array_keys($this->ports); } if ($_engine == $_allowed_engine) { $soapEngines_checked[$_engine] = $soapEngines[$_engine]; $this->allowedPorts[$_engine] = $_allowed_ports; continue; } } } } return $soapEngines_checked; } /** * $function = array( * 'commit' => array( * 'name' => 'addAccount', * 'parameters' => array( * $param1, * $param2 * ), * 'logs' => array( * 'success' => 'The function was a success', * 'failure' => 'The function has failed' * ) * ) * ); */ public function execute($function, $html = true, $adminonly = false) { if (!$function['commit']['name']) { if ($html) { print "Error: no function name supplied"; } else { print "Error: no function name supplied\n"; } return false; } if ($adminonly) { $this->soapclient->addHeader($this->SoapAuthAdmin); } else { $this->soapclient->addHeader($this->SoapAuth); } $result = call_user_func_array( array( $this->soapclient, $function['commit']['name'] ), $function['commit']['parameters'] ); if ((new PEAR)->isError($result)) { $this->error_msg = $result->getMessage(); $this->error_fault = $result->getFault(); $this->error_code = $result->getCode(); $this->exception = $this->error_fault->detail->exception; $log = sprintf( "SOAP request error from %s: %s (%s): %s", $this->SOAPurl, $this->error_msg, $this->error_fault->detail->exception->errorcode, $this->error_fault->detail->exception->errorstring ); syslog(LOG_NOTICE, $log); if ($html) { $log = sprintf( "SOAP query failed: %s (%s): %s", $this->error_msg, $this->error_fault->detail->exception->errorcode, $this->error_fault->detail->exception->errorstring ); print "$log"; } return false; } else { $this->result = $result; if ($function['commit']['logs']['success']) { if ($html) { printf( "

%s \n", htmlentities($function['commit']['logs']['success']) ); } } if (is_object($result) || strlen($result)) { return $result; } else { return true; } } } } -class Records { +class Records +{ public $maxrowsperpage = '20'; public $sip_settings_page = 'sip_settings.phtml'; public $allowedDomains = array(); public $selectionActive = false; public $selectionKeys = array(); public $resellers = array(); public $customers = array(); public $record_generator = false; public $customer_properties = array(); public $loginProperties = array(); public $errorMessage = ''; public $html = true; public $filters = array(); public $selectionActiveExceptions = array(); 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 Records($SoapEngine) { $this->SoapEngine = $SoapEngine; $this->version = $this->SoapEngine->version; $this->login_credentials = $this->SoapEngine->login_credentials; $this->sorting['sortBy'] = trim($_REQUEST['sortBy']); $this->sorting['sortOrder'] = trim($_REQUEST['sortOrder']); $this->next = $_REQUEST['next']; $this->adminonly = $this->SoapEngine->adminonly; $this->reseller = $this->SoapEngine->reseller; $this->customer = $this->SoapEngine->customer; $this->impersonate = $this->SoapEngine->impersonate; $this->url = $this->SoapEngine->url; foreach (array_keys($this->filters) as $_filter) { if (strlen($this->filters[$_filter]) && !in_array($_filter, $this->selectionActiveExceptions)) { $this->selectionActive = true; break; } } if ($this->adminonly) { $this->url .= sprintf('&adminonly=%s', $this->adminonly); if ($this->login_credentials['reseller']) { $this->filters['reseller'] = $this->login_credentials['reseller']; } else { $this->filters['reseller'] = trim($_REQUEST['reseller_filter']); } } $this->filters['customer'] = trim($_REQUEST['customer_filter']); //$this->getResellers(); $this->getCustomers(); $this->getLoginAccount(); if (strlen($this->SoapEngine->sip_settings_page)) { $this->sip_settings_page = $this->SoapEngine->sip_settings_page; } if (strlen($this->SoapEngine->digest_settings_page)) { $this->digest_settings_page = $this->SoapEngine->digest_settings_page; } $this->support_email = $this->SoapEngine->support_email; $this->support_web = $this->SoapEngine->support_web; } function showEngineSelection() { $selected_soapEngine[$this->SoapEngine->service] =' selected'; $pstn_access = $this->getCustomerProperty('pstn_access'); printf(""); printf( "", $this->url ); } function showAfterEngineSelection() { } - function showCustomerSelection() { + function showCustomerSelection() + { $this->showCustomerForm(); } function showResellerSelection() { if ($this->adminonly) { $this->showResellerForm(); } else { printf("%s", $this->reseller); } } function showPagination($maxrows) { $url .= $this->url.'&'.$this->addFiltersToURL().sprintf( "&service=%s&sortBy=%s&sortOrder=%s", urlencode($this->SoapEngine->service), urlencode($this->sorting['sortBy']), urlencode($this->sorting['sortOrder']) ); print "

"); } function showSeachFormCustom() { } function showSeachForm() { if ($this->hide_html()) { return; } printf( "

%s", $this->SoapEngine->ports[$this->SoapEngine->port]['description'] ); printf( "

", $_SERVER['PHP_SELF'] ); //print " // //"; print(""); $this->showEngineSelection(); $this->showAfterEngineSelection(); print("
Order by"); $this->showSortForm(); print("
"); $this->printHiddenFormElements('skipServiceElement'); print("

"); print("
"); $this->showTextBeforeCustomerSelection(); print(""); $this->showCustomerSelection(); $this->showResellerSelection(); print("
"); $this->showSeachFormCustom(); print("
"); if ($_REQUEST['action'] != 'Delete') $this->showAddForm(); } function listRecords() { } function getRecordKeys() { } function addRecord($dictionary = array()) { } function deleteRecord($dictionary = array()) { } function showSortCaret($sortSearch) { if ($this->sorting['sortBy'] == $sortSearch && $this->sorting['sortOrder'] == 'DESC') { print(''); } else if ($this->sorting['sortBy'] == $sortSearch && $this->sorting['sortOrder'] == 'ASC') { print(''); } } function tel2enum($tel, $tld) { if (strlen($tld) == 0) $tld="e164.arpa"; // transform telephone number in FQDN Enum style domain name if (preg_match("/^[+]?(\d+)$/", $tel, $m)) { $l = strlen($m[1]); $rev_num = ""; $z = 0; while ($z < $l) { $ss = substr($m[1], $z, 1); $enum = $ss.".".$enum; $z++; } preg_match("/^(.*)\.$/", $enum, $m); $enum = $m[1]; $enum = $enum.".$tld."; return($enum); } else { return($tel); } } function showAddForm() { if ($this->selectionActive) return; } function showSortForm() { if (!count($this->sortElements)) { return; } $selected_sortBy[$this->sorting['sortBy']]='selected'; print ""); $selected_sortOrder[$this->sorting['sortOrder']]='selected'; print(""); } function showTimezones($timezone) { if (!$fp = fopen("timezones", "r")) { print _("Failed to open timezone file."); return false; } print ""; fclose($fp); } function printHiddenFormElements($skipServiceElement = '') { if (!$skipServiceElement) { printf("", $this->SoapEngine->service); } if ($this->adminonly) { printf("", $this->adminonly); } foreach (array_keys($this->SoapEngine->extraFormElements) as $element) { if (!strlen($this->SoapEngine->extraFormElements[$element])) continue; printf( "\n", $element, $this->SoapEngine->extraFormElements[$element] ); } } function getAllowedDomains() { } function showActionsForm() { if (!$this->selectionActive) { return; } $class_name = get_class($this).'Actions'; if (class_exists($class_name)) { $actions = new $class_name($this->SoapEngine, $this->login_credentials); $actions->showActionsForm($this->filters, $this->sorting); } } function executeActions() { $this->showSeachForm(); $this->getRecordKeys(); dprint_r($this->selectionKeys); $class_name=get_class($this).'Actions'; if (class_exists($class_name)) { $actions=new $class_name($this->SoapEngine, $this->login_credentials); $actions->execute( $this->selectionKeys, $_REQUEST['sub_action'], trim($_REQUEST['sub_action_parameter']) ); } } function getCustomers() { if (!$this->SoapEngine->customer_engine) { dprint ("No customer_engine available"); return true; } if (!$this->filters['reseller']) return; // Filter $filter = array('reseller'=>intval($this->filters['reseller'])); $range = array( 'start' => 0, 'count' => 100 ); // Order $orderBy = array( 'attribute' => 'customer', 'direction' => 'ASC' ); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $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 { if ($result->total > $range['count']) return; if ($range['count'] <= $result->total) { $max = $range['count']; } else { $max = $result->total; } $i = 0; while ($i < $max) { $customer = $result->accounts[$i]; $this->customers[$customer->id] = $customer->firstName.' '.$customer->lastName; $i++; } return true; } } function getResellers() { if (!$this->SoapEngine->customer_engine) { dprint("No customer_engine available"); return true; } if (!$this->adminonly) return; // Filter $filter = array('reseller'=>intval($this->filters['reseller'])); $range = array( 'start' => 0, 'count' => 200 ); // Order $orderBy = array( 'attribute' => 'customer', 'direction' => 'ASC' ); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $this->log_action('getResellers'); // Call function $result = $this->SoapEngine->soapclientCustomers->getResellers($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 > $range['count']) return; if ($range['count'] <= $result->total) { $max = $range['count']; } else { $max = $result->total; } $i = 0; while ($i < $max) { $reseller = $result->accounts[$i]; if (strlen($reseller->organization) && $reseller->organization!= 'N/A') { $this->resellers[$reseller->id] = $reseller->organization; } else { $this->resellers[$reseller->id] = $reseller->firstName.' '.$reseller->lastName; } $i++; } dprint_r($this->resellers); return true; } } function getLoginAccount() { if (!$this->SoapEngine->customer_engine) { dprint("No customer_engine available"); return true; } if (!$this->customer) { //print ("No customer available"); return true; } $filter = array('customer'=>intval($this->customer)); $range = array('start' => 0,'count' => 1); $orderBy = array('attribute' => 'customer','direction' => 'ASC'); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $this->log_action('getResellers'); // Call function $result = $this->SoapEngine->soapclientCustomers->getResellers($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->loginAccount = $result->accounts[0]; $this->loginImpersonate = $result->accounts[0]->impersonate; $this->loginProperties = $this->loginAccount->properties; } if ($this->loginAccount->reseller == $this->customer) { $this->resellerProperties = $this->loginProperties; } else { $filter = array('customer' => intval($this->loginAccount->reseller)); $range = array('start' => 0, 'count' => 1); $orderBy = array('attribute' => 'customer', 'direction' => 'ASC'); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $this->log_action('getResellers'); // Call function $result = $this->SoapEngine->soapclientCustomers->getResellers($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->resellerProperties=$result->accounts[0]->properties; } } //dprint_r($this->resellerProperties); } function showCustomerForm($name = 'customer_filter') { if ($this->login_credentials['customer'] != $this->login_credentials['reseller']) { - printf(" %s ",$this->login_credentials['customer']); + printf(" %s ", $this->login_credentials['customer']); } else { if (count($this->customers)) { $select_customer[$this->filters['customer']]='selected'; printf(""); } else { printf( "", $name, $this->filters['customer'] ); } } } function showResellerForm($name = 'reseller_filter') { if (!$this->adminonly) return; if ($this->login_credentials['reseller']) { - printf(" %s ",$this->login_credentials['reseller']); + printf(" %s ", $this->login_credentials['reseller']); } else { if (count($this->resellers)) { - $select_reseller[$this->filters['reseller']]='selected'; - printf("", $name); print("