From be334571f1120b37a9b885c9e1bec7aa0f85cb9a Mon Sep 17 00:00:00 2001 From: Tony Air Date: Thu, 4 Jan 2024 14:14:18 +0200 Subject: [PATCH] FIX: Broken widgets (sidebar) --- src/Tasks/BrokenSidebarTask.php | 47 +++++++++++++++++++++++++++++ src/Widgets/WidgetPageExtension.php | 12 +++++--- 2 files changed, 55 insertions(+), 4 deletions(-) create mode 100755 src/Tasks/BrokenSidebarTask.php diff --git a/src/Tasks/BrokenSidebarTask.php b/src/Tasks/BrokenSidebarTask.php new file mode 100755 index 0000000..504f760 --- /dev/null +++ b/src/Tasks/BrokenSidebarTask.php @@ -0,0 +1,47 @@ +map('ID', 'SideBarID')->toArray()); + + // delete orphaned widgets areas + $items = WidgetArea::get()->exclude('ID', $wIDs); + foreach ($items as $i) { + $i->delete(); + } + + // reset empty widget areas + foreach ($pages as $p) { + $w = $p->Sidebar(); + if (!$w->ID) { + $p->setField('SideBarID', '0'); + $p->write(); + + continue; + } + + $widgets = $w->Widgets(); + + if (!$widgets->count()) { + $w->delete(); + $p->setField('SideBarID', '0'); + $p->write(); + } + } + + die('Done!'); + } +} diff --git a/src/Widgets/WidgetPageExtension.php b/src/Widgets/WidgetPageExtension.php index bf4d890..81de266 100755 --- a/src/Widgets/WidgetPageExtension.php +++ b/src/Widgets/WidgetPageExtension.php @@ -1,10 +1,10 @@ getCMSTitle(); } + $w = $this->owner->Sidebar(); $tab->push(WidgetAreaField::create( 'SideBar', - $this->owner->Sidebar(), + $w, $available )); } @@ -44,11 +45,14 @@ class WidgetPageExtension extends \SilverStripe\Widgets\Extensions\WidgetPageExt { parent::onBeforeWrite(); - if (!$this->owner->getField('SideBarID')) { + $obj = $this->owner; + $w = $obj->SideBar(); + + if (!$w->ID || !$obj->getField('SideBarID')) { $area = WidgetArea::create(); $area->write(); - $this->owner->setField('SideBarID', $area->ID); + $obj->setField('SideBarID', $area->ID); } } }