From 6b5289ac3fa9a4d03b394c08eb301f06043915e5 Mon Sep 17 00:00:00 2001 From: Guy Sartorelli <36352093+GuySartorelli@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:15:07 +1200 Subject: [PATCH] FIX Update CMS fields now that they're being scaffolded (#95) --- lang/en.yml | 18 +++++----- src/IFramePage.php | 90 ++++++++++++++++++++-------------------------- 2 files changed, 47 insertions(+), 61 deletions(-) diff --git a/lang/en.yml b/lang/en.yml index 1d1e4cf..152778c 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -10,12 +10,12 @@ en: SINGULARNAME: 'IFrame Page' TITLE_DESCRIPTION: 'Used by screen readers' VALIDATION_BANNEDURLSCHEME: 'This URL scheme is not allowed.' - db_AlternateContent: 'Alternate content' - db_AutoHeight: 'Auto height' - db_AutoWidth: 'Auto width' - db_BottomContent: 'Bottom content' - db_FixedHeight: 'Fixed height' - db_FixedWidth: 'Fixed width' - db_ForceProtocol: 'Force protocol' - db_IFrameTitle: 'I frame title' - db_IFrameURL: 'I frame URL' + db_AlternateContent: 'Alternate Content (appears when user has iframes disabled)' + db_AutoHeight: 'Auto height (only works with same domain URLs)' + db_AutoWidth: 'Auto width (100% of the available space)' + db_BottomContent: 'Content (appears below iframe)' + db_FixedHeight: 'Fixed height (in pixels)' + db_FixedWidth: 'Fixed width (in pixels)' + db_ForceProtocol: 'Force protocol?' + db_IFrameTitle: 'Description of contents (title)' + db_IFrameURL: 'Iframe URL' diff --git a/src/IFramePage.php b/src/IFramePage.php index 2715c52..f49c63d 100644 --- a/src/IFramePage.php +++ b/src/IFramePage.php @@ -3,11 +3,9 @@ namespace SilverStripe\IFrame; use Page; -use SilverStripe\Forms\TextField; use SilverStripe\Forms\DropdownField; -use SilverStripe\Forms\CheckboxField; -use SilverStripe\Forms\NumericField; -use SilverStripe\Forms\HTMLEditor\HtmlEditorField; +use SilverStripe\Forms\FieldList; +use SilverStripe\Forms\TextField; use SilverStripe\ORM\FieldType\DBField; use SilverStripe\ORM\ValidationException; use SilverStripe\ORM\ValidationResult; @@ -20,15 +18,15 @@ class IFramePage extends Page { private static $db = array( + 'ForceProtocol' => 'Varchar', 'IFrameURL' => 'Text', 'IFrameTitle' => 'Varchar', 'AutoHeight' => 'Boolean(1)', 'AutoWidth' => 'Boolean(1)', 'FixedHeight' => 'Int(500)', 'FixedWidth' => 'Int(0)', - 'AlternateContent' => 'HTMLText', 'BottomContent' => 'HTMLText', - 'ForceProtocol' => 'Varchar', + 'AlternateContent' => 'HTMLText', ); private static $defaults = array( @@ -46,52 +44,40 @@ class IFramePage extends Page public function getCMSFields() { - $fields = parent::getCMSFields(); - - $fields->removeFieldFromTab('Root.Main', 'Content'); - $fields->addFieldsToTab('Root.Main', [ - $url = TextField::create('IFrameURL', 'Iframe URL'), - TextField::create('IFrameTitle', 'Description of contents (title)') - ->setDescription(_t(__CLASS__ . '.TITLE_DESCRIPTION', 'Used by screen readers')), - ]); - $url->setRightTitle( - DBField::create_field( - 'HTMLText', - 'Can be absolute (http://silverstripe.com) or relative to this site (about-us).' - ) - ); - $fields->addFieldToTab( - 'Root.Main', - DropdownField::create('ForceProtocol', 'Force protocol?') - ->setSource(array('http://' => 'http://', 'https://' => 'https://')) - ->setEmptyString('') - ->setDescription( - 'Avoids mixed content warnings when iframe content is just available under a specific protocol' - ), - 'Metadata' - ); - $fields->addFieldsToTab('Root.Main', [ - CheckboxField::create('AutoHeight', 'Auto height (only works with same domain URLs)'), - CheckboxField::create('AutoWidth', 'Auto width (100% of the available space)'), - NumericField::create('FixedHeight', 'Fixed height (in pixels)'), - NumericField::create('FixedWidth', 'Fixed width (in pixels)'), - HtmlEditorField::create('Content', 'Content (appears above iframe)'), - HtmlEditorField::create('BottomContent', 'Content (appears below iframe)'), - HtmlEditorField::create('AlternateContent', 'Alternate Content (appears when user has iframes disabled)') - ]); - - // Move the Metadata field to last position, but make a check for it's - // existence first. - // - // See https://github.com/silverstripe-labs/silverstripe-iframe/issues/18 - $mainTab = $fields->findOrMakeTab('Root.Main'); - $mainTabFields = $mainTab->FieldList(); - $metaDataField = $mainTabFields->fieldByName('Metadata'); - if ($metaDataField) { - $mainTabFields->removeByName('Metadata'); - $mainTabFields->push($metaDataField); - } - return $fields; + $this->beforeUpdateCMSFields(function (FieldList $fields) { + $fields->replaceField( + 'IFrameURL', + TextField::create('IFrameURL', $this->fieldLabel('IFrameURL')) + ->setRightTitle( + DBField::create_field( + 'HTMLText', + 'Can be absolute (http://silverstripe.com) ' + . 'or relative to this site (about-us).' + ) + ) + ); + $fields->dataFieldByName('IFrameTitle') + ->setDescription(_t(__CLASS__ . '.TITLE_DESCRIPTION', 'Used by screen readers')); + $fields->replaceField( + 'ForceProtocol', + DropdownField::create('ForceProtocol', $this->fieldLabel('ForceProtocol')) + ->setSource(array('http://' => 'http://', 'https://' => 'https://')) + ->setEmptyString('') + ->setDescription( + 'Avoids mixed content warnings when iframe content is just available under a specific protocol' + ) + ); + + $contentField = $fields->dataFieldByName('Content'); + if ($contentField) { + $fields->removeByName('Content'); + $contentField->setTitle(_t(__CLASS__ . '.db_Content', 'Content (appears above iframe)')); + $fields->addFieldToTab('Root.Main', $contentField, 'BottomContent'); + } + $fields->dataFieldByName('BottomContent')?->addExtraClass('stacked'); + $fields->dataFieldByName('AlternateContent')?->addExtraClass('stacked'); + }); + return parent::getCMSFields(); } /**