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 | 88 +++++++++++++++++++---------------------------
2 files changed, 46 insertions(+), 60 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 @@ use SilverStripe\ORM\ValidationResult;
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();
+ $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'
+ )
+ );
- $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;
+ $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();
}
/**