public function testDescriptionTemplate() { $field = new MemberDatetimeOptionsetField('DateFormat', 'DateFormat'); $this->assertEmpty($field->getDescription()); $field->setDescription('Test description'); $this->assertEquals('Test description', $field->getDescription()); $field->setDescriptionTemplate(get_class($field) . '_description_time'); $this->assertNotEmpty($field->getDescription()); $this->assertNotEquals('Test description', $field->getDescription()); }
/** * Return a {@link FieldList} of fields that would appropriate for editing * this member. * * @return FieldList Return a FieldList of fields that would appropriate for * editing this member. */ public function getCMSFields() { require_once 'Zend/Date.php'; $self = $this; $this->beforeUpdateCMSFields(function (FieldList $fields) use($self) { /** @var FieldList $mainFields */ $mainFields = $fields->fieldByName("Root")->fieldByName("Main")->getChildren(); // Build change password field $mainFields->replaceField('Password', $self->getMemberPasswordField()); $mainFields->replaceField('Locale', new DropdownField("Locale", _t('Member.INTERFACELANG', "Interface Language", 'Language of the CMS'), i18n::get_existing_translations())); $mainFields->removeByName($self->config()->hidden_fields); if (!$self->config()->lock_out_after_incorrect_logins) { $mainFields->removeByName('FailedLoginCount'); } // Groups relation will get us into logical conflicts because // Members are displayed within group edit form in SecurityAdmin $fields->removeByName('Groups'); // Members shouldn't be able to directly view/edit logged passwords $fields->removeByName('LoggedPasswords'); $fields->removeByName('RememberLoginHashes'); if (Permission::check('EDIT_PERMISSIONS')) { $groupsMap = array(); foreach (Group::get() as $group) { // Listboxfield values are escaped, use ASCII char instead of » $groupsMap[$group->ID] = $group->getBreadcrumbs(' > '); } asort($groupsMap); $fields->addFieldToTab('Root.Main', ListboxField::create('DirectGroups', singleton('SilverStripe\\Security\\Group')->i18n_plural_name())->setSource($groupsMap)->setAttribute('data-placeholder', _t('Member.ADDGROUP', 'Add group', 'Placeholder text for a dropdown'))); // Add permission field (readonly to avoid complicated group assignment logic). // This should only be available for existing records, as new records start // with no permissions until they have a group assignment anyway. if ($self->ID) { $permissionsField = new PermissionCheckboxSetField_Readonly('Permissions', false, 'SilverStripe\\Security\\Permission', 'GroupID', $self->getManyManyComponents('Groups')); $fields->findOrMakeTab('Root.Permissions', singleton('SilverStripe\\Security\\Permission')->i18n_plural_name()); $fields->addFieldToTab('Root.Permissions', $permissionsField); } } $permissionsTab = $fields->fieldByName("Root")->fieldByName('Permissions'); if ($permissionsTab) { $permissionsTab->addExtraClass('readonly'); } $defaultDateFormat = Zend_Locale_Format::getDateFormat(new Zend_Locale($self->Locale)); $dateFormatMap = array('MMM d, yyyy' => Zend_Date::now()->toString('MMM d, yyyy'), 'yyyy/MM/dd' => Zend_Date::now()->toString('yyyy/MM/dd'), 'MM/dd/yyyy' => Zend_Date::now()->toString('MM/dd/yyyy'), 'dd/MM/yyyy' => Zend_Date::now()->toString('dd/MM/yyyy')); $dateFormatMap[$defaultDateFormat] = Zend_Date::now()->toString($defaultDateFormat) . sprintf(' (%s)', _t('Member.DefaultDateTime', 'default')); $mainFields->push($dateFormatField = new MemberDatetimeOptionsetField('DateFormat', $self->fieldLabel('DateFormat'), $dateFormatMap)); $formatClass = get_class($dateFormatField); $dateFormatField->setValue($self->DateFormat); $dateTemplate = SSViewer::get_templates_by_class($formatClass, '_description_date', $formatClass); $dateFormatField->setDescriptionTemplate($dateTemplate); $defaultTimeFormat = Zend_Locale_Format::getTimeFormat(new Zend_Locale($self->Locale)); $timeFormatMap = array('h:mm a' => Zend_Date::now()->toString('h:mm a'), 'H:mm' => Zend_Date::now()->toString('H:mm')); $timeFormatMap[$defaultTimeFormat] = Zend_Date::now()->toString($defaultTimeFormat) . sprintf(' (%s)', _t('Member.DefaultDateTime', 'default')); $mainFields->push($timeFormatField = new MemberDatetimeOptionsetField('TimeFormat', $self->fieldLabel('TimeFormat'), $timeFormatMap)); $timeFormatField->setValue($self->TimeFormat); $timeTemplate = SSViewer::get_templates_by_class($formatClass, '_description_time', $formatClass); $timeFormatField->setDescriptionTemplate($timeTemplate); }); return parent::getCMSFields(); }