silverstripe-widgets/src/Extensions/WidgetPageExtension.php

87 lines
2.3 KiB
PHP
Raw Normal View History

2013-04-16 16:07:41 +02:00
<?php
namespace SilverStripe\Widgets\Extensions;
use SilverStripe\Forms\CheckboxField;
use SilverStripe\Forms\FieldList;
use SilverStripe\ORM\DataExtension;
use SilverStripe\Widgets\Forms\WidgetAreaEditor;
use SilverStripe\Widgets\Model\WidgetArea;
2013-04-16 16:07:41 +02:00
/**
* Adds a single {@link WidgetArea} called "SideBar" to {@link Page} classes.
* Adjust your templates to render the resulting
* {@link WidgetArea} as required, through the $SideBarView placeholder.
*
* This extension is just an example on how to use the widgets functionality,
* feel free to create your own relationships, naming conventions, etc.
* without using this class.
*/
2015-11-18 05:08:21 +01:00
class WidgetPageExtension extends DataExtension
{
private static $db = [
2015-11-18 05:08:21 +01:00
'InheritSideBar' => 'Boolean',
];
2013-04-16 16:07:41 +02:00
private static $defaults = [
2015-11-18 05:08:21 +01:00
'InheritSideBar' => true
];
2013-04-16 16:07:41 +02:00
private static $has_one = [
'SideBar' => WidgetArea::class,
];
private static $owns = [
'SideBar',
];
private static $cascade_deletes = [
'SideBar',
];
2013-04-16 16:07:41 +02:00
2015-11-18 05:08:21 +01:00
public function updateCMSFields(FieldList $fields)
{
$fields->addFieldToTab(
"Root.Widgets",
2017-12-18 22:21:48 +01:00
new CheckboxField("InheritSideBar", _t(__CLASS__ . '.INHERITSIDEBAR', 'Inherit Sidebar From Parent'))
2015-11-18 05:08:21 +01:00
);
$fields->addFieldToTab(
"Root.Widgets",
new WidgetAreaEditor("SideBar")
);
}
2013-04-16 16:07:41 +02:00
2015-11-18 05:08:21 +01:00
/**
* @return WidgetArea
*/
public function SideBarView()
{
if ($this->owner->InheritSideBar
2015-11-18 05:08:21 +01:00
&& ($parent = $this->owner->getParent())
&& $parent->hasMethod('SideBarView')
) {
return $parent->SideBarView();
} elseif ($this->owner->SideBar()->exists()) {
return $this->owner->SideBar();
}
}
2015-11-18 05:08:21 +01:00
public function onBeforeDuplicate($duplicatePage)
{
if ($this->owner->hasField('SideBarID')) {
$sideBar = $this->owner->getComponent('SideBar');
$duplicateWidgetArea = $sideBar->duplicate();
2013-04-16 16:07:41 +02:00
2015-11-18 05:08:21 +01:00
foreach ($sideBar->Items() as $originalWidget) {
$widget = $originalWidget->duplicate(false);
$widget->ParentID = $duplicateWidgetArea->ID;
$widget->write();
}
2015-11-18 05:08:21 +01:00
$duplicatePage->SideBarID = $duplicateWidgetArea->ID;
}
2015-11-18 05:08:21 +01:00
return $duplicatePage;
}
}