diff --git a/library/cdr_generic.php b/library/cdr_generic.php index 27219c1..093d3eb 100644 --- a/library/cdr_generic.php +++ b/library/cdr_generic.php @@ -1,3241 +1,3281 @@ 'RadAcctId', - 'callId' => 'AcctSessionId', - 'username' => 'UserName', - 'domain' => 'Realm', - 'gateway' => 'NASIPAddress', - 'duration' => 'AcctSessionTime', - 'startTime' => 'AcctStartTime', - 'stopTime' => 'AcctStopTime', - 'inputTraffic' => 'AcctInputOctets', - 'outputTraffic' => 'AcctOutputOctets', - 'aNumber' => 'CallingStationId', - 'cNumber' => 'CalledStationId', - 'timestamp' => 'timestamp', - 'BillingPartyId' => 'UserName', - 'sipRPID' => 'SipRPID', - 'ResellerId' => 'BillingId', - 'price' => 'Price', - 'DestinationId' => 'DestinationId' - ); - - function _readCDRNormalizationFieldsFromDB() { + var $CDRNormalizationFields = array( + 'id' => 'RadAcctId', + 'callId' => 'AcctSessionId', + 'username' => 'UserName', + 'domain' => 'Realm', + 'gateway' => 'NASIPAddress', + 'duration' => 'AcctSessionTime', + 'startTime' => 'AcctStartTime', + 'stopTime' => 'AcctStopTime', + 'inputTraffic' => 'AcctInputOctets', + 'outputTraffic' => 'AcctOutputOctets', + 'aNumber' => 'CallingStationId', + 'cNumber' => 'CalledStationId', + 'timestamp' => 'timestamp', + 'BillingPartyId' => 'UserName', + 'sipRPID' => 'SipRPID', + 'ResellerId' => 'BillingId', + 'price' => 'Price', + 'DestinationId' => 'DestinationId' + ); + + function _readCDRNormalizationFieldsFromDB() + { foreach (array_keys($this->CDRNormalizationFields) as $field) { - $mysqlField=$this->CDRNormalizationFields[$field]; + $mysqlField = $this->CDRNormalizationFields[$field]; $CDRStructure[$mysqlField] = $this->CDRdb->f($mysqlField); } return $CDRStructure; } - function _readCDRFieldsFromDB($fields) { + function _readCDRFieldsFromDB($fields) + { foreach (array_keys($this->CDRFields) as $field) { - $mysqlField=$this->CDRFields[$field]; + $mysqlField = $this->CDRFields[$field]; $CDRStructure[$mysqlField] = $this->CDRdb->f($mysqlField); } return $CDRStructure; } - function initCDRFields() { + function initCDRFields() + { // init names of CDR fields foreach (array_keys($this->CDRFields) as $field) { - $mysqlField=$this->CDRFields[$field]; - $_field=$field."Field"; - $this->$_field=$mysqlField; + $mysqlField = $this->CDRFields[$field]; + $_field = $field."Field"; + $this->$_field = $mysqlField; } } - function initDatabaseConnection() { + function initDatabaseConnection() + { // connect to the CDR database(s) if(!$this->DATASOURCES[$this->cdr_source]['db_class']) { - $log=sprintf("Error: \$DATASOURCES['%s']['db_class'] is not defined (init)",$this->cdr_source); + $log = sprintf("Error: \$DATASOURCES['%s']['db_class'] is not defined (init)", $this->cdr_source); syslog(LOG_NOTICE, $log); return 0; } - $_dbClass = $this->DATASOURCES[$this->cdr_source]['db_class']; + $_dbClass = $this->DATASOURCES[$this->cdr_source]['db_class']; if (is_array($_dbClass)) { - if ($_dbClass[0]) $this->primary_database = $_dbClass[0]; - if ($_dbClass[1]) $this->secondary_database = $_dbClass[1]; + if ($_dbClass[0]) $this->primary_database = $_dbClass[0]; + if ($_dbClass[1]) $this->secondary_database = $_dbClass[1]; } else { $this->primary_database = $_dbClass; } if(!class_exists($this->primary_database)) { - $log=sprintf("Error: database class '%s' is not defined",$this->primary_database); + $log = sprintf("Error: database class '%s' is not defined", $this->primary_database); syslog(LOG_NOTICE, $log); return 0; } - $this->CDRdb = new $this->primary_database; + $this->CDRdb = new $this->primary_database; // check db connectivity if (!$this->CDRdb->query('SELECT 1')) { - $log=sprintf("Error: failed to connect to the primary CDR database %s\n",$this->primary_database); + $log = sprintf("Error: failed to connect to the primary CDR database %s\n", $this->primary_database); syslog(LOG_NOTICE, $log); if ($this->secondary_database) { - $this->CDRdb = new $this->secondary_database; + $this->CDRdb = new $this->secondary_database; if (!$this->CDRdb->query('SELECT 1')) { - $log=sprintf("Error: failed to connect to the secondary CDR database %s\n",$this->secondary_database); + $log = sprintf("Error: failed to connect to the secondary CDR database %s\n", $this->secondary_database); syslog(LOG_NOTICE, $log); return 0; } else { - $this->CDRdb1 = new $this->secondary_database; - $this->db_class = $this->secondary_database; + $this->CDRdb1 = new $this->secondary_database; + $this->db_class = $this->secondary_database; } } else { return 0; } } else { - $this->CDRdb1 = new $this->primary_database; - $this->db_class = $this->primary_database; + $this->CDRdb1 = new $this->primary_database; + $this->db_class = $this->primary_database; } return 1; } - function CDRS($cdr_source) { + function CDRS($cdr_source) + { global $CDRTool; global $DATASOURCES; global $RatingEngine; if (!$cdr_source) { - $log="Error: cdr_source not defined\n"; + $log = "Error: cdr_source not defined\n"; syslog(LOG_NOTICE, $log); return 0; } if (!$DATASOURCES[$cdr_source]) { - $log="Error: no such datasource defined ($cdr_source) \n"; + $log = "Error: no such datasource defined ($cdr_source) \n"; syslog(LOG_NOTICE, $log); return 0; } $this->initDefaults(); $this->cdrtool = new DB_CDRTool(); $this->cdr_source = $cdr_source; $this->CDRTool = $CDRTool; $this->rating_settings = $RatingEngine; $this->DATASOURCES = $DATASOURCES; - $this->cdrtool->Halt_On_Error="no"; + $this->cdrtool->Halt_On_Error = "no"; $this->table = $this->DATASOURCES[$this->cdr_source]['table']; #TODO remove me, I am used to temporary sync mysql data with mongo data if ($DATASOURCES[$cdr_source]['mongo_db']) { $mongo_db = $this->CDRTool['mongo_db'][$DATASOURCES[$this->cdr_source]['mongo_db']]; $mongo_uri = $mongo_db['uri']; $mongo_replicaSet = $mongo_db['replicaSet']; $mongo_database = $mongo_db['database']; try { $mongo_connection = new Mongo("mongodb://$mongo_uri", array("replicaSet" => $mongo_replicaSet)); $db = $mongo_connection->selectDB($mongo_database); $this->mongo_table = $db->selectCollection($this->table); } catch (Exception $e) { printf("
Caught exception in initDatabaseConnection(): %s", $e->getMessage()); return 0; } } else { $this->mongo_table = NULL; } $this->initCDRFields(); if ($this->DATASOURCES[$this->cdr_source]['rating']) { $this->ratingEnabled = 1; $this->rating = $this->DATASOURCES[$this->cdr_source]['rating']; if ($this->DATASOURCES[$this->cdr_source]['showRate']) $this->showRate = $this->DATASOURCES[$this->cdr_source]['showRate']; if ($this->DATASOURCES[$this->cdr_source]['rateField']) $this->rateField = $this->DATASOURCES[$this->cdr_source]['rateField']; if ($this->DATASOURCES[$this->cdr_source]['priceField']) $this->priceField = $this->DATASOURCES[$this->cdr_source]['priceField']; } if ($this->DATASOURCES[$this->cdr_source]['UserQuotaClass']) { $this->quotaEnabled = 1; $this->quota_init_flag = $this->cdr_source.':quotaCheckInit'; $this->quota_reset_flag = $this->cdr_source.':reset_quota_for'; if ($this->DATASOURCES[$this->cdr_source]['daily_quota']) { $this->daily_quota=$this->DATASOURCES[$this->cdr_source]['daily_quota']; } } $this->initDatabaseConnection(); if ($this->DATASOURCES[$this->cdr_source]['DestinationIdField']) { $this->DestinationIdField = $this->DATASOURCES[$this->cdr_source]['DestinationIdField']; } if ($this->DATASOURCES[$this->cdr_source]['normalizedField']) { - $this->normalizedField=$this->DATASOURCES[$this->cdr_source]['normalizedField']; + $this->normalizedField = $this->DATASOURCES[$this->cdr_source]['normalizedField']; } if (strlen($this->DATASOURCES[$this->cdr_source]['intAccessCode'])) { - $this->intAccessCode=$this->DATASOURCES[$this->cdr_source]['intAccessCode']; + $this->intAccessCode = $this->DATASOURCES[$this->cdr_source]['intAccessCode']; } if (strlen($this->DATASOURCES[$this->cdr_source]['natAccessCode'])) { - $this->natAccessCode = $this->DATASOURCES[$this->cdr_source]['natAccessCode']; + $this->natAccessCode = $this->DATASOURCES[$this->cdr_source]['natAccessCode']; } if ($this->DATASOURCES[$this->cdr_source]['db_subscribers']) { if (class_exists($this->DATASOURCES[$this->cdr_source]['db_subscribers'])) { - $this->AccountsDB = new $this->DATASOURCES[$this->cdr_source]['db_subscribers']; - $this->db_subscribers = $this->DATASOURCES[$this->cdr_source]['db_subscribers']; + $this->AccountsDB = new $this->DATASOURCES[$this->cdr_source]['db_subscribers']; + $this->db_subscribers = $this->DATASOURCES[$this->cdr_source]['db_subscribers']; } else { - $log=sprintf("Error: subscribers database class %s is not defined",$this->DATASOURCES[$this->cdr_source]['db_subscribers']); + $log = sprintf( + "Error: subscribers database class %s is not defined", + $this->DATASOURCES[$this->cdr_source]['db_subscribers'] + ); syslog(LOG_NOTICE, $log); return 0; } } else if (class_exists('DB_opensips')) { $this->AccountsDB = new DB_opensips(); $this->db_subscribers = 'DB_opensips'; } else { - $log=sprintf("Error: subscribers database is not defined, please define 'db_subscribers' in datasource '%s'",$this->cdr_source); + $log = sprintf( + "Error: subscribers database is not defined, please define 'db_subscribers' in datasource '%s'", + $this->cdr_source + ); syslog(LOG_NOTICE, $log); return 0; } if ($this->DATASOURCES[$this->cdr_source]['BillingIdField']) { $this->BillingIdField = $this->DATASOURCES[$this->cdr_source]['BillingIdField']; } if ($this->DATASOURCES[$this->cdr_source]['E164_class']) { if (class_exists($this->DATASOURCES[$this->cdr_source]['E164_class'])) { - $this->E164_class=$this->DATASOURCES[$this->cdr_source]['E164_class']; + $this->E164_class = $this->DATASOURCES[$this->cdr_source]['E164_class']; } else { - printf ("Error: E164 class '%s' defined in datasource %s does not exist, using default '%s'",$this->DATASOURCES[$this->cdr_source]['E164_class'],$this->cdr_source,$this->E164_class); + printf( + "Error: E164 class '%s' defined in datasource %s does not exist, using default '%s'", + $this->DATASOURCES[$this->cdr_source]['E164_class'], + $this->cdr_source, + $this->E164_class + ); } } if ($this->DATASOURCES[$this->cdr_source]['sipTrace']) { $this->sipTrace=$this->DATASOURCES[$this->cdr_source]['sipTrace']; } if ($this->DATASOURCES[$this->cdr_source]['mediaTrace']) { $this->mediaTrace=$this->DATASOURCES[$this->cdr_source]['mediaTrace']; } if ($this->DATASOURCES[$this->cdr_source]['domain_table']) { $this->domain_table = $this->DATASOURCES[$this->cdr_source]['domain_table']; } if ($this->DATASOURCES[$this->cdr_source]['skipNormalize']) { $this->skipNormalize = $this->DATASOURCES[$this->cdr_source]['skipNormalize']; } if ($this->DATASOURCES[$this->cdr_source]['enableThor']) { $this->enableThor = $this->DATASOURCES[$this->cdr_source]['enableThor']; } if (is_array($this->CDRTool['normalize']['CS_CODES'])) $this->CS_CODES=array_keys($this->CDRTool['normalize']['CS_CODES']); $this->missed_calls = $this->DATASOURCES[$this->cdr_source]['missed_calls']; - $this->traceInURL = $this->DATASOURCES[$this->cdr_source]['traceInURL']; - $this->traceOutURL = $this->DATASOURCES[$this->cdr_source]['traceOutURL']; + $this->traceInURL = $this->DATASOURCES[$this->cdr_source]['traceInURL']; + $this->traceOutURL = $this->DATASOURCES[$this->cdr_source]['traceOutURL']; $this->protocolTraceURL = $this->DATASOURCES[$this->cdr_source]['protocolTraceURL']; $spath = explode("/",$_SERVER["PHP_SELF"]); $last = count($spath)-1; $this->scriptFile=$spath[$last]; $this->next = $_REQUEST["next"]; $this->export = $_REQUEST["export"]; $this->trace = $_REQUEST["trace"]; if ($this->export) { $this->maxrowsperpage=10000000; } else { if ($_REQUEST["maxrowsperpage"]) { $this->maxrowsperpage = $_REQUEST["maxrowsperpage"]; } else { $this->maxrowsperpage = "25"; } } $this->LoadDisconnectCodes(); $this->LoadDestinations(); $this->LoadENUMtlds(); $this->LoadDomains(); $this->LoadTrustedPeers(); $this->getCDRtables(); if ($this->DATASOURCES[$this->cdr_source]['csv_writer_class']) { $csv_writter_class=$this->DATASOURCES[$this->cdr_source]['csv_writer_class']; if (class_exists($csv_writter_class)) { - $this->csv_writter = new $csv_writter_class($this->cdr_source,$this->DATASOURCES[$this->cdr_source]['csv_directory'],$this->db_subscribers); + $this->csv_writter = new $csv_writter_class( + $this->cdr_source, + $this->DATASOURCES[$this->cdr_source]['csv_directory'], + $this->db_subscribers + ); } } $this->initOK=1; } - function initDefaults() { + function initDefaults() + { if (is_readable('/etc/default/cdrtool')) { $defaultContentLines=explode("\n",file_get_contents('/etc/default/cdrtool')); foreach ($defaultContentLines as $_line) { list($defaults_key, $defaults_value)=explode("=",$_line); if (strlen($defaults_value)) $this->defaults[trim($defaults_key)]=trim($defaults_value); } } } - function LoadDomains() { + function LoadDomains() + { } - function LoadTrustedPeers() { + function LoadTrustedPeers() + { } - function LoadAccounts() { + function LoadAccounts() + { } - function LoadDestinations() { + function LoadDestinations() + { $_destinations = array(); $_destinations_sip = array(); $this->destinations_count = 0; $this->destinations_sip_count = 0; $query=sprintf("select `value` from memcache where `key` = 'destinations'"); if (!$this->cdrtool->query($query)) { - $log=sprintf ("Database error for query %s: %s (%s)",$query,$this->cdrtool->Error,$this->cdrtool->Errno); + $log = sprintf( + "Database error for query %s: %s (%s)", + $query, + $this->cdrtool->Error, + $this->cdrtool->Errno + ); print $log; syslog(LOG_NOTICE, $log); return false; } if ($this->cdrtool->num_rows()) { - $b=time(); + $b = time(); $this->cdrtool->next_record(); - $_destinations=json_decode($this->cdrtool->f('value'),true); + $_destinations = json_decode($this->cdrtool->f('value'),true); foreach (array_keys($_destinations) as $_key1) { foreach(array_keys($_destinations[$_key1]) as $_key2) { - $this->destinations_count=$this->destinations_count+count($_destinations[$_key1][$_key2]); + $this->destinations_count = $this->destinations_count + count($_destinations[$_key1][$_key2]); } } if (!$this->destinations_count) { - $log=sprintf("Error: cached destinations key contains no data"); - syslog(LOG_NOTICE,$log); + $log = "Error: cached destinations key contains no data"; + syslog(LOG_NOTICE, $log); } - $query=sprintf("select `value` from memcache where `key` = 'destinations_sip'"); + $query = sprintf("select `value` from memcache where `key` = 'destinations_sip'"); if (!$this->cdrtool->query($query)) { - $log=sprintf ("Database error for query %s: %s (%s)",$query,$this->cdrtool->Error,$this->cdrtool->Errno); + $log = sprintf( + "Database error for query %s: %s (%s)", + $query, + $this->cdrtool->Error, + $this->cdrtool->Errno + ); print $log; syslog(LOG_NOTICE, $log); return false; } if ($this->cdrtool->num_rows()) { + $this->cdrtool->next_record(); + $_destinations_sip = json_decode($this->cdrtool->f('value'), true); - $this->cdrtool->next_record(); - $_destinations_sip=json_decode($this->cdrtool->f('value'),true); - - foreach (array_keys($_destinations_sip) as $_key1) { - foreach(array_keys($_destinations_sip[$_key1]) as $_key2) { - $this->destinations_sip_count=$this->destinations_count+count($_destinations_sip[$_key1][$_key2]); - } - } + foreach (array_keys($_destinations_sip) as $_key1) { + foreach (array_keys($_destinations_sip[$_key1]) as $_key2) { + $this->destinations_sip_count = $this->destinations_count + count($_destinations_sip[$_key1][$_key2]); + } + } } /* $e=time(); $log=sprintf("Read %d PSTN destinations from cache in %d seconds",$this->destinations_count,$e-$b); syslog(LOG_NOTICE,$log); if ($this->destinations_sip_count) { $e=time(); $log=sprintf("Read %d SIP destinations from cache in %d seconds",$this->destinations_sip_count,$e-$b); syslog(LOG_NOTICE,$log); } */ $this->destinations = $_destinations; $this->destinations_sip = $_destinations_sip; unset($_destinations); unset($_destinations_sip); - } else { - $this->CacheDestinations(); $this->destinations = $this->_destinations; $this->destinations_sip = $this->_destinations_sip; unset($this->_destinations); unset($this->_destinations_sip); } if (is_array($this->destinations)) { foreach (array_keys($this->destinations) as $_reseller) { foreach ($this->destinations[$_reseller] as $key => $val) { $this->destinations_length[$_reseller][$key] = max(array_map(strlen, array_keys($val))); } } } - $c=$this->destinations_count + $this->destinations_sip_count; + $c = $this->destinations_count + $this->destinations_sip_count; return $c; } - function CacheDestinations() { + function CacheDestinations() + { $this->_destinations = array(); $this->_destinations_sip = array(); $this->destinations_count = 0; $this->destinations_sip_count = 0; $b=time(); $query="select * from destinations"; if ($this->CDRTool['filter']['aNumber']) { $faNumber=$this->CDRTool['filter']['aNumber']; $query .= sprintf(" where subscriber = '%s' or (subscriber = '' and domain = '' and gateway = '') ", addslashes($faNumber)); } else if ($this->CDRTool['filter']['domain']) { $fdomain=$this->CDRTool['filter']['domain']; $query .= sprintf(" where domain = '%s' or (subscriber = '' and domain = '' and gateway = '') ", addslashes($fdomain)); } else if ($this->CDRTool['filter']['gateway']) { $fgateway=$this->CDRTool['filter']['gateway']; $query .= sprintf(" where gateway = '%s' or (subscriber = '' and domain = '' and gateway = '') ",addslashes($fgateway)); } $this->cdrtool->query($query); if (!$this->cdrtool->num_rows()) { - $log=sprintf("Error: could not find any entries in the destinations table"); - syslog(LOG_NOTICE,$log); + $log = "Error: could not find any entries in the destinations table"; + syslog(LOG_NOTICE, $log); return 0; } $destinations_cache = "\n"; $destinations_sip_cache = "\n"; - $this->destinations_count=0; - $this->destinations_default_count=0; - $this->destinations_gateway_count=0; - $this->destinations_domain_count=0; - $this->destinations_subscriber_count=0; + $this->destinations_count = 0; + $this->destinations_default_count = 0; + $this->destinations_gateway_count = 0; + $this->destinations_domain_count = 0; + $this->destinations_subscriber_count = 0; $j=0; - while($this->cdrtool->next_record()) { + while ($this->cdrtool->next_record()) { $j++; $reseller_id = $this->cdrtool->Record['reseller_id']; $gateway = trim($this->cdrtool->Record['gateway']); $domain = trim($this->cdrtool->Record['domain']); $subscriber = trim($this->cdrtool->Record['subscriber']); $dest_id = trim($this->cdrtool->Record['dest_id']); $region = $this->cdrtool->Record['region']; $name = $this->cdrtool->Record['dest_name']; $name_print = $this->cdrtool->Record['dest_name']." (".$dest_id.")"; - if (strstr($dest_id,'@')) { + if (strstr($dest_id, '@')) { // SIP destination if ($subscriber) { $this->_destinations_sip[$reseller_id][$subscriber][$dest_id]=array('name'=>$name, 'region'=>$region); $this->destinations_sip_count++; } else if ($domain) { $this->_destinations_sip[$reseller_id][$domain][$dest_id]=array('name'=>$name, 'region'=>$region); $this->destinations_sip_count++; } else if ($gateway) { $this->_destinations_sip[$reseller_id][$gateway][$dest_id]=array('name'=>$name, 'region'=>$region); $this->destinations_sip_count++; } else if ($dest_id) { $this->_destinations_sip[$reseller_id]["default"][$dest_id]=array('name'=>$name, 'region'=>$region); $this->destinations_sip_count++; } } else { // PSTN destination if (!is_numeric($dest_id)) { $log=sprintf("Error: cannot load non-numeric destination '%s' from row id %d",$dest_id,$this->cdrtool->Record['id']); syslog(LOG_NOTICE,$log); continue; } if ($subscriber) { $this->destinations_subscriber_count++; $this->_destinations[$reseller_id][$subscriber][$dest_id]=array('name'=>$name, 'region'=>$region); $this->destinations_count++; } else if ($domain) { $this->destinations_domain_count++; $this->_destinations[$reseller_id][$domain][$dest_id]=array('name'=>$name, 'region'=>$region); $this->destinations_count++; } else if ($gateway) { $this->destinations_gateway_count++; $this->_destinations[$reseller_id][$gateway][$dest_id]=array('name'=>$name, 'region'=>$region); $this->destinations_count++; } else if ($dest_id) { $this->destinations_default_count++; $this->_destinations[$reseller_id]["default"][$dest_id]=array('name'=>$name, 'region'=>$region); $this->destinations_count++; } } } $destinations_cache =json_encode($this->_destinations); $destinations_sip_cache =json_encode($this->_destinations_sip); $log=sprintf ("PSTN destinations cache size: %0.2f MB",strlen($destinations_cache)/1024/1024); syslog(LOG_NOTICE, $log); if ($destinations_sip_cache) { $log=sprintf ("SIP destinations cache size: %0.2f MB",strlen($destinations_sip_cache)/1024/1024); syslog(LOG_NOTICE, $log); } $query=sprintf("select `value` from memcache where `key` = 'destinations'"); if (!$this->cdrtool->query($query)) { $log=sprintf ("Database error for query %s: %s (%s)",$query,$this->cdrtool->Error,$this->cdrtool->Errno); print $log; syslog(LOG_NOTICE, $log); return false; } if ($this->cdrtool->num_rows()) { $query=sprintf("update memcache set value = '%s' where `key` = 'destinations'",addslashes($destinations_cache)); if (!$this->cdrtool->query($query)) { $log=sprintf ("Database error for query %s: %s (%s)",$query,$this->cdrtool->Error,$this->cdrtool->Errno); print $log; syslog(LOG_NOTICE, $log); return false; } $log=sprintf("Cached %d total, %d default, %d gateway, %d domain, %d subscriber destinations", $this->destinations_count, $this->destinations_default_count, $this->destinations_gateway_count, $this->destinations_domain_count, $this->destinations_subscriber_count ); syslog(LOG_NOTICE, $log); } else { $query=sprintf("insert into memcache (`key`,`value`) values ('destinations','%s')",addslashes($destinations_cache)); if (!$this->cdrtool->query($query)) { $log=sprintf ("Database error for query %s: %s (%s)",$query,$this->cdrtool->Error,$this->cdrtool->Errno); print $log; syslog(LOG_NOTICE, $log); return false; } $log=sprintf("Cached %d total, %d default, %d gateway, %d domain, %d subscriber destinations", $this->destinations_count, $this->destinations_default_count, $this->destinations_gateway_count, $this->destinations_domain_count, $this->destinations_subscriber_count ); syslog(LOG_NOTICE, $log); } $query=sprintf("select `value` from memcache where `key` = 'destinations_sip'"); if (!$this->cdrtool->query($query)) { $log=sprintf ("Database error for query %s: %s (%s)",$query,$this->cdrtool->Error,$this->cdrtool->Errno); print $log; syslog(LOG_NOTICE, $log); return false; } if ($this->cdrtool->num_rows()) { $query=sprintf("update memcache set value = '%s' where `key` = 'destinations_sip'",addslashes($destinations_sip_cache)); if (!$this->cdrtool->query($query)) { $log=sprintf ("Database error for query %s: %s (%s)",$query,$this->cdrtool->Error,$this->cdrtool->Errno); print $log; syslog(LOG_NOTICE, $log); return false; } $log=sprintf("Cached %d SIP destinations",$this->destinations_sip_count); syslog(LOG_NOTICE, $log); } else { $query=sprintf("insert into memcache (`key`,`value`) values ('destinations_sip','%s')",addslashes($destinations_sip_cache)); if (!$this->cdrtool->query($query)) { $log=sprintf ("Database error for query %s: %s (%s)",$query,$this->cdrtool->Error,$this->cdrtool->Errno); print $log; syslog(LOG_NOTICE, $log); return false; } $log=sprintf("Updated cache for %d SIP destinations",$this->destinations_sip_count); syslog(LOG_NOTICE, $log); } return true; } - function LoadENUMtlds() { + function LoadENUMtlds() + { + $_ENUMtlds = array(); - $_ENUMtlds =array(); - - $query="select * from billing_enum_tlds"; + $query = "select * from billing_enum_tlds"; $this->cdrtool->query($query); while($this->cdrtool->next_record()) { - - $_ENUMtlds[trim($this->cdrtool->Record['enum_tld'])]= - array('discount' => trim($this->cdrtool->Record['discount']), - 'e164_regexp' => trim($this->cdrtool->Record['e164_regexp']) - ); + $_ENUMtlds[trim($this->cdrtool->Record['enum_tld'])] = array( + 'discount' => trim($this->cdrtool->Record['discount']), + 'e164_regexp' => trim($this->cdrtool->Record['e164_regexp']) + ); } - $this->ENUMtlds = $_ENUMtlds; - $c=count($this->ENUMtlds); + $this->ENUMtlds = $_ENUMtlds; + $c = count($this->ENUMtlds); return count($this->ENUMtlds); } - function LoadDisconnectCodes() { + function LoadDisconnectCodes() + { } - function initForm() { + function initForm() + { } - function searchForm() { + function searchForm() + { } - function showTableHeader() { + function showTableHeader() + { } - function showTableHeaderStatistics() { + function showTableHeaderStatistics() + { } - function showResultsMenu($hide_rows="", $begin_datetime='', $end_datetime='') { + function showResultsMenu($hide_rows = "", $begin_datetime = '', $end_datetime = '') + { global $loginname; if (!$this->export) { print "
"; if (!$hide_rows) { print "