From 407eed04c92b96f06c9f634dc10099dfb5e08584 Mon Sep 17 00:00:00 2001 From: Deon George Date: Sun, 1 Jan 2012 20:41:42 +1100 Subject: [PATCH] Minor improvements to blobs --- application/classes/model/setup.php | 20 ++++-------------- application/classes/ormosb.php | 13 +++++++++++- modules/email/classes/email/template.php | 3 +-- modules/email/classes/model/email/log.php | 7 +++++-- .../classes/controller/user/invoice.php | 4 ++-- .../classes/controller/task/service.php | 21 ++++++------------- 6 files changed, 30 insertions(+), 38 deletions(-) diff --git a/application/classes/model/setup.php b/application/classes/model/setup.php index 7d5f1023..e5ae8a7e 100644 --- a/application/classes/model/setup.php +++ b/application/classes/model/setup.php @@ -46,21 +46,14 @@ class Model_Setup extends ORMOSB { if (! $mo->loaded()) throw new Kohana_Exception('Unknown module :name',array(':name'=>$key)); - static $mc = array(); - - if (! $mc) - $mc = $this->blob($this->module_config); - // If $value is NULL, we are a getter if ($value === NULL) - return empty($mc[$mo->id]) ? array() : $mc[$mo->id]; + return empty($this->module_config[$mo->id]) ? array() : $this->module_config[$mo->id]; // Store new value - $mc[$mo->id] = $value; - $this->module_config = $this->blob($mc,TRUE); - $this->save(); + $this->module_config[$mo->id] = $value; - return $this->saved(); + return $value; } /** @@ -70,17 +63,12 @@ class Model_Setup extends ORMOSB { * @param $value Values to store. If NULL, retrieves the value stored, otherwise stores value. */ public function site_details($key,array $value=NULL) { - static $sc = array(); - - if (! $sc AND $this->site_details) - $sc = $this->blob($this->site_details); - if (! in_array($key,array('name','address1','address2','city','state','pcode','phone','fax','email'))) throw new Kohana_Exception('Unknown Site Configuration Key :key',array(':key'=>$key)); // If $value is NULL, we are a getter if ($value === NULL) - return empty($sc[$key]) ? '' : $sc[$key]; + return empty($this->site_details[$key]) ? '' : $this->site_details[$key]; // Store new value $sc[$key] = $value; diff --git a/application/classes/ormosb.php b/application/classes/ormosb.php index 075c5c36..a104be96 100644 --- a/application/classes/ormosb.php +++ b/application/classes/ormosb.php @@ -104,6 +104,17 @@ abstract class ORMOSB extends ORM { $model->$field = serialize($value); } + public function __get($column) { + // If the column is a blob, we'll decode it automatically + if (array_key_exists($column,$this->_object) AND $this->_table_columns[$column]['data_type'] == 'blob' AND (! isset($this->_table_columns[$column]['auto_convert']) OR ! $this->_table_columns[$column]['auto_convert'])) { + + $this->_object[$column] = $this->blob($this->_object[$column]); + $this->_table_columns[$column]['auto_convert'] = TRUE; + } + + return parent::__get($column); + } + public function save(Validation $validation = NULL) { // Find any fields that have changed, and that are blobs, and encode them. if ($this->_changed) @@ -121,7 +132,7 @@ abstract class ORMOSB extends ORM { /** * Retrieve and Store DB BLOB data. */ - protected function blob($data,$set=FALSE) { + private function blob($data,$set=FALSE) { return $set ? gzcompress(serialize($data)) : unserialize(gzuncompress($data)); } } diff --git a/modules/email/classes/email/template.php b/modules/email/classes/email/template.php index 398ffd73..42c293d2 100644 --- a/modules/email/classes/email/template.php +++ b/modules/email/classes/email/template.php @@ -153,7 +153,6 @@ class Email_Template { if ($result) { // Store our email log. - $data = gzcompress(serialize($this->email_data['variables'])); $elo = ORM::factory('email_log'); foreach ($sa as $id) { @@ -162,7 +161,7 @@ class Email_Template { $elo->account_id = $id; $elo->email = implode(',',array_keys($this->to)); $elo->email_template_translate_id = $this->etto->id; - $elo->data = $data; + $elo->data = $this->email_data['variables']; $elo->save(); } } diff --git a/modules/email/classes/model/email/log.php b/modules/email/classes/model/email/log.php index c39de74e..88ee69ff 100644 --- a/modules/email/classes/model/email/log.php +++ b/modules/email/classes/model/email/log.php @@ -11,6 +11,9 @@ * @license http://dev.osbill.net/license.html */ class Model_Email_Log extends ORMOSB { + // Email Log doesnt use the update column + protected $_updated_column = FALSE; + protected $_belongs_to = array( 'account'=>array('far_key'=>'id'), 'email_template_translate'=>array('far_key'=>'id'), @@ -27,10 +30,10 @@ class Model_Email_Log extends ORMOSB { ); public function translate_resolve($column) { - if (! $this->data OR ! ($r = $this->email_template_translate->variables($column))) + if (! $this->data OR ! ($this->email_template_translate->variables($column))) return $this->email_template_translate->display($column); else - return $this->email_template_translate->resolve(unserialize(gzuncompress($this->data)),$column); + return $this->email_template_translate->resolve($this->data,$column); } } ?> diff --git a/modules/invoice/classes/controller/user/invoice.php b/modules/invoice/classes/controller/user/invoice.php index 1c00a717..30c6c479 100644 --- a/modules/invoice/classes/controller/user/invoice.php +++ b/modules/invoice/classes/controller/user/invoice.php @@ -69,8 +69,8 @@ class Controller_User_Invoice extends Controller_TemplateDefault_User { /** * Download an invoice */ - public function action_download($id) { - $io = ORM::factory('invoice',$id); + public function action_download() { + $io = ORM::factory('invoice',$this->request->param('id')); $this->response->body(Invoice::instance($io)->pdf()->Output(sprintf('%s.pdf',$io->refnum()),'D')); $this->response->headers(array('Content-Type' => 'application/pdf')); diff --git a/modules/service/classes/controller/task/service.php b/modules/service/classes/controller/task/service.php index 4cbf63f9..dc327850 100644 --- a/modules/service/classes/controller/task/service.php +++ b/modules/service/classes/controller/task/service.php @@ -21,33 +21,24 @@ class Controller_Task_Service extends Controller_Task { * List all services by their default checkout method */ public function action_gettraffic() { - foreach ($this->_traffic_suppliers(TRUE) as $aso) { - $traffic = Service_Traffic_ADSL::instance($aso->name); - - $traffic->update_traffic(); - } + foreach ($this->_traffic_suppliers(TRUE) as $aso) + $traffic = Service_Traffic_ADSL::instance($aso->name)->update_traffic(); } /** * Charges for excess traffic usage */ public function action_chargetraffic() { - foreach ($this->_traffic_suppliers(TRUE) as $aso) { - $traffic = Service_Traffic_ADSL::instance($aso->name); - - $traffic->charge_excess_traffic(); - } + foreach ($this->_traffic_suppliers(TRUE) as $aso) + $traffic = Service_Traffic_ADSL::instance($aso->name)->charge_excess_traffic(); } /** * Send alerts to users when they exceed their traffic allowance */ public function action_alerttraffic() { - foreach ($this->_traffic_suppliers(TRUE) as $aso) { - $traffic = Service_Traffic_ADSL::instance($aso->name); - - $traffic->alert_traffic(); - } + foreach ($this->_traffic_suppliers(TRUE) as $aso) + $traffic = Service_Traffic_ADSL::instance($aso->name)->alert_traffic(); } } ?>