mirror of
https://github.com/silverstripe/silverstripe-widgets
synced 2024-10-22 17:05:54 +02:00
OSS-905 PSR2 compliance
This commit is contained in:
parent
eee39bca4e
commit
0a19119114
@ -5,7 +5,6 @@
|
||||
* @package widgets
|
||||
*/
|
||||
class WidgetContentControllerExtension extends Extension {
|
||||
|
||||
/**
|
||||
*
|
||||
* @var array
|
||||
@ -13,32 +12,34 @@ class WidgetContentControllerExtension extends Extension {
|
||||
private static $allowed_actions = array(
|
||||
'handleWidget'
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Handles widgets attached to a page through one or more {@link WidgetArea}
|
||||
* elements.
|
||||
*
|
||||
* Iterated through each $has_one relation with a {@link WidgetArea} and
|
||||
* Iterated through each $has_one relation with a {@link WidgetArea} and
|
||||
* looks for connected widgets by their database identifier.
|
||||
*
|
||||
*
|
||||
* Assumes URLs in the following format: <URLSegment>/widget/<Widget-ID>.
|
||||
*
|
||||
*
|
||||
* @return RequestHandler
|
||||
*/
|
||||
public function handleWidget() {
|
||||
$SQL_id = $this->owner->getRequest()->param('ID');
|
||||
if(!$SQL_id) return false;
|
||||
|
||||
// find WidgetArea relations
|
||||
$widgetAreaRelations = array();
|
||||
$hasOnes = $this->owner->data()->hasOne();
|
||||
|
||||
if(!$hasOnes) {
|
||||
if (!$SQL_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach($hasOnes as $hasOneName => $hasOneClass) {
|
||||
if($hasOneClass == 'WidgetArea' || is_subclass_of($hasOneClass, 'WidgetArea')) {
|
||||
// find WidgetArea relations
|
||||
$widgetAreaRelations = array();
|
||||
$hasOnes = $this->owner->data()->hasOne();
|
||||
|
||||
if (!$hasOnes) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($hasOnes as $hasOneName => $hasOneClass) {
|
||||
if ($hasOneClass == 'WidgetArea' || is_subclass_of($hasOneClass, 'WidgetArea')) {
|
||||
$widgetAreaRelations[] = $hasOneName;
|
||||
}
|
||||
}
|
||||
@ -46,8 +47,8 @@ class WidgetContentControllerExtension extends Extension {
|
||||
// find widget
|
||||
$widget = null;
|
||||
|
||||
foreach($widgetAreaRelations as $widgetAreaRelation) {
|
||||
if($widget) {
|
||||
foreach ($widgetAreaRelations as $widgetAreaRelation) {
|
||||
if ($widget) {
|
||||
break;
|
||||
}
|
||||
|
||||
@ -56,10 +57,10 @@ class WidgetContentControllerExtension extends Extension {
|
||||
->First();
|
||||
}
|
||||
|
||||
if(!$widget) {
|
||||
if (!$widget) {
|
||||
user_error('No widget found', E_USER_ERROR);
|
||||
}
|
||||
|
||||
|
||||
return $widget->getController();
|
||||
}
|
||||
}
|
||||
|
@ -1,25 +1,24 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Optional controller for every widget which has its own logic, e.g. in forms.
|
||||
* Optional controller for every widget which has its own logic, e.g. in forms.
|
||||
*
|
||||
* It always handles a single widget, usually passed in as a database
|
||||
* identifier through the controller URL. Needs to be constructed as a nested
|
||||
* It always handles a single widget, usually passed in as a database
|
||||
* identifier through the controller URL. Needs to be constructed as a nested
|
||||
* controller within a {@link ContentController}.
|
||||
*
|
||||
*
|
||||
* ## Forms
|
||||
* You can add forms like in any other SilverStripe controller. If you need
|
||||
* access to the widget from within a form, you can use
|
||||
* You can add forms like in any other SilverStripe controller. If you need
|
||||
* access to the widget from within a form, you can use
|
||||
* `$this->controller->getWidget()` inside the form logic.
|
||||
*
|
||||
* Note: Widget controllers currently only work on {@link Page} objects,
|
||||
* because the logic is implemented in {@link ContentController->handleWidget()}.
|
||||
* Copy this logic and the URL rules to enable it for other controllers.
|
||||
*
|
||||
*
|
||||
* @package widgets
|
||||
*/
|
||||
class WidgetController extends Controller {
|
||||
|
||||
/**
|
||||
* @var Widget
|
||||
*/
|
||||
@ -36,11 +35,11 @@ class WidgetController extends Controller {
|
||||
* @param Widget $widget
|
||||
*/
|
||||
public function __construct($widget = null) {
|
||||
if($widget) {
|
||||
if ($widget) {
|
||||
$this->widget = $widget;
|
||||
$this->failover = $widget;
|
||||
}
|
||||
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
@ -51,47 +50,47 @@ class WidgetController extends Controller {
|
||||
public function Link($action = null) {
|
||||
$id = ($this->widget) ? $this->widget->ID : null;
|
||||
$segment = Controller::join_links('widget', $id, $action);
|
||||
|
||||
if($page = Director::get_current_page()) {
|
||||
|
||||
if ($page = Director::get_current_page()) {
|
||||
return $page->Link($segment);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Controller::curr()->Link($segment);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Widget
|
||||
*/
|
||||
public function getWidget() {
|
||||
return $this->widget;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overloaded from {@link Widget->Content()} to allow for controller / form
|
||||
* Overloaded from {@link Widget->Content()} to allow for controller / form
|
||||
* linking.
|
||||
*
|
||||
*
|
||||
* @return string HTML
|
||||
*/
|
||||
public function Content() {
|
||||
return $this->renderWith(array_reverse(ClassInfo::ancestry($this->widget->class)));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Overloaded from {@link Widget->WidgetHolder()} to allow for controller/
|
||||
* Overloaded from {@link Widget->WidgetHolder()} to allow for controller/
|
||||
* form linking.
|
||||
*
|
||||
*
|
||||
* @return string HTML
|
||||
*/
|
||||
public function WidgetHolder() {
|
||||
return $this->renderWith("WidgetHolder");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Uses the `WidgetEditor.ss` template and {@link Widget->editablesegment()}
|
||||
* Uses the `WidgetEditor.ss` template and {@link Widget->editablesegment()}
|
||||
* to render a administrator-view of the widget. It is assumed that this
|
||||
* view contains form elements which are submitted and saved through
|
||||
* view contains form elements which are submitted and saved through
|
||||
* {@link WidgetAreaEditor} within the CMS interface.
|
||||
*
|
||||
*
|
||||
* @return string HTML
|
||||
*/
|
||||
public function editablesegment() {
|
||||
@ -101,14 +100,14 @@ class WidgetController extends Controller {
|
||||
$locale = Member::currentUser()->Locale;
|
||||
i18n::set_locale($locale);
|
||||
}
|
||||
if(class_exists($className) && is_subclass_of($className, 'Widget')) {
|
||||
if (class_exists($className) && is_subclass_of($className, 'Widget')) {
|
||||
$obj = new $className();
|
||||
return $obj->EditableSegment();
|
||||
} else {
|
||||
user_error("Bad widget class: $className", E_USER_WARNING);
|
||||
return "Bad widget class name given";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -116,5 +115,4 @@ class WidgetController extends Controller {
|
||||
* @package widgets
|
||||
*/
|
||||
class Widget_Controller extends WidgetController {
|
||||
|
||||
}
|
||||
|
@ -9,7 +9,6 @@
|
||||
* without using this class.
|
||||
*/
|
||||
class WidgetPageExtension extends DataExtension {
|
||||
|
||||
private static $db = array(
|
||||
'InheritSideBar' => 'Boolean',
|
||||
);
|
||||
@ -24,11 +23,11 @@ class WidgetPageExtension extends DataExtension {
|
||||
|
||||
public function updateCMSFields(FieldList $fields) {
|
||||
$fields->addFieldToTab(
|
||||
"Root.Widgets",
|
||||
"Root.Widgets",
|
||||
new CheckboxField("InheritSideBar", 'Inherit Sidebar From Parent')
|
||||
);
|
||||
$fields->addFieldToTab(
|
||||
"Root.Widgets",
|
||||
"Root.Widgets",
|
||||
new WidgetAreaEditor("SideBar")
|
||||
);
|
||||
}
|
||||
@ -37,30 +36,29 @@ class WidgetPageExtension extends DataExtension {
|
||||
* @return WidgetArea
|
||||
*/
|
||||
public function SideBarView() {
|
||||
if(
|
||||
if (
|
||||
$this->owner->InheritSideBar
|
||||
&& ($parent = $this->owner->getParent())
|
||||
&& $parent->hasMethod('SideBarView')
|
||||
) {
|
||||
return $parent->SideBarView();
|
||||
} elseif($this->owner->SideBar()->exists()){
|
||||
} elseif ($this->owner->SideBar()->exists()) {
|
||||
return $this->owner->SideBar();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function onBeforeDuplicate($duplicatePage) {
|
||||
if($this->owner->hasField('SideBarID')) {
|
||||
if ($this->owner->hasField('SideBarID')) {
|
||||
$sideBar = $this->owner->getComponent('SideBar');
|
||||
$duplicateWidgetArea = $sideBar->duplicate();
|
||||
|
||||
foreach($sideBar->Items() as $originalWidget) {
|
||||
foreach ($sideBar->Items() as $originalWidget) {
|
||||
$widget = $originalWidget->duplicate(false);
|
||||
$widget->ParentID = $duplicateWidgetArea->ID;
|
||||
$widget->write();
|
||||
}
|
||||
|
||||
$duplicatePage->SideBarID = $duplicateWidgetArea->ID;
|
||||
|
||||
}
|
||||
|
||||
return $duplicatePage;
|
||||
@ -73,5 +71,4 @@ class WidgetPageExtension extends DataExtension {
|
||||
//reset the sidebar ID
|
||||
$this->owner->SideBarID = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,7 +6,6 @@
|
||||
* @package widgets
|
||||
*/
|
||||
class WidgetAreaEditor extends FormField {
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param array $widgetClasses
|
||||
@ -15,7 +14,7 @@ class WidgetAreaEditor extends FormField {
|
||||
public function __construct($name, $widgetClasses = array('Widget'), $maxWidgets = 0) {
|
||||
$this->MaxWidgets = $maxWidgets;
|
||||
$this->widgetClasses = $widgetClasses;
|
||||
|
||||
|
||||
parent::__construct($name);
|
||||
}
|
||||
|
||||
@ -38,30 +37,28 @@ class WidgetAreaEditor extends FormField {
|
||||
public function AvailableWidgets() {
|
||||
$widgets= new ArrayList();
|
||||
|
||||
foreach($this->widgetClasses as $widgetClass) {
|
||||
foreach ($this->widgetClasses as $widgetClass) {
|
||||
$classes = ClassInfo::subclassesFor($widgetClass);
|
||||
|
||||
if (isset($classes['Widget'])) {
|
||||
unset($classes['Widget']);
|
||||
}
|
||||
else if (isset($classes[0]) && $classes[0] == 'Widget') {
|
||||
unset($classes[0]);
|
||||
if (isset($classes['Widget'])) {
|
||||
unset($classes['Widget']);
|
||||
} elseif (isset($classes[0]) && $classes[0] == 'Widget') {
|
||||
unset($classes[0]);
|
||||
}
|
||||
|
||||
foreach($classes as $class) {
|
||||
|
||||
|
||||
foreach ($classes as $class) {
|
||||
$available = Config::inst()->get($class, 'only_available_in');
|
||||
|
||||
|
||||
if (!empty($available) && is_array($available)) {
|
||||
if(in_array($this->Name, $available)) {
|
||||
if (in_array($this->Name, $available)) {
|
||||
$widgets->push(singleton($class));
|
||||
}
|
||||
}else {
|
||||
} else {
|
||||
$widgets->push(singleton($class));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $widgets;
|
||||
}
|
||||
|
||||
@ -71,7 +68,7 @@ class WidgetAreaEditor extends FormField {
|
||||
public function UsedWidgets() {
|
||||
// Call class_exists() to load Widget.php earlier and avoid a segfault
|
||||
class_exists('Widget');
|
||||
|
||||
|
||||
$relationName = $this->name;
|
||||
$widgets = $this->form->getRecord()->getComponent($relationName)->Items();
|
||||
|
||||
@ -104,49 +101,51 @@ class WidgetAreaEditor extends FormField {
|
||||
|
||||
$widgetarea = $record->getComponent($name);
|
||||
$widgetarea->write();
|
||||
|
||||
|
||||
$record->$idName = $widgetarea->ID;
|
||||
|
||||
|
||||
$widgets = $widgetarea->Items();
|
||||
|
||||
|
||||
// store the field IDs and delete the missing fields
|
||||
// alternatively, we could delete all the fields and re add them
|
||||
$missingWidgets = array();
|
||||
|
||||
if($widgets) {
|
||||
foreach($widgets as $existingWidget) {
|
||||
|
||||
if ($widgets) {
|
||||
foreach ($widgets as $existingWidget) {
|
||||
$missingWidgets[$existingWidget->ID] = $existingWidget;
|
||||
}
|
||||
}
|
||||
|
||||
if(!$this->getForm()) throw new Exception("no form");
|
||||
if (!$this->getForm()) {
|
||||
throw new Exception("no form");
|
||||
}
|
||||
|
||||
$widgetData = $this->getForm()->getRequest()->requestVar('Widget');
|
||||
if($widgetData && isset($widgetData[$this->getName()])) {
|
||||
if ($widgetData && isset($widgetData[$this->getName()])) {
|
||||
$widgetAreaData = $widgetData[$this->getName()];
|
||||
|
||||
foreach($widgetAreaData as $newWidgetID => $newWidgetData) {
|
||||
foreach ($widgetAreaData as $newWidgetID => $newWidgetData) {
|
||||
|
||||
// Sometimes the id is "new-1" or similar, ensure this doesn't get into the query
|
||||
if(!is_numeric($newWidgetID)) {
|
||||
if (!is_numeric($newWidgetID)) {
|
||||
$newWidgetID = 0;
|
||||
}
|
||||
|
||||
$widget = null;
|
||||
if($newWidgetID) {
|
||||
if ($newWidgetID) {
|
||||
// \"ParentID\" = '0' is for the new page
|
||||
$widget = Widget::get()
|
||||
->filter('ParentID', array(0, $record->$name()->ID))
|
||||
->byID($newWidgetID);
|
||||
|
||||
// check if we are updating an existing widget
|
||||
if($widget && isset($missingWidgets[$widget->ID])) {
|
||||
if ($widget && isset($missingWidgets[$widget->ID])) {
|
||||
unset($missingWidgets[$widget->ID]);
|
||||
}
|
||||
}
|
||||
|
||||
// create a new object
|
||||
if(!$widget
|
||||
if (!$widget
|
||||
&& !empty($newWidgetData['Type'])
|
||||
&& class_exists($newWidgetData['Type'])
|
||||
&& is_subclass_of($newWidgetData['Type'], 'Widget')
|
||||
@ -156,8 +155,8 @@ class WidgetAreaEditor extends FormField {
|
||||
$widget->ParentID = $record->$name()->ID;
|
||||
}
|
||||
|
||||
if($widget) {
|
||||
if($widget->ParentID == 0) {
|
||||
if ($widget) {
|
||||
if ($widget->ParentID == 0) {
|
||||
$widget->ParentID = $record->$name()->ID;
|
||||
}
|
||||
|
||||
@ -165,11 +164,11 @@ class WidgetAreaEditor extends FormField {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// remove the fields not saved
|
||||
if($missingWidgets) {
|
||||
foreach($missingWidgets as $removedWidget) {
|
||||
if(isset($removedWidget) && is_numeric($removedWidget->ID)) {
|
||||
if ($missingWidgets) {
|
||||
foreach ($missingWidgets as $removedWidget) {
|
||||
if (isset($removedWidget) && is_numeric($removedWidget->ID)) {
|
||||
$removedWidget->delete();
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +1,16 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Widgets let CMS authors drag and drop small pieces of functionality into
|
||||
* Widgets let CMS authors drag and drop small pieces of functionality into
|
||||
* defined areas of their websites.
|
||||
*
|
||||
*
|
||||
* You can use forms in widgets by implementing a {@link WidgetController}.
|
||||
*
|
||||
*
|
||||
* See {@link Widget_Controller} for more information.
|
||||
*
|
||||
*
|
||||
* @package widgets
|
||||
*/
|
||||
class Widget extends DataObject {
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
@ -35,7 +34,7 @@ class Widget extends DataObject {
|
||||
'CMSTitle' => 'Text',
|
||||
'Description' => 'Text',
|
||||
);
|
||||
|
||||
|
||||
private static $only_available_in = array();
|
||||
|
||||
/**
|
||||
@ -81,10 +80,10 @@ class Widget extends DataObject {
|
||||
parent::populateDefaults();
|
||||
$this->setField('Title', $this->getTitle());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Note: Overloaded in {@link WidgetController}.
|
||||
*
|
||||
*
|
||||
* @return string HTML
|
||||
*/
|
||||
public function WidgetHolder() {
|
||||
@ -95,22 +94,22 @@ class Widget extends DataObject {
|
||||
* Default way to render widget in templates.
|
||||
* @return string HTML
|
||||
*/
|
||||
public function forTemplate($holder = true){
|
||||
if($holder){
|
||||
public function forTemplate($holder = true) {
|
||||
if ($holder) {
|
||||
return $this->WidgetHolder();
|
||||
}
|
||||
return $this->Content();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Renders the widget content in a custom template with the same name as the
|
||||
* Renders the widget content in a custom template with the same name as the
|
||||
* current class. This should be the main point of output customization.
|
||||
*
|
||||
* Invoked from within WidgetHolder.ss, which contains the "framing" around
|
||||
*
|
||||
* Invoked from within WidgetHolder.ss, which contains the "framing" around
|
||||
* the custom content, like a title.
|
||||
*
|
||||
*
|
||||
* Note: Overloaded in {@link WidgetController}.
|
||||
*
|
||||
*
|
||||
* @return string HTML
|
||||
*/
|
||||
public function Content() {
|
||||
@ -169,16 +168,16 @@ class Widget extends DataObject {
|
||||
* @return string - HTML
|
||||
*/
|
||||
public function DescriptionSegment() {
|
||||
return $this->renderWith('WidgetDescription');
|
||||
return $this->renderWith('WidgetDescription');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see WidgetController::editablesegment()
|
||||
*
|
||||
* @return string - HTML
|
||||
*/
|
||||
public function EditableSegment() {
|
||||
return $this->renderWith('WidgetEditor');
|
||||
return $this->renderWith('WidgetEditor');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -192,7 +191,7 @@ class Widget extends DataObject {
|
||||
$this->extend('updateCMSFields', $fields);
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
*/
|
||||
@ -200,7 +199,7 @@ class Widget extends DataObject {
|
||||
$fields = $this->getCMSFields();
|
||||
$outputFields = new FieldList();
|
||||
|
||||
foreach($fields as $field) {
|
||||
foreach ($fields as $field) {
|
||||
$name = $field->getName();
|
||||
$value = $this->getField($name);
|
||||
if ($value) {
|
||||
@ -234,25 +233,25 @@ class Widget extends DataObject {
|
||||
* @return WidgetController
|
||||
*/
|
||||
public function getController() {
|
||||
if($this->controller) {
|
||||
if ($this->controller) {
|
||||
return $this->controller;
|
||||
}
|
||||
|
||||
foreach(array_reverse(ClassInfo::ancestry($this->class)) as $widgetClass) {
|
||||
foreach (array_reverse(ClassInfo::ancestry($this->class)) as $widgetClass) {
|
||||
$controllerClass = "{$widgetClass}_Controller";
|
||||
|
||||
if(class_exists($controllerClass)) {
|
||||
|
||||
if (class_exists($controllerClass)) {
|
||||
break;
|
||||
}
|
||||
|
||||
$controllerClass = "{$widgetClass}Controller";
|
||||
|
||||
if(class_exists($controllerClass)) {
|
||||
|
||||
if (class_exists($controllerClass)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!class_exists($controllerClass)) {
|
||||
if (!class_exists($controllerClass)) {
|
||||
throw new Exception("Could not find controller class for $this->classname");
|
||||
}
|
||||
|
||||
@ -260,37 +259,35 @@ class Widget extends DataObject {
|
||||
|
||||
return $this->controller;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
*/
|
||||
public function populateFromPostData($data) {
|
||||
$fields = $this->getCMSFields();
|
||||
foreach($data as $name => $value) {
|
||||
if($name != "Type") {
|
||||
foreach ($data as $name => $value) {
|
||||
if ($name != "Type") {
|
||||
if ($field = $fields->dataFieldByName($name)) {
|
||||
$field->setValue($value);
|
||||
$field->saveInto($this);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$this->setField($name, $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Look for checkbox fields not present in the data
|
||||
foreach($fields as $field) {
|
||||
if($field instanceof CheckboxField && !array_key_exists($field->getName(), $data)) {
|
||||
foreach ($fields as $field) {
|
||||
if ($field instanceof CheckboxField && !array_key_exists($field->getName(), $data)) {
|
||||
$field->setValue(false);
|
||||
$field->saveInto($this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$this->write();
|
||||
|
||||
|
||||
// The field must be written to ensure a unique ID.
|
||||
$this->Name = $this->class.$this->ID;
|
||||
$this->write();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,6 @@
|
||||
* @package widgets
|
||||
*/
|
||||
class WidgetArea extends DataObject {
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
@ -19,18 +18,18 @@ class WidgetArea extends DataObject {
|
||||
* @var string
|
||||
*/
|
||||
public $template = __CLASS__;
|
||||
|
||||
|
||||
/**
|
||||
* Used in template instead of {@link Widgets()} to wrap each widget in its
|
||||
* controller, making it easier to access and process form logic and
|
||||
* Used in template instead of {@link Widgets()} to wrap each widget in its
|
||||
* controller, making it easier to access and process form logic and
|
||||
* actions stored in {@link WidgetController}.
|
||||
*
|
||||
*
|
||||
* @return SS_List - Collection of {@link WidgetController} instances.
|
||||
*/
|
||||
public function WidgetControllers() {
|
||||
$controllers = new ArrayList();
|
||||
|
||||
foreach($this->ItemsToRender() as $widget) {
|
||||
foreach ($this->ItemsToRender() as $widget) {
|
||||
$controller = $widget->getController();
|
||||
|
||||
$controller->init();
|
||||
@ -59,7 +58,7 @@ class WidgetArea extends DataObject {
|
||||
* @return string - HTML
|
||||
*/
|
||||
public function forTemplate() {
|
||||
return $this->renderWith($this->template);
|
||||
return $this->renderWith($this->template);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -75,9 +74,8 @@ class WidgetArea extends DataObject {
|
||||
*/
|
||||
public function onBeforeDelete() {
|
||||
parent::onBeforeDelete();
|
||||
foreach($this->Widgets() as $widget) {
|
||||
foreach ($this->Widgets() as $widget) {
|
||||
$widget->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
'WidgetAreaEditorTest_FakePage',
|
||||
'WidgetAreaEditorTest_TestWidget',
|
||||
);
|
||||
|
||||
|
||||
protected $usesDatabase = true;
|
||||
|
||||
protected $requiredExtensions = array(
|
||||
@ -21,8 +21,8 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
"WidgetPageExtension"
|
||||
)
|
||||
);
|
||||
|
||||
function testFillingOneArea() {
|
||||
|
||||
public function testFillingOneArea() {
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
'BottomBar' => array(
|
||||
@ -35,12 +35,12 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
)
|
||||
);
|
||||
$request = new SS_HTTPRequest('get', 'post', array(), $data);
|
||||
|
||||
|
||||
$editorSide = new WidgetAreaEditor('SideBar');
|
||||
$editorBott = new WidgetAreaEditor('BottomBar');
|
||||
$form = new Form(new ContentController(), 'Form', new FieldList($editorSide, $editorBott), new FieldList());
|
||||
$form->setRequest($request);
|
||||
|
||||
|
||||
$page = new WidgetAreaEditorTest_FakePage();
|
||||
|
||||
$form->saveInto($page);
|
||||
@ -53,7 +53,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$this->assertEquals($page->SideBar()->Widgets()->Count(), 0);
|
||||
}
|
||||
|
||||
function testFillingTwoAreas() {
|
||||
public function testFillingTwoAreas() {
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
'SideBar' => array(
|
||||
@ -73,7 +73,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
)
|
||||
);
|
||||
$request = new SS_HTTPRequest('get', 'post', array(), $data);
|
||||
|
||||
|
||||
$editorSide = new WidgetAreaEditor('SideBar');
|
||||
$editorBott = new WidgetAreaEditor('BottomBar');
|
||||
$form = new Form(new ContentController(), 'Form', new FieldList($editorSide, $editorBott), new FieldList());
|
||||
@ -85,18 +85,18 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$page->flushCache();
|
||||
$page->BottomBar()->flushCache();
|
||||
$page->SideBar()->flushCache();
|
||||
|
||||
|
||||
// Make sure they both got saved
|
||||
$this->assertEquals($page->BottomBar()->Widgets()->Count(), 1);
|
||||
$this->assertEquals($page->SideBar()->Widgets()->Count(), 1);
|
||||
|
||||
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
$this->assertEquals($sideWidgets[0]->Title(), 'MyTestWidgetSide');
|
||||
$this->assertEquals($bottWidgets[0]->Title(), 'MyTestWidgetBottom');
|
||||
}
|
||||
|
||||
function testDeletingOneWidgetFromOneArea() {
|
||||
|
||||
public function testDeletingOneWidgetFromOneArea() {
|
||||
// First get some widgets in there
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
@ -117,7 +117,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
)
|
||||
);
|
||||
$request = new SS_HTTPRequest('get', 'post', array(), $data);
|
||||
|
||||
|
||||
$editorSide = new WidgetAreaEditor('SideBar');
|
||||
$editorBott = new WidgetAreaEditor('BottomBar');
|
||||
$form = new Form(new ContentController(), 'Form', new FieldList($editorSide, $editorBott), new FieldList());
|
||||
@ -131,7 +131,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$page->SideBar()->flushCache();
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
|
||||
|
||||
// Save again (after removing the SideBar's widget)
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
@ -156,13 +156,13 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$page->SideBar()->flushCache();
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
|
||||
|
||||
$this->assertEquals($page->BottomBar()->Widgets()->Count(), 1);
|
||||
$this->assertEquals($bottWidgets[0]->Title(), 'MyTestWidgetBottom');
|
||||
$this->assertEquals($page->SideBar()->Widgets()->Count(), 0);
|
||||
}
|
||||
|
||||
function testDeletingAWidgetFromEachArea() {
|
||||
public function testDeletingAWidgetFromEachArea() {
|
||||
// First get some widgets in there
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
@ -183,7 +183,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
)
|
||||
);
|
||||
$request = new SS_HTTPRequest('get', 'post', array(), $data);
|
||||
|
||||
|
||||
$editorSide = new WidgetAreaEditor('SideBar');
|
||||
$editorBott = new WidgetAreaEditor('BottomBar');
|
||||
$form = new Form(new ContentController(), 'Form', new FieldList($editorSide, $editorBott), new FieldList());
|
||||
@ -197,7 +197,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$page->SideBar()->flushCache();
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
|
||||
|
||||
// Save again (after removing the SideBar's widget)
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
@ -210,19 +210,19 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$request = new SS_HTTPRequest('get', 'post', array(), $data);
|
||||
$form->setRequest($request);
|
||||
$form->saveInto($page);
|
||||
|
||||
|
||||
$page->write();
|
||||
$page->flushCache();
|
||||
$page->BottomBar()->flushCache();
|
||||
$page->SideBar()->flushCache();
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
|
||||
|
||||
$this->assertEquals($page->BottomBar()->Widgets()->Count(), 0);
|
||||
$this->assertEquals($page->SideBar()->Widgets()->Count(), 0);
|
||||
}
|
||||
|
||||
function testEditingOneWidget() {
|
||||
|
||||
public function testEditingOneWidget() {
|
||||
// First get some widgets in there
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
@ -243,7 +243,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
)
|
||||
);
|
||||
$request = new SS_HTTPRequest('get', 'post', array(), $data);
|
||||
|
||||
|
||||
$editorSide = new WidgetAreaEditor('SideBar');
|
||||
$editorBott = new WidgetAreaEditor('BottomBar');
|
||||
$form = new Form(new ContentController(), 'Form', new FieldList($editorSide, $editorBott), new FieldList());
|
||||
@ -257,7 +257,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$page->SideBar()->flushCache();
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
|
||||
|
||||
// Save again (after removing the SideBar's widget)
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
@ -287,14 +287,14 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$page->SideBar()->flushCache();
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
|
||||
|
||||
$this->assertEquals($page->BottomBar()->Widgets()->Count(), 1);
|
||||
$this->assertEquals($page->SideBar()->Widgets()->Count(), 1);
|
||||
$this->assertEquals($bottWidgets[0]->Title(), 'MyTestWidgetBottom');
|
||||
$this->assertEquals($sideWidgets[0]->Title(), 'MyTestWidgetSide-edited');
|
||||
}
|
||||
|
||||
function testEditingAWidgetFromEachArea() {
|
||||
public function testEditingAWidgetFromEachArea() {
|
||||
// First get some widgets in there
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
@ -315,7 +315,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
)
|
||||
);
|
||||
$request = new SS_HTTPRequest('get', 'post', array(), $data);
|
||||
|
||||
|
||||
$editorSide = new WidgetAreaEditor('SideBar');
|
||||
$editorBott = new WidgetAreaEditor('BottomBar');
|
||||
$form = new Form(new ContentController(), 'Form', new FieldList($editorSide, $editorBott), new FieldList());
|
||||
@ -329,7 +329,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$page->SideBar()->flushCache();
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
|
||||
|
||||
// Save again (after removing the SideBar's widget)
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
@ -359,14 +359,14 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$page->SideBar()->flushCache();
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
|
||||
|
||||
$this->assertEquals($page->BottomBar()->Widgets()->Count(), 1);
|
||||
$this->assertEquals($page->SideBar()->Widgets()->Count(), 1);
|
||||
$this->assertEquals($bottWidgets[0]->Title(), 'MyTestWidgetBottom-edited');
|
||||
$this->assertEquals($sideWidgets[0]->Title(), 'MyTestWidgetSide-edited');
|
||||
}
|
||||
|
||||
function testEditAWidgetFromOneAreaAndDeleteAWidgetFromAnotherArea() {
|
||||
|
||||
public function testEditAWidgetFromOneAreaAndDeleteAWidgetFromAnotherArea() {
|
||||
// First get some widgets in there
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
@ -387,7 +387,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
)
|
||||
);
|
||||
$request = new SS_HTTPRequest('get', 'post', array(), $data);
|
||||
|
||||
|
||||
$editorSide = new WidgetAreaEditor('SideBar');
|
||||
$editorBott = new WidgetAreaEditor('BottomBar');
|
||||
$form = new Form(new ContentController(), 'Form', new FieldList($editorSide, $editorBott), new FieldList());
|
||||
@ -402,7 +402,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$page->SideBar()->flushCache();
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
|
||||
|
||||
// Save again (after removing the SideBar's widget)
|
||||
$data = array(
|
||||
'Widget' => array(
|
||||
@ -427,7 +427,7 @@ class WidgetAreaEditorTest extends SapphireTest {
|
||||
$page->SideBar()->flushCache();
|
||||
$sideWidgets = $page->SideBar()->Widgets()->toArray();
|
||||
$bottWidgets = $page->BottomBar()->Widgets()->toArray();
|
||||
|
||||
|
||||
$this->assertEquals($page->BottomBar()->Widgets()->Count(), 0);
|
||||
$this->assertEquals($page->SideBar()->Widgets()->Count(), 1);
|
||||
$this->assertEquals($sideWidgets[0]->Title(), 'MyTestWidgetSide-edited');
|
||||
|
@ -4,46 +4,45 @@
|
||||
* @subpackage tests
|
||||
*/
|
||||
class WidgetControllerTest extends FunctionalTest {
|
||||
|
||||
protected static $fixture_file = 'WidgetControllerTest.yml';
|
||||
|
||||
protected $extraDataObjects = array(
|
||||
'WidgetControllerTestPage',
|
||||
'WidgetControllerTest_Widget',
|
||||
);
|
||||
|
||||
function testWidgetFormRendering() {
|
||||
|
||||
public function testWidgetFormRendering() {
|
||||
$page = $this->objFromFixture('WidgetControllerTestPage', 'page1');
|
||||
$page->publish('Stage', 'Live');
|
||||
|
||||
|
||||
$widget = $this->objFromFixture('WidgetControllerTest_Widget', 'widget1');
|
||||
|
||||
|
||||
$response = $this->get($page->URLSegment);
|
||||
|
||||
|
||||
$formAction = sprintf('%s/widget/%d/Form', $page->URLSegment, $widget->ID);
|
||||
$this->assertContains(
|
||||
$formAction,
|
||||
$formAction,
|
||||
$response->getBody(),
|
||||
"Widget forms are rendered through WidgetArea templates"
|
||||
);
|
||||
}
|
||||
|
||||
function testWidgetFormSubmission() {
|
||||
|
||||
public function testWidgetFormSubmission() {
|
||||
$page = $this->objFromFixture('WidgetControllerTestPage', 'page1');
|
||||
$page->publish('Stage', 'Live');
|
||||
|
||||
|
||||
$widget = $this->objFromFixture('WidgetControllerTest_Widget', 'widget1');
|
||||
|
||||
|
||||
$response = $this->get($page->URLSegment);
|
||||
$response = $this->submitForm('Form_Form', null, array('TestValue'=>'Updated'));
|
||||
|
||||
$this->assertContains(
|
||||
'TestValue: Updated',
|
||||
'TestValue: Updated',
|
||||
$response->getBody(),
|
||||
"Form values are submitted to correct widget form"
|
||||
);
|
||||
$this->assertContains(
|
||||
sprintf('Widget ID: %d', $widget->ID),
|
||||
sprintf('Widget ID: %d', $widget->ID),
|
||||
$response->getBody(),
|
||||
"Widget form acts on correct widget, as identified in the URL"
|
||||
);
|
||||
@ -64,19 +63,19 @@ class WidgetControllerTest_Widget extends Widget implements TestOnly {
|
||||
* @package widgets
|
||||
* @subpackage tests
|
||||
*/
|
||||
class WidgetControllerTest_WidgetController extends WidgetController implements TestOnly {
|
||||
|
||||
class WidgetControllerTest_WidgetController extends WidgetController implements TestOnly
|
||||
{
|
||||
private static $allowed_actions = array(
|
||||
'Form'
|
||||
);
|
||||
|
||||
function Form() {
|
||||
public function Form() {
|
||||
$widgetform = new Form(
|
||||
$this,
|
||||
'Form',
|
||||
$this,
|
||||
'Form',
|
||||
new FieldList(
|
||||
new TextField('TestValue')
|
||||
),
|
||||
),
|
||||
new FieldList(
|
||||
new FormAction('doAction')
|
||||
)
|
||||
@ -84,8 +83,8 @@ class WidgetControllerTest_WidgetController extends WidgetController implements
|
||||
|
||||
return $widgetform;
|
||||
}
|
||||
|
||||
function doAction($data, $form) {
|
||||
|
||||
public function doAction($data, $form) {
|
||||
return sprintf('TestValue: %s\nWidget ID: %d',
|
||||
$data['TestValue'],
|
||||
$this->widget->ID
|
||||
|
@ -14,14 +14,13 @@ class WidgetControllerTestPage extends Page implements TestOnly {
|
||||
* @subpackage tests
|
||||
*/
|
||||
class WidgetControllerTestPage_Controller extends Page_Controller implements TestOnly {
|
||||
|
||||
/**
|
||||
* Template selection doesnt work in test folders,
|
||||
* so we enforce a template name.
|
||||
*/
|
||||
function getViewer($action) {
|
||||
public function getViewer($action) {
|
||||
$templates = array('WidgetControllerTestPage');
|
||||
|
||||
|
||||
return new SSViewer($templates);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user