diff --git a/forms/MemberDatetimeOptionsetField.php b/forms/MemberDatetimeOptionsetField.php
index 4aa150f5b..a3d456247 100644
--- a/forms/MemberDatetimeOptionsetField.php
+++ b/forms/MemberDatetimeOptionsetField.php
@@ -17,6 +17,10 @@ class MemberDatetimeOptionsetField extends OptionsetField {
*/
private static $preview_date = '25-12-2011 17:30:00';
+ private static $casting = ['Description' => 'HTMLText'];
+
+ private $descriptionTemplate = '';
+
public function Field($properties = array()) {
Requirements::javascript(FRAMEWORK_ADMIN_DIR . '/client/dist/js/MemberDatetimeOptionsetField.js');
$options = array();
@@ -90,52 +94,20 @@ class MemberDatetimeOptionsetField extends OptionsetField {
return 'optionset memberdatetimeoptionset';
}
- /**
- * @todo Put this text into a template?
- */
public function getDescription() {
- $output =
- ''
- . _t('MemberDatetimeOptionsetField.Toggle', 'Show formatting help')
- . ''
- . '
'
- . '- YYYY = ' . _t('MemberDatetimeOptionsetField.FOURDIGITYEAR', 'Four-digit year',
- 40, 'Help text describing what "YYYY" means in ISO date formatting') . '
'
- . '- YY = ' . _t('MemberDatetimeOptionsetField.TWODIGITYEAR', 'Two-digit year',
- 40, 'Help text describing what "YY" means in ISO date formatting') . '
'
- . '- MMMM = ' . _t('MemberDatetimeOptionsetField.FULLNAMEMONTH', 'Full name of month (e.g. June)',
- 40, 'Help text describing what "MMMM" means in ISO date formatting') . '
'
- . '- MMM = ' . _t('MemberDatetimeOptionsetField.SHORTMONTH', 'Short name of month (e.g. Jun)',
- 40, 'Help text letting describing what "MMM" means in ISO date formatting') . '
'
- . '- MM = ' . _t('MemberDatetimeOptionsetField.TWODIGITMONTH', 'Two-digit month (01=January, etc.)',
- 40, 'Help text describing what "MM" means in ISO date formatting') . '
'
- . '- M = ' . _t('MemberDatetimeOptionsetField.MONTHNOLEADING', 'Month digit without leading zero',
- 40, 'Help text describing what "M" means in ISO date formatting') . '
'
- . '- dd = ' . _t('MemberDatetimeOptionsetField.TWODIGITDAY', 'Two-digit day of month',
- 40, 'Help text describing what "dd" means in ISO date formatting') . '
'
- . '- d = ' . _t('MemberDatetimeOptionsetField.DAYNOLEADING', 'Day of month without leading zero',
- 40, 'Help text describing what "d" means in ISO date formatting') . '
'
- . '- hh = ' . _t('MemberDatetimeOptionsetField.TWODIGITHOUR', 'Two digits of hour (00 through 23)',
- 40, 'Help text describing what "hh" means in ISO date formatting') . '
'
- . '- h = ' . _t('MemberDatetimeOptionsetField.HOURNOLEADING', 'Hour without leading zero',
- 40, 'Help text describing what "h" means in ISO date formatting') . '
'
- . '- mm = ' . _t('MemberDatetimeOptionsetField.TWODIGITMINUTE',
- 'Two digits of minute (00 through 59)',
- 40, 'Help text describing what "mm" means in ISO date formatting') . '
'
- . '- m = ' . _t('MemberDatetimeOptionsetField.MINUTENOLEADING', 'Minute without leading zero',
- 40, 'Help text describing what "m" means in ISO date formatting') . '
'
- . '- ss = ' . _t('MemberDatetimeOptionsetField.TWODIGITSECOND',
- 'Two digits of second (00 through 59)',
- 40, 'Help text describing what "ss" means in ISO date formatting') . '
'
- . '- 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') . '
'
- . '- a = ' . _t('MemberDatetimeOptionsetField.AMORPM', 'AM (Ante meridiem) or PM (Post meridiem)',
- 40, 'Help text describing what "a" means in ISO date formatting') . '
'
- . '
';
- return $output;
+ if ($template = $this->getDescriptionTemplate()) {
+ return $this->renderWith($template);
+ }
+ return parent::getDescription();
}
+ public function getDescriptionTemplate() {
+ return $this->descriptionTemplate;
+ }
+
+ public function setDescriptionTemplate($template) {
+ $this->descriptionTemplate = $template;
+ }
public function setValue($value) {
// Extract custom option from postback
diff --git a/lang/en.yml b/lang/en.yml
index 775375139..1151b49dd 100644
--- a/lang/en.yml
+++ b/lang/en.yml
@@ -500,13 +500,15 @@ en:
DIGITSDECFRACTIONSECOND: 'One or more digits representing a decimal fraction of a second'
FOURDIGITYEAR: 'Four-digit year'
FULLNAMEMONTH: 'Full name of month (e.g. June)'
- HOURNOLEADING: 'Hour without leading zero'
+ HOURNOLEADING: 'Hour without leading zero, 12 hour format'
+ HOURNOLEADING24: 'Hour without leading zero, 24 hour format'
MINUTENOLEADING: 'Minute without leading zero'
MONTHNOLEADING: 'Month digit without leading zero'
Preview: Preview
SHORTMONTH: 'Short name of month (e.g. Jun)'
TWODIGITDAY: 'Two-digit day of month'
- TWODIGITHOUR: 'Two digits of hour (00 through 23)'
+ TWODIGITHOUR: 'Two digits of hour, 12 hour format (00 through 12)'
+ TWODIGITHOUR24: 'Two digits of hour, 24 hour format (00 through 23)'
TWODIGITMINUTE: 'Two digits of minute (00 through 59)'
TWODIGITMONTH: 'Two-digit month (01=January, etc.)'
TWODIGITSECOND: 'Two digits of second (00 through 59)'
diff --git a/security/Member.php b/security/Member.php
index fde9c1f87..dfad94a41 100644
--- a/security/Member.php
+++ b/security/Member.php
@@ -1475,6 +1475,7 @@ class Member extends DataObject implements TemplateGlobalProvider {
)
);
$dateFormatField->setValue($self->DateFormat);
+ $dateFormatField->setDescriptionTemplate('MemberDatetimeOptionsetField_description_date');
$defaultTimeFormat = Zend_Locale_Format::getTimeFormat(new Zend_Locale($self->Locale));
$timeFormatMap = array(
@@ -1491,6 +1492,7 @@ class Member extends DataObject implements TemplateGlobalProvider {
)
);
$timeFormatField->setValue($self->TimeFormat);
+ $timeFormatField->setDescriptionTemplate('MemberDatetimeOptionsetField_description_time');
});
return parent::getCMSFields();
diff --git a/templates/forms/MemberDatetimeOptionsetField_description_date.ss b/templates/forms/MemberDatetimeOptionsetField_description_date.ss
new file mode 100644
index 000000000..e51ea1bbc
--- /dev/null
+++ b/templates/forms/MemberDatetimeOptionsetField_description_date.ss
@@ -0,0 +1,21 @@
+
+ <% _t('MemberDatetimeOptionsetField.Toggle', 'Show formatting help') %>
+
+
+ - YYYY = <% _t('MemberDatetimeOptionsetField.FOURDIGITYEAR', 'Four-digit year',
+ 40, 'Help text describing what "YYYY" means in ISO date formatting') %>
+ - YY = <% _t('MemberDatetimeOptionsetField.TWODIGITYEAR', 'Two-digit year',
+ 40, 'Help text describing what "YY" means in ISO date formatting') %>
+ - MMMM = <% _t('MemberDatetimeOptionsetField.FULLNAMEMONTH', 'Full name of month (e.g. June)',
+ 40, 'Help text describing what "MMMM" means in ISO date formatting') %>
+ - MMM = <% _t('MemberDatetimeOptionsetField.SHORTMONTH', 'Short name of month (e.g. Jun)',
+ 40, 'Help text letting describing what "MMM" means in ISO date formatting') %>
+ - MM = <% _t('MemberDatetimeOptionsetField.TWODIGITMONTH', 'Two-digit month (01=January, etc.)',
+ 40, 'Help text describing what "MM" means in ISO date formatting') %>
+ - M = <% _t('MemberDatetimeOptionsetField.MONTHNOLEADING', 'Month digit without leading zero',
+ 40, 'Help text describing what "M" means in ISO date formatting') %>
+ - dd = <% _t('MemberDatetimeOptionsetField.TWODIGITDAY', 'Two-digit day of month',
+ 40, 'Help text describing what "dd" means in ISO date formatting') %>
+ - d = <% _t('MemberDatetimeOptionsetField.DAYNOLEADING', 'Day of month without leading zero',
+ 40, 'Help text describing what "d" means in ISO date formatting') %>
+
diff --git a/templates/forms/MemberDatetimeOptionsetField_description_time.ss b/templates/forms/MemberDatetimeOptionsetField_description_time.ss
new file mode 100644
index 000000000..35f6eb705
--- /dev/null
+++ b/templates/forms/MemberDatetimeOptionsetField_description_time.ss
@@ -0,0 +1,26 @@
+
+ <% _t('MemberDatetimeOptionsetField.Toggle', 'Show formatting help') %>
+
+
+ - HH = <% _t('MemberDatetimeOptionsetField.TWODIGITHOUR24', 'Two digits of hour, 24 hour format (00 through 23)',
+ 40, 'Help text describing what "hh" means in ISO date formatting') %>
+ - H = <% _t('MemberDatetimeOptionsetField.HOURNOLEADING24', 'Hour without leading zero, 24 hour format',
+ 40, 'Help text describing what "h" means in ISO date formatting') %>
+ - hh = <% _t('MemberDatetimeOptionsetField.TWODIGITHOUR', 'Two digits of hour, 12 hour format (00 through 12)',
+ 40, 'Help text describing what "hh" means in ISO date formatting') %>
+ - h = <% _t('MemberDatetimeOptionsetField.HOURNOLEADING', 'Hour without leading zero, 12 hour format',
+ 40, 'Help text describing what "h" means in ISO date formatting') %>
+ - mm = <% _t('MemberDatetimeOptionsetField.TWODIGITMINUTE',
+ 'Two digits of minute (00 through 59)',
+ 40, 'Help text describing what "mm" means in ISO date formatting') %>
+ - m = <% _t('MemberDatetimeOptionsetField.MINUTENOLEADING', 'Minute without leading zero',
+ 40, 'Help text describing what "m" means in ISO date formatting') %>
+ - ss = <% _t('MemberDatetimeOptionsetField.TWODIGITSECOND',
+ 'Two digits of second (00 through 59)',
+ 40, 'Help text describing what "ss" means in ISO date formatting') %>
+ - 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') %>
+ - a = <% _t('MemberDatetimeOptionsetField.AMORPM', 'AM (Ante meridiem) or PM (Post meridiem)',
+ 40, 'Help text describing what "a" means in ISO date formatting') %>
+
diff --git a/tests/forms/MemberDatetimeOptionsetFieldTest.php b/tests/forms/MemberDatetimeOptionsetFieldTest.php
index 4f5e0407a..1a4d9784b 100644
--- a/tests/forms/MemberDatetimeOptionsetFieldTest.php
+++ b/tests/forms/MemberDatetimeOptionsetFieldTest.php
@@ -102,6 +102,19 @@ class MemberDatetimeOptionsetFieldTest extends SapphireTest {
$this->assertFalse($field->validate($validator));
}
+ public function testDescriptionTemplate() {
+ $field = new MemberDatetimeOptionsetField('DateFormat', 'DateFormat');
+
+ $this->assertEmpty($field->getDescription());
+
+ $field->setDescription('Test description');
+ $this->assertEquals('Test description', $field->getDescription());
+
+ $field->setDescriptionTemplate('MemberDatetimeOptionsetField_description_time');
+ $this->assertNotEmpty($field->getDescription());
+ $this->assertNotEquals('Test description', $field->getDescription());
+ }
+
}
class MemberDatetimeOptionsetFieldTest_Controller extends Controller {