From 0bd12cf0e61bfc40000cd0f7dd5fce88cd966da4 Mon Sep 17 00:00:00 2001 From: Oscar Arzola Date: Tue, 30 May 2017 16:49:35 -0500 Subject: [PATCH 1/2] Added Extensibility to ReportWidgets --- modules/backend/classes/WidgetManager.php | 21 +++++++++++- .../backend/classes/WidgetManagerTest.php | 32 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/modules/backend/classes/WidgetManager.php b/modules/backend/classes/WidgetManager.php index 5027b2009..41243304f 100644 --- a/modules/backend/classes/WidgetManager.php +++ b/modules/backend/classes/WidgetManager.php @@ -2,6 +2,7 @@ use Str; use System\Classes\PluginManager; +use Event; /** * Widget manager @@ -188,6 +189,11 @@ class WidgetManager } } + /* + * Extensibility + */ + Event::fire('system.reportwidgets.extendItems', [$this]); + return $this->reportWidgets; } @@ -215,4 +221,17 @@ class WidgetManager { $this->reportWidgetCallbacks[] = $definitions; } -} + + /** + * Removes a single report widget item + */ + public function removeReportWidgetItem($className) + { + if (!$this->reportWidgets) { + throw new SystemException('Unable to remove a widget before widgets are loaded.'); + } + + unset($this->reportWidgets[$className]); + } + +} \ No newline at end of file diff --git a/tests/unit/backend/classes/WidgetManagerTest.php b/tests/unit/backend/classes/WidgetManagerTest.php index 83c0d334e..abdf0061f 100644 --- a/tests/unit/backend/classes/WidgetManagerTest.php +++ b/tests/unit/backend/classes/WidgetManagerTest.php @@ -13,4 +13,36 @@ class WidgetManagerTest extends TestCase $this->assertArrayHasKey('TestVendor\Test\FormWidgets\Sample', $widgets); $this->assertArrayHasKey('October\Tester\FormWidgets\Preview', $widgets); } + + public function testIfWidgetsCanBeExtended() + { + $manager = WidgetManager::instance(); + $manager->registerReportWidget('Acme\Fake\ReportWidget\HelloWorld', [ + 'name' => 'Hello World Test', + 'context' => 'dashboard' + ]); + $widgets = $manager->listReportWidgets(); + + $this->assertArrayHasKey('Acme\Fake\ReportWidget\HelloWorld', $widgets); + } + + public function testIfWidgetsCanBeRemoved() + { + $manager = WidgetManager::instance(); + $manager->registerReportWidget('Acme\Fake\ReportWidget\HelloWorld', [ + 'name' => 'Hello World Test', + 'context' => 'dashboard' + ]); + $manager->registerReportWidget('Acme\Fake\ReportWidget\ByeWorld', [ + 'name' => 'Hello World Bye', + 'context' => 'dashboard' + ]); + + $manager->removeReportWidgetItem('Acme\Fake\ReportWidget\ByeWorld'); + + $widgets = $manager->listReportWidgets(); + + $this->assertCount(1, $widgets); + } + } From a7d20211ae1e889ed60c367265967cadecd30a93 Mon Sep 17 00:00:00 2001 From: Oscar Arzola Date: Fri, 2 Jun 2017 09:51:13 -0500 Subject: [PATCH 2/2] Fixed Formatting and added docblock --- modules/backend/classes/WidgetManager.php | 8 +++++--- tests/unit/backend/classes/WidgetManagerTest.php | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/backend/classes/WidgetManager.php b/modules/backend/classes/WidgetManager.php index 41243304f..6dad9e913 100644 --- a/modules/backend/classes/WidgetManager.php +++ b/modules/backend/classes/WidgetManager.php @@ -223,9 +223,11 @@ class WidgetManager } /** - * Removes a single report widget item + * Remove a registered ReportWidget. + * @param string $className Widget class name. + * @return void */ - public function removeReportWidgetItem($className) + public function removeReportWidget($className) { if (!$this->reportWidgets) { throw new SystemException('Unable to remove a widget before widgets are loaded.'); @@ -234,4 +236,4 @@ class WidgetManager unset($this->reportWidgets[$className]); } -} \ No newline at end of file +} diff --git a/tests/unit/backend/classes/WidgetManagerTest.php b/tests/unit/backend/classes/WidgetManagerTest.php index abdf0061f..5e88096ae 100644 --- a/tests/unit/backend/classes/WidgetManagerTest.php +++ b/tests/unit/backend/classes/WidgetManagerTest.php @@ -38,7 +38,7 @@ class WidgetManagerTest extends TestCase 'context' => 'dashboard' ]); - $manager->removeReportWidgetItem('Acme\Fake\ReportWidget\ByeWorld'); + $manager->removeReportWidget('Acme\Fake\ReportWidget\ByeWorld'); $widgets = $manager->listReportWidgets();