Skip to content

Commit

Permalink
Merge pull request #35 from wedevelopnl/feature/ss-5
Browse files Browse the repository at this point in the history
SS5 compatibility and related articles feature
  • Loading branch information
Dennisprins93 authored Aug 1, 2023
2 parents b6e148a + af417db commit 568359a
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 144 deletions.
18 changes: 9 additions & 9 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,21 @@
"minimum-stability": "dev",
"prefer-stable": true,
"require": {
"php": ">=8.1",
"silverstripe/cms": "^4@stable",
"silverstripe/vendor-plugin": "^1.0",
"silverstripe/lumberjack": "^2.0",
"micschk/silverstripe-gridfieldsitetreebuttons": "^2.0",
"silverstripe/tagfield": "^2.7",
"unclecheese/display-logic": "^2.0"
"php": "^8.1",
"silverstripe/framework": "^5.0",
"silverstripe/vendor-plugin": "^2.0",
"silverstripe/lumberjack": "^3.0",
"silverstripe/tagfield": "^3.0",
"unclecheese/display-logic": "^3.0",
"wedevelopnl/silverstripe-gridfieldsitetreebuttons": "^1.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"
Expand Down
105 changes: 43 additions & 62 deletions src/Pages/ArticlePage.php
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand All @@ -71,43 +49,46 @@ 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'))
Expand Down Expand Up @@ -209,7 +190,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();
Expand Down
121 changes: 48 additions & 73 deletions src/Pages/ArticlesPage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

namespace WeDevelop\Articles\Pages;

use Restruct\Silverstripe\SiteTreeButtons\GridFieldAddNewSiteTreeItemButton;
use SilverStripe\Forms\TextField;
use WeDevelop\SiteTreeButtons\GridFieldAddNewSiteTreeItemButton;
use SilverStripe\Control\Controller;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\GridField\GridField;
Expand All @@ -14,7 +15,6 @@
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;
Expand All @@ -39,74 +39,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',
],
Expand All @@ -118,22 +86,33 @@ class ArticlesPage extends \Page
public function getCMSFields(): FieldList
{
$this->beforeUpdateCMSFields(function (FieldList $fields) {

$fields->removeByName([
'PageLength',
]);

$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(
Expand All @@ -143,7 +122,7 @@ public function getCMSFields(): FieldList
'Authors',
_t('WeDevelop\Articles\Models\Author.PLURALNAME', 'Authors'),
$this->Authors(),
new GridFieldConfig_RecordEditor()
GridFieldConfig_RecordEditor::create()
),
]
);
Expand All @@ -155,15 +134,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(
Expand All @@ -184,12 +154,21 @@ public function getCMSFields(): FieldList
)
);

$fields->insertBefore('Articles', NumericField::create('PageLength'));
$fields->addFieldsToTab(
'Root.Settings',
[
TextField::create('RelatedArticlesTitle', 'Title above related articles'),
]
);
});

$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
Expand Down Expand Up @@ -229,11 +208,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
Expand Down
Loading

0 comments on commit 568359a

Please sign in to comment.