From bf9fbe3aa790620df7ac264927b1cd2a38212276 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Wed, 13 Dec 2017 23:03:12 +1300 Subject: [PATCH] FIX Ensure namespaced widget classes are handled and Widget is not included --- src/Controllers/WidgetController.php | 6 +----- src/Extensions/WidgetPageExtension.php | 9 --------- src/Forms/WidgetAreaEditor.php | 11 ++++++++--- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/Controllers/WidgetController.php b/src/Controllers/WidgetController.php index 06cf8bc..be09e7a 100644 --- a/src/Controllers/WidgetController.php +++ b/src/Controllers/WidgetController.php @@ -135,15 +135,11 @@ class WidgetController extends Controller { // use left and main to set the html config $leftandmain = LeftAndMain::create(); + $leftandmain->setRequest($this->getRequest()); $leftandmain->doInit(); // Decode if fully qualified - @see Widget::ClassName $className = str_replace('_', '\\', $this->urlParams['ID']); - if (class_exists('Translatable') && Member::currentUserID()) { - // set current locale based on logged in user's locale - $locale = Member::currentUser()->Locale; - i18n::set_locale($locale); - } if (class_exists($className) && is_subclass_of($className, Widget::class)) { $obj = new $className(); return $obj->EditableSegment(); diff --git a/src/Extensions/WidgetPageExtension.php b/src/Extensions/WidgetPageExtension.php index 2734959..d8603c8 100644 --- a/src/Extensions/WidgetPageExtension.php +++ b/src/Extensions/WidgetPageExtension.php @@ -75,13 +75,4 @@ class WidgetPageExtension extends DataExtension return $duplicatePage; } - - /** - * Support Translatable so that we don't link WidgetAreas across translations - */ - public function onTranslatableCreate() - { - //reset the sidebar ID - $this->owner->SideBarID = 0; - } } diff --git a/src/Forms/WidgetAreaEditor.php b/src/Forms/WidgetAreaEditor.php index ff22b83..9a6321d 100644 --- a/src/Forms/WidgetAreaEditor.php +++ b/src/Forms/WidgetAreaEditor.php @@ -10,7 +10,6 @@ use SilverStripe\Forms\FormField; use SilverStripe\ORM\ArrayList; use SilverStripe\ORM\DataObjectInterface; use SilverStripe\View\Requirements; -use SilverStripe\Widgets\Forms\WidgetAreaEditor; use SilverStripe\Widgets\Model\Widget; /** @@ -57,8 +56,8 @@ class WidgetAreaEditor extends FormField foreach ($this->widgetClasses as $widgetClass) { $classes = ClassInfo::subclassesFor($widgetClass); - if (isset($classes[Widget::class])) { - unset($classes[Widget::class]); + if (isset($classes[strtolower(Widget::class)])) { + unset($classes[strtolower(Widget::class)]); } elseif (isset($classes[0]) && $classes[0] == Widget::class) { unset($classes[0]); } @@ -165,6 +164,12 @@ class WidgetAreaEditor extends FormField } } + // unsantise the class name + if (empty($newWidgetData['Type'])) { + $newWidgetData['Type'] = ''; + } + $newWidgetData['Type'] = str_replace('_', '\\', $newWidgetData['Type']); + // create a new object if (!$widget && !empty($newWidgetData['Type'])