Skip to content

Commit

Permalink
FIX Update CMS fields now that they're being scaffolded (#95)
Browse files Browse the repository at this point in the history
  • Loading branch information
GuySartorelli authored Aug 15, 2024
1 parent ea49b07 commit 6b5289a
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 61 deletions.
18 changes: 9 additions & 9 deletions lang/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'
90 changes: 38 additions & 52 deletions src/IFramePage.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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(
Expand All @@ -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 (<em>http://silverstripe.com</em>) or relative to this site (<em>about-us</em>).'
)
);
$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 (<em>http://silverstripe.com</em>) '
. 'or relative to this site (<em>about-us</em>).'
)
)
);
$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();
}

/**
Expand Down

0 comments on commit 6b5289a

Please sign in to comment.