BUGFIX MSSQLDatabase returns strange formatted Datetime values, removed hacks from DateField and PopupDateTimeField and put it in DataObject::__construct() so that it fixes the problem at the source

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@78963 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Sean Harvey 2009-06-11 07:18:10 +00:00
parent 601672cdff
commit 26606fd01d
3 changed files with 15 additions and 25 deletions

View File

@ -255,6 +255,20 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
if($this->db($k) == 'Boolean' && $v == 'f') $record[$k] = '0';
}
}
// Remove milliseconds from the datetime returned by MSSQL. If we don't do this, PHP will choke.
// TODO: As per the above PostgreSQLDatabase change, implement more elegantly
if(DB::getConn() instanceof MSSQLDatabase) {
$this->class = get_class($this);
foreach($record as $k => $v) {
// MSSQLDatabase::date() uses datetime for the data type for "Date" and "SSDatetime"
if($this->db($k) == 'Date' || $this->db($k) == 'SSDatetime') {
$meridiem = substr($v, strlen($v) - 2, strlen($v));
$v = substr($v, 0, strlen($v) - 6);
$record[$k] = date('Y-m-d H:i:s', strtotime($v . ' ' . $meridiem));
}
}
}
// Set $this->record to $record, but ignore NULLs
$this->record = array();
@ -2489,7 +2503,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
$this->extend('augmentSQL', $query);
$records = $query->execute();
$ret = $this->buildDataObjectSet($records, $containerClass, $query, $this->class);
if($ret) $ret->parseQueryLimit($query);

View File

@ -20,18 +20,6 @@ class DateField extends TextField {
public static $validation_enabled = true;
function setValue($val) {
if ($val) {
if (!is_array($val) ) { //&& strlen($val) == 26) {
$ampm = substr($val,strlen($val)-2,strlen($val));
if ($ampm == "PM") { //correct for pm offset when cutting off 12-hour clock format
$val = substr($val,0,strlen($val)-6)."PM";
} elseif ($ampm == "AM") {
$val = substr($val,0,strlen($val)-6);
}
}
}
if(is_string($val) && preg_match('/^([\d]{2,4})-([\d]{1,2})-([\d]{1,2})/', $val)) {
$this->value = preg_replace('/^([\d]{2,4})-([\d]{1,2})-([\d]{1,2})/','\\3/\\2/\\1', $val);
} else {

View File

@ -68,18 +68,6 @@ HTML;
}
function setValue( $val ) {
if ($val) {
if (!is_array($val) ) { //&& strlen($val) == 26) {
$ampm = substr($val,strlen($val)-2,strlen($val));
if ($ampm == "PM") { //correct for pm offset when cutting off 12-hour clock format
$val = substr($val,0,strlen($val)-6)."PM";
} elseif ($ampm == "AM") {
$val = substr($val,0,strlen($val)-6);
}
}
}
if( is_array( $val ) ) {
// 1) Date