From 681f2de05ae93e6fa2dfd85ce58f4b4e9d0e17d7 Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Mon, 14 Aug 2017 12:40:02 +0200 Subject: [PATCH] ObjectPreview: move rendering logic to a... ...dedicated class --- .../Web/Controller/ObjectController.php | 71 ------------- library/Director/Web/ObjectPreview.php | 99 +++++++++++++++++++ 2 files changed, 99 insertions(+), 71 deletions(-) create mode 100644 library/Director/Web/ObjectPreview.php diff --git a/library/Director/Web/Controller/ObjectController.php b/library/Director/Web/Controller/ObjectController.php index cb624f3d..a409d61a 100644 --- a/library/Director/Web/Controller/ObjectController.php +++ b/library/Director/Web/Controller/ObjectController.php @@ -69,77 +69,6 @@ abstract class ObjectController extends ActionController $this->editAction(); } - public function renderAction() - { - $this->assertPermission('director/showconfig'); - $this->tabs()->activate('render'); - $object = $this->requireObject(); - $this->addTitle( - $this->translate('Config preview: %s'), - $object->getObjectName() - ); - - if ($this->params->shift('resolved')) { - $object = $object::fromPlainObject( - $object->toPlainObject(true), - $object->getConnection() - ); - - $this->actions()->add(Link::create( - $this->translate('Show normal'), - $this->getRequest()->getUrl()->without('resolved'), - null, - ['class' => 'icon-resize-small state-warning'] - )); - } else { - try { - if ($object->supportsImports() && $object->imports()->count() > 0) { - $this->actions()->add(Link::create( - $this->translate('Show resolved'), - $this->getRequest()->getUrl()->with('resolved', true), - null, - ['class' => 'icon-resize-full'] - )); - } - } catch (NestingError $e) { - // No resolve link with nesting errors - } - } - - $content = $this->content(); - if ($object->isDisabled()) { - $content->add(Html::p( - ['class' => 'error'], - $this->translate('This object will not be deployed as it has been disabled') - )); - } - if ($object->isExternal()) { - $content->add(Html::p($this->translate(( - 'This is an external object. It has been imported from Icinga 2 through the' - . ' Core API and cannot be managed with the Icinga Director. It is however' - . ' perfectly valid to create objects using this or referring to this object.' - . ' You might also want to define related Fields to make work based on this' - . ' object more enjoyable.' - )))); - } - $config = $object->toSingleIcingaConfig(); - - foreach ($config->getFiles() as $filename => $file) { - if (! $object->isExternal()) { - $content->add(Html::h2($filename)); - } - - $classes = array(); - if ($object->isDisabled()) { - $classes[] = 'disabled'; - } elseif ($object->isExternal()) { - $classes[] = 'logfile'; - } - - $content->add(Html::pre(['class' => $classes], $file->getContent())); - } - } - public function editAction() { $type = $this->getType(); diff --git a/library/Director/Web/ObjectPreview.php b/library/Director/Web/ObjectPreview.php new file mode 100644 index 00000000..dc089745 --- /dev/null +++ b/library/Director/Web/ObjectPreview.php @@ -0,0 +1,99 @@ +object = $object; + $this->request = $request; + } + + public function renderTo(ControlsAndContent $cc) + { + $object = $this->object; + $url = $this->request->getUrl(); + $params = $url->getParams(); + $cc->addTitle( + $this->translate('Config preview: %s'), + $object->getObjectName() + ); + + if ($params->shift('resolved')) { + $object = $object::fromPlainObject( + $object->toPlainObject(true), + $object->getConnection() + ); + + $cc->actions()->add(Link::create( + $this->translate('Show normal'), + $url->without('resolved'), + null, + ['class' => 'icon-resize-small state-warning'] + )); + } else { + try { + if ($object->supportsImports() && $object->imports()->count() > 0) { + $cc->actions()->add(Link::create( + $this->translate('Show resolved'), + $url->with('resolved', true), + null, + ['class' => 'icon-resize-full'] + )); + } + } catch (NestingError $e) { + // No resolve link with nesting errors + } + } + + $content = $cc->content(); + if ($object->isDisabled()) { + $content->add(Html::p( + ['class' => 'error'], + $this->translate('This object will not be deployed as it has been disabled') + )); + } + if ($object->isExternal()) { + $content->add(Html::p($this->translate(( + 'This is an external object. It has been imported from Icinga 2 through the' + . ' Core API and cannot be managed with the Icinga Director. It is however' + . ' perfectly valid to create objects using this or referring to this object.' + . ' You might also want to define related Fields to make work based on this' + . ' object more enjoyable.' + )))); + } + $config = $object->toSingleIcingaConfig(); + + foreach ($config->getFiles() as $filename => $file) { + if (! $object->isExternal()) { + $content->add(Html::h2($filename)); + } + + $classes = array(); + if ($object->isDisabled()) { + $classes[] = 'disabled'; + } elseif ($object->isExternal()) { + $classes[] = 'logfile'; + } + + $content->add(Html::pre(['class' => $classes], $file->getContent())); + } + } +}