From 1efc6cecc97b9cb4d34a1772080c9f7edab640fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Fr=C3=A8rejean?= Date: Mon, 19 Jun 2023 11:24:39 +0200 Subject: [PATCH] Wrap all field mutations inside `beforeUpdateCMSFields` --- src/ElementalGrid/ElementArticle.php | 6 +- src/Models/Author.php | 68 ++++++------ src/Models/Tag.php | 11 +- src/Pages/ArticlePage.php | 156 ++++++++++++++------------- src/Pages/ArticlesPage.php | 126 +++++++++++----------- 5 files changed, 187 insertions(+), 180 deletions(-) diff --git a/src/ElementalGrid/ElementArticle.php b/src/ElementalGrid/ElementArticle.php index afd3aca..d3892cb 100644 --- a/src/ElementalGrid/ElementArticle.php +++ b/src/ElementalGrid/ElementArticle.php @@ -81,7 +81,8 @@ public function getCMSFields(): FieldList TreeDropdownField::create( 'ArticlePageID', _t(__CLASS__ . '.ARTICLETOSHOW', 'Article to show'), - ArticlePage::class), + ArticlePage::class + ), CheckboxField::create( 'ShowMoreArticlesButton', _t('WeDevelop\Articles\ElementalGrid.SHOWMOREBUTTON', "Show 'more articles' button") @@ -90,7 +91,8 @@ public function getCMSFields(): FieldList TreeDropdownField::create( 'ArticlesPageID', _t(__CLASS__ . '.ARTICLESPAGE', 'Articles overview page'), - SiteTree::class), + SiteTree::class + ), TextField::create( 'ShowMoreArticlesButtonText', _t('WeDevelop\Articles\ElementalGrid.SHOWMOREBUTTONTEXT', "Show 'more articles' button text") diff --git a/src/Models/Author.php b/src/Models/Author.php index c7d6d8b..ca1a1b6 100644 --- a/src/Models/Author.php +++ b/src/Models/Author.php @@ -80,42 +80,42 @@ class Author extends DataObject public function getCMSFields(): FieldList { - $fields = parent::getCMSFields(); - - $fields->removeByName( - [ - 'ArticlesPageID', - 'Slug', - 'Function', - 'Bio', - 'Phone', - 'Email', - 'FacebookURL', - 'TwitterURL', - 'LinkedInURL', - ] - ); - - $fields->renameField('Title', 'Name'); - - $fields->addFieldsToTab( - 'Root.Main', - [ - TextField::create('Function', 'Function'), - UploadField::create('Image', 'Image')->setFolderName('Authors'), - HTMLEditorField::create('Bio', 'Bio')->setRows(5), - HeaderField::create('', 'Contact details'), - TextField::create('Phone', 'Phone'), - TextField::create('Email', 'E-mailaddress'), - HeaderField::create('', 'Social media'), - TextField::create('FacebookURL', 'Facebook URL'), - TextField::create('TwitterURL', 'Twitter URL'), - TextField::create('LinkedInURL', 'LinkedIn URL'), - ] - ); + $this->beforeUpdateCMSFields(function (FieldList $fields) { + $fields->removeByName( + [ + 'ArticlesPageID', + 'Slug', + 'Function', + 'Bio', + 'Phone', + 'Email', + 'FacebookURL', + 'TwitterURL', + 'LinkedInURL', + ] + ); + + $fields->renameField('Title', 'Name'); + + $fields->addFieldsToTab( + 'Root.Main', + [ + TextField::create('Function', 'Function'), + UploadField::create('Image', 'Image')->setFolderName('Authors'), + HTMLEditorField::create('Bio', 'Bio')->setRows(5), + HeaderField::create('', 'Contact details'), + TextField::create('Phone', 'Phone'), + TextField::create('Email', 'E-mailaddress'), + HeaderField::create('', 'Social media'), + TextField::create('FacebookURL', 'Facebook URL'), + TextField::create('TwitterURL', 'Twitter URL'), + TextField::create('LinkedInURL', 'LinkedIn URL'), + ] + ); + }); $this->extend('onAfterUpdateCMSFields', $fields); - return $fields; + return parent::getCMSFields(); } } diff --git a/src/Models/Tag.php b/src/Models/Tag.php index 94ffdc3..1c6cd84 100644 --- a/src/Models/Tag.php +++ b/src/Models/Tag.php @@ -66,15 +66,14 @@ class Tag extends DataObject */ public function getCMSFields() { - $fields = parent::getCMSFields(); - - $fields->removeByName('ArticlesPageID'); - - $fields->renameField('Title', _t(__CLASS__ . '.NAME', 'Name')); + $this->beforeUpdateCMSFields(function (FieldList $fields) { + $fields->removeByName('ArticlesPageID'); + $fields->renameField('Title', _t(__CLASS__ . '.NAME', 'Name')); + }); $this->extend('onAfterUpdateCMSFields', $fields); - return $fields; + return parent::getCMSFields(); } /** diff --git a/src/Pages/ArticlePage.php b/src/Pages/ArticlePage.php index 596cdd1..81c7ff9 100755 --- a/src/Pages/ArticlePage.php +++ b/src/Pages/ArticlePage.php @@ -105,97 +105,103 @@ class ArticlePage extends \Page public function getCMSFields(): FieldList { - $fields = parent::getCMSFields(); - - $fields->removeByName('MenuTitle'); - - $fields->insertAfter( - 'URLSegment', - TextField::create('Subtitle', _t(__CLASS__ . '.SUBTITLE', 'Subtitle')) - ); - - $fields->replaceField('Content', HTMLEditorField::create('Content')); - - $fields->insertAfter( - 'Subtitle', - FieldGroup::create( - [ - TextField::create('ReadingTime', _t(__CLASS__ . '.READINGTIME', 'Reading time (in min.)')), - DatetimeField::create('PublicationDate', _t(__CLASS__ . '.PUBLICATIONDATE', 'Publication date')), - DatetimeField::create('UpdatedDate', _t(__CLASS__ . '.UPDATEDATE', 'Update date')), - ] - ) + $this->beforeUpdateCMSFields(function (FieldList $fields) { + $fields->removeByName('MenuTitle'); + + $fields->insertAfter( + 'URLSegment', + TextField::create('Subtitle', _t(__CLASS__ . '.SUBTITLE', 'Subtitle')) + ); + + $fields->replaceField('Content', HTMLEditorField::create('Content')); + + $fields->insertAfter( + 'Subtitle', + FieldGroup::create( + [ + TextField::create('ReadingTime', _t(__CLASS__ . '.READINGTIME', 'Reading time (in min.)')), + DatetimeField::create('PublicationDate', _t(__CLASS__ . '.PUBLICATIONDATE', 'Publication date')), + DatetimeField::create('UpdatedDate', _t(__CLASS__ . '.UPDATEDATE', 'Update date')), + ] + ) ->setName('ArticleMetadata') ->setTitle(_t(__CLASS__ . '.METADATA', 'Metadata')) - ); - - $fields->insertAfter( - 'ArticleMetadata', - TagField::create( + ); + + $fields->insertAfter( + 'ArticleMetadata', + TagField::create( + 'Themes', + _t('WeDevelop\Articles\Pages\ArticleThemePage.PLURALNAME', 'Themes'), + ArticleThemePage::get()->filter('ParentID', $this->ParentID), + $this->Themes() + )->setCanCreate(false) + ); + + $fields->insertAfter( 'Themes', - _t('WeDevelop\Articles\Pages\ArticleThemePage.PLURALNAME', 'Themes'), - ArticleThemePage::get()->filter('ParentID', $this->ParentID), - $this->Themes() - )->setCanCreate(false) - ); - - $fields->insertAfter( - 'Themes', - TagField::create( + TagField::create( + 'Tags', + _t('WeDevelop\Articles\Models\Tag.PLURALNAME', 'Tags'), + Tag::get()->filter( + [ + 'ArticlesPageID' => $this->ParentID, + ] + ), + $this->Tags() + ) + ); + + $fields->insertAfter( 'Tags', - _t('WeDevelop\Articles\Models\Tag.PLURALNAME', 'Tags'), - Tag::get()->filter( - [ - 'ArticlesPageID' => $this->ParentID, - ] - ), - $this->Tags() - ) - ); - - $fields->insertAfter( - 'Tags', - DropdownField::create( - 'AuthorID', - _t('WeDevelop\Articles\Models\Author.SINGULARNAME', 'Author'), - Author::get()->filter( - [ - 'ArticlesPageID' => $this->ParentID, - ] + DropdownField::create( + 'AuthorID', + _t('WeDevelop\Articles\Models\Author.SINGULARNAME', 'Author'), + Author::get()->filter( + [ + 'ArticlesPageID' => $this->ParentID, + ] + ) ) - ) ->setHasEmptyDefault(true) - ); + ); - $fields->insertAfter( - 'AuthorID', - DropdownField::create( - 'TypeID', - _t('WeDevelop\Articles\Pages\ArticleTypePage.SINGULARNAME', 'Type'), - ArticleTypePage::get()->filter( - [ - 'ParentID' => $this->ParentID, - ] + $fields->insertAfter( + 'AuthorID', + DropdownField::create( + 'TypeID', + _t('WeDevelop\Articles\Pages\ArticleTypePage.SINGULARNAME', 'Type'), + ArticleTypePage::get()->filter( + [ + 'ParentID' => $this->ParentID, + ] + ) ) - ) ->setHasEmptyDefault(true) - ); + ); - $fields->insertAfter( - 'TypeID', - HTMLEditorField::create('TeaserText', _t(__CLASS__ . '.TEASERTEXT', 'Teaser text')) + $fields->insertAfter( + 'TypeID', + HTMLEditorField::create( + 'TeaserText', + _t(__CLASS__ . '.TEASERTEXT', 'Teaser text') + ) ->setRows(5) - ); + ); - $fields->insertAfter( - 'TeaserText', - UploadField::create('Thumbnail', _t(__CLASS__ . '.THUMBNAIL', 'Thumbnail')) + $fields->insertAfter( + 'TeaserText', + UploadField::create( + 'Thumbnail', + _t(__CLASS__ . '.THUMBNAIL', 'Thumbnail') + ) ->setFolderName('Thumbnails') - ); + ); + }); $this->extend('onAfterUpdateCMSFields', $fields); - return $fields; + return parent::getCMSFields(); } public function getControllerName(): string diff --git a/src/Pages/ArticlesPage.php b/src/Pages/ArticlesPage.php index 9e4f114..2dd3599 100755 --- a/src/Pages/ArticlesPage.php +++ b/src/Pages/ArticlesPage.php @@ -119,79 +119,79 @@ class ArticlesPage extends \Page */ public function getCMSFields() { - $fields = parent::getCMSFields(); - - $fields->addFieldToTab( - 'Root.Themes', - $this->createGridField( - 'Themes', - _t('WeDevelop\Articles\Pages\ArticleThemePage.PLURALNAME', 'Themes'), - ArticleThemePage::get()->filter('ParentID', $this->ID) - ) - ); + $this->beforeUpdateCMSFields(function (FieldList $fields) { + $fields->addFieldToTab( + 'Root.Themes', + $this->createGridField( + 'Themes', + _t('WeDevelop\Articles\Pages\ArticleThemePage.PLURALNAME', 'Themes'), + ArticleThemePage::get()->filter('ParentID', $this->ID) + ) + ); - $fields->addFieldToTab( - 'Root.Types', - $this->createGridField( - 'Types', - _t('WeDevelop\Articles\Pages\ArticleTypePage.PLURALNAME', 'Types'), - ArticleTypePage::get()->filter('ParentID', $this->ID) - ) - ); + $fields->addFieldToTab( + 'Root.Types', + $this->createGridField( + 'Types', + _t('WeDevelop\Articles\Pages\ArticleTypePage.PLURALNAME', 'Types'), + ArticleTypePage::get()->filter('ParentID', $this->ID) + ) + ); - $fields->addFieldsToTab( - 'Root.Authors', - [ - GridField::create( - 'Authors', - _t('WeDevelop\Articles\Models\Author.PLURALNAME', 'Authors'), - $this->Authors(), - new GridFieldConfig_RecordEditor() - ), - ] - ); + $fields->addFieldsToTab( + 'Root.Authors', + [ + GridField::create( + 'Authors', + _t('WeDevelop\Articles\Models\Author.PLURALNAME', 'Authors'), + $this->Authors(), + new GridFieldConfig_RecordEditor() + ), + ] + ); - $fields->addFieldsToTab( - 'Root.Tags', - [ - GridField::create('Tags', _t('WeDevelop\Articles\Models\Tag.PLURALNAME', 'Tags'), $this->Tags(), new GridFieldConfig_RecordEditor()), - ] - ); + $fields->addFieldsToTab( + 'Root.Tags', + [ + GridField::create('Tags', _t('WeDevelop\Articles\Models\Tag.PLURALNAME', 'Tags'), $this->Tags(), new GridFieldConfig_RecordEditor()), + ] + ); - $fields->replaceField( - 'ChildPages', - $this->createGridField( - 'Articles', - _t(__CLASS__ . '.ARTICLES', 'Articles'), - ArticlePage::get()->filter('ParentID', $this->ID) - ) - ); + $fields->replaceField( + 'ChildPages', + $this->createGridField( + 'Articles', + _t(__CLASS__ . '.ARTICLES', 'Articles'), + ArticlePage::get()->filter('ParentID', $this->ID) + ) + ); - $fields->addFieldToTab( - 'Root.Highlighted', - new GridField( - 'HighlightedArticles', - _t(__CLASS__ . '.HIGHLIGHTEDARTICLES', 'Highlighted articles'), - $this->HighlightedArticles(), - $this->getGridConfig('HighlightedSort') - ) - ); + $fields->addFieldToTab( + 'Root.Highlighted', + new GridField( + 'HighlightedArticles', + _t(__CLASS__ . '.HIGHLIGHTEDARTICLES', 'Highlighted articles'), + $this->HighlightedArticles(), + $this->getGridConfig('HighlightedSort') + ) + ); - $fields->addFieldToTab( - 'Root.Pinned', - new GridField( - 'PinnedArticles', - _t(__CLASS__ . '.PINNEDARTICLES', 'Pinned articles'), - $this->PinnedArticles(), - $this->getGridConfig('PinnedSort') - ) - ); + $fields->addFieldToTab( + 'Root.Pinned', + new GridField( + 'PinnedArticles', + _t(__CLASS__ . '.PINNEDARTICLES', 'Pinned articles'), + $this->PinnedArticles(), + $this->getGridConfig('PinnedSort') + ) + ); - $fields->insertBefore('Articles', NumericField::create('PageLength')); + $fields->insertBefore('Articles', NumericField::create('PageLength')); + }); $this->extend('onAfterUpdateCMSFields', $fields); - return $fields; + return parent::getCMSFields(); } private function getGridConfig(string $sortColumn): GridFieldConfig_RelationEditor