\n";
+ }
+
+ /**
+ * @todo Put this text into a template?
+ */
+ function getFormattingHelpText() {
+ $output = '
';
+ $output .= '
YYYY = ' . _t('MemberDatetimeOptionsetField.FOURDIGITYEAR', 'Four-digit year', 40, 'Help text describing what "YYYY" means in ISO date formatting') . '
';
+ $output .= '
YY = ' . _t('MemberDatetimeOptionsetField.TWODIGITYEAR', 'Two-digit year', 40, 'Help text describing what "YY" means in ISO date formatting') . '
';
+ $output .= '
MMMM = ' . _t('MemberDatetimeOptionsetField.FULLNAMEMONTH', 'Full name of month (e.g. June)', 40, 'Help text describing what "MMMM" means in ISO date formatting') . '
';
+ $output .= '
MMM = ' . _t('MemberDatetimeOptionsetField.SHORTMONTH', 'Short name of month (e.g. Jun)', 40, 'Help text letting describing what "MMM" means in ISO date formatting') . '
';
+ $output .= '
MM = ' . _t('MemberDatetimeOptionsetField.TWODIGITMONTH', 'Two-digit month (01=January, etc.)', 40, 'Help text describing what "MM" means in ISO date formatting') . '
';
+ $output .= '
M = ' . _t('MemberDatetimeOptionsetField.MONTHNOLEADING', 'Month digit without leading zero', 40, 'Help text describing what "M" means in ISO date formatting') . '
';
+ $output .= '
dd = ' . _t('MemberDatetimeOptionsetField.TWODIGITDAY', 'Two-digit day of month', 40, 'Help text describing what "dd" means in ISO date formatting') . '
';
+ $output .= '
d = ' . _t('MemberDatetimeOptionsetField.DAYNOLEADING', 'Day of month without leading zero', 40, 'Help text describing what "d" means in ISO date formatting') . '
';
+ $output .= '
hh = ' . _t('MemberDatetimeOptionsetField.TWODIGITHOUR', 'Two digits of hour (00 through 23)', 40, 'Help text describing what "hh" means in ISO date formatting') . '
';
+ $output .= '
h = ' . _t('MemberDatetimeOptionsetField.HOURNOLEADING', 'Hour without leading zero', 40, 'Help text describing what "h" means in ISO date formatting') . '
';
+ $output .= '
mm = ' . _t('MemberDatetimeOptionsetField.TWODIGITMINUTE', 'Two digits of minute (00 through 59)', 40, 'Help text describing what "mm" means in ISO date formatting') . '
';
+ $output .= '
m = ' . _t('MemberDatetimeOptionsetField.MINUTENOLEADING', 'Minute without leading zero', 40, 'Help text describing what "m" means in ISO date formatting') . '
';
+ $output .= '
ss = ' . _t('MemberDatetimeOptionsetField.TWODIGITSECOND', 'Two digits of second (00 through 59)', 40, 'Help text describing what "ss" means in ISO date formatting') . '
';
+ $output .= '
s = ' . _t('MemberDatetimeOptionsetField.DIGITSDECFRACTIONSECOND', 'One or more digits representing a decimal fraction of a second', 40, 'Help text describing what "s" means in ISO date formatting') . '
';
+ $output .= '
a = ' . _t('MemberDatetimeOptionsetField.AMORPM', 'AM (Ante meridiem) or PM (Post meridiem)', 40, 'Help text describing what "a" means in ISO date formatting') . '
';
+ $output .= '
';
+ return $output;
+ }
+
+ function setValue($value) {
+ if($value == '__custom__') {
+ $value = isset($_REQUEST[$this->name . '_custom']) ? $_REQUEST[$this->name . '_custom'] : null;
+ }
+ if($value) {
+ parent::setValue($value);
+ }
+ }
+
+ function validate() {
+ $value = isset($_POST[$this->name . '_custom']) ? $_POST[$this->name . '_custom'] : null;
+ if(!$value) return true; // no custom value, don't validate
+
+ // Check that the current date with the date format is valid or not
+ $validator = $this->form ? $this->form->getValidator() : null;
+ require_once 'Zend/Date.php';
+ $date = Zend_Date::now()->toString($value);
+ $valid = Zend_Date::isDate($date, $value);
+ if($valid) {
+ return true;
+ } else {
+ if($validator) {
+ $validator->validationError($this->name, _t('MemberDatetimeOptionsetField.DATEFORMATBAD',"Date format is invalid"), "validation", false);
+ }
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/security/Member.php b/security/Member.php
index 495151124..7c8a81a29 100644
--- a/security/Member.php
+++ b/security/Member.php
@@ -1173,7 +1173,7 @@ class Member extends DataObject {
$dateFormatMap[$defaultDateFormat] = Zend_Date::now()->toString($defaultDateFormat)
. sprintf(' (%s)', _t('Member.DefaultDateTime', 'default'));
$mainFields->push(
- $dateFormatField = new Member_DatetimeOptionsetField(
+ $dateFormatField = new MemberDatetimeOptionsetField(
'DateFormat',
$this->fieldLabel('DateFormat'),
$dateFormatMap
@@ -1189,7 +1189,7 @@ class Member extends DataObject {
$timeFormatMap[$defaultTimeFormat] = Zend_Date::now()->toString($defaultTimeFormat)
. sprintf(' (%s)', _t('Member.DefaultDateTime', 'default'));
$mainFields->push(
- $timeFormatField = new Member_DatetimeOptionsetField(
+ $timeFormatField = new MemberDatetimeOptionsetField(
'TimeFormat',
$this->fieldLabel('TimeFormat'),
$timeFormatMap
@@ -1781,112 +1781,4 @@ class Member_Validator extends RequiredFields {
return $js;
}
-}
-/**
- * @package sapphire
- * @subpackage security
- */
-class Member_DatetimeOptionsetField extends OptionsetField {
-
- function Field() {
- Requirements::javascript(THIRDPARTY_DIR . '/thirdparty/jquery/jquery.js');
- Requirements::javascript(SAPPHIRE_DIR . '/javascript/MemberDatetimeOptionsetField.js');
-
- $options = '';
- $odd = 0;
- $source = $this->getSource();
-
- foreach($source as $key => $value) {
- // convert the ID to an HTML safe value (dots are not replaced, as they are valid in an ID attribute)
- $itemID = $this->id() . '_' . preg_replace('/[^\.a-zA-Z0-9\-\_]/', '_', $key);
- if($key == $this->value) {
- $useValue = false;
- $checked = " checked=\"checked\"";
- } else {
- $checked = "";
- }
-
- $odd = ($odd + 1) % 2;
- $extraClass = $odd ? "odd" : "even";
- $extraClass .= " val" . preg_replace('/[^a-zA-Z0-9\-\_]/', '_', $key);
- $disabled = ($this->disabled || in_array($key, $this->disabledItems)) ? "disabled=\"disabled\"" : "";
- $ATT_key = Convert::raw2att($key);
-
- $options .= "
\n";
- }
-
- /**
- * @todo Put this text into a template?
- */
- function getFormattingHelpText() {
- $output = '
';
- $output .= '
YYYY = ' . _t('MemberDatetimeOptionsetField.FOURDIGITYEAR', 'Four-digit year', 40, 'Help text describing what "YYYY" means in ISO date formatting') . '
';
- $output .= '
YY = ' . _t('MemberDatetimeOptionsetField.TWODIGITYEAR', 'Two-digit year', 40, 'Help text describing what "YY" means in ISO date formatting') . '
';
- $output .= '
MMMM = ' . _t('MemberDatetimeOptionsetField.FULLNAMEMONTH', 'Full name of month (e.g. June)', 40, 'Help text describing what "MMMM" means in ISO date formatting') . '
';
- $output .= '
MMM = ' . _t('MemberDatetimeOptionsetField.SHORTMONTH', 'Short name of month (e.g. Jun)', 40, 'Help text letting describing what "MMM" means in ISO date formatting') . '
';
- $output .= '
MM = ' . _t('MemberDatetimeOptionsetField.TWODIGITMONTH', 'Two-digit month (01=January, etc.)', 40, 'Help text describing what "MM" means in ISO date formatting') . '
';
- $output .= '
M = ' . _t('MemberDatetimeOptionsetField.MONTHNOLEADING', 'Month digit without leading zero', 40, 'Help text describing what "M" means in ISO date formatting') . '
';
- $output .= '
dd = ' . _t('MemberDatetimeOptionsetField.TWODIGITDAY', 'Two-digit day of month', 40, 'Help text describing what "dd" means in ISO date formatting') . '
';
- $output .= '
d = ' . _t('MemberDatetimeOptionsetField.DAYNOLEADING', 'Day of month without leading zero', 40, 'Help text describing what "d" means in ISO date formatting') . '
';
- $output .= '
hh = ' . _t('MemberDatetimeOptionsetField.TWODIGITHOUR', 'Two digits of hour (00 through 23)', 40, 'Help text describing what "hh" means in ISO date formatting') . '
';
- $output .= '
h = ' . _t('MemberDatetimeOptionsetField.HOURNOLEADING', 'Hour without leading zero', 40, 'Help text describing what "h" means in ISO date formatting') . '
';
- $output .= '
mm = ' . _t('MemberDatetimeOptionsetField.TWODIGITMINUTE', 'Two digits of minute (00 through 59)', 40, 'Help text describing what "mm" means in ISO date formatting') . '
';
- $output .= '
m = ' . _t('MemberDatetimeOptionsetField.MINUTENOLEADING', 'Minute without leading zero', 40, 'Help text describing what "m" means in ISO date formatting') . '
';
- $output .= '
ss = ' . _t('MemberDatetimeOptionsetField.TWODIGITSECOND', 'Two digits of second (00 through 59)', 40, 'Help text describing what "ss" means in ISO date formatting') . '
';
- $output .= '
s = ' . _t('MemberDatetimeOptionsetField.DIGITSDECFRACTIONSECOND', 'One or more digits representing a decimal fraction of a second', 40, 'Help text describing what "s" means in ISO date formatting') . '
';
- $output .= '
a = ' . _t('MemberDatetimeOptionsetField.AMORPM', 'AM (Ante meridiem) or PM (Post meridiem)', 40, 'Help text describing what "a" means in ISO date formatting') . '
';
- $output .= '
';
- return $output;
- }
-
- function setValue($value) {
- if($value == '__custom__') {
- $value = isset($_REQUEST[$this->name . '_custom']) ? $_REQUEST[$this->name . '_custom'] : null;
- }
- if($value) {
- parent::setValue($value);
- }
- }
-
- function validate() {
- $value = isset($_POST[$this->name . '_custom']) ? $_POST[$this->name . '_custom'] : null;
- if(!$value) return true; // no custom value, don't validate
-
- // Check that the current date with the date format is valid or not
- $validator = $this->form ? $this->form->getValidator() : null;
- require_once 'Zend/Date.php';
- $date = Zend_Date::now()->toString($value);
- $valid = Zend_Date::isDate($date, $value);
- if($valid) {
- return true;
- } else {
- if($validator) {
- $validator->validationError($this->name, _t('MemberDatetimeOptionsetField.DATEFORMATBAD',"Date format is invalid"), "validation", false);
- }
- return false;
- }
- }
}
\ No newline at end of file
diff --git a/tests/forms/MemberDatetimeOptionsetFieldTest.php b/tests/forms/MemberDatetimeOptionsetFieldTest.php
index 80f36c114..b2a381651 100644
--- a/tests/forms/MemberDatetimeOptionsetFieldTest.php
+++ b/tests/forms/MemberDatetimeOptionsetFieldTest.php
@@ -17,7 +17,7 @@ class MemberDatetimeOptionsetFieldTest extends SapphireTest {
'dd/MM/yyyy' => Zend_Date::now()->toString('dd/MM/yyyy'),
);
$dateFormatMap[$defaultDateFormat] = Zend_Date::now()->toString($defaultDateFormat) . ' (default)';
- $field = new Member_DatetimeOptionsetField(
+ $field = new MemberDatetimeOptionsetField(
'DateFormat',
'Date format',
$dateFormatMap
@@ -34,7 +34,7 @@ class MemberDatetimeOptionsetFieldTest extends SapphireTest {
'H:mm' => Zend_Date::now()->toString('H:mm'),
);
$timeFormatMap[$defaultTimeFormat] = Zend_Date::now()->toString($defaultTimeFormat) . ' (default)';
- $field = new Member_DatetimeOptionsetField(
+ $field = new MemberDatetimeOptionsetField(
'TimeFormat',
'Time format',
$timeFormatMap
@@ -82,7 +82,7 @@ class MemberDatetimeOptionsetFieldTest extends SapphireTest {
}
function testDateFormValid() {
- $field = new Member_DatetimeOptionsetField('DateFormat', 'DateFormat');
+ $field = new MemberDatetimeOptionsetField('DateFormat', 'DateFormat');
$this->assertTrue($field->validate());
$_POST['DateFormat_custom'] = 'dd MM yyyy';
$this->assertTrue($field->validate());