BUGFIX: Fixed a number of really basic problems with a number of date fields - got basic loading and saving working across them all

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@62885 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Sam Minnee 2008-09-23 01:44:40 +00:00
parent ed311db3bf
commit 2dcda9bd91
4 changed files with 35 additions and 22 deletions

View File

@ -7,7 +7,8 @@
class CompositeDateField extends DateField { class CompositeDateField extends DateField {
function __construct($name, $title, $value = null, $yearRange = null){ function __construct($name, $title, $value = null, $yearRange = null){
list($year,$month, $date) = explode('-', $value); $year = $month = $date = null;
if($value) list($year,$month, $date) = explode('-', $value);
$this->dateDropdown = new DropdownField($name."[date]", "", $this->dateDropdown = new DropdownField($name."[date]", "",
array('NotSet' => '('._t('CompositeDateField.DAY', 'Day').')', array('NotSet' => '('._t('CompositeDateField.DAY', 'Day').')',
@ -32,7 +33,7 @@ class CompositeDateField extends DateField {
); );
if($yearRange == null){ if($yearRange == null){
$this->customiseYearDropDown($name, "1995-2006", $year); $this->customiseYearDropDown($name, "1995-2012", $year);
}else{ }else{
$this->customiseYearDropDown($name, $yearRange, $year); $this->customiseYearDropDown($name, $yearRange, $year);
} }

View File

@ -20,29 +20,34 @@ class DMYCalendarDateField extends CalendarDateField {
$id = $this->id(); $id = $this->id();
$val = $this->attrValue(); $val = $this->attrValue();
$day = $month = $year = null;
if( preg_match( '/^\d{2}\/\d{2}\/\d{4}$/', $val ) ) { if( preg_match( '/^\d{2}\/\d{2}\/\d{4}$/', $val ) ) {
$dateArray = explode( '/', $val ); $dateArray = explode( '/', $val );
$val = $dateArray[2] . '-' . $dateArray[1] . '-' . $dateArray[0]; $val = $dateArray[2] . '-' . $dateArray[1] . '-' . $dateArray[0];
} }
$dateArray = explode( '-', $val ); if($val) {
$dateArray = explode( '-', $val );
$day = $dateArray[2];
$month = $dateArray[1];
$year = $dateArray[0];
}
$day = $dateArray[2]; if(preg_match('/(.*)[(.+)]$/', $this->name, $fieldNameParts)) {
$month = $dateArray[1]; $fieldNamePrefix = $fieldNameParts[1];
$year = $dateArray[0]; $fieldName = $fieldNameParts[2];
} else {
preg_match('/(.*)[(.+)]$/', $this->name, $fieldNameParts ); $fieldNamePrefix = $this->name;
$fieldName = $this->name;
$fieldNamePrefix = $fieldNameParts[1]; }
$fieldName = $fieldNameParts[2];
return <<<HTML return <<<HTML
<div class="dmycalendardate"> <div class="dmycalendardate">
<input type="hidden" id="$id" name="{$this->name}" value="$val" /> <input type="hidden" id="$id" name="{$this->name}" value="$val" />
<input type="text" id="$id-day" class="day numeric" name="{$fieldNamePrefix}[{$fieldName}-Day]" value="$day" maxlength="2"$tabIndex0 />/ <input type="text" id="$id-day" class="day numeric" name="{$fieldNamePrefix}[Day]" value="$day" maxlength="2" />/
<input type="text" id="$id-month" class="month numeric" name="{$fieldNamePrefix}[{$fieldName}-Month]" value="$month" maxlength="2"$tabIndex1 />/ <input type="text" id="$id-month" class="month numeric" name="{$fieldNamePrefix}[Month]" value="$month" maxlength="2" />/
<input type="text" id="$id-year" class="year numeric" name="{$fieldNamePrefix}[{$fieldName}-Year]" value="$year" maxlength="4"$tabIndex2 /> <input type="text" id="$id-year" class="year numeric" name="{$fieldNamePrefix}[Year]" value="$year" maxlength="4" />
<div class="calendarpopup" id="{$id}-calendar"></div> <div class="calendarpopup" id="{$id}-calendar"></div>
</div> </div>
HTML; HTML;

View File

@ -34,12 +34,15 @@ class DMYDateField extends CalendarDateField {
$val = $dateArray[2] . '-' . $dateArray[1] . '-' . $dateArray[0]; $val = $dateArray[2] . '-' . $dateArray[1] . '-' . $dateArray[0];
} }
$day = $month = $year = null;
if($val) {
$dateArray = explode( '-', $val );
$dateArray = explode( '-', $val ); $day = $dateArray[2];
$month = $dateArray[1];
$day = $dateArray[2]; $year = $dateArray[0];
$month = $dateArray[1]; }
$year = $dateArray[0];
$fieldName = $this->name; $fieldName = $this->name;

View File

@ -8,7 +8,7 @@
class DateField extends TextField { class DateField extends TextField {
function setValue($val) { function setValue($val) {
if($val && preg_match('/^([\d]{2,4})-([\d]{1,2})-([\d]{1,2})/', $val)) { 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); $this->value = preg_replace('/^([\d]{2,4})-([\d]{1,2})-([\d]{1,2})/','\\3/\\2/\\1', $val);
} else { } else {
$this->value = $val; $this->value = $val;
@ -17,7 +17,11 @@ class DateField extends TextField {
function dataValue() { function dataValue() {
if(is_array($this->value)) { if(is_array($this->value)) {
return $this->value['Year'] . '-' . $this->value['Month'] . '-' . $this->value['Day']; if(isset($this->value['Year']) && isset($this->value['Month']) && isset($this->value['Day'])) {
return $this->value['Year'] . '-' . $this->value['Month'] . '-' . $this->value['Day'];
} else {
user_error("Bad DateField value " . var_export($this->value,true), E_USER_WARNING);
}
} elseif(preg_match('/^([\d]{1,2})\/([\d]{1,2})\/([\d]{2,4})/', $this->value, $parts)) { } elseif(preg_match('/^([\d]{1,2})\/([\d]{1,2})\/([\d]{2,4})/', $this->value, $parts)) {
return "$parts[3]-$parts[2]-$parts[1]"; return "$parts[3]-$parts[2]-$parts[1]";
} elseif(!empty($this->value)) { } elseif(!empty($this->value)) {