public function updateCMSFields(FieldList $fields)
 {
     $extFields = self::$db;
     $fields->removeByName(array_keys($extFields));
     if (!$this->owner->WordpressID) {
         return;
     }
     $compositeFields = array();
     foreach ($extFields as $name => $type) {
         $value = $this->owner->getField($name);
         $compositeFields[$name] = ReadonlyField::create($name . '_Readonly', FormField::name_to_label($name), $value);
     }
     if ($compositeFields) {
         $wordpressCompositeField = ToggleCompositeField::create('WordpressCompositeField', 'Wordpress', $compositeFields)->setHeadingLevel(4);
         if ($fields->fieldByName('Metadata')) {
             $fields->insertBefore($wordpressCompositeField, 'Metadata');
         } else {
             if ($fields->fieldByName('Root')) {
                 $fields->addFieldToTab('Root.Main', $wordpressCompositeField);
             } else {
                 $fields->push($wordpressCompositeField);
             }
         }
     }
 }
 public function updateCMSFields(FieldList $fields)
 {
     if (get_class($fields->fieldByName('Root.Main')) == 'TabSet') {
         $fields->addFieldsToTab('Root.Main.Metadata', $this->getTagFields());
     } else {
         if (get_class($fields->fieldByName('Root')) == 'TabSet') {
             $fields->addFieldsToTab('Root.Metadata', $this->getTagFields());
         } else {
             if (get_class($fields) == 'FieldSet' || get_class($fields) == 'FieldList') {
                 foreach ($this->getTagFields() as $f) {
                     $fields->push($f);
                 }
             }
         }
     }
 }
 /**
  * @param FieldList $fields
  */
 public function updateCMSFields(FieldList $fields)
 {
     /** =========================================
          * @var TextareaField $address
          * @var TextareaField $postalAddress
          * @var TextField $mailChimpAPI
          * @var TextareaField $mailChimpSuccessMessage
         ===========================================*/
     if (!$fields->fieldByName('Root.Settings')) {
         $fields->addFieldToTab('Root', TabSet::create('Settings'));
     }
     /** -----------------------------------------
      * Details
      * ----------------------------------------*/
     $address = TextareaField::create('Address', 'Address');
     $address->setRows(8);
     $postalAddress = TextareaField::create('PostalAddress', 'Postal Address');
     $postalAddress->setRows(8);
     $fields->findOrMakeTab('Root.Settings.Details');
     $fields->addFieldsToTab('Root.Settings.Details', array(HeaderField::create('', 'Company Details'), Textfield::create('Phone', 'Phone Number'), Textfield::create('Email', 'Public Email Address'), $address, $postalAddress, TextField::create('Facebook', 'Facebook'), TextField::create('LinkedIn', 'LinkedIn'), TextField::create('Pinterest', 'Pinterest'), TextField::create('TwitterHandle', 'Twitter Handle')));
     /** -----------------------------------------
      * Subscription
      * ----------------------------------------*/
     $mailChimpAPI = TextField::create('MailChimpAPI', 'API Key');
     $mailChimpSuccessMessage = TextareaField::create('MailChimpSuccessMessage', 'Success Message (optional)');
     $mailChimpAPI->setRightTitle('<a href="https://us9.admin.mailchimp.com/account/api-key-popup/" target="_blank"><i>How do I get my MailChimp API Key?</i></a>');
     $mailChimpSuccessMessage->setRows(2)->setRightTitle('Message displayed when a user has successfully subscribed to a list.');
     $fields->findOrMakeTab('Root.Settings.Subscription', 'Subscription');
     $fields->addFieldsToTab('Root.Settings.Subscription', array(HeaderField::create('', 'Newsletter Subscription'), LiteralField::create('', '<p>The API key, and list ID are necessary for the Newsletter Subscription form to function.</p>'), $mailChimpAPI, TextField::create('MailChimpListID', 'List ID'), $mailChimpSuccessMessage));
 }
 public function updateCMSFields(FieldList $fields)
 {
     /* -----------------------------------------
         * Color Picker
        ------------------------------------------*/
     Requirements::css('boilerplate/css/colorpicker.css');
     Requirements::javascript('boilerplate/javascript/colorpicker.min.js');
     Requirements::javascript('boilerplate/javascript/colorpicker.init.js');
     /* =========================================
        * Settings
        =========================================*/
     if (!$fields->fieldByName('Root.Settings')) {
         $fields->addFieldToTab('Root', new TabSet('Settings'));
     }
     /* -----------------------------------------
         * Images
        ------------------------------------------*/
     $fields->findOrMakeTab('Root.Settings.Images', 'Images');
     $fields->addFieldsToTab('Root.Settings.Images', array($logo = new UploadField('LogoImage', _t('BoilerplateConfig.LogoImageLabel', 'Logo')), $favicon = new UploadField('Favicon', _t('BoilerplateConfig.FaviconLabel', 'Favicon'))));
     $logo->setRightTitle('Choose an Image For Your Logo');
     $favicon->setRightTitle('Choose an Image For Your Favicon (16x16)');
     /* -----------------------------------------
         * Company Details
        ------------------------------------------*/
     $fields->findOrMakeTab('Root.Settings.Details', 'Details');
     $fields->addFieldsToTab('Root.Settings.Details', array(new Textfield('Phone', _t('BoilerplateConfig.PhoneLabel', 'Phone Number')), new Textfield('Email', _t('BoilerplateConfig.EmailLabel', 'Public Email Address')), $PhysicalAddress = new HtmlEditorField('PhysicalAddress', _t('BoilerplateConfig.PhysicalAddressLabel', 'Physical Address'))));
     $PhysicalAddress->setRows(3);
     /* -----------------------------------------
         * Tracking Code
        ------------------------------------------*/
     $fields->findOrMakeTab('Root.Settings.TrackingCode', 'Tracking Code');
     $fields->addFieldsToTab('Root.Settings.TrackingCode', array($trackingCode = new TextareaField('TrackingCode', _t('BoilerplateConfig.TrackingCodeLabel', 'Tracking Code'))));
     $trackingCode->setRows(20);
 }
 public function updateFieldsForFile(FieldList $fields, $url, $file)
 {
     if (!($apiKey = Config::inst()->get('Aviary', 'ClientID'))) {
         return;
     }
     // load Aviary (js+css)
     Aviary::loadAviary();
     // Image pointer
     $aviaryImage = LiteralField::create('AviaryImage', '<img class="aviary_image" id="aviary_image_' . $file->ID . '" src="/' . $url . '" style="display: none;" />');
     // create edit button
     $editButton = FormAction::create('AviaryEditImage', _t('Aviary.EditImage', 'Edit Image'))->setAttribute('data-apikey', $apiKey)->setAttribute('data-localprocessing', Config::inst()->get('Aviary', 'LocalProcessing'));
     if (!$fields->fieldByName('FilePreview.FilePreviewImage.AviaryEditImageWrapper') && ($previewRoot = $fields->fieldByName('FilePreview.FilePreviewImage.ImageFull'))) {
         $fields->insertAfter(CompositeField::create($editButton)->setName('AviaryEditImageWrapper'), $previewRoot->getName());
         $fields->insertAfter($aviaryImage, 'FilePreviewImage');
     }
 }
 function updateCMSFields(FieldList $fields)
 {
     if ($attributes = $fields->fieldByName("ProductAttributeType")) {
         $attributes->getConfig()->removeComponentsByType("GridFieldAddNewButton")->addComponent($multiclass = new GridFieldAddNewMultiClass());
         $multiclass->setClasses(array_values(ClassInfo::subclassesFor("ProductAttributeType")));
     }
 }
 public function updateCMSFields(FieldList $fields)
 {
     foreach (['primary', 'secondary'] as $lower) {
         $upper = ucfirst($lower);
         $config = $this->owner->config()->get("{$lower}_gallery");
         if (is_null($config) || isset($config['enabled']) && $config['enabled'] === false) {
             continue;
         }
         $config['title'] = isset($config['title']) ? $config['title'] : "{$upper} Gallery";
         $config['folder'] = isset($config['folder']) ? $config['folder'] : "{$upper}-Gallery-Images";
         $GridFieldConfig = new GridFieldConfig_RecordEditor();
         $GridFieldConfig->removeComponentsByType('GridFieldAddNewButton');
         $GridFieldConfig->addComponent($bulkUploadConfig = new GridFieldBulkUpload());
         $GridFieldConfig->addComponent(new GridFieldSortableRows('SortOrder'));
         $GridFieldConfig->addComponent(new GridFieldGalleryTheme('Image'));
         $bulkUploadConfig->setUfSetup('setFolderName', "Images/{$config['folder']}");
         $GridField = new GridField("{$upper}GalleryGridField", $config['title'], $this->owner->{"{$upper}GalleryImages"}(), $GridFieldConfig);
         /** @var TabSet $rootTab */
         //We need to repush Metadata to ensure it is the last tab
         $rootTab = $fields->fieldByName('Root');
         $rootTab->push($tab = Tab::create("{$upper}Gallery"));
         if ($rootTab->fieldByName('Metadata')) {
             $metaChildren = $rootTab->fieldByName('Metadata')->getChildren();
             $rootTab->removeByName('Metadata');
             $rootTab->push(Tab::create('Metadata')->setChildren($metaChildren));
         }
         $tab->setTitle($config['title']);
         $fields->addFieldToTab("Root.{$upper}Gallery", $GridField);
     }
 }
 /**
  * Value is sometimes an array, and sometimes a single value, so we need
  * to handle both cases.
  *
  * @param mixed $value
  * @param mixed $data
  * @return $this
  */
 public function setValue($value, $data = null)
 {
     // If $data is a DataObject, don't use the value, since it's a hashed value
     if ($data && $data instanceof DataObject) {
         $value = '';
     }
     //store this for later
     $oldValue = $this->value;
     if (is_array($value)) {
         $this->value = $value['_Password'];
         $this->confirmValue = $value['_ConfirmPassword'];
         $this->currentPasswordValue = $this->getRequireExistingPassword() && isset($value['_CurrentPassword']) ? $value['_CurrentPassword'] : null;
         if ($this->showOnClick && isset($value['_PasswordFieldVisible'])) {
             $this->children->fieldByName($this->getName() . '[_PasswordFieldVisible]')->setValue($value['_PasswordFieldVisible']);
         }
     } else {
         if ($value || !$value && $this->canBeEmpty) {
             $this->value = $value;
             $this->confirmValue = $value;
         }
     }
     //looking up field by name is expensive, so lets check it needs to change
     if ($oldValue != $this->value) {
         $this->children->fieldByName($this->getName() . '[_Password]')->setValue($this->value);
         $this->children->fieldByName($this->getName() . '[_ConfirmPassword]')->setValue($this->confirmValue);
     }
     return $this;
 }
 public function updateCMSFields(FieldList $fields)
 {
     // check if the insertbefore field is present (may be added later, in which case the above
     // fields never get added
     //$insertOnTab = $this->owner->getFilterableArchiveConfigValue('pagination_control_tab');
     //$insertBefore = $this->owner->getFilterableArchiveConfigValue('pagination_insert_before');
     $insertOnTab = Config::inst()->get($this->owner->className, 'pagination_control_tab');
     $insertBefore = Config::inst()->get($this->owner->className, 'pagination_insert_before');
     if (!$fields->fieldByName("{$insertOnTab}.{$insertBefore}")) {
         $insertBefore = null;
     }
     //if($this->owner->getFilterableArchiveConfigValue('datearchive_active')){
     if (Config::inst()->get($this->owner->className, 'datearchive_active')) {
         //$fields->addFieldToTab($this->owner->getFilterableArchiveConfigValue('pagination_control_tab'),
         $fields->addFieldToTab(Config::inst()->get($this->owner->className, 'pagination_control_tab'), DropdownField::create('ArchiveUnit', _t('filterablearchive.ARCHIVEUNIT', 'Archive unit'), array('year' => _t('filterablearchive.YEAR', 'Year'), 'month' => _t('filterablearchive.MONTH', 'Month'), 'day' => _t('filterablearchive.DAY', 'Day'))), $insertBefore);
     }
     $pagerField = NumericField::create("ItemsPerPage", _t("filterablearchive.ItemsPerPage", "Pagination: items per page"))->setRightTitle(_t("filterablearchive.LeaveEmptyForNone", "Leave empty or '0' for no pagination"));
     $fields->addFieldToTab($insertOnTab, $pagerField, $insertBefore);
     //
     // Create categories and tag config
     //
     //		$config = GridFieldConfig_RecordEditor::create();
     //		$config->removeComponentsByType("GridFieldAddNewButton");
     //		$config->addComponent(new GridFieldAddByDBField("buttons-before-left"));
     // Lets just use what others have made already...
     $config = GridFieldConfig::create()->addComponent(new GridFieldButtonRow('before'))->addComponent(new GridFieldToolbarHeader())->addComponent(new GridFieldTitleHeader())->addComponent(new GridFieldEditableColumns())->addComponent(new GridFieldDeleteAction())->addComponent(new GridFieldAddNewInlineButton('toolbar-header-right'));
     //if($this->owner->getFilterableArchiveConfigValue('categories_active')){
     if (Config::inst()->get($this->owner->className, 'categories_active')) {
         $fields->addFieldToTab($insertOnTab, $categories = GridField::create("Categories", _t("FilterableArchive.Categories", "Categories"), $this->owner->Categories(), $config), $insertBefore);
     }
     //if($this->owner->getFilterableArchiveConfigValue('tags_active')){
     if (Config::inst()->get($this->owner->className, 'tags_active')) {
         $fields->addFieldToTab($insertOnTab, $tags = GridField::create("Tags", _t("FilterableArchive.Tags", "Tags"), $this->owner->Tags(), $config), $insertBefore);
     }
 }
 public function updateCMSFields(FieldList $fields)
 {
     $metaData = $fields->fieldByName('Root.Main.Metadata');
     $metaFieldTitle = new TextareaField("MetaKeywords", $this->owner->fieldLabel('MetaKeywords'));
     $metaData->insertAfter($metaFieldTitle, 'MetaDescription');
     return $fields;
 }
 public function updateCMSFields(FieldList $fields)
 {
     // Add back metatitle
     $fields->fieldByName('Root.Main.Metadata')->insertBefore($metaTitle = new TextField('MetaTitle', 'Meta Title'), 'MetaDescription');
     $metaTitle->setDescription('Browsers will display this in the title bar and search engines use this for displaying search results (although it may not influence their ranking).');
     // Record current CMS page, quite useful for sorting etc
     self::$current_cms_page = $this->owner->ID;
 }
 /**
  * @param FieldList $fields
  */
 public function updateCMSFields(FieldList $fields)
 {
     if ($fields->fieldByName('Root.Content')) {
         $tab = 'Root.Content.' . _t('Profileable.PROFILE ', 'Profile');
     } else {
         $tab = 'Root.' . _t('Profileable.PROFILE ', 'Profile');
     }
     $fields->addFieldsToTab($tab, $this->getProfileFields());
 }
 public function updateCMSFields(FieldList $fields)
 {
     // The Extra.GraphiteServers
     $graphiteServerField = $fields->fieldByName('Root.Main.GraphiteServers');
     $fields->removeByName('Root.Main.GraphiteServers');
     $graphiteServerField->setDescription('Find the relevant graphite servers at ' . '<a href="http://graphite.silverstripe.com/" target="_blank">graphite.silverstripe.com</a>' . ' and enter them one per line, e.g. "server.wgtn.oscar"');
     $fields->addFieldToTab('Root.Extra', $graphiteServerField);
     return $fields;
 }
 /**
  * Return the form's fields - used by the templates
  *
  * @return FieldList The form fields
  */
 public function Fields()
 {
     foreach ($this->getExtraFields() as $field) {
         if (!$this->fields->fieldByName($field->getName())) {
             $this->fields->push($field);
         }
     }
     return $this->fields;
 }
 function updateCMSFields(FieldList $fields)
 {
     if ($tab = $fields->fieldByName("Root.Pricing")) {
         $fields = $tab->Fields();
     }
     if ($this->owner->isInDB() && ($fields->fieldByName("BasePrice") || $fields->fieldByName("Price"))) {
         $fields->push(GridField::create("SpecificPrices", "Specific Prices", $this->owner->SpecificPrices(), GridFieldConfig_RecordEditor::create()));
     }
 }
 public function updateCMSFields(FieldList $fields)
 {
     $gfc = $fields->fieldByName('Report')->getConfig();
     $columns = $this->owner->columns();
     $exportColumns = array();
     foreach ($columns as $k => $v) {
         $exportColumns[$k] = $v['title'];
     }
     $gfc->getComponentByType('GridFieldExportButton')->setExportColumns($exportColumns);
 }
 /**
  * @param FieldList $fields
  */
 public function updateCMSFields(FieldList $fields)
 {
     if (!$fields->fieldByName('Root.Settings')) {
         $fields->addFieldToTab('Root', TabSet::create('Settings'));
     }
     /** -----------------------------------------
      * Details
      * ----------------------------------------*/
     $fields->findOrMakeTab('Root.Settings.TwitterCards');
     $fields->addFieldsToTab('Root.Settings.TwitterCards', array(HeaderField::create('', 'Twitter Cards'), Textfield::create('DefaultTwitterHandle', 'Default Twitter Handle'), UploadField::create('DefaultTwitterImage', 'Default Twitter Card Image')));
 }
 /**
  * @param FieldList $fields
  */
 public function updateCMSFields(FieldList $fields)
 {
     if (!$fields->fieldByName('Root.Settings')) {
         $fields->addFieldToTab('Root', TabSet::create('Settings'));
     }
     /** -----------------------------------------
      * Details
      * ----------------------------------------*/
     $fields->findOrMakeTab('Root.Settings.SEO');
     $fields->addFieldsToTab('Root.Settings.SEO', array(HeaderField::create('', 'SEO Settings'), TextField::create('DefaultSEOMetaTitle', 'Default Meta Title Addition')->setRightTitle('This is additional copy that will be automatically added to all of your pages\' meta titles.'), OptionsetField::create('DefaultSEOMetaTitlePosition', 'Default Meta Title Position', array('before' => 'Prepend to the Meta Title', 'after' => 'Append to the Meta Title'))));
 }
 public function updateCMSFields(FieldList $fields)
 {
     if ($themeField = $fields->fieldByName('Root.Main.Theme')) {
         $fields->removeFieldFromTab('Root.Main', 'Theme');
         $fields->addFieldToTab('Root.Appearance.Main', $themeField);
     }
     $fields->addFieldsToTab('Root.Appearance.Main', array(UploadField::create('Logo', 'Logo')->setDescription('Upload the site logo')));
     // Navigation
     $fields->addFieldsToTab('Root.Appearance.Navigation', array(DropdownField::create('NavgationLevel', 'Max navigation level', array(0 => 'Infinite', 1 => '1', 2 => '2', 3 => '3', 4 => '4', 5 => '5', 6 => '6', 7 => '7', 8 => '8', 9 => '9'))));
     return $fields;
 }
 /**
  * @param FieldList $fields
  */
 public function updateCMSFields(FieldList $fields)
 {
     if (!$fields->fieldByName('Root.Settings')) {
         $fields->addFieldToTab('Root', TabSet::create('Settings'));
     }
     /** -----------------------------------------
      * Details
      * ----------------------------------------*/
     $fields->findOrMakeTab('Root.Settings.OpenGraph');
     $fields->addFieldsToTab('Root.Settings.OpenGraph', array(HeaderField::create('', 'OOpen Graph'), UploadField::create('DefaultOpenGraphImage', 'Default Facebook Share Image')));
 }
 public function ContactForm()
 {
     $fields = new FieldList(TextField::create('Name')->setValue('Name')->addExtraClass('full'), EmailField::create('Email')->setValue('Email')->addExtraClass('full'), TextareaField::create('Message')->setValue('Message'), TextField::create('Spam')->setTitle('Is fire hot or cold?')->setValue('Is fire hot or cold?')->addExtraClass('full'));
     $actions = new FieldList(new FormAction('SendContactForm', 'Send'));
     $requiredFields = array('Name', 'Spam', 'Email', 'Message');
     $validator = new RequiredFields($requiredFields);
     foreach ($requiredFields as $fieldName) {
         $fields->fieldByName($fieldName)->addExtraClass("required");
     }
     return new Form($this, 'ContactForm', $fields, $actions, $validator);
 }
 public function updateFields(FieldList $fields)
 {
     /** @var CompositeField $shippingAddressFields */
     if ($shippingAddressFields = $fields->fieldByName('ShippingAddress')) {
         /** @var DropdownField $countryCodeField */
         if ($countryCodeField = $shippingAddressFields->fieldByName('ShippingCountryCode')) {
             $countryCodeField->setReadonly(true);
             $shippingAddressFields->insertBefore(DropdownField::create('ShippingRegionCode', _t('CheckoutPage.REGION', 'Region'), Region_Shipping::get()->map('Code', 'Title')->toArray())->setCustomValidationMessage(_t('CheckoutPage.PLEASE_ENTER_REGION', "Please enter a shipping region."))->addExtraClass('region-code'), 'ShippingCountryCode');
         }
     }
 }
Example #23
0
 /**
  * Add the publish all button
  */
 public function updateCMSActions(FieldList $actions)
 {
     if (Config::inst()->get('PageBlocks', 'allow_publish_all') == false) {
         return;
     }
     $button = FormAction::create('publishblocks', _t('PageBlocks.PUBLISH_ALL', 'Publish Page & Blocks', 'Button label to publish page and all blocks'))->setAttribute('data-icon', 'accept');
     if ($majorActions = $actions->fieldByName('MajorActions')) {
         $majorActions->push($button);
     } else {
         $actions->push($button);
     }
 }
 /**
  * @param FieldList $fields
  */
 public function updateCMSFields(FieldList $fields)
 {
     if (!$fields->fieldByName('Root.Settings')) {
         $fields->addFieldToTab('Root', TabSet::create('Settings'));
     }
     $fields->findOrMakeTab('Root.Settings.Banner', 'Banner');
     /**
      * @var UploadField $image
      * @var NumericField $defaultSliderHeight
      */
     $fields->addFieldsToTab('Root.Settings.Banner', array(HeaderField::create('', 'Banner'), LiteralField::create('', '<p>Image to be displayed on all pages as a default banner. Can be overridden by a page\'s banner.</p>'), $image = UploadField::create('SliderImage', 'Image'), $defaultSliderHeight = NumericField::create('DefaultSliderHeight', 'Default Height')));
     $image->setFolderName('Uploads/slider');
     $defaultSliderHeight->setRightTitle('Height that will be set across the entire site, this can be overridden in individual pages');
 }
 public function updateCMSActions(FieldList $actions)
 {
     if (!$this->owner->Blocks()->count()) {
         return;
     }
     $actions->fieldByName('MajorActions')->push($publish = FormAction::create('publishPageAndBlocks', 'Published (+Blocks)')->setAttribute('data-icon', 'accept')->setAttribute('data-icon-alternate', 'disk')->setAttribute('data-text-alternate', 'Save & publish (+Blocks)'));
     // Set up the initial state of the button to reflect the state of the blocks
     foreach ($this->owner->Blocks() as $block) {
         if ($block->stagesDiffer('Stage', 'Live')) {
             $publish->addExtraClass('ss-ui-alternate');
             break;
         }
     }
 }
 /**
  * @param Validator $validator
  *
  * @return boolean
  */
 public function validate($validator)
 {
     $name = $this->name;
     // if field isn't visible, don't validate
     if (!$this->isSaveable()) {
         return true;
     }
     $passwordField = $this->children->fieldByName($name . '[_Password]');
     $passwordConfirmField = $this->children->fieldByName($name . '[_ConfirmPassword]');
     $passwordField->setValue($_POST[$name]['_Password']);
     $passwordConfirmField->setValue($_POST[$name]['_ConfirmPassword']);
     $value = $passwordField->Value();
     // both password-fields should be the same
     if ($value != $passwordConfirmField->Value()) {
         $validator->validationError($name, _t('Form.VALIDATIONPASSWORDSDONTMATCH', "Passwords don't match"), "validation", false);
         return false;
     }
     if (!$this->canBeEmpty) {
         // both password-fields shouldn't be empty
         if (!$value || !$passwordConfirmField->Value()) {
             $validator->validationError($name, _t('Form.VALIDATIONPASSWORDSNOTEMPTY', "Passwords can't be empty"), "validation", false);
             return false;
         }
     }
     // lengths
     if ($this->minLength || $this->maxLength) {
         if ($this->minLength && $this->maxLength) {
             $limit = "{{$this->minLength},{$this->maxLength}}";
             $errorMsg = _t('ConfirmedPasswordField.BETWEEN', 'Passwords must be {min} to {max} characters long.', array('min' => $this->minLength, 'max' => $this->maxLength));
         } elseif ($this->minLength) {
             $limit = "{{$this->minLength}}.*";
             $errorMsg = _t('ConfirmedPasswordField.ATLEAST', 'Passwords must be at least {min} characters long.', array('min' => $this->minLength));
         } elseif ($this->maxLength) {
             $limit = "{0,{$this->maxLength}}";
             $errorMsg = _t('ConfirmedPasswordField.MAXIMUM', 'Passwords must be at most {max} characters long.', array('max' => $this->maxLength));
         }
         $limitRegex = '/^.' . $limit . '$/';
         if (!empty($value) && !preg_match($limitRegex, $value)) {
             $validator->validationError($name, $errorMsg, "validation", false);
         }
     }
     if ($this->requireStrongPassword) {
         if (!preg_match('/^(([a-zA-Z]+\\d+)|(\\d+[a-zA-Z]+))[a-zA-Z0-9]*$/', $value)) {
             $validator->validationError($name, _t('Form.VALIDATIONSTRONGPASSWORD', "Passwords must have at least one digit and one alphanumeric character"), "validation", false);
             return false;
         }
     }
     return true;
 }
    public function afterUpdateCMSFields(FieldList $fields)
    {
        self::$runs++;
        /** @var ToggleCompositeField $metaDataChildren */
        $metaDataChildren = $fields->fieldByName('Root.Main.Metadata');
        $length = $this->owner->config()->MetaDescriptionLength ?: $this->MetaDescriptionLength;
        $metaDataChildren->fieldByName('MetaDescription')->setAttribute('maxlength', $length);
        $children = array_merge([$metaTitle = TextField::create('MetaTitle')], $metaDataChildren->getChildren()->toArray());
        $fields->removeFieldFromTab('Root.Main', 'Metadata');
        $fields->addFieldToTab('Root', Tab::create('Metadata'), 'Content');
        //Add META Title tag to METADATA
        $fields->addFieldsToTab('Root.Metadata', $children);
        $metaTitle->setDescription('Displayed as the tab/window name; Also displayed in search engine result listings as the page title.<br />
									Falls back to the Primary Heading field if not provided.');
    }
 /**
  * @param FieldList $fields
  */
 public function updateCMSFields(FieldList $fields)
 {
     /** -----------------------------------------
          * Settings
         -------------------------------------------*/
     if (!$fields->fieldByName('Root.Settings')) {
         $fields->addFieldToTab('Root', TabSet::create('Settings'));
     }
     /** -----------------------------------------
          * CMS
         -------------------------------------------*/
     if (Permission::check('ADMIN')) {
         $fields->findOrMakeTab('Root.Settings.CMS', 'CMS');
         $fields->addFieldsToTab('Root.Settings.CMS', array(HeaderField::create('', 'CMS Menu'), CheckboxField::create('ShowAssetAdmin'), CheckboxField::create('ShowBlogAdmin'), CheckboxField::create('ShowHelpLink'), CheckboxField::create('ShowMessagesAdmin'), CheckboxField::create('ShowPortfolioAdmin'), CheckboxField::create('ShowReportAdmin'), CheckboxField::create('ShowSecurityAdmin')));
     }
 }
 /**
  * 
  * @param FieldList $fields
  * @param string $url
  * @param Image $file
  * @return void
  */
 public function updateFieldsForImage(FieldList $fields, $url, $file)
 {
     if (is_a($file, "HtmlEditorField_Image")) {
         $image = $file->getFile();
         if ($image && $image->exists() && $image->Secured) {
             $previewImage = $fields->fieldByName('FilePreview');
             $previewData = $previewImage->fieldByName('FilePreviewData');
             $previewData->insertAfter($whoCanView = ReadonlyField::create("WhoCanViewHTML", _t('SecuredAssetAdmin.WHOCANVIEW', 'Who can view?'), $image->WhoCanViewHTML), 'LastEdited');
             $previewData->insertAfter($embargo = ReadonlyField::create("EmbargoHTML", _t('SecuredAssetAdmin.Embargoing', 'Embargoing'), $image->EmbargoHTML), 'WhoCanViewHTML');
             $previewData->insertAfter($expire = ReadonlyField::create("ExpireHTML", _t('SecuredAssetAdmin.Expiring', 'Expiring'), $image->ExpireHTML), 'EmbargoHTML');
             $whoCanView->dontEscape = true;
             $embargo->dontEscape = true;
             $expire->dontEscape = true;
         }
     }
 }
 /**
  * @param FieldList $fields
  */
 public function updateCMSFields(FieldList $fields)
 {
     /** =========================================
          * @var UploadField $twitterImage
         ===========================================*/
     if (!$fields->fieldByName('Root.Settings')) {
         $fields->addFieldToTab('Root', TabSet::create('Settings'));
     }
     /** -----------------------------------------
      * Details
      * ----------------------------------------*/
     $twitterImage = UploadField::create('DefaultTwitterImage', 'Default Twitter Card Image');
     $twitterImage->setDescription('Ideal size 560px * 750px');
     $fields->findOrMakeTab('Root.Settings.TwitterCards');
     $fields->addFieldsToTab('Root.Settings.TwitterCards', array(HeaderField::create('', 'Twitter Cards'), Textfield::create('DefaultTwitterHandle', 'Default Twitter Handle'), $twitterImage));
 }