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