From bb12ca2b2f52d7802921108dc7cdb3edf4cadfa6 Mon Sep 17 00:00:00 2001 From: Dennis Prins Date: Mon, 31 Jul 2023 11:05:43 +0200 Subject: [PATCH 1/7] Update composer.json --- composer.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.json b/composer.json index 918edd3..b44df99 100755 --- a/composer.json +++ b/composer.json @@ -15,21 +15,21 @@ "minimum-stability": "dev", "prefer-stable": true, "require": { - "php": ">=8.1", - "silverstripe/cms": "^4@stable", - "silverstripe/vendor-plugin": "^1.0", + "php": "^8.1", + "silverstripe/framework": "^5.0", + "silverstripe/vendor-plugin": "^2.0", "silverstripe/lumberjack": "^2.0", "micschk/silverstripe-gridfieldsitetreebuttons": "^2.0", - "silverstripe/tagfield": "^2.7", - "unclecheese/display-logic": "^2.0" + "silverstripe/tagfield": "^3.0", + "unclecheese/display-logic": "^3.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.4" + "friendsofphp/php-cs-fixer": "^3.20" }, "extra": { "installer-name": "silverstripe-articles", "branch-alias": { - "dev-main": "4.x-dev" + "dev-main": "5.x-dev" }, "expose": [ "client/dist" From 80797a9d92280d5dcff826bab3acf8b33793ed35 Mon Sep 17 00:00:00 2001 From: Dennis Prins Date: Mon, 31 Jul 2023 11:08:02 +0200 Subject: [PATCH 2/7] Update composer.json --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index b44df99..45d5ef5 100755 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "php": "^8.1", "silverstripe/framework": "^5.0", "silverstripe/vendor-plugin": "^2.0", - "silverstripe/lumberjack": "^2.0", + "silverstripe/lumberjack": "^3.0", "micschk/silverstripe-gridfieldsitetreebuttons": "^2.0", "silverstripe/tagfield": "^3.0", "unclecheese/display-logic": "^3.0" From 8b58d08c17ea388a37dd7b430333968e72f56824 Mon Sep 17 00:00:00 2001 From: Dennis Prins Date: Mon, 31 Jul 2023 11:12:58 +0200 Subject: [PATCH 3/7] Update composer.json --- composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/composer.json b/composer.json index 45d5ef5..9fe5294 100755 --- a/composer.json +++ b/composer.json @@ -19,7 +19,6 @@ "silverstripe/framework": "^5.0", "silverstripe/vendor-plugin": "^2.0", "silverstripe/lumberjack": "^3.0", - "micschk/silverstripe-gridfieldsitetreebuttons": "^2.0", "silverstripe/tagfield": "^3.0", "unclecheese/display-logic": "^3.0" }, From 9e39efce32eea578dbdd4930a5728b4f0c1e7c4a Mon Sep 17 00:00:00 2001 From: Dennis Prins Date: Mon, 31 Jul 2023 11:39:41 +0200 Subject: [PATCH 4/7] Update ArticlesPage.php --- src/Pages/ArticlesPage.php | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/Pages/ArticlesPage.php b/src/Pages/ArticlesPage.php index 08f7abe..0b87c6f 100755 --- a/src/Pages/ArticlesPage.php +++ b/src/Pages/ArticlesPage.php @@ -2,7 +2,6 @@ namespace WeDevelop\Articles\Pages; -use Restruct\Silverstripe\SiteTreeButtons\GridFieldAddNewSiteTreeItemButton; use SilverStripe\Control\Controller; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\GridField\GridField; @@ -118,6 +117,11 @@ class ArticlesPage extends \Page public function getCMSFields(): FieldList { $this->beforeUpdateCMSFields(function (FieldList $fields) { + + $fields->removeByName([ + 'PageLength', + ]); + $fields->addFieldToTab( 'Root.Themes', $this->createGridField( @@ -155,15 +159,6 @@ public function getCMSFields(): FieldList ] ); - $fields->replaceField( - 'ChildPages', - $this->createGridField( - 'Articles', - _t(__CLASS__ . '.ARTICLES', 'Articles'), - ArticlePage::get()->filter('ParentID', $this->ID) - ) - ); - $fields->addFieldToTab( 'Root.Highlighted', new GridField( @@ -183,13 +178,15 @@ public function getCMSFields(): FieldList $this->getGridConfig('PinnedSort') ) ); - - $fields->insertBefore('Articles', NumericField::create('PageLength')); }); $fields = parent::getCMSFields(); - $this->extend('onAfterUpdateCMSFields', $fields); - return $fields; + + $fields->removeByName(['PageLength']); + + $fields->addFieldsToTab('Root.ChildPages', NumericField::create('PageLength'), 'ChildPages'); + + return $fields; } private function getGridConfig(string $sortColumn): GridFieldConfig_RelationEditor @@ -229,11 +226,7 @@ public function getLumberjackTitle(): string private function createGridField(string $type, string $title, DataList $list): GridField { - $config = GridFieldConfig_Lumberjack::create() - ->removeComponentsByType(GridFieldSiteTreeAddNewButton::class) - ->addComponent(new GridFieldAddNewSiteTreeItemButton('buttons-before-left')); - - return GridField::create($type, $title, $list, $config); + return GridField::create($type, $title, $list, GridFieldConfig_Lumberjack::create()); } public function getThemes(): DataList From be6b180408fffb8a7da911495a7e428d2e061bc0 Mon Sep 17 00:00:00 2001 From: Dennis Prins Date: Tue, 1 Aug 2023 16:07:46 +0200 Subject: [PATCH 5/7] Related articles feature --- src/Pages/ArticlePage.php | 102 +++++++----------- src/Pages/ArticlesPage.php | 92 +++++++--------- .../Articles/Pages/Layout/ArticlePage.ss | 16 +++ 3 files changed, 94 insertions(+), 116 deletions(-) diff --git a/src/Pages/ArticlePage.php b/src/Pages/ArticlePage.php index 5bcfd0b..c00ebbd 100755 --- a/src/Pages/ArticlePage.php +++ b/src/Pages/ArticlePage.php @@ -8,60 +8,38 @@ use SilverStripe\Forms\DropdownField; use SilverStripe\Forms\FieldGroup; use SilverStripe\Forms\FieldList; +use SilverStripe\Forms\GridField\GridField; +use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor; +use SilverStripe\Forms\GridField\GridFieldEditButton; use SilverStripe\Forms\HTMLEditor\HTMLEditorField; use SilverStripe\Forms\TextField; use SilverStripe\ORM\FieldType\DBDatetime; use SilverStripe\TagField\TagField; +use SilverStripe\Versioned\GridFieldArchiveAction; +use Symbiote\GridFieldExtensions\GridFieldOrderableRows; use WeDevelop\Articles\Controllers\ArticlesPageController; use WeDevelop\Articles\Models\Author; use WeDevelop\Articles\Models\Tag; class ArticlePage extends \Page { - /** - * @var string - */ - private static $table_name = 'WeDevelop_ArticlePage'; - - /** - * @var string - */ - private static $singular_name = 'Article page'; - - /** - * @var string - */ - private static $description = 'A page that represents an article'; - - /** - * @var string - */ - private static $plural_name = 'Articles page'; - - /** - * @var string - */ - private static $icon_class = 'font-icon-p-article'; - - /** - * @var bool - */ - private static $show_in_sitetree = false; - - /** - * @var bool - */ - private static $can_be_root = false; - - /** - * @var array - */ - private static $allowed_children = []; - - /** - * @var array - */ - private static $db = [ + private static string $table_name = 'WeDevelop_ArticlePage'; + + private static string $singular_name = 'Article page'; + + private static string $description = 'A page that represents an article'; + + private static string $plural_name = 'Articles page'; + + private static string $icon_class = 'font-icon-p-article'; + + private static bool $show_in_sitetree = false; + + private static bool $can_be_root = false; + + private static array $allowed_children = []; + + private static array $db = [ 'Subtitle' => 'Varchar(255)', 'PublicationDate' => 'Datetime', 'UpdatedDate' => 'Datetime', @@ -71,43 +49,43 @@ class ArticlePage extends \Page 'Highlighted' => 'Boolean', ]; - /** - * @var array - */ - private static $has_one = [ + private static array $has_one = [ 'Thumbnail' => Image::class, 'Type' => ArticleTypePage::class, 'Author' => Author::class, ]; - /** - * @var array - */ - private static $owns = [ + private static array $many_many = [ + 'RelatedArticles' => ArticlePage::class, + ]; + + private static array $owns = [ 'Thumbnail', ]; - /** - * @var array - */ - private static $belongs_many_many = [ + private static array $belongs_many_many = [ 'Tags' => Tag::class, 'Themes' => ArticleThemePage::class, 'HighlightedArticles' => ArticlesPage::class . '.HighlightedArticles', 'PinnedArticles' => ArticlesPage::class . '.PinnedArticles', ]; - /** - * @var string - */ - private static $default_sort = 'PublicationDate DESC'; - + private static string $default_sort = 'PublicationDate DESC'; public function getCMSFields(): FieldList { $this->beforeUpdateCMSFields(function (FieldList $fields) { $fields->removeByName('MenuTitle'); + $fields->addFieldsToTab('Root.RelatedArticles', [ + GridField::create('RelatedArticles', _t(__CLASS__ . '.RELATED_ARTICLES', 'Related articles'), $this->owner->RelatedArticles(), + GridFieldConfig_RelationEditor::create() + ->addComponent(new GridFieldOrderableRows()) + ->removeComponentsByType(GridFieldArchiveAction::class) + ->removeComponentsByType(GridFieldEditButton::class) + ), + ]); + $fields->insertAfter( 'URLSegment', TextField::create('Subtitle', _t(__CLASS__ . '.SUBTITLE', 'Subtitle')) @@ -209,7 +187,7 @@ public function getControllerName(): string return ArticlesPageController::class; } - protected function onBeforeWrite() + protected function onBeforeWrite(): void { if (is_null($this->PublicationDate)) { $this->PublicationDate = DBDatetime::now()->getValue(); diff --git a/src/Pages/ArticlesPage.php b/src/Pages/ArticlesPage.php index 0b87c6f..3334404 100755 --- a/src/Pages/ArticlesPage.php +++ b/src/Pages/ArticlesPage.php @@ -2,11 +2,14 @@ namespace WeDevelop\Articles\Pages; +use SilverStripe\Forms\TextField; +use WeDevelop\SiteTreeButtons\GridFieldAddNewSiteTreeItemButton; use SilverStripe\Control\Controller; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\GridField\GridField; use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter; use SilverStripe\Forms\GridField\GridFieldAddNewButton; +use SilverStripe\Forms\GridField\GridFieldConfig; use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor; use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor; use SilverStripe\Forms\GridField\GridFieldDeleteAction; @@ -38,74 +41,42 @@ */ class ArticlesPage extends \Page { - /** - * @var string - */ - private static $table_name = 'WeDevelop_ArticlesPage'; + private static string $table_name = 'WeDevelop_ArticlesPage'; - /** - * @var string - */ - private static $singular_name = 'Articles overview page'; + private static string $singular_name = 'Articles overview page'; - /** - * @var string - */ - private static $plural_name = 'Articles overview pages'; + private static string $plural_name = 'Articles overview pages'; - /** - * @var string - */ - private static $icon_class = 'font-icon-p-article'; + private static string $icon_class = 'font-icon-p-article'; - /** - * @var array - */ - private static $allowed_children = [ - '*' . ArticlePage::class, - '*' . ArticleThemePage::class, - '*' . ArticleTypePage::class, + private static array $allowed_children = [ + ArticlePage::class, + ArticleThemePage::class, + ArticleTypePage::class, ]; - /** - * @var string - */ - private static $default_child = ArticlePage::class; + private static string $default_child = ArticlePage::class; - /** - * @var array - */ - private static $db = [ + private static array $db = [ + 'RelatedArticlesTitle' => 'Varchar', 'PageLength' => 'Int', ]; - /** - * @var array - */ - private static $defaults = [ + private static array $defaults = [ 'PageLength' => 10, ]; - /** - * @var array - */ - private static $has_many = [ + private static array $has_many = [ 'Tags' => Tag::class, 'Authors' => Author::class, ]; - /** - * @var array - */ - private static $many_many = [ + private static array $many_many = [ 'HighlightedArticles' => ArticlePage::class, 'PinnedArticles' => ArticlePage::class, ]; - /** - * @var array - */ - private static $many_many_extraFields = [ + private static array $many_many_extraFields = [ 'HighlightedArticles' => [ 'HighlightedSort' => 'Int', ], @@ -124,20 +95,26 @@ public function getCMSFields(): FieldList $fields->addFieldToTab( 'Root.Themes', - $this->createGridField( + GridField::create( 'Themes', _t('WeDevelop\Articles\Pages\ArticleThemePage.PLURALNAME', 'Themes'), - ArticleThemePage::get()->filter('ParentID', $this->ID) - ) + ArticleThemePage::get()->filter('ParentID', $this->ID), + GridFieldConfig_RecordEditor::create() + ->removeComponentsByType(GridFieldAddNewButton::class) + ->addComponent(new GridFieldAddNewSiteTreeItemButton()) + ), ); $fields->addFieldToTab( 'Root.Types', - $this->createGridField( + GridField::create( 'Types', _t('WeDevelop\Articles\Pages\ArticleTypePage.PLURALNAME', 'Types'), - ArticleTypePage::get()->filter('ParentID', $this->ID) - ) + ArticleTypePage::get()->filter('ParentID', $this->ID), + GridFieldConfig_RecordEditor::create() + ->removeComponentsByType(GridFieldAddNewButton::class) + ->addComponent(new GridFieldAddNewSiteTreeItemButton()) + ), ); $fields->addFieldsToTab( @@ -147,7 +124,7 @@ public function getCMSFields(): FieldList 'Authors', _t('WeDevelop\Articles\Models\Author.PLURALNAME', 'Authors'), $this->Authors(), - new GridFieldConfig_RecordEditor() + GridFieldConfig_RecordEditor::create() ), ] ); @@ -178,6 +155,13 @@ public function getCMSFields(): FieldList $this->getGridConfig('PinnedSort') ) ); + + $fields->addFieldsToTab( + 'Root.Settings', + [ + TextField::create('RelatedArticlesTitle', 'Title above related articles'), + ] + ); }); $fields = parent::getCMSFields(); diff --git a/templates/WeDevelop/Articles/Pages/Layout/ArticlePage.ss b/templates/WeDevelop/Articles/Pages/Layout/ArticlePage.ss index 585f3bb..eb50b25 100644 --- a/templates/WeDevelop/Articles/Pages/Layout/ArticlePage.ss +++ b/templates/WeDevelop/Articles/Pages/Layout/ArticlePage.ss @@ -44,3 +44,19 @@ +<% if $RelatedArticles %> +
+
+
    + <% loop $RelatedArticles %> +
  • + $Title Go to +
  • + <% end_loop %> +
+ <% if $Parent %> + All articles + <% end_if %> +
+
+<% end_if %> From 06a7f89144a7a614259cb8a8605934010162e0d4 Mon Sep 17 00:00:00 2001 From: Dennis Prins Date: Tue, 1 Aug 2023 16:09:49 +0200 Subject: [PATCH 6/7] Related articles feature --- composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 9fe5294..013ea03 100755 --- a/composer.json +++ b/composer.json @@ -20,7 +20,8 @@ "silverstripe/vendor-plugin": "^2.0", "silverstripe/lumberjack": "^3.0", "silverstripe/tagfield": "^3.0", - "unclecheese/display-logic": "^3.0" + "unclecheese/display-logic": "^3.0", + "wedevelopnl/silverstripe-gridfieldsitetreebuttons": "^1.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.20" From af417db81820e40d29c14c5e6642b49d4cc76b7c Mon Sep 17 00:00:00 2001 From: Dennis Prins Date: Tue, 1 Aug 2023 16:10:54 +0200 Subject: [PATCH 7/7] Related articles feature --- src/Pages/ArticlePage.php | 5 ++++- src/Pages/ArticlesPage.php | 2 -- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Pages/ArticlePage.php b/src/Pages/ArticlePage.php index c00ebbd..ea12ed6 100755 --- a/src/Pages/ArticlePage.php +++ b/src/Pages/ArticlePage.php @@ -78,7 +78,10 @@ public function getCMSFields(): FieldList $fields->removeByName('MenuTitle'); $fields->addFieldsToTab('Root.RelatedArticles', [ - GridField::create('RelatedArticles', _t(__CLASS__ . '.RELATED_ARTICLES', 'Related articles'), $this->owner->RelatedArticles(), + GridField::create( + 'RelatedArticles', + _t(__CLASS__ . '.RELATED_ARTICLES', 'Related articles'), + $this->owner->RelatedArticles(), GridFieldConfig_RelationEditor::create() ->addComponent(new GridFieldOrderableRows()) ->removeComponentsByType(GridFieldArchiveAction::class) diff --git a/src/Pages/ArticlesPage.php b/src/Pages/ArticlesPage.php index 3334404..5dfb3ee 100755 --- a/src/Pages/ArticlesPage.php +++ b/src/Pages/ArticlesPage.php @@ -9,14 +9,12 @@ use SilverStripe\Forms\GridField\GridField; use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter; use SilverStripe\Forms\GridField\GridFieldAddNewButton; -use SilverStripe\Forms\GridField\GridFieldConfig; use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor; use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor; use SilverStripe\Forms\GridField\GridFieldDeleteAction; use SilverStripe\Forms\GridField\GridFieldEditButton; use SilverStripe\Forms\NumericField; use SilverStripe\Lumberjack\Forms\GridFieldConfig_Lumberjack; -use SilverStripe\Lumberjack\Forms\GridFieldSiteTreeAddNewButton; use SilverStripe\ORM\DataList; use SilverStripe\ORM\DB; use SilverStripe\ORM\HasManyList;