silverstripe-framework/forms/PopupDateTimeField.php
Sean Harvey 26606fd01d 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
2009-06-11 07:18:10 +00:00

100 lines
2.1 KiB
PHP

<?php
/**
* Field for entering a date/time pair.
*
* @todo Add localization support, see http://open.silverstripe.com/ticket/2931
*
* @package forms
* @subpackage fields-datetime
*/
class PopupDateTimeField extends CalendarDateField {
/**
* @todo js validation needs to be implemented.
* @see sapphire/forms/DateField#jsValidation()
*/
function jsValidation() {
}
/**
* @todo php validation needs to be implemented.
* @see sapphire/forms/DateField#validate($validator)
*/
function validate() {
return true;
}
function Field() {
Requirements::css( SAPPHIRE_DIR . '/css/PopupDateTimeField.css' );
$field = parent::Field();
DropdownTimeField::Requirements();
$id = $this->id();
$val = $this->attrValue();
$date = $this->attrValueDate();
$time = $this->attrValueTime();
$futureClass = $this->futureOnly ? ' futureonly' : '';
$innerHTMLDate = parent::HTMLField( $id . '_Date', $this->name . '[Date]', $date );
$innerHTMLTime = DropdownTimeField::HTMLField( $id . '_Time', $this->name . '[Time]', $time );
return <<<HTML
<div class="popupdatetime">
<ul>
<li class="calendardate$futureClass">$innerHTMLDate</li>
<li class="dropdowntime">$innerHTMLTime</li>
</ul>
</div>
HTML;
}
function attrValueDate() {
if( $this->value )
return date( 'd/m/Y', strtotime( $this->value ) );
else
return '';
}
function attrValueTime() {
if( $this->value )
return date( 'h:i a', strtotime( $this->value ) );
else
return '';
}
function setValue( $val ) {
if( is_array( $val ) ) {
// 1) Date
if( $val[ 'Date' ] && preg_match( '/^([\d]{1,2})\/([\d]{1,2})\/([\d]{2,4})/', $val[ 'Date' ], $parts ) )
$date = "$parts[3]-$parts[2]-$parts[1]";
else
$date = null;
// 2) Time
$time = $val[ 'Time' ] ? date( 'H:i:s', strtotime( $val[ 'Time' ] ) ) : null;
if( $date == null )
$this->value = $time;
else if( $time == null )
$this->value = $date;
else
$this->value = $date . ' ' . $time;
}
else
$this->value = $val;
}
function dataValue() {
return $this->value;
}
}
?>