From c2ee3bef0644e372a5e1f781511b88f130f07599 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Wed, 20 Sep 2017 14:49:08 +0200 Subject: [PATCH 1/2] DetailviewExtensionHook: provide the concrete implementation's module refs #2949 --- library/Icinga/Application/ClassLoader.php | 4 +- .../Hook/DetailviewExtensionHook.php | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/library/Icinga/Application/ClassLoader.php b/library/Icinga/Application/ClassLoader.php index ce7c57270..33e8bb46e 100644 --- a/library/Icinga/Application/ClassLoader.php +++ b/library/Icinga/Application/ClassLoader.php @@ -174,7 +174,7 @@ class ClassLoader * * @return string */ - protected function extractModuleName($class) + public static function extractModuleName($class) { return lcfirst( substr( @@ -194,7 +194,7 @@ class ClassLoader * * @return boolean */ - protected function classBelongsToModule($class) + public static function classBelongsToModule($class) { return substr($class, 0, self::MODULE_PREFIX_LENGTH) === self::MODULE_PREFIX; } diff --git a/modules/monitoring/library/Monitoring/Hook/DetailviewExtensionHook.php b/modules/monitoring/library/Monitoring/Hook/DetailviewExtensionHook.php index b86573f9c..4704beefd 100644 --- a/modules/monitoring/library/Monitoring/Hook/DetailviewExtensionHook.php +++ b/modules/monitoring/library/Monitoring/Hook/DetailviewExtensionHook.php @@ -3,6 +3,9 @@ namespace Icinga\Module\Monitoring\Hook; +use Icinga\Application\ClassLoader; +use Icinga\Application\Icinga; +use Icinga\Application\Modules\Module; use Icinga\Module\Monitoring\Object\MonitoredObject; use Icinga\Web\View; @@ -20,6 +23,13 @@ abstract class DetailviewExtensionHook */ private $view; + /** + * The module of the derived class + * + * @var Module + */ + private $module; + /** * Create a new hook * @@ -68,4 +78,35 @@ abstract class DetailviewExtensionHook $this->view = $view; return $this; } + + /** + * Get the module of the derived class + * + * @return Module + */ + public function getModule() + { + if ($this->module === null) { + $class = get_class($this); + if (ClassLoader::classBelongsToModule($class)) { + $this->module = Icinga::app()->getModuleManager()->getModule(ClassLoader::extractModuleName($class)); + } + } + + return $this->module; + } + + /** + * Set the module of the derived class + * + * @param Module $module + * + * @return $this + */ + public function setModule(Module $module) + { + $this->module = $module; + + return $this; + } } From 467fc79095f5fcb9a5ea2411535e61c3e7771359 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Thu, 7 Sep 2017 15:11:03 +0200 Subject: [PATCH 2/2] Style monitored objects' detailview extensions as expected refs #2949 --- .../Monitoring/Web/Controller/MonitoredObjectController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/monitoring/library/Monitoring/Web/Controller/MonitoredObjectController.php b/modules/monitoring/library/Monitoring/Web/Controller/MonitoredObjectController.php index 1a12c8131..dd6d33e08 100644 --- a/modules/monitoring/library/Monitoring/Web/Controller/MonitoredObjectController.php +++ b/modules/monitoring/library/Monitoring/Web/Controller/MonitoredObjectController.php @@ -84,7 +84,10 @@ abstract class MonitoredObjectController extends Controller $this->view->extensionsHtml = array(); foreach (Hook::all('Monitoring\DetailviewExtension') as $hook) { /** @var DetailviewExtensionHook $hook */ - $this->view->extensionsHtml[] = $hook->setView($this->view)->getHtmlForObject($this->object); + $this->view->extensionsHtml[] = + '
' + . $hook->setView($this->view)->getHtmlForObject($this->object) + . '
'; } }