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@233 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
abijah
2009-07-06 22:23:40 +00:00
parent cb39f6f0eb
commit 240a16367b
3 changed files with 30 additions and 42 deletions

View File

@@ -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;
}

View File

@@ -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;
}
/**************************************************************************
**************************************************************************
**************************************************************************

View File

@@ -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();
}
}
?>