From 3f2a2fa984c0e53d17d72670450f0ee3d37a6f19 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Tue, 25 Jun 2019 09:08:04 +0200 Subject: [PATCH] Action: Only create an `Url` object once macros are resolved refs #3829 --- .../Monitoring/Web/Navigation/Action.php | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/modules/monitoring/library/Monitoring/Web/Navigation/Action.php b/modules/monitoring/library/Monitoring/Web/Navigation/Action.php index 28266e8f9..4360c122c 100644 --- a/modules/monitoring/library/Monitoring/Web/Navigation/Action.php +++ b/modules/monitoring/library/Monitoring/Web/Navigation/Action.php @@ -7,6 +7,7 @@ use Icinga\Data\Filter\Filter; use Icinga\Web\Navigation\NavigationItem; use Icinga\Module\Monitoring\Object\Macro; use Icinga\Module\Monitoring\Object\MonitoredObject; +use Icinga\Web\Url; /** * Action for monitored objects @@ -34,6 +35,13 @@ class Action extends NavigationItem */ protected $filter; + /** + * This action's raw url attribute + * + * @var string + */ + protected $rawUrl; + /** * Set this action's object * @@ -80,14 +88,22 @@ class Action extends NavigationItem return $this->filter; } - /** - * {@inheritdoc} - */ + public function setUrl($url) + { + if (is_string($url)) { + $this->rawUrl = $url; + } else { + parent::setUrl($url); + } + + return $this; + } + public function getUrl() { $url = parent::getUrl(); - if (! $this->resolved && $url !== null) { - $this->setUrl(Macro::resolveMacros($url->getAbsoluteUrl(), $this->getObject())); + if (! $this->resolved && $url === null) { + $this->setUrl(Url::fromPath(Macro::resolveMacros($this->rawUrl, $this->getObject()))); $this->resolved = true; return parent::getUrl(); } else { @@ -95,9 +111,6 @@ class Action extends NavigationItem } } - /** - * {@inheritdoc} - */ public function getRender() { if ($this->render === null) {