diff --git a/library/ngnpro_client.php b/library/ngnpro_client.php index ed0497c..4a9eac7 100644 --- a/library/ngnpro_client.php +++ b/library/ngnpro_client.php @@ -1,15463 +1,14895 @@ 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 { var $version = 1; var $adminonly = 0; var $customer = 0; var $reseller = 0; var $login_type = 'reseller'; var $allowedPorts = array(); var $timeout = 5; var $exception = array(); var $result = false; var $extraFormElements = array(); var $default_enum_tld = 'e164.arpa'; var $default_timezone = 'Europe/Amsterdam'; var $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. ', ), '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. ' ), 'sip_aliases' => array( 'records_class' => 'SipAliases', 'name' => 'SIP aliases', 'soap_class' => 'WebService_NGNPro_SipPort', 'category' => 'sip', 'description' => 'Manage aliases for SIP destinations (e.g. user1@example1.com alias to user2@example2.com). Use _ or % to match one or more characters. ' ), 'customers' => array( 'records_class' => 'Customers', 'name' => 'Customers', 'soap_class' => 'WebService_NGNPro_CustomerPort', 'category' => 'general', 'description' => 'Manage customers, address information and properties. SIP domains and ENUM ranges can be assigned to customers. Use _ or % to match one or more characters. ' ), '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. ' ), '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 URL redirections. 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 ), '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 ) ); function getSoapEngineAllowed($soapEngines,$filter) { // returns a list of allowed engines based on a filter // the filter format is: // engine1:port1,port2 engine2 engine3:port1 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 SoapEngine($service,$soapEngines,$login_credentials=array()) { /* 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/' ) ); */ $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']; } if ($this->version > 1) { $default_port='customers'; } else { $default_port='sip_accounts'; } 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 ($this->version < 2 && $_p == 'customers') continue; if ($this->version < 4 && ($_p == 'gateway_rules' || $_p == 'pstn_gateways' || $_p == 'pstn_routes' || $p == 'pstn_carriers')) continue; 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]['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->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 if ($this->version > 1) { $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->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->version > 1) { $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; } } } 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']; } function execute($function,$html=true,$adminonly=false) { /* $function=array('commit' => array('name' => 'addAccount', 'parameters' => array($param1,$param2), 'logs' => array('success' => 'The function was a success', 'failure' => 'The function has failed' ) ) ); */ 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 (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; if ($html) { printf ("

Error from %s: %s (%s): %s\n",$this->SOAPurl, $this->error_msg, $this->error_fault->detail->exception->errorcode, $this->error_fault->detail->exception->errorstring); return false; } 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 { var $maxrowsperpage = '20'; var $sip_settings_page = 'sip_settings.phtml'; var $allowedDomains = array(); var $selectionActive = false; var $selectionKeys = array(); var $resellers = array(); var $customers = array(); var $record_generator = false; var $customer_properties = array(); var $loginProperties = array(); var $errorMessage = ''; var $html = true; var $filters = array(); var $selectionActiveExceptions = array(); 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'; printf(" ", $this->url ); $pstn_access=$this->getCustomerProperty('pstn_access'); printf(""); } function showAfterEngineSelection () { } function showCustomerSelection() { if ($this->version > 1) { $this->showCustomerForm(); } } function showResellerSelection() { if ($this->version > 1) { 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 "

"; if ($this->next != 0 ) { $show_next=$this->maxrowsperpage-$this->next; if ($show_next < 0) { $mod_show_next = $show_next-2*$show_next; } if (!$mod_show_next) $mod_show_next=0; if ($mod_show_next/$this->maxrowsperpage >= 1) { printf ("Begin ",$url); } printf ("Previous ",$url,$mod_show_next); } print " "; if ($this->next + $this->maxrowsperpage < $this->rows) { $show_next = $this->maxrowsperpage + $this->next; printf ("Next ",$url,$show_next); } print "
"; } function showSeachFormCustom() { } function showSeachForm() { printf ("

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

"; printf ("",$_SERVER['PHP_SELF']); print "
"; print " "; $this->showEngineSelection(); $this->showAfterEngineSelection(); print " Order by"; $this->showSortForm(); $this->printHiddenFormElements('skipServiceElement'); print "
"; $this->showTextBeforeCustomerSelection(); $this->showCustomerSelection(); $this->showResellerSelection(); $this->showSeachFormCustom(); print "
"; if ($_REQUEST['action'] != 'Delete') $this->showAddForm(); } function listRecords() { } function getRecordKeys() { } function addRecord($dictionary=array()) { } function deleteRecord() { } 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() { 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); $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); $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); // Call function $result = $this->SoapEngine->soapclientCustomers->getCustomers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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); // Call function $result = $this->SoapEngine->soapclientCustomers->getResellers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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); // Call function $result = $this->SoapEngine->soapclientCustomers->getResellers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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); // Call function $result = $this->SoapEngine->soapclientCustomers->getResellers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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']); } 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']); } else { if (count($this->resellers)) { $select_reseller[$this->filters['reseller']]='selected'; printf (""; } else { printf ("",$name,$this->filters['reseller']); } } } function showTextBeforeCustomerSelection() { print "Customer"; } function addFiltersToURL() { $j=0; foreach(array_keys($this->filters) as $filter) { if (strlen(trim($this->filters[$filter]))) { if ($j) $url .='&'; $url .= sprintf('%s_filter=%s',$filter,urlencode(trim($this->filters[$filter]))); } $j++; } return $url; } function printFiltersToForm() { foreach(array_keys($this->filters) as $filter) { if (strlen(trim($this->filters[$filter]))) { printf("",$filter,trim($this->filters[$filter])); } } } function getRecord () { } function updateRecord () { } function copyRecord () { } function showRecord () { } function RandomString($len=11) { $alf=array("a","b","c","d","e","f", "h","i","j","k","l","m", "n","p","r","s","t","w", "x","y","1","2","3","4", "5","6","7","8","9"); $i=0; while($i < $len) { srand((double)microtime()*1000000); $randval = rand(0,28); $string="$string"."$alf[$randval]"; $i++; } return $string; } function RandomNumber($len=5) { $alf=array("0","1","2","3","4","5", "9","8","7","6"); $i=0; while($i < $len) { srand((double)microtime()*1000000); $randval = rand(0,9); $string="$string"."$alf[$randval]"; $i++; } return $string; } function validDomain($domain) { if (!preg_match ("/^[A-Za-z0-9-.]{1,}\.[A-Za-z]{2,}$/",$domain)) { return false; } return true; } function getCarriers () { if (count($this->carriers)) return true; $Query=array('filter' => array('name'=>''), 'orderBy' => array('attribute' => 'name', 'direction' => 'ASC' ), 'range' => array('start' => 0, 'count' => 1000) ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getCarriers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error 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->carriers as $_carrier) { $this->carriers[$_carrier->id]=$_carrier->name; } } } function getGateways () { if (count($this->gateways)) return true; $Query=array('filter' => array('name'=>''), 'orderBy' => array('attribute' => 'name', 'direction' => 'ASC' ), 'range' => array('start' => 0, 'count' => 1000) ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getGateways($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error 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->gateways as $_gateway) { $this->gateways[$_gateway->id]=sprintf("%s, Carrier %s",$_gateway->name,$_gateway->carrier); } } } function updateBefore () { return true; } function updateAfter () { return true; } function showCustomerTextBox () { if ($this->version < 2) return; print "Customer"; if ($this->adminonly) { $this->showCustomerForm('customer'); print "."; $this->showResellerForm('reseller'); } else { $this->showCustomerForm('customer'); } } function makebar($w) { if ($w < 0) $w = 0; if ($w > 100) $w = 100; $width = $w; $extra = 100 - $w; if ($width < 50) $color = "black"; else if ($width < 70) $color = "darkred"; else $color = "red"; return "
"; } function customerFromLogin($dictionary=array()) { if ($this->login_credentials['reseller']) { $reseller = $this->login_credentials['reseller']; if ($dictionary['customer']) { $customer = $dictionary['customer']; } else if ($_REQUEST['customer']) { $customer = $_REQUEST['customer']; } else { $customer = $this->login_credentials['customer']; } } else { if ($dictionary['reseller']) { $reseller = $dictionary['reseller']; } else { $reseller = trim($_REQUEST['reseller']); } if ($dictionary['customer']) { $customer = $dictionary['customer']; } else { $customer = trim($_REQUEST['customer']); } } if (!$customer) $customer = $reseller; return array(intval($customer),intval($reseller)); } function getCustomerProperties($customer='') { if (!$customer) $customer=$this->customer; $log=sprintf("getCustomerProperties(%s,engine=%s)",$customer,$this->SoapEngine->customer_engine); dprint($log); if (!$this->SoapEngine->customer_engine) { dprint ("No customer_engine available"); return true; } if (!$customer) { dprint ("No customer available"); return true; } $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $result = $this->SoapEngine->soapclientCustomers->getProperties(intval($customer)); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->loginProperties=$result; } /* print "

";
         print_r($this->loginProperties);
         print "
"; */ return true; } function setCustomerProperties($properties,$customer='') { if (!$customer) $customer=$this->customer; $log=sprintf("setCustomerProperties(%s,engine=%s)",$customer,$this->SoapEngine->customer_engine); dprint($log); if (!$this->SoapEngine->customer_engine) { dprint ("No customer_engine available"); return true; } if (!is_array($properties) || !$customer) return true; $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $result = $this->SoapEngine->soapclientCustomers->setProperties(intval($customer),$properties); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } return true; } function getCustomerProperty($name='') { if (!count($this->loginProperties)) return false; foreach ($this->loginProperties as $_property) { if ($_property->name == $name) { return $_property->value; } } return false; } function getResellerProperty($name='') { if (!count($this->resellerProperties)) return false; foreach ($this->resellerProperties as $_property) { if ($_property->name == $name) { return $_property->value; } } return false; } function checkRecord() { return true; } function showWelcomeMessage() { if (!strlen($this->SoapEngine->welcome_message)) return ; printf ("%s",$this->SoapEngine->welcome_message); } function print_w($obj) { print "

\n";
         print_r($obj);
         print "
\n"; } - function initRemoteReplicationEngine($reseller) { - if (!$reseller) return false; - if (!$this->remote_engine_name) return false; - - dprint_r($this->SoapEngine->login_credentials['reseller_filters'][$reseller]); - - $remote_engine=$this->SoapEngine->login_credentials['reseller_filters'][$reseller][$this->remote_engine_name]; - - if (!strlen($remote_engine)) { - return false; - } - - if ($this->SoapEngine->soapEngine == $remote_engine) { - return false; - } - - if (!in_array($remote_engine,array_keys($this->SoapEngine->soapEngines))) { - return false; - } - - $this->SOAPloginRemote = array( - "username" => $this->SoapEngine->soapEngines[$remote_engine]['username'], - "password" => $this->SoapEngine->soapEngines[$remote_engine]['password'], - "admin" => true, - "impersonate" => intval($reseller) - ); - - $this->SOAPloginRemoteAdmin = array( - "username" => $this->SoapEngine->soapEngines[$remote_engine]['username'], - "password" => $this->SoapEngine->soapEngines[$remote_engine]['password'], - "admin" => true - ); - - $this->SOAPurlRemote=$this->SoapEngine->soapEngines[$remote_engine]['url']; - - $log=sprintf ("and syncronize changes to %s",$this->SOAPurlRemote,$this->SOAPurlRemote); - dprint($log); - - $this->SoapAuthRemote = array('auth', $this->SOAPloginRemote , 'urn:AGProjects:NGNPro', 0, ''); - $this->SoapAuthRemoteAdmin = array('auth', $this->SOAPloginRemoteAdmin , 'urn:AGProjects:NGNPro', 0, ''); - - $this->SoapEngineRemote = new $this->SoapEngine->soap_class($this->SOAPurlRemote); - - if (strlen($this->soapEngines[$remote_engine]['timeout'])) { - $this->SoapEngineRemote->_options['timeout'] = intval($this->soapEngines[$remote_engine]['timeout']); - } else { - $this->SoapEngineRemote->_options['timeout'] = $this->soapTimeout; - } - - $this->SoapEngineRemote->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0); - $this->SoapEngineRemote->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0); - - return true; - } } class SipDomains extends Records { var $FieldsAdminOnly=array( 'reseller' => array('type'=>'integer'), ); var $Fields=array( 'customer' => array('type'=>'integer') ); function SipDomains($SoapEngine) { dprint("init Domains"); $this->filters = array( 'domain' => strtolower(trim($_REQUEST['domain_filter'])) ); $this->Records($SoapEngine); if ($this->version > 1) { // keep default maxrowsperpage $this->sortElements=array('changeDate' => 'Change date', 'domain' => 'Domain' ); } else { $this->maxrowsperpage = 10000; } } function listRecords() { $this->showSeachForm(); if ($this->version > 1) { // Filter $filter=array( 'domain' => $this->filters['domain'], '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 ); dprint_r($Query); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Call function $result = $this->SoapEngine->soapclient->getDomains($Query); } else { // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Call function $result = $this->SoapEngine->soapclient->getDomains(); } if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($this->version > 1) { $this->rows = $result->total; } else { $this->rows = count($result); } if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "
$this->rows records found

"; if ($this->version > 1) { print " "; } else { print " "; } print " "; 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 ($this->version > 1) { if (!$result->domains[$i]) break; $domain = $result->domains[$i]; } else { $domain = $result[$i]; } $index = $this->next+$i+1; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } if ($this->version > 1) { $_url = $this->url.sprintf("&service=%s&action=Delete&domain_filter=%s", urlencode($this->SoapEngine->service), urlencode($domain->domain) ); if ($_REQUEST['action'] == 'Delete' && $_REQUEST['domain_filter'] == $domain->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($domain->customer) ); $_sip_domains_url = $this->url.sprintf("&service=sip_domains@%s&domain_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($domain->domain) ); $_sip_accounts_url = $this->url.sprintf("&service=sip_accounts@%s&domain_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($domain->domain) ); $_sip_aliases_url = $this->url.sprintf("&service=sip_aliases@%s&alias_domain_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($domain->domain) ); printf(" ", $bgcolor, $index, $_customer_url, $domain->customer, $domain->reseller, $_sip_domains_url, $domain->domain, $_sip_accounts_url, $_sip_aliases_url, $domain->changeDate, $_url, $actionText ); } else { $_url = $this->url.sprintf("&service=%s&action=Delete&domain_filter=%s", urlencode($this->SoapEngine->service), urlencode($domain) ); $_sip_accounts_url = $this->url.sprintf("&service=sip_accounts@%s&domain_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($domain) ); $_sip_aliases_url = $this->url.sprintf("&service=sip_aliases@%s&domain_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($domain) ); if ($_REQUEST['action'] == 'Delete' && $_REQUEST['domain_filter'] == $domain) { $_url .= "&confirm=1"; $actionText = "Confirm"; } else { $actionText = "Delete"; } printf(" ", $bgcolor, $index, $domain, $_sip_accounts_url, $_sip_aliases_url, $_url, $actionText ); } $i++; } } print "
Id Customer Domain Change date ActionsId Domain Actions
%s %s.%s %s Sip accounts Sip aliases %s %s
%s %s Sip accounts Sip aliases %s
"; if ($this->rows == 1 && $this->version > 1) { $this->showRecord($domain); } else { $this->showPagination($maxrows); } return true; } } function showSeachFormCustom() { - - if ($this->version > 1) { - printf (" SIP domain",$this->filters['domain']); - } + printf (" SIP domain",$this->filters['domain']); } function deleteRecord($dictionary=array()) { if (!$dictionary['confirm'] && !$_REQUEST['confirm']) { print "

Please press on Confirm to confirm the delete. "; return true; } if ($dictionary['domain']) { $domain=$dictionary['domain']; } else { $domain=$this->filters['domain']; } if (!strlen($domain)) { print "

Error: missing SIP domain. "; return false; } $function=array('commit' => array('name' => 'deleteDomain', 'parameters' => array($domain), 'logs' => array('success' => sprintf('SIP domain %s has been deleted',$domain)) ) ); unset($this->filters); return $this->SoapEngine->execute($function,$this->html); } function showAddForm() { if ($this->selectionActive) return; print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements(); print "
"; print " "; $this->showCustomerTextBox(); printf (" SIP domain"); print " "; print "
"; } function addRecord($dictionary=array()) { if ($dictionary['domain']) { $domain = $dictionary['domain']; } else { $domain = trim($_REQUEST['domain']); } list($customer,$reseller)=$this->customerFromLogin($dictionary); if (!$this->validDomain($domain)) { print "Error: invalid domain name"; return false; } if ($this->version > 1) { $domainStructure = array('domain' => strtolower($domain), 'customer' => intval($customer), 'reseller' => intval($reseller) ); } else { $domainStructure = strtolower($domain); } $function=array('commit' => array('name' => 'addDomain', 'parameters' => array($domainStructure), 'logs' => array('success' => sprintf('SIP domain %s has been added',$domain))) ); return $this->SoapEngine->execute($function,$this->html); } function getRecordKeys() { if ($this->version > 1) { // Filter $filter=array( 'domain' => $this->filters['domain'], '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); $result = $this->SoapEngine->soapclient->getDomains($Query); } else { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getDomains(); } if (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 { if ($this->version > 1) { foreach ($result->domains as $_domain) { $this->selectionKeys[]=$_domain->domain; } } else { $this->selectionKeys[]=$result; } } } function getRecord($domain) { if ($this->version < 2) return false; // 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 ); dprint_r($Query); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Call function $result = $this->SoapEngine->soapclient->getDomains($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($result->domains[0]){ return $result->domains[0]; } else { return false; } } } function showRecord($domain) { print ""; print "
"; printf ("",$_SERVER['PHP_SELF']); print ""; print ""; if ($this->adminonly) { foreach (array_keys($this->FieldsAdminOnly) as $item) { if ($this->FieldsAdminOnly[$item]['name']) { $item_name=$this->FieldsAdminOnly[$item]['name']; } else { $item_name=ucfirst($item); } if ($this->FieldsAdminOnly[$item]['type'] == 'text') { printf ("", $item_name, $item, $domain->$item ); } else { printf ("", $item_name, $item, $domain->$item ); } } } foreach (array_keys($this->Fields) as $item) { if ($this->Fields[$item]['name']) { $item_name=$this->Fields[$item]['name']; } else { $item_name=ucfirst($item); } if ($this->Fields[$item]['type'] == 'text') { printf ("", $item_name, $item, $domain->$item ); } else { printf ("", $item_name, $item, $domain->$item ); } } printf ("",$domain->domain); $this->printFiltersToForm(); $this->printHiddenFormElements(); print ""; print "
%s
%s
%s
%s
"; } 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]); } 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 { $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); } } 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' ); function SipAccounts($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' => trim($_REQUEST['email_filter']), 'owner' => trim($_REQUEST['owner_filter']), 'customer' => trim($_REQUEST['customer_filter']), 'reseller' => trim($_REQUEST['reseller_filter']), 'group' => trim($_REQUEST['group_filter']) ); $this->Records($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' => 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); // Call function $result = $this->SoapEngine->soapclient->getAccounts($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error 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->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']) ); // 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); // Call function $result = $this->SoapEngine->soapclient->getAccounts($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->rows = $result->total; if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "

$this->rows records found

"; if (!$this->next) $this->next=0; if ($this->rows > $this->maxrowsperpage) { $maxrows = $this->maxrowsperpage + $this->next; if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage; } else { $maxrows=$this->rows; } if ($this->rows) { $i=0; if ($this->version > 1) { $_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); // Call function $result1 = $this->SoapEngine->soapclient->getPrepaidStatus($_prepaid_accounts); if (!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; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_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 ($_REQUEST['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,$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); } unset($groups); if (is_array($account->groups)) foreach ($account->groups as $_grp) { if ($_grp == 'free-pstn') { $groups.='pstn '; } else { $groups.=$_grp.' '; } } if ($this->version > 1) { /* $_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(" ", $bgcolor, $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 ); } else { printf(" ", $bgcolor, $index, $sip_account, $account->firstName, $account->lastName, $account->email, $account->email, $account->timezone, $groups, $account->quota, $account->owner, $account->changeDate, $_url, $actionText ); } $i++; } } print "
Id Account Full Name Email Address Timezone Call Limit Quota Balance Owner Change date Actions
%s %s %s %s %s %s %s %s %s %s %s %s
%s %s %s %s %s %s %s %s %s %s %s
"; $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 (""); } } else { printf ("",$this->filters['domain']); } printf (" FN",$this->filters['firstname']); printf (" LN",$this->filters['lastname']); printf (" Email",$this->filters['email']); printf (" Owner ",$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; } print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements(); print "
"; print " "; if ($_REQUEST['account']) { $_account=$_REQUEST['account']; } else { $_account=$this->getCustomerProperty('sip_accounts_last_username'); } printf ("User",$_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 (" Pass",$_REQUEST['password']); printf (" Name",$_REQUEST['fullname']); printf (" Email",$_REQUEST['email']); printf ("Owner ",$_REQUEST['owner']); printf ("PSTN ",$checked_pstn); printf ("Quota ",$_quota); if ($this->prepaidChangesAllowed()) { printf ("Prepaid ",$checked_prepaid); } else { printf ("Prepaid "); } print " "; 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($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 (strlen($dictionary['quota'])) { $quota=intval($dictionary['quota']); } else { $quota=intval($_REQUEST['quota']); } if (strlen($dictionary['prepaid'])) { $prepaid=intval($dictionary['prepaid']); } else { $prepaid=intval($_REQUEST['prepaid']); } 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, 'region' => '', 'properties' => $properties ); //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() { if ($this->version > 1) { // Filter $filter=array( 'domain' => '' ); // Range $range=array('start' => 0, 'count' => 1000 ); $orderBy = array('attribute' => 'domain', 'direction' => 'ASC' ); // Compose query $Query=array('filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getDomains($Query); } else { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getDomains(); } if (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 { if ($this->version > 1) { foreach ($result->domains as $_domain) { if ($this->validDomain($_domain->domain)) { $this->allowedDomains[]=$_domain->domain; } } } else { foreach ($result as $_domain) { if ($this->validDomain($_domain)) { $this->allowedDomains[]=$_domain; } } } } } function showPasswordReminderForm($accounts=array()) { printf ("

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

"; print _("Fill in the e-mail address used during the registration of the SIP account:"); printf ("

", $this->filters['email']); if (count($accounts) > 1 || $_REQUEST['sip_filter']) { printf ("

"); print _("More than one accounts use this email address. If you wish to receive the password for a particular account fill in the SIP account below:"); printf ("

", $_REQUEST['sip_filter']); } printf ("

"); } 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); $result = $this->SoapEngine->soapclient->getAccounts($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); } 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); // Call function $result = $this->SoapEngine->soapclient->getDomains($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } foreach ($result as $_property) { $properties[$_property->name]=$_property->value; } return $properties; } function prepaidChangesAllowed() { //dprint_r($this->loginProperties); $_customer_prepaid_changes=$this->getCustomerProperty('prepaid_changes'); $_reseller_prepaid_changes=$this->getCustomerProperty('prepaid_changes'); 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); } } class SipAliases extends Records { var $selectionActiveExceptions=array('alias_domain'); function SipAliases($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) ); $this->Records($SoapEngine); if ($this->version > 1) { $this->sortElements=array( 'changeDate' => 'Change date', 'aliasUsername' => 'Alias user', 'aliasDomain' => 'Alias domain', 'targetUsername' => 'Target user', 'targetDomain' => 'Target domain', ); } else { $this->sortElements=array( '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' => 1000 ); // 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); // Call function $result = $this->SoapEngine->soapclient->getAliases($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error 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->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->version > 1) { if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate'; if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC'; } else { if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'aliasUsername'; 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 ); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Call function $result = $this->SoapEngine->soapclient->getAliases($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->rows = $result->total; if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "

$this->rows records found

"; if (!$this->next) $this->next=0; if ($this->rows > $this->maxrowsperpage) { $maxrows = $this->maxrowsperpage + $this->next; if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage; } else { $maxrows=$this->rows; } $i=0; if ($this->rows) { while ($i < $maxrows) { if (!$result->aliases[$i]) break; $alias = $result->aliases[$i]; $index=$this->next+$i+1; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_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"; } if ($this->version > 1) { /* $_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(" ", $bgcolor, $index, $alias->id->username, $alias->id->domain, $_sip_accounts_url, $alias->target->username, $alias->target->domain, $_owner_url, $alias->changeDate, $_url, $actionText ); } else { printf(" ", $bgcolor, $index, $alias->id->username, $alias->id->domain, $alias->target->username, $alias->target->domain, $alias->owner, $alias->changeDate, $_url, $actionText ); } $i++; } } print "
Id Alias Target Owner Change date Actions
%s %s@%s %s@%s %s %s %s
%s %s@%s %s@%s %s %s %s
"; $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 (" 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 (" Target",trim($_REQUEST['target_username_filter'])); if ($this->version > 1) { 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; } print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements(); print "
"; print " "; printf (" Alias"); if ($_REQUEST['domain']) { $_domain=$_REQUEST['domain']; $selected_domain[$_REQUEST['domain']]='selected'; } else if ($_domain=$this->getCustomerProperty('sip_aliases_last_domain')) { $selected_domain[$_domain]='selected'; } if (count($this->allowedDomains) > 0) { print "@"; } else { printf (" ",$_domain); } printf (" Target"); printf (" Owner"); print " "; print "
"; } 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() { if ($this->version > 1) { // Filter $filter=array( 'domain' => '' ); // Range $range=array('start' => 0, 'count' => 1000 ); $orderBy = array('attribute' => 'domain', 'direction' => 'ASC' ); // Compose query $Query=array('filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getDomains($Query); } else { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getDomains(); } if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($this->version > 1) { foreach ($result->domains as $_domain) { if ($this->validDomain($_domain->domain)) { $this->allowedDomains[]=$_domain->domain; } } } else { foreach ($result as $_domain) { if ($this->validDomain($_domain)) { $this->allowedDomains[]=$_domain; } } } } } } class EnumRanges extends Records { var $selectionActiveExceptions=array('tld'); - var $remote_engine_name='enum_engine_remote'; 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' ) ); function EnumRanges($SoapEngine) { dprint("init EnumRanges"); $this->filters = array('prefix' => trim(ltrim($_REQUEST['prefix_filter']),'+'), 'tld' => trim($_REQUEST['tld_filter']), 'info' => trim($_REQUEST['info_filter']) ); $this->Records($SoapEngine); if ($this->version > 1) { $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); + //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(); if ($this->version > 1) { // 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); $result = $this->SoapEngine->soapclient->getRanges($Query); } else { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getRanges(); } if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($this->version > 1) { $this->rows = $result->total; } else { $this->rows = count($result); } if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "

$this->rows records found

"; if ($this->version > 1) { print " "; } else { print " "; } 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 ($this->version > 1) { if (!$result->ranges[$i]) break; $range = $result->ranges[$i]; } else { $range = $result[$i]; } $index=$this->next+$i+1; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_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('G',$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=""; } if ($this->version > 1) { $_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(" ", $bgcolor, $index, $generator_url, $_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 ); } else { printf(" ", $bgcolor, $index, $range_url, $range->id->tld, $range->ttl, $range->minDigits, $range->maxDigits, $range->size, $range->used, $bar, $range->changeDate, $_url, $actionText ); } printf(" "); $i++; } } print "
Id Customer Prefix TLD Serial TTL Info Min Max Size Used Change date Actions
Id Prefix TLD TTL Min digits Max digits Size Used Change date Actions
%s %s %s.%s +%s %s %s %s %s %s %s %s %s %s %s %s
%s +%s %s %s %s %s %s %s %s %s %s
"; if ($this->rows == 1 && $this->version > 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']); - if ($this->adminonly) { - $this->initRemoteReplicationEngine($this->filters['reseller']); - } else { - $this->initRemoteReplicationEngine($this->reseller); - } - $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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - // delete remote if remote engine is set - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->deleteRange($rangeId); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - return false; - } else { - unset($this->selectionActive); - return true; - } - } else { - return true; - } + return true; } } function showAddForm() { if ($this->selectionActive) return; print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements(); print "
"; print " "; if ($this->version > 1) { $this->showCustomerTextBox(); } printf ("Prefix + ",$_REQUEST['prefix']); printf (" TLD"); if ($_REQUEST['tld']) { printf ("",$_REQUEST['tld']); } else if ($this->filters['tld']) { 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 "); if ($this->version > 1) { printf (" Info ",$_REQUEST['info']); } print " "; print "
"; } function addRecord() { $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); - $this->initRemoteReplicationEngine($reseller); - 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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->addRange($range); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - unset($this->filters); - - return false; - } else { - return true; - } - } else { - return true; - } + return true; } } function showSeachFormCustom() { if ($this->version > 1) { 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() { if ($this->version > 1) { // Filter $filter=array('prefix' => ''); // 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 ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getRanges($Query); } else { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getRanges(); } if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($this->version > 1) { 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]++; } } else { foreach($result 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 ("",$_SERVER['PHP_SELF']); print ""; print ""; printf ("", $this->tel2enum($range->id->prefix,$range->id->tld)); if ($this->adminonly) { foreach (array_keys($this->FieldsAdminOnly) as $item) { if ($item == 'nameservers') { foreach ($range->$item as $_item) { $nameservers.=$_item."\n"; } $item_value=$nameservers; } else { $item_value=$range->$item; } if ($this->FieldsAdminOnly[$item]['name']) { $item_name=$this->FieldsAdminOnly[$item]['name']; } else { $item_name=ucfirst($item); } if ($this->FieldsAdminOnly[$item]['type'] == 'text') { printf ("", $item_name, $item, $item_value, $this->FieldsAdminOnly[$item]['help'] ); } else { printf ("", $item_name, $item, $item_value, $this->FieldsAdminOnly[$item]['help'] ); } } } foreach (array_keys($this->Fields) as $item) { if ($this->Fields[$item]['name']) { $item_name=$this->Fields[$item]['name']; } else { $item_name=ucfirst($item); } if ($item == 'nameservers') { foreach ($range->$item as $_item) { $nameservers.=$_item."\n"; } $item_value=$nameservers; } else { $item_value=$range->$item; } if ($this->Fields[$item]['type'] == 'text') { printf ("", $item_name, $item, $item_value, $this->Fields[$item]['help'] ); }else if ($this->Fields[$item]['readonly']) { printf ("", $item_name, $item_value, $this->Fields[$item]['help'] ); } else { printf ("", $item_name, $item, $item_value, $this->Fields[$item]['help'] ); } } printf ("",$range->id->tld); printf ("",$range->id->prefix); $this->printFiltersToForm(); $this->printHiddenFormElements(); print ""; print "
DNS zone%s
%s %s
%s %s
%s %s
%s %s %s
%s %s
"; } 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; } - $this->initRemoteReplicationEngine($range->reseller); - $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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - - // update remote if remote engine is set - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->updateRange($range); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - return false; - } else { - return true; - } - } else { - return true; - } + 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); $result = $this->SoapEngine->soapclient->getRanges($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($result->ranges[0]){ return $result->ranges[0]; } else { return false; } } } } class EnumMappings extends Records { - var $remote_engine_name='enum_engine_remote'; - 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://")) ); function EnumMappings($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']) ); $this->Records($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); // Call function $result = $this->SoapEngine->soapclient->getNumbers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->rows = $result->total; if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "

$this->rows records found

"; } else { print " "; } print " "; 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; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $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,$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); if ($this->version > 1) { $_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(" ", $bgcolor, $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(" ", $bgcolor, $index, $number->id->number, $number->id->tld, $number->info, ucfirst($_mapping->type), $mapto, $_mapping->ttl, $number->owner, $_url, $actionText ); } } else { if ($this->version > 1) { printf(" ", $bgcolor, ucfirst($_mapping->type), $_mapping->id, $mapto, $_mapping->ttl, $number->changeDate, $_url, $actionText ); } else { printf(" ", $bgcolor, ucfirst($_mapping->type), $mapto, $_mapping->ttl, $_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); if ($this->version > 1) { $_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(" ", $bgcolor, $index, $_customer_url, $number->customer, $number->reseller, $_number_url, $number->id->number, $number->id->tld, $number->info, $_owner_url, $number->changeDate, $_url, $actionText ); } else { printf(" ", $bgcolor, $_url, $actionText ); } } printf(" "); $i++; } } print "
"; if ($this->version > 1) { print " Customer Phone number TLD Info Owner Type Id Map to TTL Change date ActionsPhone number TLD Info Type Map to TTL Owner Actions
%s %s.%s +%s %s %s %s %s %s %s %s %s %s
%s +%s %s %s %s %s %s %s %s
%s %s %s %s %s %s
%s %s %s %s
%s %s.%s +%s %s %s %s %s %s
%s
"; 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); // Call function $result = $this->SoapEngine->soapclient->getNumbers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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']); if ($this->version > 1) { 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 ); - if ($this->adminonly) { - $this->initRemoteReplicationEngine($this->filters['reseller']); - } else { - $this->initRemoteReplicationEngine($this->reseller); - } - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getNumber($enum_id); if (!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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - // update remote if remote engine is set - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->updateNumber($result); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SoapEngineRemote->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - return false; - } else { - unset($this->selectionActive); - return true; - } - } else { - return true; - } + 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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - - // update remote if remote engine is set - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->deleteNumber($enum_id); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SoapEngineRemote->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - return false; - } else { - unset($this->selectionActive); - return true; - } - } else { - return true; - } + 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; } print "

"; printf ("",$_SERVER['PHP_SELF']); if ($this->adminonly) { printf (" ",$this->filters['reseller']); } print " "; $this->printHiddenFormElements(); print "
"; print " "; printf (" Number"); print ""; if ($_REQUEST['number']) { printf ("",$_REQUEST['number']); } else if ($_number=$this->getCustomerProperty('enum_numbers_last_number')) { $_prefix=$_range['prefix']; preg_match("/^$_prefix(.*)/",$_number,$m); printf ("",$m[1]); } else { printf (""); } printf (" Map to"); print " "; if ($_REQUEST['type']) { $selected_naptr_service[$_REQUEST['type']]='selected'; } else if ($_type=$this->getCustomerProperty('enum_numbers_last_type')) { $selected_naptr_service[$_type]='selected'; } printf (" ",$_REQUEST['mapto']); print" TTL"; if ($_REQUEST['ttl']) { printf ("",$_REQUEST['ttl']); } else if ($_ttl=$this->getCustomerProperty('enum_numbers_last_ttl')) { printf ("",$_ttl); } else { printf (""); } printf (" Owner",$_REQUEST['owner']); printf (" Info",$_REQUEST['info']); print " "; print "
"; } function getAllowedDomains() { if ($this->version > 1) { // 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); $result = $this->SoapEngine->soapclient->getRanges($Query); } else { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getRanges(); } if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($this->version > 1) { 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]++; } } else { foreach($result 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; } - $this->initRemoteReplicationEngine($reseller); - 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); $result = $this->SoapEngine->soapclient->getNumber($enum_id); if (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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - - // add remote if remote engine is set - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->addNumber($result); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SoapEngineRemote->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - return false; - } else { - return true; - } - } else { - return true; - } + return true; } } else { printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - - // add remote if remote engine is set - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->updateNumber($result); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SoapEngineRemote->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - return false; - } else { - return true; - } - } else { - return true; - } + 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); // Call function $result = $this->SoapEngine->soapclient->getNumbers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error 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->numbers as $number) { $this->selectionKeys[]=array('number' => $number->id->number, 'tld' => $number->id->tld); } return true; } } function showRecord($number) { print ""; print ""; print ""; print ""; print ""; print ""; print ""; print " "; print ""; print "
"; print "

Number

"; print "
"; print "

Mappings

"; print "
"; print ""; printf ("",$_SERVER['PHP_SELF']); print ""; printf ("", $this->tel2enum($number->id->number,$number->id->tld)); foreach (array_keys($this->Fields) as $item) { if ($this->Fields[$item]['name']) { $item_name=$this->Fields[$item]['name']; } else { $item_name=ucfirst($item); } if ($this->Fields[$item]['type'] == 'text') { printf ("", $item_name, $item, $number->$item ); } else { printf ("", $item_name, $item, $number->$item ); } } printf ("",$number->id->tld); printf ("",$number->id->number); $this->printFiltersToForm(); $this->printHiddenFormElements(); print "
DNS name%s
%s
%s
"; print "
"; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print ""; foreach ($number->mappings as $_mapping) { $j++; unset($selected_type); print ""; print ""; printf ("",$_mapping->id,$_mapping->id); $selected_type[$_mapping->type]='selected'; printf (" "; printf (" ", $_mapping->mapto, $_mapping->ttl ); print ""; } $j++; print ""; print ""; print ""; printf (" "; printf (" " ); print ""; print "
IdTypeMap toTTL
$j%d
"; print "
"; } function getRecord($enumid) { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getNumber($enumid); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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; } - $this->initRemoteReplicationEngine($number->reseller); - $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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - - // update remote if remote engine is set - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->updateNumber($result); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SoapEngineRemote->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - return false; - } else { - return true; - } - } else { - return true; - } + return true; } } } class DnsZones extends Records { - var $remote_engine_name='dns_engine_remote'; - 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' ) ); function DnsZones($SoapEngine) { dprint("init DnsZones"); $this->filters = array( 'name' => trim($_REQUEST['name_filter']), 'info' => trim($_REQUEST['info_filter']) ); $this->Records($SoapEngine); $this->sortElements=array('changeDate' => 'Change date', 'name' => 'Name' ); $this->Fields['nameservers'] = array('type'=>'text', 'name'=>'Name servers', 'help'=>'Authoritative name servers' ); - if ($this->reseller) { - dprint_r($this->SoapEngine->login_credentials['reseller_filters'][$this->reseller]); - - $dns_engine_remote=$this->SoapEngine->login_credentials['reseller_filters'][$this->reseller]['dns_engine_remote']; - - if (strlen($dns_engine_remote) && $this->SoapEngine->soapEngine != $dns_engine_remote) { - // replicate change - - if (in_array($dns_engine_remote,array_keys($this->SoapEngine->soapEngines))) { - $this->SOAPloginRemote = array( - "username" => $this->SoapEngine->soapEngines[$dns_engine_remote]['username'], - "password" => $this->SoapEngine->soapEngines[$dns_engine_remote]['password'], - "admin" => true, - "impersonate" => intval($this->reseller) - ); - - $this->SOAPurlRemote=$this->SoapEngine->soapEngines[$dns_engine_remote]['url']; - - $log=sprintf ("and syncronize changes to %s",$this->SOAPurlRemote,$this->SOAPurlRemote); - dprint($log); - - $this->SoapAuthRemote = array('auth', $this->SOAPloginRemote , 'urn:AGProjects:NGNPro', 0, ''); - - $this->SoapEngineRemote = new $this->SoapEngine->soap_class($this->SOAPurlRemote); - - if (strlen($this->soapEngines[$dns_engine_remote]['timeout'])) { - $this->SoapEngineRemote->_options['timeout'] = intval($this->soapEngines[$dns_engine_remote]['timeout']); - } else { - $this->SoapEngineRemote->_options['timeout'] = $this->soapTimeout; - } - - $this->SoapEngineRemote->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0); - $this->SoapEngineRemote->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0); - } - } - } - } 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); $result = $this->SoapEngine->soapclient->getZones($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->rows = $result->total; if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "

$this->rows records found

"; if (!$this->next) $this->next=0; if ($this->rows > $this->maxrowsperpage) { $maxrows = $this->maxrowsperpage + $this->next; if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage; } else { $maxrows=$this->rows; } $i=0; if ($this->rows) { while ($i < $maxrows) { if (!$result->zones[$i]) break; $zone = $result->zones[$i]; $index=$this->next+$i+1; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_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(" ", $bgcolor, $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 "
Id Customer Zone Administrator Info Serial Default TTL Change date Actions
%s %s.%s %s %s %s Records %s %s %s %s
"; if ($this->rows == 1 && $this->version > 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']; - if ($this->adminonly) { - $this->initRemoteReplicationEngine($this->filters['reseller']); - } else { - $this->initRemoteReplicationEngine($this->reseller); - } - $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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->deleteZone($name); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - return false; - } else { - return true; - } - } else { - return true; - } + return true; } } function showAddForm() { if ($this->selectionActive) return; print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements(); print "
"; print " "; $this->showCustomerTextBox(); printf (" DNS zone ",$_REQUEST['name']); print " "; print "
"; } function addRecord() { $name = trim($_REQUEST['name']); $info = trim($_REQUEST['info']); $name_servers = trim($_REQUEST['name_servers']); if (!strlen($name)) { printf ("

Error: Missing zone name. "); 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); - $this->initRemoteReplicationEngine($reseller); - 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 ); $deleteZone=array('name'=>$name); $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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->addZone($zone); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - unset($this->filters); - - return false; - } else { - return true; - } - } else { - return true; - } + return true; } } function showSeachFormCustom() { printf (" DNS zone",$this->filters['name']); printf (" Info",$this->filters['info']); } function showRecord($zone) { print ""; print "
"; printf ("",$_SERVER['PHP_SELF']); print ""; print ""; printf ("",$zone->name); if ($this->adminonly) { foreach (array_keys($this->FieldsAdminOnly) as $item) { if ($item == 'nameservers') { foreach ($zone->$item as $_item) { $nameservers.=$_item."\n"; } $item_value=$nameservers; } else { $item_value=$zone->$item; } if ($this->FieldsAdminOnly[$item]['name']) { $item_name=$this->FieldsAdminOnly[$item]['name']; } else { $item_name=ucfirst($item); } if ($this->FieldsAdminOnly[$item]['type'] == 'text') { printf ("", $item_name, $item, $item_value, $this->FieldsAdminOnly[$item]['help'] ); } else { printf ("", $item_name, $item, $item_value, $this->FieldsAdminOnly[$item]['help'] ); } } } foreach (array_keys($this->Fields) as $item) { if ($this->Fields[$item]['name']) { $item_name=$this->Fields[$item]['name']; } else { $item_name=ucfirst($item); } if ($item == 'nameservers') { foreach ($zone->$item as $_item) { $nameservers.=$_item."\n"; } $item_value=$nameservers; } else { $item_value=$zone->$item; } if ($this->Fields[$item]['type'] == 'text') { printf ("", $item_name, $item, $item_value, $this->Fields[$item]['help'] ); } else if ($this->Fields[$item]['readonly']) { printf ("", $item_name, $item_value, $this->Fields[$item]['help'] ); } else { printf ("", $item_name, $item, $item_value, $this->Fields[$item]['help'] ); } } printf ("",$zone->id->tld); printf ("",$zone->id->prefix); $this->printFiltersToForm(); $this->printHiddenFormElements(); print ""; print "
DNS zone%s
%s %s
%s %s
%s %s
%s %s %s
%s %s
"; } 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; } - $this->initRemoteReplicationEngine($zone->reseller); - $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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->updateZone($zone); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - unset($this->filters); - - return false; - } else { - return true; - } - } else { - return true; - } + 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); $result = $this->SoapEngine->soapclient->getZones($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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); // Call function $result = $this->SoapEngine->soapclient->getZones($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error 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->zones as $zone) { $this->selectionKeys[]=array('name' => $zone->name); } return true; } } } class DnsRecords extends Records { - var $remote_engine_name = 'dns_engine_remote'; 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( 'sipudp' => array('name' => 'SIP - UDP transport', 'records' => array( 'naptr' => array('name' => '', 'type' => 'NAPTR', 'priority'=> '30', 'value' => '10 30 "s" "SIP+D2U" "" _sip._udp' ), 'srv' => array('name' => '_sip._udp', 'type' => 'SRV', 'priority'=> '30', 'value' => '10 5060 #VALUE#|10 5060 sip' ) ), ), 'siptcp' => array('name' => 'SIP - TCP transport', 'records' => array( 'naptr' => array('name' => '', 'type' => 'NAPTR', 'priority'=> '20', 'value' => '10 20 "s" "SIP+D2T" "" _sip._tcp' ), 'srv' => array('name' => '_sip._tcp', 'type' => 'SRV', 'priority'=> '20', 'value' => '10 5060 #VALUE#|10 5060 sip' ) ), ), 'siptls' => array('name' => 'SIP - TLS transport', 'records' => array('srv' => array('name' => '_sips._tcp', 'type' => 'SRV', 'priority'=> '10', 'value' => '10 5061 #VALUE#|10 5061 sip' ), 'naptr' => array('name' => '', 'type' => 'NAPTR', 'priority'=> '10', 'value' => '10 10 "s" "SIPS+D2T" "" _sips._tcp' ) ) ), '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', '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', 'records' => array('srv' => array('name' => '_xmpp-client._tcp', 'type' => 'SRV', 'priority'=> '0', 'value' => '10 5222 #VALUE#|10 5222 xmpp' ) ), ), 'mediaproxy' => array('name' => 'MediaProxy - RTP relay', 'records' => array('srv' => array('name' => '_mediaproxy._tcp', 'type' => 'SRV', 'priority'=> '0', 'value' => '10 25060 #VALUE#|10 25060 mediaproxy' ) ), ), '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( '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' ), 'eventserver' => array('name' => '_eventserver._tcp', 'type' => 'SRV', 'priority'=> '10', 'value' => '0 8000 eventserver' ), 'evns1' => array('name' => 'eventserver', 'type' => 'NS', 'value' => 'ns1' ), 'evns2' => array('name' => 'eventserver', 'type' => 'NS', 'value' => 'ns2' ), 'evns3' => array('name' => 'eventserver', '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' ), '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' ) ) ) ); function DnsRecords($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']) ); } $this->Records($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); // Call function $result = call_user_func_array(array($this->SoapEngine->soapclient,$this->getRecordsFunction),array($Query)); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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 " "; } else { print " "; } 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; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_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(" ", $bgcolor, $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(" ", $bgcolor, $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 "
Customer Zone Id Name Type Value Owner Change date Actions
Customer Zone Id Name Type Priority Value TTL Change date Actions
%s %s.%s %s %s %s %s %s %s %s %s
%s %s.%s %s %s %s %s %s %s %s %s %s
"; 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 (" Zone",$this->filters['zone']); } if ($this->typeFilter) { printf (" Type %s ",$this->typeFilter,$this->typeFilter); } else { $selected_type[$this->filters['type']]='selected'; printf (" "; } 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; } - if ($this->adminonly) { - $this->initRemoteReplicationEngine($this->filters['reseller']); - } else { - $this->initRemoteReplicationEngine($this->reseller); - } - $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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = call_user_func_array(array($this->SoapEngineRemote,$this->deleteRecordFunction),array($id)); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - unset($this->filters); - } - } else { - return true; - } + 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; } } */ print "

"; printf ("",$_SERVER['PHP_SELF']); if ($this->adminonly) { printf (" ",$this->filters['reseller']); } print " "; $this->printHiddenFormElements(); print "
"; print " "; printf (" Name"); printf (" ",trim($_REQUEST['name'])); if (count($this->allowedDomains) > 0) { if ($_REQUEST['zone']) { $selected_zone[$_REQUEST['zone']]='selected'; } else if ($this->filters['zone']) { $selected_zone[$this->filters['zone']]='selected'; } else if ($_zone=$this->getCustomerProperty('dns_records_last_zone')) { $selected_zone[$_zone]='selected'; } print "."; } else { if ($_REQUEST['zone']) { $_zone_selected=$_REQUEST['zone']; } else if ($this->filters['zone']) { $_zone_selected=$this->filters['zone']; } else if ($_zone=$this->getCustomerProperty('dns_records_last_zone')) { $_zone_selected=$_zone; } printf (" Zone ",$_zone_selected); } if ($this->typeFilter) { printf ("Type %s ",$this->typeFilter,$this->typeFilter); } else { print "Type "; } printf (" Value",trim($_REQUEST['value'])); if (!$this->fancy) { printf (" Priority",trim($_REQUEST['priority'])); } print " "; print "
"; } 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); $result = $this->SoapEngine->soapclient->getZones($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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) { printf ("

Error: Missing zone name. "); } return false; } $this->filters['zone']=$zone; if (!strlen($type)) { if ($this->html) { printf ("

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']) { - $this->initRemoteReplicationEngine($dictionary['reseller']); } else if ($this->filters['reseller']) { - $this->initRemoteReplicationEngine($this->filters['reseller']); } else { if ($this->html) { printf ("

Error: Missing reseller, please first search zones for a given reseller "); } return false; } - } else { - $this->initRemoteReplicationEngine($this->reseller); } 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))) { if (!strlen($value)) { if ($this->html) { printf ("

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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); if ($this->html) { printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); } return false; } else { - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = call_user_func_array(array($this->SoapEngineRemote,$this->addRecordFunction),array($result)); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - if ($this->html) { - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - } - unset($this->filters); - - return false; - } else { - return true; - } - } else { - return true; - } + return true; } } else if (in_array($type,array_keys($this->recordTypesTemplate))) { 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'); } $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['value']), '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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); if ($this->html) { printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); } return false; } else { - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - - $result = call_user_func_array(array($this->SoapEngineRemote,$this->addRecordFunction),array($result)); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - if ($this->html) { - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - } - unset($this->filters); - } - } + return true; } } } else { if ($this->html) { printf ("

Error: Invalid or missing record type. "); } return false; } } 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); // Call function $result = $this->SoapEngine->soapclient->getRecords($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error 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->records as $record) { $this->selectionKeys[]=array('id' => $record->id); } return true; } } function showRecord($record) { print "

Record

"; print ""; printf ("",$_SERVER['PHP_SELF']); print ""; printf ("", $record->name); foreach (array_keys($this->Fields) as $item) { if (is_array($this->havePriority) && $item == 'priority' && !in_array($record->type,$this->havePriority)) continue; if ($this->Fields[$item]['name']) { $item_name=$this->Fields[$item]['name']; } else { $item_name=ucfirst($item); } if ($item == 'type') { $selected_type[$record->$item]='selected'; $select_box=sprintf(""; printf ("", $item_name, $select_box ); } else if ($this->Fields[$item]['type'] == 'text') { printf ("", $item_name, $item, $record->$item ); } else { printf ("", $item_name, $item, $record->$item ); } } printf ("",$record->id); $this->printFiltersToForm(); $this->printHiddenFormElements(); print " "; print ""; print "
Name%s
%s %s
%s
%s
"; } 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); // Call function $result = call_user_func_array(array($this->SoapEngine->soapclient,$this->getRecordsFunction),array($Query)); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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; } - $this->initRemoteReplicationEngine($record->reseller); - $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 (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { - if (is_object($this->SoapEngineRemote)) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - - $result = call_user_func_array(array($this->SoapEngineRemote,$this->updateRecordFunction),array($result)); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - unset($this->filters); - - return false; - } else { - return true; - } - } else { - return true; - } + return true; } } } 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 { function TrustedPeers($SoapEngine) { $this->filters = array('ip' => trim($_REQUEST['ip_filter']), 'description' => trim($_REQUEST['description_filter']) ); $this->Records($SoapEngine); if ($this->version > 1) { $this->sortElements=array( 'changeDate' => 'Change date', 'description' => 'Description', 'ip' => 'IP address' ); } else { $this->sortElements=array( 'description' => 'Description', 'ip' => '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'] ); // 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 $result = $this->SoapEngine->soapclient->getTrustedPeers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->rows = $result->total; if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "
$this->rows records found

"; if (!$this->next) $this->next=0; if ($this->rows > $this->maxrowsperpage) { $maxrows = $this->maxrowsperpage + $this->next; if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage; } else { $maxrows=$this->rows; } $i=0; if ($this->rows) { while ($i < $maxrows) { if (!$result->peers[$i]) break; $peer = $result->peers[$i]; $index=$this->next+$i+1; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_url = $this->url.sprintf("&service=%s&action=Delete&ip_filter=%s", urlencode($this->SoapEngine->service), urlencode($peer->ip) ); if ($_REQUEST['action'] == 'Delete' && $_REQUEST['ip_filter'] == $peer->ip) { $_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($peer->reseller) ); printf(" ", $bgcolor, $index, $_customer_url, $peer->reseller, $peer->ip, $peer->protocol, $peer->description, $peer->changeDate, $_url, $actionText ); $i++; } } print "
Id Reseller IP address Protocol Description Change date Actions
%s %s %s %s %s %s %s
"; $this->showPagination($maxrows); return true; } } function showAddForm() { //if ($this->selectionActive) return; print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements(); print "
"; print " "; $this->showCustomerTextBox(); printf (" IP address"); printf (" Description"); print " "; print "
"; } function addRecord($dictionary=array()) { if ($dictionary['ipaddress']) { $ipaddress = $dictionary['ipaddress']; } else { $ipaddress = trim($_REQUEST['ipaddress']); } if ($dictionary['description']) { $description = $dictionary['description']; } else { $description = trim($_REQUEST['description']); } if ($dictionary['owner']) { $owner = $dictionary['owner']; } else { $owner = trim($_REQUEST['owner']); } list($customer,$reseller)=$this->customerFromLogin($dictionary); if (!strlen($ipaddress) || !strlen($description)) { printf ("

Error: Missing IP or description. "); return false; } $peer=array( 'ip' => $ipaddress, 'description' => $description, '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 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() { printf (" IP address",$this->filters['ip']); printf (" Description",$this->filters['description']); } function showCustomerTextBox () { print "Reseller"; $this->showResellerForm('reseller'); } function showTextBeforeCustomerSelection() { print "Reseller"; } function showCustomerForm() { } } 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' ); function Carriers($SoapEngine) { $this->filters = array('id' => trim($_REQUEST['id_filter']), 'name' => trim($_REQUEST['name_filter']) ); $this->Records($SoapEngine); } function showCustomerTextBox () { print "Reseller"; $this->showResellerForm('reseller'); } 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 $result = $this->SoapEngine->soapclient->getCarriers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->rows = $result->total; print "
$this->rows records found

"; print " "; 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; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_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(" ", $bgcolor, $index, $_customer_url, $carrier->reseller, $_url, $carrier->id, $carrier->name, $_gateway_url, $carrier->changeDate, $_delete_url, $actionText ); printf(" "); $i++; } } print "
Id Reseller Carrier Name Gateways Change date Actions
%s %s %s %s Gateways %s %s
"; if ($this->rows == 1) { $this->showRecord($carrier); } else { $this->showPagination($maxrows); } return true; } } function showAddForm() { //if ($this->selectionActive) return; print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements(); print "
"; print " "; $this->showCustomerTextBox(); printf (" Name "); print " "; print "
"; } function addRecord($dictionary=array()) { if ($dictionary['name']) { $name=$dictionary['name']; } else { $name = trim($_REQUEST['name']); } list($customer,$reseller)=$this->customerFromLogin($dictionary); $structure=array('name' => $name, 'reseller' => intval($reseller) ); if (!strlen($name)) { printf ("

Error: Missing name. "); return false; } $function=array('commit' => array('name' => 'addCarrier', 'parameters' => array($structure), 'logs' => array('success' => sprintf('Carrier %s has been added',$name))) ); 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 ($dictionary['id']) { $id = $dictionary['id']; } else { $id = trim($this->filters['id']); } if (!strlen($id)) { print "

Error: missing carrier id "; return false; } $function=array('commit' => array('name' => 'deleteCarrier', 'parameters' => array(intval($id)), 'logs' => array('success' => sprintf('Carrier %d has been deleted',$id))) ); unset($this->filters); return $this->SoapEngine->execute($function,$this->html); } function showSeachFormCustom() { printf (" Carrier ",$this->filters['id']); printf (" Name ",$this->filters['name']); } function showCustomerForm() { } function showTextBeforeCustomerSelection() { print "Reseller"; } function getRecord($id) { // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Filter $filter=array('id' => intval($id)); // Range $range=array('start' => 0, 'count' => 1 ); // Order if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'name'; 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 $result = $this->SoapEngine->soapclient->getCarriers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($result->carriers[0]){ return $result->carriers[0]; } else { return false; } } } function showRecord($carrier) { print ""; print ""; print ""; print ""; print ""; print ""; print ""; print " "; print ""; print "
"; print "

Carrier

"; print "
"; print ""; printf ("",$_SERVER['PHP_SELF']); print ""; foreach (array_keys($this->Fields) as $item) { if ($this->Fields[$item]['name']) { $item_name=$this->Fields[$item]['name']; } else { $item_name=ucfirst($item); } printf ("", $item, $carrier->$item, $carrier->$item ); } else { printf ("", $item, $carrier->$item ); } print " "; } printf ("",$carier->id); $this->printFiltersToForm(); $this->printHiddenFormElements(); print "
%s ", $item_name ); if ($this->Fields[$item]['readonly']) { printf ("%s
"; print "
"; } function updateRecord () { //print "

Updating carrier ..."; if (!$_REQUEST['id_filter']) return; if (!$carrier = $this->getRecord($_REQUEST['id_filter'])) { return false; } foreach (array_keys($this->Fields) as $item) { $var_name=$item.'_form'; if ($this->Fields[$item]['type'] == 'integer') { $carrier->$item = intval($_REQUEST[$var_name]); } else { $carrier->$item = trim($_REQUEST[$var_name]); } } $function=array('commit' => array('name' => 'updateCarrier', 'parameters' => array($carrier), 'logs' => array('success' => sprintf('Carrier %d has been updated',$_REQUEST['id_filter']))) ); $result = $this->SoapEngine->execute($function,$this->html); dprint_r($result) ; if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { return true; } } } class Gateways extends Records { var $carriers=array(); var $FieldsReadOnly=array( 'reseller', 'changeDate' ); var $Fields=array( 'id' => array('type'=>'integer', 'readonly' => true), 'name' => array('type'=>'string'), 'carrier_id' => array('type'=>'integer'), 'transport' => array('type'=>'string'), 'ip' => array('name'=>'IP or hostname', 'type'=>'string'), 'port' => array('type'=>'integer') ); //var $transports=array('udp','tcp','tls'); var $transports=array('udp'); function Gateways($SoapEngine) { $this->filters = array( 'id' => trim($_REQUEST['id_filter']), 'name' => trim($_REQUEST['name_filter']), 'carrier_id' => trim($_REQUEST['carrier_id_filter']) ); $this->sortElements=array( 'changeDate' => 'Change date', 'name' => 'Gateway', 'carrier_id' => 'Carrier', 'ip' => 'Address' ); $this->Records($SoapEngine); } function listRecords() { $this->getCarriers(); $this->showSeachForm(); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Filter $filter=array('id' => intval($this->filters['id']), 'name' => $this->filters['name'], 'carrier_id'=> intval($this->filters['carrier_id']), '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 ); // Call function $result = $this->SoapEngine->soapclient->getGateways($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->rows = $result->total; print "
$this->rows records found

"; print " "; 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->gateways[$i]) break; $gateway = $result->gateways[$i]; $index=$this->next+$i+1; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_delete_url = $this->url.sprintf("&service=%s&action=Delete&id_filter=%s", urlencode($this->SoapEngine->service), urlencode($gateway->id) ); if ($_REQUEST['action'] == 'Delete' && $_REQUEST['id_filter'] == $gateway->id) { $_delete_url .= "&confirm=1"; $actionText = "Confirm"; } else { $actionText = "Delete"; } $_url = $this->url.sprintf("&service=%s&id_filter=%s", urlencode($this->SoapEngine->service), urlencode($gateway->id) ); $_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s", urlencode($this->SoapEngine->customer_engine), urlencode($gateway->reseller) ); $_carrier_url = $this->url.sprintf("&service=pstn_carriers@%s&id_filter=%s&reseller_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($gateway->carrier_id), urlencode($gateway->reseller) ); $_rules_url = $this->url.sprintf("&service=gateway_rules@%s&gateway_id_filter=%s&reseller_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($gateway->id), urlencode($gateway->reseller) ); $_r=0; printf(" ", $bgcolor, $index, $_customer_url, $gateway->reseller, $_url, $gateway->id, $_carrier_url, $gateway->carrier, $gateway->name, $gateway->transport, $gateway->ip, $gateway->port, $_rules_url, $gateway->changeDate, $_delete_url, $actionText ); printf(" "); $i++; } } print "
Id Reseller Gateway Carrier Name Address Rules Change date Actions
%s %s %s %s %s %s:%s:%s Rules %s %s
"; if ($this->rows == 1) { $this->showRecord($gateway); } else { $this->showPagination($maxrows); } return true; } } function showAddForm() { //if ($this->selectionActive) return; $this->getCarriers(); if (!count($this->carriers)) { print "

Create a carrier first"; return false; } print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements(); print "
"; print " "; printf (" Carrier "); print ""); printf (" Name "); printf (" Transport "); print ""); printf (" Address"); print " "; print "
"; } function addRecord($dictionary=array()) { if ($dictionary['name']) { $name = $dictionary['name']; } else { $name = trim($_REQUEST['name']); } if ($dictionary['carrier_id']) { $carrier_id = $dictionary['carrier_id']; } else { $carrier_id = trim($_REQUEST['carrier_id']); } if ($dictionary['address']) { $address = $dictionary['address']; } else { $address = trim($_REQUEST['address']); } if ($dictionary['transport']) { $transport = $dictionary['transport']; } else { $transport = trim($_REQUEST['transport']); } if (!strlen($name) || !strlen($carrier_id) || !strlen($address)) { printf ("

Error: Missing gateway name, carrier_id or address"); return false; } $address_els=explode(':',$address); if (count($address_els) == 1) { $ip = $address_els[0]; $port ='5060'; } else if (count($address_els) == 2) { $ip = $address_els[0]; $port = $address_els[1]; } if (!$port) $port = 5060; if (!in_array($transport,$this->transports)) { $transport=$this->transports[0]; } $gateway=array( 'name' => $name, 'carrier_id' => intval($carrier_id), 'ip' => $ip, 'port' => intval($port), 'transport' => $transport ); $function=array('commit' => array('name' => 'addGateway', 'parameters' => array($gateway), 'logs' => array('success' => sprintf('Gateway %s has been added',$name))) ); unset($this->filters); 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 ($dictionary['id']) { $id = $dictionary['id']; } else { $id = trim($this->filters['id']); } if (!strlen($id)) { print "

Error: missing gateway id. "; return false; } $function=array('commit' => array('name' => 'deleteGateway', 'parameters' => array(intval($id)), 'logs' => array('success' => sprintf('Gateway %d has been deleted',$id))) ); unset($this->filters); return $this->SoapEngine->execute($function,$this->html); } function showSeachFormCustom() { printf (" Gateway ",$this->filters['id']); print " "); printf (" Name ",$this->filters['name']); } function showCustomerForm() { } function showTextBeforeCustomerSelection() { print "Reseller"; } function showRecord($gateway) { print ""; print ""; print ""; print ""; print ""; print ""; print ""; print " "; print ""; print "
"; print "

Gateway

"; print "
"; print ""; printf ("",$_SERVER['PHP_SELF']); print ""; foreach (array_keys($this->Fields) as $item) { if ($this->Fields[$item]['name']) { $item_name=$this->Fields[$item]['name']; } else { $item_name=ucfirst($item); } printf ("", $item, $gateway->$item, $gateway->$item ); } else { if ($item == 'carrier_id') { printf (""); } else if ($item == 'transport') { printf (""; } else { printf ("", $item, $gateway->$item ); } } print " "; } printf ("",$gateway->id); $this->printFiltersToForm(); $this->printHiddenFormElements(); print "
%s ", $item_name ); if ($this->Fields[$item]['readonly']) { printf ("%s
"; print "
"; } function updateRecord () { //print "

Updating gateway ..."; if (!$_REQUEST['id_filter']) return; if (!$gateway = $this->getRecord($_REQUEST['id_filter'])) { return false; } foreach (array_keys($this->Fields) as $item) { $var_name=$item.'_form'; if ($this->Fields[$item]['type'] == 'integer') { $gateway->$item = intval($_REQUEST[$var_name]); } else { $gateway->$item = trim($_REQUEST[$var_name]); } } if (!in_array($gateway->transport,$this->transports)) { printf ("Invalid transport '%s'",$gateway->transport); return false; } $function=array('commit' => array('name' => 'updateGateway', 'parameters' => array($gateway), 'logs' => array('success' => sprintf('Gateway %s has been updated',$_REQUEST['name_filter']))) ); $result = $this->SoapEngine->execute($function,$this->html); dprint_r($result) ; if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { return true; } } function getRecord($id) { // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Filter $filter=array('id' => intval($id)); // Range $range=array('start' => 0, 'count' => 1 ); // Order if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'name'; 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 $result = $this->SoapEngine->soapclient->getGateways($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($result->gateways[0]){ return $result->gateways[0]; } else { return false; } } } } class GatewayRules extends Records { var $carriers=array(); var $FieldsReadOnly=array( 'reseller', 'changeDate' ); var $Fields=array( 'id' => array('type'=>'integer','readonly' => true), 'gateway_id' => array('type'=>'integer','name' => 'Gateway'), 'prefix' => array('type'=>'string'), 'strip' => array('type'=>'integer'), 'prepend' => array('type'=>'string'), 'minLength' => array('type'=>'integer'), 'maxLength' => array('type'=>'integer') ); function GatewayRules($SoapEngine) { $this->filters = array('id' => trim($_REQUEST['id_filter']), 'gateway_id' => trim($_REQUEST['gateway_id_filter']), 'carrier_id' => trim($_REQUEST['carrier_id_filter']), 'prefix' => trim($_REQUEST['prefix_filter']), ); $this->sortElements=array( 'changeDate' => 'Change date', 'gateway' => 'Gateway', 'carrier' => 'Carrier', 'prefix' => 'Prefix' ); $this->Records($SoapEngine); } function listRecords() { $this->getCarriers(); $this->showSeachForm(); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Filter $filter=array('id' => intval($this->filters['id']), 'gateway_id' => intval($this->filters['gateway_id']), 'carrier_id' => intval($this->filters['carrier_id']), 'prefix' => $this->filters['prefix'], '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'] = 'ASC'; $orderBy = array('attribute' => $this->sorting['sortBy'], 'direction' => $this->sorting['sortOrder'] ); // Compose query $Query=array('filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); $result = $this->SoapEngine->soapclient->getGatewayRules($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->rows = $result->total; print "
$this->rows records found

"; print " "; 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->gateway_rules[$i]) break; $gateway_rule = $result->gateway_rules[$i]; $index=$this->next+$i+1; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_delete_url = $this->url.sprintf("&service=%s&action=Delete&id_filter=%s&reseller_filter=%s", urlencode($this->SoapEngine->service), urlencode($gateway_rule->id), urlencode($gateway_rule->reseller) ); if ($_REQUEST['action'] == 'Delete' && $_REQUEST['id_filter'] == $gateway_rule->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($gateway_rule->id), urlencode($gateway_rule->reseller) ); $_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s", urlencode($this->SoapEngine->customer_engine), urlencode($gateway_rule->reseller) ); $_carrier_url = $this->url.sprintf("&service=pstn_carriers@%s&id_filter=%s&reseller_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($gateway_rule->carrier_id), urlencode($gateway_rule->reseller) ); $_gateway_url = $this->url.sprintf("&service=pstn_gateways@%s&id_filter=%s&reseller_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($gateway_rule->gateway_id), urlencode($gateway_rule->reseller) ); printf(" ", $bgcolor, $index, $_customer_url, $gateway_rule->reseller, $_url, $gateway_rule->id, $_carrier_url, $gateway_rule->carrier,$gateway_rule->carrier_id, $_gateway_url, $gateway_rule->gateway,$gateway_rule->gateway_id, $gateway_rule->prefix, $gateway_rule->strip, $gateway_rule->prepend, $gateway_rule->minLength, $gateway_rule->maxLength, $gateway_rule->changeDate, $_delete_url, $actionText ); printf(" "); $i++; } } print "
Reseller Rule Carrier Gateway Prefix Strip Prepend MinLength MaxLength Change date Actions
%s %s %s %s (%d) %s (%d) %s %s %s %s %s %s %s
"; if ($this->rows == 1) { $this->showRecord($gateway_rule); } else { $this->showPagination($maxrows); } return true; } } function showAddForm() { //if ($this->selectionActive) return; $this->getGateways(); if (!count($this->gateways)) { print "

Create a gateway first"; return false; } print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements(); print "
"; print " "; print "Gateway "); printf (" Prefix "); printf (" Strip "); printf (" Prepend "); printf (" Min length "); printf (" Max length "); print "
"; } function addRecord($dictionary=array()) { if ($dictionary['gateway_id']) { $gateway_id = $dictionary['gateway_id']; } else { $gateway_id = trim($_REQUEST['gateway_id']); } if ($dictionary['prefix']) { $prefix = $dictionary['prefix']; } else { $prefix = trim($_REQUEST['prefix']); } if ($dictionary['strip']) { $strip = $dictionary['strip']; } else { $strip = trim($_REQUEST['strip']); } if ($dictionary['prepend']) { $prepend = $dictionary['prepend']; } else { $prepend = trim($_REQUEST['prepend']); } if ($dictionary['minLength']) { $minLength = $dictionary['minLength']; } else { $minLength = trim($_REQUEST['minLength']); } if ($dictionary['maxLength']) { $maxLength = $dictionary['maxLength']; } else { $maxLength = trim($_REQUEST['maxLength']); } if (!strlen($gateway_id)) { printf ("

Error: Missing gateway id"); return false; } $rule=array( 'gateway_id' => intval($gateway_id), 'prefix' => $prefix, 'prepend' => $prepend, 'strip' => intval($strip), 'minLength' => intval($minLength), 'maxLength' => intval($maxLength) ); $function=array('commit' => array('name' => 'addGatewayRule', 'parameters' => array($rule), 'logs' => array('success' => sprintf('Gateway rule has been added'))) ); unset($this->filters); 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 ($dictionary['id']) { $id = $dictionary['id']; } else { $id = trim($this->filters['id']); } if (!strlen($id)) { print "

Error: missing rule id "; return false; } $function=array('commit' => array('name' => 'deleteGatewayRule', 'parameters' => array(intval($id)), 'logs' => array('success' => sprintf('Gateway rule %d has been deleted',$id))) ); unset($this->filters); return $this->SoapEngine->execute($function,$this->html); } function showSeachFormCustom() { printf (" Rule ",$this->filters['id']); print " "); printf (" Gateway ",$this->filters['gateway_id']); printf (" Prefix ",$this->filters['prefix']); } function showCustomerForm() { } function showTextBeforeCustomerSelection() { print "Reseller"; } function showRecord($rule) { $this->getGateways(); print ""; print ""; print ""; print ""; print ""; print ""; print ""; print " "; print ""; print "
"; print "

Rule

"; print "
"; print ""; printf ("",$_SERVER['PHP_SELF']); print ""; foreach (array_keys($this->Fields) as $item) { if ($this->Fields[$item]['name']) { $item_name=$this->Fields[$item]['name']; } else { $item_name=ucfirst($item); } printf ("", $item, $rule->$item, $rule->$item ); } else { if ($item == 'gateway_id') { printf (""; } else { printf ("", $item, $rule->$item ); } } print " "; } printf ("",$rule->reseller); $this->printFiltersToForm(); $this->printHiddenFormElements(); print "
%s ", $item_name ); if ($this->Fields[$item]['readonly']) { printf ("%s
"; print "
"; } function updateRecord () { //print "

Updating rule ..."; if (!$_REQUEST['id_form'] || !strlen($_REQUEST['reseller_filter'])) { return; } if (!$rule = $this->getRecord($_REQUEST['id_form'])) { return false; } foreach (array_keys($this->Fields) as $item) { $var_name=$item.'_form'; if ($this->Fields[$item]['type'] == 'integer') { $rule->$item = intval($_REQUEST[$var_name]); } else { $rule->$item = trim($_REQUEST[$var_name]); } } $function=array('commit' => array('name' => 'updateGatewayRule', 'parameters' => array($rule), 'logs' => array('success' => sprintf('Rule %d has been updated',$_REQUEST['id_form']))) ); $result = $this->SoapEngine->execute($function,$this->html); dprint_r($result) ; if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { return true; } } function getRecord($id) { // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Filter $filter=array('id' => intval($id)); // Range $range=array('start' => 0, 'count' => 1 ); // Order $this->sorting['sortBy'] = 'gateway'; $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 $result = $this->SoapEngine->soapclient->getGatewayRules($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($result->gateway_rules[0]){ return $result->gateway_rules[0]; } else { return false; } } } } class Routes extends Records { var $carriers=array(); var $Fields=array( 'id' => array('type'=>'integer', 'readonly' => true), 'carrier_id' => array('type'=>'integer','name'=>'Carrier'), 'prefix' => array('type'=>'string'), 'originator' => array('type'=>'string'), 'priority' => array('type'=>'integer') ); var $sortElements=array( 'prefix' => 'Prefix', 'priority' => 'Priority' ); function Routes($SoapEngine) { $this->filters = array('prefix' => trim($_REQUEST['prefix_filter']), 'priority' => trim($_REQUEST['priority_filter']), 'carrier_id'=> trim($_REQUEST['carrier_id_filter']), 'reseller' => trim($_REQUEST['reseller_filter']), 'id' => trim($_REQUEST['id_filter']) ); $this->Records($SoapEngine); } function listRecords() { $this->getCarriers(); $this->showSeachForm(); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Filter $filter=array('prefix' => $this->filters['prefix'], 'carrier_id' => intval($this->filters['carrier_id']), 'reseller' => intval($this->filters['reseller']), 'id' => intval($this->filters['id']) ); // Range $range=array('start' => intval($this->next), 'count' => intval($this->maxrowsperpage) ); // Order if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'prefix'; 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 $result = $this->SoapEngine->soapclient->getRoutes($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->rows = $result->total; print "
$this->rows records found

"; print " "; 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->routes[$i]) break; $route = $result->routes[$i]; $index=$this->next+$i+1; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_delete_url = $this->url.sprintf("&service=%s&action=Delete&id_filter=%d", urlencode($this->SoapEngine->service), urlencode($route->id) ); if ($_REQUEST['action'] == 'Delete' && $_REQUEST['id_filter'] == $route->id) { $_delete_url .= "&confirm=1"; $actionText = "Confirm"; } else { $actionText = "Delete"; } $_url = $this->url.sprintf("&service=%s&id_filter=%d", urlencode($this->SoapEngine->service), urlencode($route->id) ); $_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s", urlencode($this->SoapEngine->customer_engine), urlencode($route->reseller) ); $_carrier_url = $this->url.sprintf("&service=pstn_carriers@%s&id_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($route->carrier_id) ); $_gateway_url = $this->url.sprintf("&service=pstn_gateways@%s&carrier_id_filter=%s&reseller_filter=%s", urlencode($this->SoapEngine->soapEngine), urlencode($route->carrier_id), urlencode($route->reseller) ); printf(" ", $bgcolor, $index, $_customer_url, $route->reseller, $_url, $route->id, $_carrier_url, $route->carrier, $_gateway_url, $route->prefix, $route->originator, $route->priority, $route->changeDate, $_delete_url, $actionText ); printf(" "); $i++; } } print "
Id Reseller Route Carrier Gateways Prefix Originator Priority Change date Actions
%s %s %s %s Gateways %s %s %s %s %s
"; if ($this->rows == 1) { $this->showRecord($route); } else { $this->showPagination($maxrows); } return true; } } function showAddForm() { //if ($this->selectionActive) return; if (!count($this->carriers)) { print "

Create a carrier first"; return false; } print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements(); print "
"; print " "; printf (" Carrier: "); print ""); printf (" Prefix "); printf (" Originator "); printf (" Priority "); print " "; print "
"; } function addRecord($dictionary=array()) { if ($dictionary['prefix']) { $prefix = $dictionary['prefix']; } else { $prefix = trim($_REQUEST['prefix']); } if ($dictionary['carrier_id']) { $carrier_id = $dictionary['carrier_id']; } else { $carrier_id = trim($_REQUEST['carrier_id']); } if ($dictionary['originator']) { $originator = $dictionary['originator']; } else { $originator = trim($_REQUEST['originator']); } if ($dictionary['priority']) { $priority = $dictionary['priority']; } else { $priority = trim($_REQUEST['priority']); } if (!strlen($carrier_id)) { printf ("

Error: Missing carrier id. "); return false; } $route=array( 'prefix' => $prefix, 'originator' => $originator, 'carrier_id' => intval($carrier_id), 'priority' => intval($priority) ); $routes=array($route); $function=array('commit' => array('name' => 'addRoutes', 'parameters' => array($routes), 'logs' => array('success' => sprintf('Route %s has been added',$prefix))) ); unset($this->filters); 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 ($dictionary['id']) { $id = $dictionary['id']; } else { $id = trim($this->filters['id']); } if (!strlen($id)) { print "

Error: missing route id. "; return false; } $route=array('id'=> intval($id)); $routes=array($route); $function=array('commit' => array('name' => 'deleteRoutes', 'parameters' => array($routes), 'logs' => array('success' => sprintf('Route %s has been deleted',$prefix))) ); unset($this->filters); return $this->SoapEngine->execute($function,$this->html); } function showSeachFormCustom() { printf (" Route ",$this->filters['id']); print " "; printf (" Prefix",$this->filters['prefix']); } function showCustomerTextBox () { print "Reseller"; $this->showResellerForm('reseller'); } function showCustomerForm() { } function showTextBeforeCustomerSelection() { print "Reseller"; } function getRecord($id) { // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Filter $filter=array('id' => intval($id)); // Range $range=array('start' => 0, 'count' => 1 ); // Order if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'prefix'; 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 $result = $this->SoapEngine->soapclient->getRoutes($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { if ($result->routes[0]){ return $result->routes[0]; } else { return false; } } } function showRecord($route) { print ""; print ""; print ""; print ""; print ""; print ""; print ""; print " "; print ""; print "
"; print "

Route

"; print "
"; print ""; printf ("",$_SERVER['PHP_SELF']); print ""; foreach (array_keys($this->Fields) as $item) { if ($this->Fields[$item]['name']) { $item_name=$this->Fields[$item]['name']; } else { $item_name=ucfirst($item); } printf ("", $item, $route->$item, $route->$item ); } else { if ($item == 'carrier_id') { printf (""); } else { printf ("", $item, $route->$item ); } } print " "; } printf ("",$carier->id); $this->printFiltersToForm(); $this->printHiddenFormElements(); print "
%s ", $item_name ); if ($this->Fields[$item]['readonly']) { printf ("%s
"; print "
"; } function updateRecord () { //print "

Updating route ..."; if (!$_REQUEST['id_filter']) return; if (!$route = $this->getRecord($_REQUEST['id_filter'])) { return false; } foreach (array_keys($this->Fields) as $item) { $var_name=$item.'_form'; if ($this->Fields[$item]['type'] == 'integer') { $route->$item = intval($_REQUEST[$var_name]); } else { $route->$item = trim($_REQUEST[$var_name]); } } $routes=array($route); $function=array('commit' => array('name' => 'updateRoutes', 'parameters' => array($routes), 'logs' => array('success' => sprintf('Route %d has been updated',$_REQUEST['id_filter']))) ); $result = $this->SoapEngine->execute($function,$this->html); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { return true; } } } class Customers extends Records { var $children = array(); var $showAddForm = false; var $sortElements = array( 'changeDate' => 'Change date', 'username' => 'Username', 'firstName' => 'First name', 'lastName' => 'Last name', 'organization' => 'Organization', 'customer' => 'Customer' ); var $propertiesItems = array('sip_credit' => array('name' => 'Credit for SIP accounts', 'category' => 'credit', 'permission' => 'admin', 'resellerMayManageForChildAccounts' => true ), 'sip_alias_credit' => array('name' => 'Credit for SIP aliases', 'category' => 'credit', 'permission' => 'admin', 'resellerMayManageForChildAccounts' => true ), 'enum_range_credit' => array('name' => 'Credit for ENUM ranges', 'category' => 'credit', 'permission' => 'admin', 'resellerMayManageForChildAccounts' => true ), 'enum_number_credit' => array('name' => 'Credit for ENUM numbers', 'category' => 'credit', 'permission' => 'admin', 'resellerMayManageForChildAccounts' => true ), 'dns_zone_credit' => array('name' => 'Credit for DNS zones', 'category' => 'credit', 'permission' => 'admin', 'resellerMayManageForChildAccounts' => true ), 'email_credit' => array('name' => 'Credit for E-mail aliases', 'category' => 'credit', 'permission' => 'admin', 'resellerMayManageForChildAccounts' => true ), 'pstn_access' => array('name' => 'Access to PSTN', 'category' => 'sip', 'permission' => 'admin', 'resellerMayManageForChildAccounts' => true ), 'sms_access' => array('name' => 'Access to SMS', 'category' => 'sip', 'permission' => 'admin', 'resellerMayManageForChildAccounts' => true ), 'prepaid_changes' => array('name' => 'Prepaid Changes', 'category' => 'sip', 'permission' => 'admin', 'resellerMayManageForChildAccounts' => true ), 'payment_processor_class' => array('name' => 'Payment Processor Class', 'category' => 'sip', 'permission' => 'admin' ), 'voicemail_server' => array('name' => 'Voicemail Server Address', 'category' => 'sip', 'permission' => 'customer' ), 'voicemail_access_number' => array('name' => 'Voicemail Access Number', 'category' => 'sip', 'permission' => 'customer' ), 'FUNC_access_number' => array('name' => 'Forwarding Unconditional Access Number', 'category' => 'sip', 'permission' => 'customer' ), 'FNOL_access_number' => array('name' => 'Forwarding Not-Online Access Number', 'category' => 'sip', 'permission' => 'customer' ), 'FNOA_access_number' => array('name' => 'Forwarding Not-Available Access Number', 'category' => 'sip', 'permission' => 'customer' ), 'FBUS_access_number' => array('name' => 'Forwarding On Busy Access Number', 'category' => 'sip', 'permission' => 'customer' ), 'change_privacy_access_number' => array('name' => 'Change privacy Access Number', 'category' => 'sip', 'permission' => 'customer' ), 'check_privacy_access_number' => array('name' => 'Check privacy Access Number', 'category' => 'sip', 'permission' => 'customer' ), 'reject_anonymous_access_number' => array('name' => 'Reject anonymous Access Number', 'category' => 'sip', 'permission' => 'customer' ), 'sip_proxy' => array('name' => 'SIP Proxy Address', 'category' => 'sip', 'permission' => 'customer' ), 'store_clear_text_passwords' => array('name' => 'Store clear text passwords', 'category' => 'sip', 'permission' => 'customer' ), 'xcap_root' => array('name' => 'XCAP Root URL', 'category' => 'sip', 'permission' => 'customer' ), 'absolute_voicemail_uri'=> array('name' => 'Use Absolute Voicemail Uri', 'category' => 'sip', 'permission' => 'customer' ), 'dns_admin_email' => array('name' => 'DNS zones Administrator Email', 'category' => 'dns', 'permission' => 'customer'), 'support_web' => array('name' => 'Support Web Site', 'category' => 'sip', 'permission' => 'customer' ), 'support_email' => array('name' => 'Support Email Address', 'category' => 'sip', 'permission' => 'customer' ), 'billing_email' => array('name' => 'Billing Email Address', 'category' => 'sip', 'permission' => 'customer' ), 'support_company' => array('name' => 'Support Organization', 'category' => 'sip', 'permission' => 'customer' ), 'cdrtool_address' => array('name' => 'CDRTool Address', 'category' => 'sip', 'permission' => 'customer' ), 'sip_settings_page' => array('name' => 'SIP Settings Page', 'category' => 'sip', 'permission' => 'customer' ), 'digest_settings_page' => array('name' => 'Settings Page (Digest Auth)', 'category' => 'sip', 'permission' => 'reseller' ), 'records_per_page' => array('name' => 'Records per page', 'category' => 'web', 'permission' => 'customer' ) ); var $FieldsReadOnly=array( 'id' => array('type'=>'integer'), 'reseller' => array('type'=>'integer') ); var $Fields=array( 'resellerActive' => array ('type' => 'boolean', 'name' => 'Reseller active', 'adminonly' => true ), 'impersonate' => array('type' =>'integer', 'name' =>'Impersonate'), 'companyCode' => array('type' =>'text', 'name' =>'Company code', 'adminonly' => true ), 'balance' => array('type' => 'float', 'adminonly' => true ), 'credit' => array('type' => 'float', 'adminonly' => true ), 'username' => array('type' =>'text' ), 'password' => array('type'=>'text', 'name'=>'Password'), 'firstName' => array('type'=>'text', 'name'=>'First name'), 'lastName' => array('type'=>'text', 'name'=>'Last name'), 'organization'=> array('type'=>'text'), 'tel' => array('type'=>'text'), 'fax' => array('type'=>'text'), 'sip' => array('type'=>'text'), 'enum' => array('type'=>'text'), 'mobile' => array('type'=>'text'), 'email' => array('type'=>'text'), 'web' => array('type'=>'text'), 'address' => array('type'=>'textarea'), 'postcode' => array('type'=>'text'), 'city' => array('type'=>'text'), 'state' => array('type'=>'text'), 'country' => array('type'=>'text'), 'timezone' => array('type'=>'text'), 'language' => array('type'=>'text'), 'vatNumber' => array('type'=>'text', 'name'=>'VAT number'), 'bankAccount' => array('type'=>'text', 'name'=>'Bank account' ), 'billingEmail' => array('type'=>'text', 'name'=>'Billing email' ), 'billingAddress' => array('type'=>'textarea', 'name'=>'Billing address' ) ); var $addFields=array( 'username' => array('type' =>'text' ), 'password' => array('type'=>'text', 'name'=>'Password'), 'firstName' => array('type'=>'text', 'name'=>'First name'), 'lastName' => array('type'=>'text', 'name'=>'Last name'), 'organization'=> array('type'=>'text'), 'tel' => array('type'=>'text'), 'email' => array('type'=>'text'), 'address' => array('type'=>'textarea'), 'postcode' => array('type'=>'text'), 'city' => array('type'=>'text'), 'state' => array('type'=>'text'), 'country' => array('type'=>'text'), 'timezone' => array('type'=>'text'), ); var $states=array( array("label"=>"", "value"=>"N/A"), array("label"=>"-- CANADA --", "value"=>"-"), array("label"=>"Alberta", "value"=>"AB"), array("label"=>"British Columbia", "value"=>"BC"), array("label"=>"Manitoba", "value"=>"MB"), array("label"=>"New Brunswick", "value"=>"NB"), array("label"=>"Newfoundland/Labrador", "value"=>"NL"), array("label"=>"Northwest Territory", "value"=>"NT"), array("label"=>"Nova Scotia", "value"=>"NS"), array("label"=>"Nunavut", "value"=>"NU"), array("label"=>"Ontario", "value"=>"ON"), array("label"=>"Prince Edward Island", "value"=>"PE"), array("label"=>"Quebec", "value"=>"QC"), array("label"=>"Saskatchewan", "value"=>"SN"), array("label"=>"Yukon", "value"=>"YT"), array("label"=>"---- US -----", "value"=>"-"), array("label"=>"Alabama", "value"=>"AL"), array("label"=>"Alaska", "value"=>"AK"), array("label"=>"American Samoa", "value"=>"AS"), array("label"=>"Arizona", "value"=>"AZ"), array("label"=>"Arkansas", "value"=>"AR"), array("label"=>"California", "value"=>"CA"), array("label"=>"Canal Zone", "value"=>"CZ"), array("label"=>"Colorado", "value"=>"CO"), array("label"=>"Connecticut", "value"=>"CT"), array("label"=>"Delaware", "value"=>"DE"), array("label"=>"District of Columbia", "value"=>"DC"), array("label"=>"Florida", "value"=>"FL"), array("label"=>"Georgia", "value"=>"GA"), array("label"=>"Guam", "value"=>"GU"), array("label"=>"Hawaii", "value"=>"HI"), array("label"=>"Idaho", "value"=>"ID"), array("label"=>"Illinois", "value"=>"IL"), array("label"=>"Indiana", "value"=>"IN"), array("label"=>"Iowa", "value"=>"IA"), array("label"=>"Kansas", "value"=>"KS"), array("label"=>"Kentucky", "value"=>"KY"), array("label"=>"Louisiana", "value"=>"LA"), array("label"=>"Maine", "value"=>"ME"), array("label"=>"Mariana Islands", "value"=>"MP"), array("label"=>"Maryland", "value"=>"MD"), array("label"=>"Massachusetts", "value"=>"MA"), array("label"=>"Michigan", "value"=>"MI"), array("label"=>"Minnesota", "value"=>"MN"), array("label"=>"Mississippi", "value"=>"MS"), array("label"=>"Missouri", "value"=>"MO"), array("label"=>"Montana", "value"=>"MT"), array("label"=>"Nebraska", "value"=>"NE"), array("label"=>"Nevada", "value"=>"NV"), array("label"=>"New Hampshire", "value"=>"NH"), array("label"=>"New Jersey", "value"=>"NJ"), array("label"=>"New Mexico", "value"=>"NM"), array("label"=>"New York", "value"=>"NY"), array("label"=>"North Carolina", "value"=>"NC"), array("label"=>"North Dakota", "value"=>"ND"), array("label"=>"Ohio", "value"=>"OH"), array("label"=>"Oklahoma", "value"=>"OK"), array("label"=>"Oregon", "value"=>"OR"), array("label"=>"Pennsylvania", "value"=>"PA"), array("label"=>"Puerto Rico", "value"=>"PR"), array("label"=>"Rhode Island", "value"=>"RI"), array("label"=>"South Carolina", "value"=>"SC"), array("label"=>"South Dakota", "value"=>"SD"), array("label"=>"Tennessee", "value"=>"TN"), array("label"=>"Texas", "value"=>"TX"), array("label"=>"Utah", "value"=>"UT"), array("label"=>"Vermont", "value"=>"VT"), array("label"=>"Virgin Islands", "value"=>"VI"), array("label"=>"Virginia", "value"=>"VA"), array("label"=>"Washington", "value"=>"WA"), array("label"=>"West Virginia", "value"=>"WV"), array("label"=>"Wisconsin", "value"=>"WI"), array("label"=>"Wyoming", "value"=>"WY"), array("label"=>"APO", "value"=>"AP"), array("label"=>"AEO", "value"=>"AE"), array("label"=>"AAO", "value"=>"AA"), array("label"=>"FPO", "value"=>"FP") ); var $countries=array( array("label"=>"Ascension Island", "value"=>"AC"), array("label"=>"Afghanistan", "value"=>"AF"), array("label"=>"Albania", "value"=>"AL"), array("label"=>"Algeria", "value"=>"DZ"), array("label"=>"American Samoa", "value"=>"AS"), array("label"=>"Andorra", "value"=>"AD"), array("label"=>"Angola", "value"=>"AO"), array("label"=>"Anguilla", "value"=>"AI"), array("label"=>"Antarctica", "value"=>"AQ"), array("label"=>"Antigua And Barbuda", "value"=>"AG"), array("label"=>"Argentina", "value"=>"AR"), array("label"=>"Armenia", "value"=>"AM"), array("label"=>"Aruba", "value"=>"AW"), array("label"=>"Australia", "value"=>"AU"), array("label"=>"Austria", "value"=>"AT"), array("label"=>"Azerbaijan", "value"=>"AZ"), array("label"=>"Bahamas", "value"=>"BS"), array("label"=>"Bahrain", "value"=>"BH"), array("label"=>"Bangladesh", "value"=>"BD"), array("label"=>"Barbados", "value"=>"BB"), array("label"=>"Belarus", "value"=>"BY"), array("label"=>"Belgium", "value"=>"BE"), array("label"=>"Belize", "value"=>"BZ"), array("label"=>"Benin", "value"=>"BJ"), array("label"=>"Bermuda", "value"=>"BM"), array("label"=>"Bhutan", "value"=>"BT"), array("label"=>"Bolivia", "value"=>"BO"), array("label"=>"Bosnia And Herzegowina","value"=>"BA"), array("label"=>"Botswana", "value"=>"BW"), array("label"=>"Bouvet Island", "value"=>"BV"), array("label"=>"Brazil", "value"=>"BR"), array("label"=>"British Indian Ocean Territory", "value"=>"IO"), array("label"=>"Brunei Darussalam", "value"=>"BN"), array("label"=>"Bulgaria", "value"=>"BG"), array("label"=>"Burkina Faso", "value"=>"BF"), array("label"=>"Burundi", "value"=>"BI"), array("label"=>"Cambodia", "value"=>"KH"), array("label"=>"Cameroon", "value"=>"CM"), array("label"=>"Canada", "value"=>"CA"), array("label"=>"Cape Verde", "value"=>"CV"), array("label"=>"Cayman Islands", "value"=>"KY"), array("label"=>"Central African Republic", "value"=>"CF"), array("label"=>"Chad", "value"=>"TD"), array("label"=>"Chile", "value"=>"CL"), array("label"=>"China", "value"=>"CN"), array("label"=>"Christmas Island", "value"=>"CX"), array("label"=>"Cocos (Keeling) Islands", "value"=>"CC"), array("label"=>"Colombia", "value"=>"CO"), array("label"=>"Comoros", "value"=>"KM"), array("label"=>"Congo", "value"=>"CG"), array("label"=>"Congo, Democratic People's Republic", "value"=>"CD"), array("label"=>"Cook Islands", "value"=>"CK"), array("label"=>"Costa Rica", "value"=>"CR"), array("label"=>"Cote d'Ivoire", "value"=>"CI"), array("label"=>"Croatia (local name: Hrvatska)", "value"=>"HR"), array("label"=>"Cuba", "value"=>"CU"), array("label"=>"Cyprus", "value"=>"CY"), array("label"=>"Czech Republic","value"=>"CZ"), array("label"=>"Denmark", "value"=>"DK"), array("label"=>"Djibouti", "value"=>"DJ"), array("label"=>"Dominica", "value"=>"DM"), array("label"=>"Dominican Republic", "value"=>"DO"), array("label"=>"East Timor", "value"=>"TP"), array("label"=>"Ecuador", "value"=>"EC"), array("label"=>"Egypt", "value"=>"EG"), array("label"=>"El Salvador", "value"=>"SV"), array("label"=>"Equatorial Guinea", "value"=>"GQ"), array("label"=>"Eritrea", "value"=>"ER"), array("label"=>"Estonia", "value"=>"EE"), array("label"=>"Ethiopia", "value"=>"ET"), array("label"=>"Falkland Islands (Malvinas)", "value"=>"FK"), array("label"=>"Faroe Islands", "value"=>"FO"), array("label"=>"Fiji", "value"=>"FJ"), array("label"=>"Finland", "value"=>"FI"), array("label"=>"France", "value"=>"FR"), array("label"=>"French Guiana", "value"=>"GF"), array("label"=>"French Polynesia", "value"=>"PF"), array("label"=>"French Southern Territories", "value"=>"TF"), array("label"=>"Gabon", "value"=>"GA"), array("label"=>"Gambia", "value"=>"GM"), array("label"=>"Georgia", "value"=>"GE"), array("label"=>"Germany", "value"=>"DE"), array("label"=>"Ghana", "value"=>"GH"), array("label"=>"Gibraltar", "value"=>"GI"), array("label"=>"Greece", "value"=>"GR"), array("label"=>"Greenland", "value"=>"GL"), array("label"=>"Grenada", "value"=>"GD"), array("label"=>"Guadeloupe", "value"=>"GP"), array("label"=>"Guam", "value"=>"GU"), array("label"=>"Guatemala", "value"=>"GT"), array("label"=>"Guernsey", "value"=>"GG"), array("label"=>"Guinea", "value"=>"GN"), array("label"=>"Guinea-Bissau", "value"=>"GW"), array("label"=>"Guyana", "value"=>"GY"), array("label"=>"Haiti", "value"=>"HT"), array("label"=>"Heard And Mc Donald Islands", "value"=>"HM"), array("label"=>"Honduras", "value"=>"HN"), array("label"=>"Hong Kong", "value"=>"HK"), array("label"=>"Hungary", "value"=>"HU"), array("label"=>"Iceland", "value"=>"IS"), array("label"=>"India", "value"=>"IN"), array("label"=>"Indonesia", "value"=>"ID"), array("label"=>"Iran (Islamic Republic Of)", "value"=>"IR"), array("label"=>"Iraq", "value"=>"IQ"), array("label"=>"Ireland", "value"=>"IE"), array("label"=>"Isle of Man", "value"=>"IM"), array("label"=>"Israel", "value"=>"IL"), array("label"=>"Italy", "value"=>"IT"), array("label"=>"Jamaica", "value"=>"JM"), array("label"=>"Japan", "value"=>"JP"), array("label"=>"Jersey", "value"=>"JE"), array("label"=>"Jordan", "value"=>"JO"), array("label"=>"Kazakhstan", "value"=>"KZ"), array("label"=>"Kenya", "value"=>"KE"), array("label"=>"Kiribati", "value"=>"KI"), array("label"=>"Korea, Democratic People's Republic Of", "value"=>"KP"), array("label"=>"Korea, Republic Of", "value"=>"KR"), array("label"=>"Kuwait", "value"=>"KW"), array("label"=>"Kyrgyzstan", "value"=>"KG"), array("label"=>"Lao People's Democratic Republic", "value"=>"LA"), array("label"=>"Latvia", "value"=>"LV"), array("label"=>"Lebanon", "value"=>"LB"), array("label"=>"Lesotho", "value"=>"LS"), array("label"=>"Liberia", "value"=>"LR"), array("label"=>"Libyan Arab Jamahiriya", "value"=>"LY"), array("label"=>"Liechtenstein", "value"=>"LI"), array("label"=>"Lithuania", "value"=>"LT"), array("label"=>"Luxembourg", "value"=>"LU"), array("label"=>"Macau", "value"=>"MO"), array("label"=>"Macedonia, The Former Yugoslav", "value"=>"MK"), array("label"=>"Of", "value"=>"Republic"), array("label"=>"Madagascar", "value"=>"MG"), array("label"=>"Malawi", "value"=>"MW"), array("label"=>"Malaysia", "value"=>"MY"), array("label"=>"Maldives", "value"=>"MV"), array("label"=>"Mali", "value"=>"ML"), array("label"=>"Malta", "value"=>"MT"), array("label"=>"Marshall Islands", "value"=>"MH"), array("label"=>"Martinique", "value"=>"MQ"), array("label"=>"Mauritania", "value"=>"MR"), array("label"=>"Mauritius", "value"=>"MU"), array("label"=>"Mayotte", "value"=>"YT"), array("label"=>"Mexico", "value"=>"MX"), array("label"=>"Micronesia, Federated States Of", "value"=>"FM"), array("label"=>"Moldova, Republic Of", "value"=>"MD"), array("label"=>"Monaco", "value"=>"MC"), array("label"=>"Mongolia", "value"=>"MN"), array("label"=>"Montserrat", "value"=>"MS"), array("label"=>"Morocco", "value"=>"MA"), array("label"=>"Mozambique", "value"=>"MZ"), array("label"=>"Myanmar", "value"=>"MM"), array("label"=>"Namibia", "value"=>"NA"), array("label"=>"Nauru", "value"=>"NR"), array("label"=>"Nepal", "value"=>"NP"), array("label"=>"Netherlands", "value"=>"NL"), array("label"=>"Netherlands Antilles", "value"=>"AN"), array("label"=>"New Caledonia", "value"=>"NC"), array("label"=>"New Zealand", "value"=>"NZ"), array("label"=>"Nicaragua", "value"=>"NI"), array("label"=>"Niger", "value"=>"NE"), array("label"=>"Nigeria", "value"=>"NG"), array("label"=>"Niue", "value"=>"NU"), array("label"=>"Norfolk Island", "value"=>"NF"), array("label"=>"Northern Mariana Islands", "value"=>"MP"), array("label"=>"Norway", "value"=>"NO"), array("label"=>"Oman", "value"=>"OM"), array("label"=>"Pakistan", "value"=>"PK"), array("label"=>"Palau", "value"=>"PW"), array("label"=>"Palestinian Territories", "value"=>"PS"), array("label"=>"Panama", "value"=>"PA"), array("label"=>"Papua New Guinea", "value"=>"PG"), array("label"=>"Paraguay", "value"=>"PY"), array("label"=>"Peru", "value"=>"PE"), array("label"=>"Philippines", "value"=>"PH"), array("label"=>"Pitcairn", "value"=>"PN"), array("label"=>"Poland", "value"=>"PL"), array("label"=>"Portugal", "value"=>"PT"), array("label"=>"Puerto Rico", "value"=>"PR"), array("label"=>"Qatar", "value"=>"QA"), array("label"=>"Reunion", "value"=>"RE"), array("label"=>"Romania", "value"=>"RO"), array("label"=>"Russian Federation", "value"=>"RU"), array("label"=>"Rwanda", "value"=>"RW"), array("label"=>"Saint Kitts And Nevis", "value"=>"KN"), array("label"=>"Saint Lucia", "value"=>"LC"), array("label"=>"Saint Vincent And The Grenadines", "value"=>"VC"), array("label"=>"Samoa", "value"=>"WS"), array("label"=>"San Marino", "value"=>"SM"), array("label"=>"Sao Tome And Principe", "value"=>"ST"), array("label"=>"Saudi Arabia", "value"=>"SA"), array("label"=>"Senegal", "value"=>"SN"), array("label"=>"Seychelles", "value"=>"SC"), array("label"=>"Sierra Leone", "value"=>"SL"), array("label"=>"Singapore", "value"=>"SG"), array("label"=>"Slovakia (Slovak Republic)", "value"=>"SK"), array("label"=>"Slovenia", "value"=>"SI"), array("label"=>"Solomon Islands", "value"=>"SB"), array("label"=>"Somalia", "value"=>"SO"), array("label"=>"South Africa", "value"=>"ZA"), array("label"=>"South Georgia And South Sandwich", "value"=>"GS"), array("label"=>"Spain", "value"=>"ES"), array("label"=>"Sri Lanka", "value"=>"LK"), array("label"=>"St. Helena", "value"=>"SH"), array("label"=>"St. Pierre And Miquelon", "value"=>"PM"), array("label"=>"Sudan", "value"=>"SD"), array("label"=>"Suriname", "value"=>"SR"), array("label"=>"Svalbard And Jan Mayen Islands", "value"=>"SJ"), array("label"=>"Swaziland", "value"=>"SZ"), array("label"=>"Sweden", "value"=>"SE"), array("label"=>"Switzerland", "value"=>"CH"), array("label"=>"Syrian Arab Republic", "value"=>"SY"), array("label"=>"Taiwan, Province Of China", "value"=>"TW"), array("label"=>"Tajikistan", "value"=>"TJ"), array("label"=>"Tanzania, United Republic Of", "value"=>"TZ"), array("label"=>"Thailand", "value"=>"TH"), array("label"=>"Togo", "value"=>"TG"), array("label"=>"Tokelau", "value"=>"TK"), array("label"=>"Tonga", "value"=>"TO"), array("label"=>"Trinidad And Tobago", "value"=>"TT"), array("label"=>"Tunisia", "value"=>"TN"), array("label"=>"Turkey", "value"=>"TR"), array("label"=>"Turkmenistan", "value"=>"TM"), array("label"=>"Turks And Caicos Islands", "value"=>"TC"), array("label"=>"Tuvalu", "value"=>"TV"), array("label"=>"Uganda", "value"=>"UG"), array("label"=>"Ukraine", "value"=>"UA"), array("label"=>"United Arab Emirates", "value"=>"AE"), array("label"=>"United Kingdom", "value"=>"UK"), array("label"=>"United States", "value"=>"US"), array("label"=>"United States Minor Outlying Islands", "value"=>"UM"), array("label"=>"Uruguay", "value"=>"UY"), array("label"=>"Uzbekistan", "value"=>"UZ"), array("label"=>"Vanuatu", "value"=>"VU"), array("label"=>"Vatican City State (Holy See)", "value"=>"VA"), array("label"=>"Venezuela", "value"=>"VE"), array("label"=>"Viet Nam", "value"=>"VN"), array("label"=>"Virgin Islands (British)", "value"=>"VG"), array("label"=>"Virgin Islands (U.S.)", "value"=>"VI"), array("label"=>"Wallis And Futuna Islands", "value"=>"WF"), array("label"=>"Western Sahara", "value"=>"EH"), array("label"=>"Yemen", "value"=>"YE"), array("label"=>"Yugoslavia", "value"=>"YU"), array("label"=>"Zaire", "value"=>"ZR"), array("label"=>"Zambia", "value"=>"ZM"), array("label"=>"Zimbabwe", "value"=>"ZW"), array("label"=>"Undefined", "value"=>"N/A") ); var $hide_html = false; function Customers($SoapEngine) { dprint("init Customers"); $this->filters = array( 'username' => trim($_REQUEST['username_filter']), 'firstName' => trim($_REQUEST['firstName_filter']), 'lastName' => trim($_REQUEST['lastName_filter']), 'organization' => trim($_REQUEST['organization_filter']), 'tel' => trim($_REQUEST['tel_filter']), 'email' => trim($_REQUEST['email_filter']), 'web' => trim($_REQUEST['web_filter']), 'country' => trim($_REQUEST['country_filter']), 'city' => trim($_REQUEST['city_filter']), 'only_resellers' => trim($_REQUEST['only_resellers_filter']) ); $this->Records($SoapEngine); $this->showAddForm = $_REQUEST['showAddForm']; if (is_array($this->SoapEngine->customer_properties)) { $this->customer_properties = $this->SoapEngine->customer_properties; } else { $this->customer_properties = array(); } $this->allProperties=array_merge($this->propertiesItems,$this->customer_properties); - if ($_REQUEST['action'] == 'Add' || $_REQUEST['action'] == 'Copy' || - $_REQUEST['action'] == 'Delete' || $_REQUEST['action'] == 'Update') { - - if ($this->reseller) { - $customer_engine_remote=$this->SoapEngine->login_credentials['reseller_filters'][$this->reseller]['customer_engine_remote']; - - if (strlen($customer_engine_remote) && $this->SoapEngine->soapEngine != $customer_engine_remote) { - // replicate change - - if (in_array($customer_engine_remote,array_keys($this->SoapEngine->soapEngines))) { - $this->SOAPloginRemote = array( - "username" => $this->SoapEngine->soapEngines[$customer_engine_remote]['username'], - "password" => $this->SoapEngine->soapEngines[$customer_engine_remote]['password'], - "admin" => true, - "impersonate" => intval($this->reseller) - ); - - $this->SOAPloginRemoteAdmin = array( - "username" => $this->SoapEngine->soapEngines[$customer_engine_remote]['username'], - "password" => $this->SoapEngine->soapEngines[$customer_engine_remote]['password'], - "admin" => true - ); - - //dprint_r($this->SOAPloginRemote); - $this->SOAPurlRemote=$this->SoapEngine->soapEngines[$customer_engine_remote]['url']; - - $log=sprintf ("and syncronize changes to %s",$this->SOAPurlRemote,$this->SOAPurlRemote); - dprint($log); - - $this->SoapAuthRemote = array('auth', $this->SOAPloginRemote , 'urn:AGProjects:NGNPro', 0, ''); - $this->SoapAuthRemoteAdmin = array('auth', $this->SOAPloginRemoteAdmin , 'urn:AGProjects:NGNPro', 0, ''); - - $this->SoapEngineRemote = new $this->SoapEngine->soap_class($this->SOAPurlRemote); - - if (strlen($this->soapEngines[$customer_engine_remote]['timeout'])) { - $this->SoapEngineRemote->_options['timeout'] = intval($this->soapEngines[$customer_engine_remote]['timeout']); - } else { - $this->SoapEngineRemote->_options['timeout'] = $this->soapTimeout; - } - - $this->SoapEngineRemote->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0); - $this->SoapEngineRemote->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0); - } - } - } - } } function showSeachForm() { printf ("

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

"; printf ("",$_SERVER['PHP_SELF']); print " "; $this->printHiddenFormElements('skipServiceElement'); print "
"; print " "; $this->showEngineSelection(); print " "; $this->showSortForm(); print "
Id"; $this->showCustomerSelection(); $this->showResellerSelection(); $this->showSeachFormCustom(); print "
"; } function listRecords() { // 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']) ); //print_r($filter); // 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->showSeachForm(); if ($this->showAddForm) { $this->showAddForm(); return true; } // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Call function if ($this->adminonly && $this->filters['only_resellers']) { $result = $this->SoapEngine->soapclient->getResellers($Query); } else { $result = $this->SoapEngine->soapclient->getCustomers($Query); } if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $this->rows = $result->total; if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "
"; $_add_url = $this->url.sprintf("&service=%s&showAddForm=1", urlencode($this->SoapEngine->service) ); printf ("New customer ",$_add_url); if ($this->adminonly) { if ($this->adminonly && $this->filters['reseller']) { $_add_url = $this->url.sprintf("&service=%s&showAddForm=1&reseller_filter=%s", urlencode($this->SoapEngine->service), urlencode($this->filters['reseller']) ); printf (" | New customer under reseller %s ",$_add_url,$this->filters['reseller']); } } print " $this->rows records found
"; if ($this->rows > 1) { print " "; } 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 > 1) { while ($i < $maxrows) { if (!$result->accounts[$i]) break; $customer = $result->accounts[$i]; $index = $this->next+$i+1; $rr=floor($index/2); $mod=$index-$rr*2; if ($mod ==0) { $bgcolor="lightgrey"; } else { $bgcolor="white"; } $_url = $this->url.sprintf("&service=%s&action=Delete&reseller_filter=%s&customer_filter=%s", urlencode($this->SoapEngine->service), urlencode($customer->reseller), urlencode($customer->id) ); if ($_REQUEST['action'] == 'Delete' && $_REQUEST['customer_filter'] == $customer->id) { $_url .= "&confirm=1"; $actionText = "Confirm"; } else { $actionText = "Delete"; } $_customer_url = $this->url.sprintf("&service=%s&reseller_filter=%s&customer_filter=%s", urlencode($this->SoapEngine->service), urlencode($customer->reseller), urlencode($customer->id) ); printf(" "; $i++; } } print "
Id Customer Alias of Username Name Organization Country E-mail Phone number Change date Actions
%s %s.%s %s %s %s %s %s %s %s %s %s %s ", $bgcolor, $index, $_customer_url, $customer->id, $customer->reseller, $customer->impersonate, $customer->username, $customer->firstName, $customer->lastName, $customer->organization, $customer->country, $customer->email, $customer->email, $customer->tel, $customer->changeDate, $_url, $actionText ); $this->showExtraActions($customer); print "
"; if ($this->rows == 1 ) { $customer = $result->accounts[0]; $this->showRecord($customer); } $this->showPagination($maxrows); return true; } } function showSeachFormCustom() { printf (" Username",$this->filters['username']); printf (" FN",$this->filters['firstName']); printf (" LN",$this->filters['lastName']); printf (" Organization",$this->filters['organization']); printf (" Email",$this->filters['email']); if ($this->adminonly) { if ($this->filters['only_resellers']) $check_only_resellers_filter='checked'; printf (" Resellers",$check_only_resellers_filter); } } function deleteRecord($dictionary) { if (!$dictionary['confirm'] && !$_REQUEST['confirm']) { print "

Please press on Confirm to confirm the delete. "; return true; } if ($dictionary['customer']) { $customer=$dictionary['customer']; } else { $customer=$this->filters['customer']; } if (!strlen($customer)) { print "

Error: missing customer id. "; return false; } $function=array('commit' => array('name' => 'deleteAccount', 'parameters' => array(intval($customer)), 'logs' => array('success' => sprintf('Customer id %s has been deleted',$this->filters['customer']))) ); if ($this->SoapEngine->execute($function,$this->html)) { - if (is_object($this->SoapEngineRemote)) { - - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->deleteAccount(intval($this->filters['customer'])); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - if ($error_fault->detail->exception->errorcode != 5000) { - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - } - } - } - unset($this->filters); return true; } else { return false; } } function getRecord($id) { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount(intval($id)); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { return $result; } } function showRecordHeader($customer) { } function showRecordFooter($customer) { } function showExtraActions($customer) { } function showRecord($customer) { //dprint_r($customer); $this->showRecordHeader($customer); print ""; printf ("",$_SERVER['PHP_SELF']); print " "; print "
"; if ($_REQUEST['action'] != 'Delete' && $_REQUEST['action'] != 'Copy') { print ""; printf (" E-mail account information"); } print " "; printf ("",$customer->id); if ($this->adminonly) { printf ("",$customer->reseller); } if ($this->adminonly || $this->reseller == $customer->reseller) { if ($_REQUEST['action'] != 'Delete') { print ""; } print ""; if ($_REQUEST['action'] == 'Delete' || $_REQUEST['action'] == 'Copy') { print ""; } } print "
"; printf (""); foreach (array_keys($this->FieldsReadOnly) as $item) { printf ("", ucfirst($item), $customer->$item ); } foreach (array_keys($this->Fields) as $item) { if ($this->Fields[$item]['name']) { $item_name=$this->Fields[$item]['name']; } else { $item_name=ucfirst($item); } if ($item=='timezone') { printf ("", $item_name ); print " "; } else if ($item=='state') { printf ("", $item_name ); print " "; } else if ($item=='country') { printf ("", $item_name ); print " "; } else if ($item=='resellerActive' && ($customer->reseller != $customer->id)) { printf ("", $item, $customer->$item); } else if ($item=='impersonate') { if ($customer->reseller != $customer->id) { if ($this->adminonly || $this->customer == $customer->reseller) { printf ("", $item_name ); print " "; } else { printf (" ", $item_name, $item, $customer->$item, $customer->$item ); } } else { printf (" ", $item, $customer->$item ); } } else { if ($this->Fields[$item]['type'] == 'textarea') { printf (" ", $item_name, $item, $customer->$item ); } elseif ($this->Fields[$item]['type'] == 'boolean') { if ($this->Fields[$item]['adminonly'] && !$this->adminonly) { printf (" ", $item_name, $item, $customer->$item, $customer->$item ); } else { $_var='select_'.$item; ${$_var}[$customer->$item]='selected'; printf (" ", $item_name, $item, ${$_var}[0], ${$_var}[1] ); } } else { if ($this->Fields[$item]['adminonly'] && !$this->adminonly) { printf (" ", $item_name, $item, $customer->$item, $customer->$item ); } else { printf (" ", $item_name, $item, $customer->$item ); } } } } $this->printFiltersToForm(); $this->printHiddenFormElements(); //print ""; print "
Field Value
%s %s
%s"; $this->showTimezones($customer->$item); print "
%s
%s
%s "; $this->getChildren($customer->reseller); if (count($this->children)> 0) { print " "; } else { printf (" ", $item, $customer->$item ); } print "
%s %s
%s
%s %s
%s
%s %s
%s
"; /* print "
";
         print_r($customer);
         print "
"; */ print "
"; /* print "
";
         print_r($this->login_credentials);
         print "
"; */ print " "; if ($this->login_credentials['login_type'] == 'admin') { printf (""); } else if ($this->login_credentials['login_type'] == 'reseller') { printf ("" ); } else { printf ("" ); } foreach ($customer->properties as $_property) { if (in_array($_property->name,array_keys($this->allProperties))) { $this->allProperties[$_property->name]['value']=$_property->value; } } foreach (array_keys($this->allProperties) as $item) { $item_print=preg_replace("/_/"," ",$item); $_permission=$this->allProperties[$item]['permission']; if ($this->login_credentials['login_type'] == 'admin') { if ($this->allProperties[$item]['permission'] == 'admin' && $customer->id != $customer->reseller && $this->allProperties[$item]['resellerMayManageForChildAccounts']) { $_permission='reseller'; } printf ("", $this->allProperties[$item]['category'], ucfirst($_permission), $item_print, $item, $this->allProperties[$item]['value'], $this->allProperties[$item]['name'] ); } else if ($this->login_credentials['login_type'] == 'reseller') { // logged in as reseller if ($this->allProperties[$item]['permission'] == 'admin') { if ($customer->id == $customer->reseller ) { // reseller cannot modify himself for items with admin permission if (!$this->allProperties[$item]['invisible']) { printf ("", ucfirst($this->allProperties[$item]['permission']), $this->allProperties[$item]['name'], $this->allProperties[$item]['value'] ); } } else { if ($this->allProperties[$item]['resellerMayManageForChildAccounts']) { // reseller can manage these properties for his customers printf ("", 'Reseller', $this->allProperties[$item]['name'], $item, $this->allProperties[$item]['value'] ); } else { if (!$this->allProperties[$item]['invisible']) { // otherwise cannot modify them printf ("", ucfirst($this->allProperties[$item]['permission']), $this->allProperties[$item]['name'], $this->allProperties[$item]['value'] ); } } } } else { printf ("", ucfirst($this->allProperties[$item]['permission']), $this->allProperties[$item]['name'], $item, $this->allProperties[$item]['value'] ); } } else { // logged in as customer if ($this->allProperties[$item]['permission'] == 'admin' || $this->allProperties[$item]['permission'] == 'reseller' ) { if (!$this->allProperties[$item]['invisible']) { printf ("", $this->allProperties[$item]['name'], $this->allProperties[$item]['value'] ); } } else { printf ("", $this->allProperties[$item]['name'], $item, $this->allProperties[$item]['value'] ); } } } print "
Category Permission Property Value Description
Permission Property Value
Property Value
%s %s %s %s
%s %s %s
%s %s
%s %s %s
%s %s
%s %s
%s
"; $this->printFiltersToForm(); $this->printHiddenFormElements(); print ""; print "
"; $this->showRecordFooter($customer); } function updateRecord () { //print "

Updating customer ..."; if (!strlen($this->filters['customer'])) { return false; } if (!$customer=$this->getRecord($this->filters['customer'])) { return false; } if ($_REQUEST['notify']) { $customer_notify=array('firstName'=> $customer->firstName, 'lastName' => $customer->lastName, 'email' => $customer->email, 'username' => $customer->username, 'password' => $customer->password ); if ($this->notify($customer_notify)) { print "

"; printf (_("The login account details have been sent to %s"), $customer->email); return true; } else { print "

"; printf (_("Error sending e-mail notification")); return false; } } if (!$this->updateBefore($customer)) { return false; } $customer->credit = floatval($customer->credit); $customer->balance = floatval($customer->balance); foreach ($customer->properties as $_property) { $properties[]=$_property; } if (is_array($properties)) { $customer->properties=$properties; } else { $customer->properties=array(); } $customer_old = $customer; // update properties foreach (array_keys($this->allProperties) as $item) { $var_name = $item.'_form'; $updated_property=array(); foreach (array_keys($customer->properties) as $_key) { $_property=$customer->properties[$_key]; if ($_property->name == $item) { // update property if ($_property->permission == 'admin') { if ($this->login_credentials['login_type'] == 'admin') { $customer->properties[$_key]->value=trim($_REQUEST[$var_name]); } else if ($this->login_credentials['login_type'] == 'reseller' && $this->allProperties[$item]['resellerMayManageForChildAccounts']) { if ($customer->id != $customer->reseller) { $customer->properties[$_key]->value=trim($_REQUEST[$var_name]); } } } else if ($_property->permission == 'reseller') { if ($this->login_credentials['login_type'] == 'admin' || $this->login_credentials['login_type'] == 'reseller') { $customer->properties[$_key]->value=trim($_REQUEST[$var_name]); } } else { $customer->properties[$_key]->value=trim($_REQUEST[$var_name]); } $updated_property[$item]++; break; } } if (!$updated_property[$item] && strlen($_REQUEST[$var_name])) { // add new property unset($var_value); unset($_permission); if ($this->allProperties[$item]['permission'] == 'admin') { $_permission = 'admin'; if ($this->login_credentials['login_type'] == 'admin') { $var_value = trim($_REQUEST[$var_name]); } else if ($this->login_credentials['login_type'] == 'reseller' && $this->allProperties[$item]['resellerMayManageForChildAccounts']) { if ($customer->id != $customer->reseller) { $var_value = trim($_REQUEST[$var_name]); } } } else if ($this->allProperties[$item]['permission'] == 'reseller') { $_permission = 'reseller'; if ($this->login_credentials['login_type'] == 'admin' || $this->login_credentials['login_type'] == 'reseller') { $var_value = trim($_REQUEST[$var_name]); } } else { $_permission = 'customer'; $var_value = trim($_REQUEST[$var_name]); } if (strlen($var_value)) { $customer->properties[] = array('name' => $item, 'value' => $var_value, 'category' => $this->allProperties[$item]['category'], 'permission' => $this->allProperties[$item]['permission'] ); } } } /* print "

";
         print_r($customer->properties);
         print "
"; */ 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' || $this->Fields[$item]['type'] == 'boolean') { $customer->$item = intval($_REQUEST[$var_name]); } else if ($this->Fields[$item]['type'] == 'float') { $customer->$item = floatval($_REQUEST[$var_name]); } else { $customer->$item = trim($_REQUEST[$var_name]); } } $customer->tel = preg_replace("/[^\+0-9]/","",$customer->tel); $customer->fax = preg_replace("/[^\+0-9]/","",$customer->fax); $customer->enum = preg_replace("/[^\+0-9]/","",$customer->enum); if (!strlen($_REQUEST['password_form'])) $customer->password = $this->RandomString(6); if (!strlen($_REQUEST['state_form'])) $customer->state = 'N/A'; if (!strlen($_REQUEST['country_form'])) $customer->country = 'N/A'; if (!strlen($_REQUEST['city_form'])) $customer->city = 'Unknown'; if (!strlen($_REQUEST['address_form'])) $customer->address = 'Unknown'; if (!strlen($_REQUEST['postcode_form'])) $customer->postcode = 'Unknown'; if (!strlen($_REQUEST['tel_form'])) $customer->tel = '+19999999999'; if ($customer->reseller != $customer->id) { // a subaccount cannot change his own impersonate field if (!$this->adminonly) { if ($this->customer != $customer->reseller) { $customer->impersonate=$customer_old->impersonate; } } } $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($customer), 'logs' => array('success' => sprintf('Customer id %s has been updated',$customer->id))) ); //dprint_r($customer); if ($this->SoapEngine->execute($function,$this->html,$this->adminonly)) { - - // update remote - if (is_object($this->SoapEngineRemote)) { - - if ($this->adminonly) { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemoteAdmin); - } else { - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - } - $result = $this->SoapEngineRemote->updateAccount($customer); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - - if ($error_fault->detail->exception->errorcode == 5000) { - // try add the missing customer - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->addAccount($customer); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - - // roll back local changes - - $function=array('commit' => array('name' => 'updateAccount', - 'parameters' => array($customer_old), - 'logs' => array('success' => sprintf('Customer id %s has been rolled back',$customer->id)) - ) - ); - - $this->SoapEngine->execute($function,$this->html); - return false; - - } else { - return true; - } - - } else { - // roll back local changes - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - - $function=array('commit' => array('name' => 'updateAccount', - 'parameters' => array($customer_old), - 'logs' => array('success' => sprintf('Customer id %s has been rolled back',$customer->id)) - ) - ); - - $this->SoapEngine->execute($function,$this->html); - return false; - } - - } else { - return true; - } - } - $this->updateAfter($customer,$customer_old); return true; } else { return false; } } function showTimezones($timezone) { if (!$fp = fopen("timezones", "r")) { print _("Failed to open timezone file."); return false; } print ""; } function getChildren($reseller) { return; // Filter $filter=array('reseller' => intval($reseller)); // Range $range=array('start' => 0, 'count' => 1000 ); // Order $orderBy = array('attribute' => 'firstName', 'direction' => 'ASC' ); // Compose query $Query=array('filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); // Call function $result = $this->SoapEngine->soapclient->getCustomers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); return false; } else { $i=0; if ($result->total > 100) return; while ($i < $result->total) { $customer = $result->accounts[$i]; $this->children[$customer->id]=array('firstName' => $customer->firstName, 'lastName' => $customer->lastName, 'organization' => $customer->organization ); $i++; } } } function copyRecord () { //print "

Copy customer ..."; if (!strlen($this->filters['customer'])) { return false; } if (!$_REQUEST['confirm']) { print "

Please press on Copy again to confirm the copy"; return true; } if (!$customer=$this->getRecord($this->filters['customer'])) { return false; } $customer->credit = floatval($customer->credit); $customer->balance = floatval($customer->balance); foreach ($customer->properties as $_property) { $properties[]=$_property; } if (is_array($properties)) { $customer->properties=$properties; } else { $customer->properties=array(); } // change username $customer_new=$customer; unset($customer_new->id); $j=1; while ($j < 9) { $customer_new->username=$customer->username.$j; $function=array('commit' => array('name' => 'addAccount', 'parameters' => array($customer_new), 'logs' => array('success' => sprintf('Customer id %s has been copied',$customer->id))) ); if ($this->SoapEngine->execute($function,$this->html)) { - // update remote - if (is_object($this->SoapEngineRemote)) { - if ($_id = $this->getCustomerId($customer_new->username)) { - - $customerRemote=$customer_new; - $customerRemote->id = intval($_id); - - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->addAccount($customerRemote); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - - $function=array('commit' => array('name' => 'deleteAccount', - 'parameters' => array(intval($_id)), - 'logs' => array('success' => sprintf('Customer id %s could not be copied ',$this->filters['customer']))) - ); - - $this->SoapEngine->execute($function,$this->html); - return false; - } - } - } - // Reset filters to find the copy $this->filters=array(); $this->filters['username']=$customer_new->username; return true; } else { if ($this->SoapEngine->error_fault->detail->exception->errorcode != "5001") { return false; } } $j++; } } function showAddForm($confirmPassword=false) { print "

Register new customer

"; printf ("
",$_SERVER['PHP_SELF']); print "

"; if ($_REQUEST['notify']) $checked_notify='checked'; printf ("Send notification by email ",$checked_notify); print "

"; if ($this->adminonly && $this->filters['reseller']) { printf ("",$this->filters['reseller']); printf ("",$this->filters['reseller']); } else if ($this->reseller) { printf ("",$this->reseller); } foreach (array_keys($this->addFields) as $item) { if ($this->addFields[$item]['name']) { $item_name=$this->addFields[$item]['name']; } else { $item_name=ucfirst($item); } $item_form=$item.'_form'; if ($item=='timezone') { $_value=$_REQUEST['timezone_form']; if (!$_value) { if ($this->SoapEngine->default_timezone) { $_value=$this->SoapEngine->default_timezone; } else { $_value='Europe/Amsterdam'; } } printf ("", $item_name ); print " "; } else if ($item=='state') { printf ("", $item_name ); print " "; } else if ($item=='country') { printf ("", $item_name ); print " "; } else { if ($this->addFields[$item]['type'] == 'textarea') { printf (" ", $item_name, $item, $_REQUEST[$item_form] ); } elseif ($this->addFields[$item]['type'] == 'boolean') { $_var='select_'.$item; ${$_var}[$_REQUEST[$item_form]]='selected'; printf (" ", $item_name, $item, ${$_var}[0], ${$_var}[1] ); } else { $type='text'; if (strstr($item,'password')) $type='password'; printf (" ", $item_name, $item, $type, $_REQUEST[$item_form] ); if ($item=='password' && $confirmPassword) { printf (" ", $_REQUEST[confirm_password_form] ); } } } } $this->printHiddenFormElements(); print ""; print "
Reseller %s
Reseller %s
%s"; $this->showTimezones($_value); print "
%s
%s
%s
%s
%s
Confirm password
"; } function addRecord($dictionary=array(),$confirmPassword=false) { if (!$this->checkRecord($dictionary)) { return false; } foreach (array_keys($this->addFields) as $item) { if ($dictionary[$item]) { $customer[$item] = trim($dictionary[$item]); } else { $item_form = $item.'_form'; $customer[$item] = 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 ($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)) { - // update remote - - if (is_object($this->SoapEngineRemote)) { - if ($_id = $this->getCustomerId($customer['username'])) { - $customerRemote=$customer; - $customerRemote['id'] = intval($_id); - - $this->SoapEngineRemote->addHeader($this->SoapAuthRemote); - $result = $this->SoapEngineRemote->addAccount($customerRemote); - - if (PEAR::isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error from %s: %s (%s): %s",$this->SOAPurlRemote,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); - - $function=array('commit' => array('name' => 'deleteAccount', - 'parameters' => array(intval($_id)), - 'logs' => array('success' => sprintf('Customer id %s could not be created ',$this->filters['customer']))) - ); - - $this->SoapEngine->execute($function,$this->html); - return false; - } - } - } // 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']) { $result = $this->SoapEngine->soapclient->getResellers($Query); } else { $result = $this->SoapEngine->soapclient->getCustomers($Query); } if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error 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->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 $result = $this->SoapEngine->soapclient->getCustomers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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 $result = $this->SoapEngine->soapclient->getCustomers($Query); if (PEAR::isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); printf ("

Error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); 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 Presence($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 (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 (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; 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(); } } 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 _("Record generator"); print "
"; print " "; print " "; if ($_REQUEST['add_prefix']) { $add_prefix=$_REQUEST['add_prefix']; } else { $add_prefix = $this->sipRecords->getCustomerProperty('enum_generator_add_prefix'); } print " ",$add_prefix); if ($_REQUEST['number_length']) { $number_length=$_REQUEST['number_length']; } else { $number_length = $this->sipRecords->getCustomerProperty('enum_generator_number_length'); } 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 " ",$strip_digits); print " "; print " "; if (count($this->sipRecords->allowedDomains) > 0) { print " "; print " "; print " ",$checked_create_sip); if ($_REQUEST['pstn']) { $checked_pstn='checked'; } else { $checked_pstn=''; } print " ",$checked_pstn); if ($_REQUEST['prepaid']) { $checked_prepaid='checked'; } else { $checked_prepaid=''; } print " ",$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 " ",$rpid_strip_digits); print " ",$_REQUEST['quota']); print " ",$_REQUEST['password']); } if ($_REQUEST['nr_records']) { $nr_records=$_REQUEST['nr_records']; } else { $nr_records=1; } print " "; print " "; print " "; $this->printHiddenFormElements(); 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 _("ENUM mapping template"); print ""; print "
"; print _("Add prefix after range:"); printf ("
"; 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 "
"; print _("Strip digits:"); printf ("
"; print _("Owner:"); printf (" ",$_REQUEST['owner']); print "
"; print _("Info:"); printf (" ",$_REQUEST['info']); print "

"; print ""; print _("SIP account template"); print ""; print "
"; print _("Create SIP records"); if ($_REQUEST['create_sip']) { $checked_create_sip='checked'; } else { $checked_create_sip=''; } printf ("
"; print _("PSTN"); printf ("
"; print _("Prepaid"); printf ("
"; print _("Strip digits from Caller-ID"); printf ("
"; print _("Quota"); printf ("
"; print _("Password"); printf ("

"; print ""; print ""; printf (" Number of records: ",$nr_records); print ""; print "

"; print _("Existing records will not be overwritten. "); print "

"; } function checkGenerateRequest() { // check number of records $this->template['create_sip']=trim($_REQUEST['create_sip']); $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' ) ); $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 "
  1. "; 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(); if ($this->template['pstn']) { $groups[]='free-pstn'; } if ($this->template['prepaid']) { $groups[]='prepaid'; } printf ('and sip account %s@%s ',$username,$this->template['domain']); $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'] ); 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 Actions($SoapEngine) { $this->SoapEngine = $SoapEngine; $this->version = $this->SoapEngine->version; $this->adminonly = $this->SoapEngine->adminonly; } function execute($selectionKeys,$action,$sub_action_parameter) { } function showActionsForm($filters,$sorting,$hideParameter=false) { if (!count($this->actions)) return; print "

"; printf ("",$_SERVER['PHP_SELF']); print " "; 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 "
"; print " "; if ($this->adminonly) { print " adminonly> "; } print ""; if (!$hideParameter) { printf (" ",$this->sub_action_parameter_size); } print " "; print "
"; } } class SipAccountsActions extends Actions { var $actions=array('block' => 'Block SIP accounts', 'deblock' => 'Deblock SIP accounts', 'enable_pstn' => 'Enable access to PSTN for the SIP accounts', 'disable_pstn' => 'Disable access to PSTN for the SIP accounts', 'deblock_quota' => 'Deblock SIP accounts blocked by quota', 'prepaid' => 'Make SIP accounts prepaid', 'postpaid' => 'Make SIP accounts postpaid', 'delete' => 'Delete SIP accounts', 'setquota' => 'Set quota of SIP account to:', 'rpidasusername' => 'Set PSTN caller ID as the username', 'prefixtorpid' => 'Add to PSTN caller ID this prefix:', 'rmdsfromrpid' => 'Remove from PSTN caller ID digits:', 'addtogroup' => 'Add SIP accounts to group:', 'removefromgroup'=> 'Remove SIP accounts from group:', 'addbalance' => 'Add to prepaid balance value:', 'changeowner' => 'Change owner to:', 'changefirstname'=> 'Change first name to:', 'changelastname' => 'Change last name to:', 'changepassword' => 'Change password to:' ); function SipAccountsActions($SoapEngine) { $this->Actions($SoapEngine); } function execute($selectionKeys,$action,$sub_action_parameter) { if (!in_array($action,array_keys($this->actions))) { print "Error: Invalid action $action"; return false; } print "

    "; foreach($selectionKeys as $key) { flush(); //printf ("Performing action=%s on key=%s",$action,$key); $account=array('username' => $key['username'], 'domain' => $key['domain'] ); printf ("
  1. %s@%s",$key['username'],$key['domain']); if ($action=='block') { $function=array('commit' => array('name' => 'addToGroup', 'parameters' => array($account,'blocked'), 'logs' => array('success' => sprintf('SIP account %s@%s has been blocked',$key['username'],$key['domain']) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action=='deblock') { $function=array('commit' => array('name' => 'removeFromGroup', 'parameters' => array($account,'blocked'), 'logs' => array('success' => sprintf('SIP account %s@%s has been de-blocked',$key['username'],$key['domain']) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action=='removefromgroup') { if (!strlen($sub_action_parameter)) { printf ("Error: you must enter a group name"); break; } $function=array('commit' => array('name' => 'removeFromGroup', 'parameters' => array($account,$sub_action_parameter), 'logs' => array('success' => sprintf('SIP account %s@%s has been removed from group %s',$key['username'],$key['domain'],$sub_action_parameter) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action=='addtogroup') { if (!strlen($sub_action_parameter)) { printf ("Error: you must enter a group name"); break; } $function=array('commit' => array('name' => 'addToGroup', 'parameters' => array($account,$sub_action_parameter), 'logs' => array('success' => sprintf('SIP account %s@%s is now in group %s',$key['username'],$key['domain'],$sub_action_parameter) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action=='deblock_quota') { $function=array('commit' => array('name' => 'removeFromGroup', 'parameters' => array($account,'quota'), 'logs' => array('success' => sprintf('SIP account %s@%s has been deblocked from quota',$key['username'],$key['domain']) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action=='disable_pstn') { $function=array('commit' => array('name' => 'removeFromGroup', 'parameters' => array($account,'free-pstn'), 'logs' => array('success' => sprintf('SIP account %s@%s has no access to the PSTN',$key['username'],$key['domain']) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action=='enable_pstn') { $function=array('commit' => array('name' => 'addToGroup', 'parameters' => array($account,'free-pstn'), 'logs' => array('success' => sprintf('SIP account %s@%s has access to the PSTN',$key['username'],$key['domain']) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action=='delete') { $function=array('commit' => array('name' => 'deleteAccount', 'parameters' => array($account), 'logs' => array('success' => sprintf('SIP account %s@%s has been deleted',$key['username'],$key['domain']) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action=='prepaid') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { //print_r($result); // Sanitize data types due to PHP bugs if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); $result->quota = intval($result->quota); $result->answerTimeout = intval($result->answerTimeout); $result->prepaid=1; $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('SIP account %s@%s is now prepaid',$key['username'],$key['domain']) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='postpaid') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); $result->quota = intval($result->quota); $result->answerTimeout = intval($result->answerTimeout); $result->prepaid=0; $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('SIP account %s@%s is now postpaid',$key['username'],$key['domain']) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='setquota') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { //print_r($result); // Sanitize data types due to PHP bugs if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); $result->quota = intval($sub_action_parameter); $result->answerTimeout = intval($result->answerTimeout); $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('SIP account %s@%s has quota set to %s',$key['username'],$key['domain'],$sub_action_parameter) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='rmdsfromrpid') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { //print_r($result); // Sanitize data types due to PHP bugs if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); if (is_numeric($sub_action_parameter) && strlen($result->rpid) > $sub_action_parameter) { printf("%s %s",$result->rpid,$sub_action_parameter); $result->rpid=substr($result->rpid,$sub_action_parameter); printf("%s %s",$result->rpid,$sub_action_parameter); } else { printf ("Error: '%s' must be numeric and less than caller if length",$sub_action_parameter); continue; } $result->quota = intval($result->quota); $result->answerTimeout = intval($result->answerTimeout); $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('SIP account %s@%s has PSTN caller ID set to %s',$key['username'],$key['domain'],$result->rpid) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='rpidasusername') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { //print_r($result); // Sanitize data types due to PHP bugs if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); if (is_numeric($key['username'])) $result->rpid=$key['username']; $result->quota = intval($result->quota); $result->answerTimeout = intval($result->answerTimeout); $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('SIP account %s@%s has PSTN caller ID set to %s',$key['username'],$key['domain'],$key['username']) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='prefixtorpid') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { //print_r($result); // Sanitize data types due to PHP bugs if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); if (is_numeric($sub_action_parameter)) { $result->rpid=$sub_action_parameter.$result->rpid; } else { printf ("Error: '%s' must be numeric",$sub_action_parameter); continue; } $result->quota = intval($result->quota); $result->answerTimeout = intval($result->answerTimeout); $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('SIP account %s@%s has PSTN caller ID set to %s ',$key['username'],$key['domain'],$result->rpid) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='changecustomer' && $this->version > 1) { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { //print_r($result); // Sanitize data types due to PHP bugs if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); if (is_numeric($sub_action_parameter)) { $result->customer=intval($sub_action_parameter); } else { printf ("Error: '%s' must be numeric",$sub_action_parameter); continue; } $result->quota = intval($result->quota); $result->answerTimeout = intval($result->answerTimeout); $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('SIP account %s@%s has customer set to %s ',$key['username'],$key['domain'],$result->customer) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='changeowner') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { //print_r($result); // Sanitize data types due to PHP bugs if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); if (is_numeric($sub_action_parameter)) { $result->owner=intval($sub_action_parameter); } else { printf ("Error: '%s' must be numeric",$sub_action_parameter); continue; } $result->quota = intval($result->quota); $result->answerTimeout = intval($result->answerTimeout); $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('SIP account %s@%s has owner set to %s ',$key['username'],$key['domain'],$result->owner) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='changefirstname') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); $result->firstName=trim($sub_action_parameter); $result->quota = intval($result->quota); $result->answerTimeout = intval($result->answerTimeout); $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('SIP account %s@%s first name has been set to %s ',$key['username'],$key['domain'],$result->firstName) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='changelastname') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); $result->lastName=trim($sub_action_parameter); $result->quota = intval($result->quota); $result->answerTimeout = intval($result->answerTimeout); $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('SIP account %s@%s last name has been set to %s ',$key['username'],$key['domain'],$result->lastName) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='changepassword') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } else { if (!is_array($result->properties)) $result->properties=array(); if (!is_array($result->groups)) $result->groups=array(); $result->password=trim($sub_action_parameter); $result->quota = intval($result->quota); $result->answerTimeout = intval($result->answerTimeout); $function=array('commit' => array('name' => 'updateAccount', 'parameters' => array($result), 'logs' => array('success' => sprintf('Password for SIP account %s@%s has been changed',$key['username'],$key['domain']) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action=='addbalance') { if (!is_numeric($sub_action_parameter)) { printf ("Error: you must enter a positive balance"); break; } $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $result = $this->SoapEngine->soapclient->getAccount($account); if (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); break; } if (!$result->prepaid) { printf ("Info: SIP account %s@%s is not prepaid, no action performed",$key['username'],$key['domain']); continue; } $function=array('commit' => array('name' => 'addBalance', 'parameters' => array($account,$sub_action_parameter), 'logs' => array('success' => sprintf('SIP account %s@%s balance has been increased with %s',$key['username'],$key['domain'],$sub_action_parameter) ) ) ); $this->SoapEngine->execute($function,$this->html); } } print "
"; } } class SipAliasesActions extends Actions { var $actions=array( 'delete' => 'Delete SIP aliases' ); function SipAliasesActions($SoapEngine) { $this->Actions($SoapEngine); } function execute($selectionKeys,$action,$sub_action_parameter) { if (!in_array($action,array_keys($this->actions))) { print "Error: Invalid action $action"; return false; } print "
    "; foreach($selectionKeys as $key) { print "
  1. "; flush(); //printf ("Performing action=%s on key=%s",$action,$key); $alias=array('username' => $key['username'], 'domain' => $key['domain'] ); if ($action=='delete') { $function=array('commit' => array('name' => 'deleteAlias', 'parameters' => array($alias), 'logs' => array('success' => sprintf('SIP alias %s@%s has been deleted',$key['username'],$key['domain']) ) ) ); $this->SoapEngine->execute($function,$this->html); } } print "
"; } } class EnumMappingsActions extends Actions { var $actions=array( 'changettl' => 'Change TTL to:', 'changeowner' => 'Change owner to:', 'changeinfo' => 'Change info to:', 'delete' => 'Delete ENUM mappings' ); var $mapping_fields=array('id' => 'integer', 'type' => 'text', 'mapto' => 'text', 'priority' => 'integer', 'ttl' => 'integer' ); function EnumMappingsActions($SoapEngine) { $this->Actions($SoapEngine); } function execute($selectionKeys,$action,$sub_action_parameter) { if (!in_array($action,array_keys($this->actions))) { print "Error: Invalid action $action"; return false; } print "
    "; foreach($selectionKeys as $key) { flush(); print "
  1. "; $enum_id=array('number' => $key['number'], 'tld' => $key['tld'] ); if ($action=='delete') { //printf ("Performing action=%s on key=%s",$action,$key); $function=array('commit' => array('name' => 'deleteNumber', 'parameters' => array($enum_id), 'logs' => array('success' => sprintf('ENUM number +%s under %s has been deleted',$key['number'],$key['tld']) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action == 'changettl') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $number = $this->SoapEngine->soapclient->getNumber($enum_id); if (PEAR::isError($number)) { $error_msg = $number->getMessage(); $error_fault= $number->getFault(); $error_code = $number->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { if (!is_numeric($sub_action_parameter)) { printf ("Error: TTL '%s' must be numeric",$sub_action_parameter); continue; } $new_mappings=array(); foreach ($number->mappings as $_mapping) { foreach (array_keys($this->mapping_fields) as $field) { if ($field == 'ttl') { $new_mapping[$field]=intval($sub_action_parameter); } else { if ($this->mapping_fields[$field] == 'integer') { $new_mapping[$field]=intval($_mapping->$field); } else { $new_mapping[$field]=$_mapping->$field; } } } $new_mappings[]=$new_mapping; } $number->mappings=$new_mappings; $function=array('commit' => array('name' => 'updateNumber', 'parameters' => array($number), 'logs' => array('success' => sprintf('ENUM number %s@%s TTL has been set to %d',$key['number'],$key['tld'],intval($sub_action_parameter)) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action == 'changeowner') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $number = $this->SoapEngine->soapclient->getNumber($enum_id); if (PEAR::isError($number)) { $error_msg = $number->getMessage(); $error_fault= $number->getFault(); $error_code = $number->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { $new_mappings=array(); foreach ($number->mappings as $_mapping) { $new_mappings[]=$_mapping; } $number->mappings=$new_mappings; if (is_numeric($sub_action_parameter)) { $number->owner=intval($sub_action_parameter); } else { printf ("Error: Owner '%s' must be numeric",$sub_action_parameter); continue; } $function=array('commit' => array('name' => 'updateNumber', 'parameters' => array($number), 'logs' => array('success' => sprintf('ENUM number %s@%s owner has been set to %d',$key['number'],$key['tld'],intval($sub_action_parameter)) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action == 'changeinfo') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $number = $this->SoapEngine->soapclient->getNumber($enum_id); if (PEAR::isError($number)) { $error_msg = $number->getMessage(); $error_fault= $number->getFault(); $error_code = $number->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { $new_mappings=array(); foreach ($number->mappings as $_mapping) { $new_mappings[]=$_mapping; } $number->mappings=$new_mappings; $number->info=trim($sub_action_parameter); $function=array('commit' => array('name' => 'updateNumber', 'parameters' => array($number), 'logs' => array('success' => sprintf('ENUM number %s@%s info has been set to %s',$key['number'],$key['tld'],trim($sub_action_parameter)) ) ) ); $this->SoapEngine->execute($function,$this->html); } } } print "
"; } } class DnsRecordsActions extends Actions { var $sub_action_parameter_size = 50; var $actions=array( 'changettl' => 'Change TTL to:', 'changepriority' => 'Change Priority to:', 'changevalue' => 'Change value to:', 'delete' => 'Delete records' ); function DnsRecordsActions($SoapEngine) { $this->Actions($SoapEngine); } function execute($selectionKeys,$action,$sub_action_parameter) { if (!in_array($action,array_keys($this->actions))) { print "Error: Invalid action $action"; return false; } print "
    "; foreach($selectionKeys as $key) { flush(); print "
  1. "; //printf ("Performing action=%s on key=%s",$action,$key['id']); if ($action=='delete') { $function=array('commit' => array('name' => 'deleteRecord', 'parameters' => array(intval($key['id'])), 'logs' => array('success' => sprintf('Record %d has been deleted',$key['id']) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action == 'changettl') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $record = $this->SoapEngine->soapclient->getRecord($key['id']); if (PEAR::isError($record)) { $error_msg = $record->getMessage(); $error_fault= $record->getFault(); $error_code = $record->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { if (!is_numeric($sub_action_parameter)) { printf ("Error: TTL '%s' must be numeric",$sub_action_parameter); continue; } $record->ttl=intval($sub_action_parameter); $function=array('commit' => array('name' => 'updateRecord', 'parameters' => array($record), 'logs' => array('success' => sprintf('TTL for record %d has been set to %d',$key['id'],intval($sub_action_parameter)) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action == 'changepriority') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $record = $this->SoapEngine->soapclient->getRecord($key['id']); if (PEAR::isError($record)) { $error_msg = $record->getMessage(); $error_fault= $record->getFault(); $error_code = $record->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { if (is_numeric($sub_action_parameter)) { $record->priority=intval($sub_action_parameter); } else { printf ("Error: Priority '%s' must be numeric",$sub_action_parameter); continue; } $function=array('commit' => array('name' => 'updateRecord', 'parameters' => array($record), 'logs' => array('success' => sprintf('Priority for record %d has been set to %d',$key['id'],intval($sub_action_parameter)) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action == 'changevalue') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $record = $this->SoapEngine->soapclient->getRecord($key['id']); if (PEAR::isError($record)) { $error_msg = $record->getMessage(); $error_fault= $record->getFault(); $error_code = $record->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { $record->value=$sub_action_parameter; $function=array('commit' => array('name' => 'updateRecord', 'parameters' => array($record), 'logs' => array('success' => sprintf('Value of record %d has been set to %s',$key['id'],$sub_action_parameter) ) ) ); $this->SoapEngine->execute($function,$this->html); } } } print "
"; } } class DnsZonesActions extends Actions { var $sub_action_parameter_size = 50; var $actions=array( 'changettl' => 'Change TTL to:', 'changeexpire' => 'Change Expire to:', 'changeminimum' => 'Change Minimum to:', 'changeretry' => 'Change Retry to:', 'changeinfo' => 'Change Info to:', 'addnsrecord' => 'Add name server:', 'removensrecord' => 'Remove name server:', 'delete' => 'Delete zones' ); function DnsZonesActions($SoapEngine) { $this->Actions($SoapEngine); } function execute($selectionKeys,$action,$sub_action_parameter) { if (!in_array($action,array_keys($this->actions))) { print "Error: Invalid action $action"; return false; } print "
    "; foreach($selectionKeys as $key) { flush(); print "
  1. "; + //printf ("Performing action=%s on key=%s",$action,$key['name']); if ($action=='delete') { $function=array('commit' => array('name' => 'deleteZone', 'parameters' => $key['name'], 'logs' => array('success' => sprintf('Zone %s has been deleted',$key['name']) ) ) ); $this->SoapEngine->execute($function,$this->html); } else if ($action == 'changettl') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $zone = $this->SoapEngine->soapclient->getZone($key['name']); if (PEAR::isError($zone)) { $error_msg = $zone->getMessage(); $error_fault= $zone->getFault(); $error_code = $zone->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { if (!is_numeric($sub_action_parameter)) { printf ("Error: TTL '%s' must be numeric",$sub_action_parameter); continue; } $zone->ttl=intval($sub_action_parameter); $function=array('commit' => array('name' => 'updateZone', 'parameters' => array($zone), 'logs' => array('success' => sprintf('TTL for zone %s has been set to %d',$key['name'],intval($sub_action_parameter)) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action == 'changeexpire') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $zone = $this->SoapEngine->soapclient->getZone($key['name']); if (PEAR::isError($zone)) { $error_msg = $zone->getMessage(); $error_fault= $zone->getFault(); $error_code = $zone->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { if (!is_numeric($sub_action_parameter)) { printf ("Error: Expire '%s' must be numeric",$sub_action_parameter); continue; } $zone->expire=intval($sub_action_parameter); $function=array('commit' => array('name' => 'updateZone', 'parameters' => array($zone), 'logs' => array('success' => sprintf('Expire for zone %s has been set to %d',$key['name'],intval($sub_action_parameter)) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action == 'changeminimum') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $zone = $this->SoapEngine->soapclient->getZone($key['name']); if (PEAR::isError($zone)) { $error_msg = $zone->getMessage(); $error_fault= $zone->getFault(); $error_code = $zone->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { if (!is_numeric($sub_action_parameter)) { printf ("Error: Minimum '%s' must be numeric",$sub_action_parameter); continue; } $zone->minimum=intval($sub_action_parameter); $function=array('commit' => array('name' => 'updateZone', 'parameters' => array($zone), 'logs' => array('success' => sprintf('Minimum for zone %s has been set to %d',$key['name'],intval($sub_action_parameter)) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action == 'addnsrecord') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $zone = $this->SoapEngine->soapclient->getZone($key['name']); if (PEAR::isError($zone)) { $error_msg = $zone->getMessage(); $error_fault= $zone->getFault(); $error_code = $zone->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { $zone->nameservers[]=$sub_action_parameter; $zone->nameservers=array_unique($zone->nameservers); $function=array('commit' => array('name' => 'updateZone', 'parameters' => array($zone), 'logs' => array('success' => sprintf('Added NS record %s for zone %s',$sub_action_parameter,$key['name']) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action == 'removensrecord') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $zone = $this->SoapEngine->soapclient->getZone($key['name']); if (PEAR::isError($zone)) { $error_msg = $zone->getMessage(); $error_fault= $zone->getFault(); $error_code = $zone->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { $new_servers=array(); foreach ($zone->nameservers as $_ns) { if ($_ns == $sub_action_parameter) continue; $new_servers[]=$_ns; } $zone->nameservers=array_unique($new_servers); $function=array('commit' => array('name' => 'updateZone', 'parameters' => array($zone), 'logs' => array('success' => sprintf('NS record %s removed from zone %s',$sub_action_parameter,$key['name']) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action == 'changeretry') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $zone = $this->SoapEngine->soapclient->getZone($key['name']); if (PEAR::isError($zone)) { $error_msg = $zone->getMessage(); $error_fault= $zone->getFault(); $error_code = $zone->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { if (!is_numeric($sub_action_parameter)) { printf ("Error: Retry '%s' must be numeric",$sub_action_parameter); continue; } $zone->retry=intval($sub_action_parameter); $function=array('commit' => array('name' => 'updateZone', 'parameters' => array($zone), 'logs' => array('success' => sprintf('Retry for zone %s has been set to %d',$key['name'],intval($sub_action_parameter)) ) ) ); $this->SoapEngine->execute($function,$this->html); } } else if ($action == 'changeinfo') { $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $zone = $this->SoapEngine->soapclient->getZone($key['name']); if (PEAR::isError($zone)) { $error_msg = $zone->getMessage(); $error_fault= $zone->getFault(); $error_code = $zone->getCode(); printf ("Error: %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); break; } else { $zone->info=$sub_action_parameter; $function=array('commit' => array('name' => 'updateZone', 'parameters' => array($zone), 'logs' => array('success' => sprintf('Info for zone %s has been set to %s',$key['name'],$sub_action_parameter) ) ) ); $this->SoapEngine->execute($function,$this->html); } } } print "
"; } } class CustomersActions extends Actions { var $actions=array( 'delete' => 'Delete customers' ); function CustomerActions($SoapEngine) { $this->Actions($SoapEngine); } function execute($selectionKeys,$action,$sub_action_parameter) { if (!in_array($action,array_keys($this->actions))) { print "Error: Invalid action $action"; return false; } print "
    "; foreach($selectionKeys as $key) { flush(); print "
  1. "; if ($action=='delete') { $function=array('commit' => array('name' => 'deleteAccount', 'parameters' => intval($key), 'logs' => array('success' => sprintf('Customer id %s has been deleted',$key))) ); $this->SoapEngine->execute($function,$this->html); } } print "
"; } } ?>