60, CURLOPT_FAILONERROR => TRUE, CURLOPT_FOLLOWLOCATION => FALSE, CURLOPT_HEADER => FALSE, CURLOPT_HTTPPROXYTUNNEL => FALSE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_TIMEOUT => 30, CURLOPT_SSL_VERIFYHOST => FALSE, CURLOPT_SSL_VERIFYPEER => FALSE, CURLOPT_VERBOSE => FALSE, ); /** * Setup this class. We need to get our supplier details out of the database. */ public function __construct() { // Our DB record must be the suffix of this class name $supplier = preg_replace('/^'.get_parent_class($this).'_/','',get_class($this)); $aso = ORM::factory('ADSL_Supplier') ->where('name','=',$supplier) ->find(); if (! $aso->loaded()) throw new Kohana_Exception('Supplier :supplier not defined in the database',array(':supplier'=>$supplier)); $this->aso = $aso; $this->today = date('Y-m-d',strtotime('yesterday')); } /** * Return an instance of this class */ public static function instance($supplier) { $sc = Kohana::classname(get_called_class().'_'.$supplier); if (! class_exists($sc)) throw new Kohana_Exception('Class doesnt exist for :supplier',array(':supplier'=>$supplier)); else return new $sc; } /** * Traffic data from supplier */ public function update_traffic() { if (Minion_CLI::options('verbose')) echo ' - Last: '.date('Y-m-d',strtotime($this->aso->stats_lastupdate.'+1 day'))."\n"; for ($querydate=date('Y-m-d',strtotime($this->aso->stats_lastupdate.'+1 day')); $querydate<=$this->today; $querydate=date('Y-m-d',strtotime($querydate.'+1 day'))) { if (Minion_CLI::options('verbose')) echo " - Date: $querydate\n"; $goodfetch = false; // @todo log this fetch in a "log" // Supplier specific output // Data returned should be in MB's $data = $this->getdata($querydate); if (Minion_CLI::options('verbose')) print_r($data); if (! $this->fetchresult) { echo 'Bad fetch'.get_class($this); break; } $traffic = ORM::factory('Service_Plugin_Adsl_Traffic'); foreach ($data as $item) { $traffic->values($item,array_keys($item)); $traffic->supplier_id = $this->aso->id; if ($traffic->check()) $traffic->save(); if (! $traffic->saved()) throw new Kohana_Exception('Unable to save traffic record'); $traffic->clear(); } } if ($this->fetchresult) { $this->aso->stats_lastupdate = $this->today; $this->aso->save(); } } public function charge_excess_traffic() { $date = strtotime('last month'); // @todo need a way to find out services that have traffic charges dynamically. foreach ($this->aso->services() as $so) { if ($charge = $so->plugin()->traffic_lastmonth_exceed(FALSE,$date)) { foreach ($charge as $metric => $details) { $co = ORM::factory('Charge'); $co->status = 0; $co->sweep_type = 6; $co->account_id = $so->account_id; $co->service_id = $so->id; // @todo This needs to be calculated. $co->type = 5; $co->amount = $details['rate']; // @todo This needs to be calculated. $co->taxable = TRUE; $co->quantity = ceil($details['excess']/1000); $co->description = _('Excess Traffic'); // @todo This need to be improved = strtotime function should be the one used in the function call $co->attributes = implode("\n",array( sprintf('ADSL Service==%s',$so->plugin()->service_number), sprintf('Allowance==%s',$details['allowance']), sprintf('Metric==%s',$metric), sprintf('Used==%s',$details['used']), sprintf('Month==%s',date('Y-m',$date)), )); $co->check(); $co->save(); } } } } public function alert_traffic() { foreach ($this->aso->services() as $so) { if (! $so->plugin()->report_traffic()) continue; $et = Email_Template::instance('adsl_traffic_notice'); // Get our variable data $et->to = array('account'=>array($so->account_id)); $et->variables = $so->plugin()->template_variables($et->variables()); $et->send(); } } } ?>