From 81e415e5bd44803f5a0896fc0aa85dc13e287b93 Mon Sep 17 00:00:00 2001 From: abijah Date: Mon, 6 Jul 2009 22:23:40 +0000 Subject: [PATCH] Moved date formatting fully into the AppModel, automatically determining the necessary fields from the schema. git-svn-id: file:///svn-source/pmgr/branches/invoice_receipt_20090629/site@233 97e9348a-65ac-dc4b-aefc-98561f571b83 --- app_model.php | 35 ++++++++++++++++++++++++++--------- models/lease.php | 15 --------------- models/transaction.php | 22 ++++------------------ 3 files changed, 30 insertions(+), 42 deletions(-) diff --git a/app_model.php b/app_model.php index c06ec08..f246e69 100644 --- a/app_model.php +++ b/app_model.php @@ -40,7 +40,7 @@ class AppModel extends Model { var $actsAs = array('Containable', 'Linkable'); var $useNullForEmpty = true; - var $dateFields = array(); + var $formatDateFields = true; /** * Get Enum Values @@ -151,21 +151,38 @@ class AppModel extends Model { } function beforeSave() { +/* pr(array('class' => $this->name, */ +/* 'alias' => $this->alias, */ +/* 'function' => 'AppModel::beforeSave')); */ + // Replace all empty strings with NULL. // If a particular model doesn't like this, they'll have to // override the behavior, or set useNullForEmpty to false. if ($this->useNullForEmpty) $this->recursive_array_replace("/^\s*$/", null, $this->data); - foreach ($this->dateFields AS $field) { -/* if(isset($this->data['Transaction']['stamp']) && */ -/* $this->data['Transaction']['stamp'] !== 'CURRENT_TIMESTAMP') { */ -/* $this->data['Transaction']['stamp'] = */ -/* $this->dateFormatBeforeSave($this->data['Transaction']['stamp']); */ -/* } */ -/* else { */ -/* $this->data['Transaction']['stamp'] = null; */ + if ($this->formatDateFields) { + $alias = $this->alias; + + foreach ($this->_schema AS $field => $info) { + if ($info['type'] == 'date' || $info['type'] == 'timestamp') { + if (isset($this->data[$alias][$field])) { +/* pr("Fix Date for '$alias'.'$field'; current value = " . */ +/* "'{$this->data[$alias][$field]}'"); */ + if ($this->data[$alias]['stamp'] === 'CURRENT_TIMESTAMP') + // Seems CakePHP is broken for the default timestamp. + // It tries to automagically set the value to CURRENT_TIMESTAMP + // which is wholly rejected by MySQL. Just put it back to NULL + // and let the SQL engine deal with the defaults... it's not + // Cake's place to do this anyway :-/ + $this->data[$alias][$field] = null; + else + $this->data[$alias][$field] = + $this->dateFormatBeforeSave($this->data[$alias][$field]); + } + } } + } return true; } diff --git a/models/lease.php b/models/lease.php index c3628a6..8bf7acd 100644 --- a/models/lease.php +++ b/models/lease.php @@ -34,21 +34,6 @@ class Lease extends AppModel { ); - function beforeSave() { - foreach (array('lease', - 'movein', 'movein_planned', - 'moveout', 'moveout_planned', - 'notice_givein', 'notice_received', - 'close', 'next_rent') AS $dtfield) { - $dtfield .= '_date'; - if(isset($this->data['Lease'][$dtfield])) - $this->data['Lease'][$dtfield] = - $this->dateFormatBeforeSave($this->data['Lease'][$dtfield]); - } - - return true; - } - /************************************************************************** ************************************************************************** ************************************************************************** diff --git a/models/transaction.php b/models/transaction.php index e2af783..e471b62 100644 --- a/models/transaction.php +++ b/models/transaction.php @@ -2,9 +2,10 @@ class Transaction extends AppModel { var $name = 'Transaction'; -/* var $validate = array( */ -/* 'stamp' => array('date') */ -/* ); */ + + var $validate = array( + 'stamp' => array('date') + ); var $belongsTo = array( ); @@ -13,20 +14,5 @@ class Transaction extends AppModel { 'LedgerEntry', ); - - function beforeSave() { - - if(isset($this->data['Transaction']['stamp']) && - $this->data['Transaction']['stamp'] !== 'CURRENT_TIMESTAMP') { - $this->data['Transaction']['stamp'] = - $this->dateFormatBeforeSave($this->data['Transaction']['stamp']); - } - else { - $this->data['Transaction']['stamp'] = null; - } - - return parent::beforeSave(); - } - } ?> \ No newline at end of file