FIX Update CMS fields now that they're being scaffolded (#589)

This commit is contained in:
Guy Sartorelli 2024-08-15 17:17:07 +12:00 committed by GitHub
parent ff1b8dd52b
commit 3a6f722125
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 55 additions and 126 deletions

View File

@ -53,6 +53,15 @@ class SiteTreeSubsites extends DataExtension
'CrossSubsiteLinkTracking' => ['FieldName' => 'Varchar'] 'CrossSubsiteLinkTracking' => ['FieldName' => 'Varchar']
]; ];
private static array $scaffold_cms_fields_settings = [
'ignoreFields' => [
'Subsite',
],
'ignoreRelations' => [
'CrossSubsiteLinkTracking',
],
];
public function isMainSite() public function isMainSite()
{ {
return $this->owner->SubsiteID == 0; return $this->owner->SubsiteID == 0;

View File

@ -8,10 +8,8 @@ use SilverStripe\CMS\Model\VirtualPage;
use SilverStripe\Control\Controller; use SilverStripe\Control\Controller;
use SilverStripe\Core\Config\Config; use SilverStripe\Core\Config\Config;
use SilverStripe\Forms\DropdownField; use SilverStripe\Forms\DropdownField;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\LiteralField; use SilverStripe\Forms\LiteralField;
use SilverStripe\Forms\TextareaField;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\TreeDropdownField;
use SilverStripe\ORM\ArrayList; use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\DataObject; use SilverStripe\ORM\DataObject;
use SilverStripe\Subsites\Forms\SubsitesTreeDropdownField; use SilverStripe\Subsites\Forms\SubsitesTreeDropdownField;
@ -21,34 +19,24 @@ use SilverStripe\View\ArrayData;
class SubsitesVirtualPage extends VirtualPage class SubsitesVirtualPage extends VirtualPage
{ {
private static $table_name = 'SubsitesVirtualPage'; private static $table_name = 'SubsitesVirtualPage';
private static $description = 'Displays the content of a page on another subsite'; private static $description = 'Displays the content of a page on another subsite';
private static $db = [
'CustomMetaTitle' => 'Varchar(255)',
'CustomMetaKeywords' => 'Varchar(255)',
'CustomMetaDescription' => 'Text',
'CustomExtraMeta' => 'HTMLText'
];
private static $non_virtual_fields = [ private static $non_virtual_fields = [
'SubsiteID' 'SubsiteID'
]; ];
public function getCMSFields() public function getCMSFields()
{ {
$fields = parent::getCMSFields(); $this->beforeUpdateCMSFields(function (FieldList $fields) {
$subsites = DataObject::get(Subsite::class); $subsites = DataObject::get(Subsite::class);
if (!$subsites) { if (!$subsites) {
$subsites = new ArrayList(); $subsites = ArrayList::create();
} else { } else {
$subsites = ArrayList::create($subsites->toArray()); $subsites = ArrayList::create($subsites->toArray());
} }
$subsites->push(ArrayData::create(['Title' => 'Main site', 'ID' => 0]));
$subsites->push(new ArrayData(['Title' => 'Main site', 'ID' => 0]));
$fields->addFieldToTab( $fields->addFieldToTab(
'Root.Main', 'Root.Main',
@ -68,12 +56,6 @@ class SubsitesVirtualPage extends VirtualPage
'ID', 'ID',
'MenuTitle' 'MenuTitle'
); );
$fields->addFieldToTab(
'Root.Main',
TreeDropdownField::create('CopyContentFromID', 'Linked Page', SiteTree::class)
);
if (Controller::has_curr() && Controller::curr()->getRequest()) { if (Controller::has_curr() && Controller::curr()->getRequest()) {
$subsiteID = (int) Controller::curr()->getRequest()->requestVar('CopyContentFromID_SubsiteID'); $subsiteID = (int) Controller::curr()->getRequest()->requestVar('CopyContentFromID_SubsiteID');
$pageSelectionField->setSubsiteID($subsiteID); $pageSelectionField->setSubsiteID($subsiteID);
@ -91,69 +73,14 @@ class SubsitesVirtualPage extends VirtualPage
<a class=\"cmsEditlink\" href=\"$editLink\">" . <a class=\"cmsEditlink\" href=\"$editLink\">" .
_t('SilverStripe\\CMS\\Model\\VirtualPage.EDITCONTENT', 'Click here to edit the content') . _t('SilverStripe\\CMS\\Model\\VirtualPage.EDITCONTENT', 'Click here to edit the content') .
'</a>'; '</a>';
$fields->removeByName('VirtualPageContentLinkLabel');
$fields->addFieldToTab( $fields->addFieldToTab(
'Root.Main', 'Root.Main',
$linkToContentLabelField = LiteralField::create('VirtualPageContentLinkLabel', $linkToContent), LiteralField::create('VirtualPageContentLinkLabel', $linkToContent),
'Title' 'Title'
); );
} }
});
return parent::getCMSFields();
$fields->addFieldToTab(
'Root.Main',
TextField::create(
'CustomMetaTitle',
$this->fieldLabel('CustomMetaTitle')
)->setDescription(_t(__CLASS__ . '.OverrideNote', 'Overrides inherited value from the source')),
'MetaTitle'
);
$fields->addFieldToTab(
'Root.Main',
TextareaField::create(
'CustomMetaKeywords',
$this->fieldLabel('CustomMetaKeywords')
)->setDescription(_t(__CLASS__ . '.OverrideNote', 'Overrides inherited value from the source')),
'MetaKeywords'
);
$fields->addFieldToTab(
'Root.Main',
TextareaField::create(
'CustomMetaDescription',
$this->fieldLabel('CustomMetaDescription')
)->setDescription(_t(__CLASS__ . '.OverrideNote', 'Overrides inherited value from the source')),
'MetaDescription'
);
$fields->addFieldToTab(
'Root.Main',
TextField::create(
'CustomExtraMeta',
$this->fieldLabel('CustomExtraMeta')
)->setDescription(_t(__CLASS__ . '.OverrideNote', 'Overrides inherited value from the source')),
'ExtraMeta'
);
return $fields;
}
public function fieldLabels($includerelations = true)
{
$labels = parent::fieldLabels($includerelations);
$labels['CustomMetaTitle'] = _t('SilverStripe\\Subsites\\Model\\Subsite.CustomMetaTitle', 'Title');
$labels['CustomMetaKeywords'] = _t(
'SilverStripe\\Subsites\\Model\\Subsite.CustomMetaKeywords',
'Keywords'
);
$labels['CustomMetaDescription'] = _t(
'SilverStripe\\Subsites\\Model\\Subsite.CustomMetaDescription',
'Description'
);
$labels['CustomExtraMeta'] = _t(
'SilverStripe\\Subsites\\Model\\Subsite.CustomExtraMeta',
'Custom Meta Tags'
);
return $labels;
} }
public function getCopyContentFromID_SubsiteID() public function getCopyContentFromID_SubsiteID()
@ -172,13 +99,6 @@ class SubsitesVirtualPage extends VirtualPage
unset($fields[$k]); unset($fields[$k]);
} }
} }
foreach (SubsitesVirtualPage::$db as $field => $type) {
if (in_array($field, $fields ?? [])) {
unset($fields[array_search($field, $fields)]);
}
}
return $fields; return $fields;
} }