summaryrefslogtreecommitdiffstats
path: root/application/controllers/JobController.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--application/controllers/JobController.php117
1 files changed, 117 insertions, 0 deletions
diff --git a/application/controllers/JobController.php b/application/controllers/JobController.php
new file mode 100644
index 0000000..278c96b
--- /dev/null
+++ b/application/controllers/JobController.php
@@ -0,0 +1,117 @@
+<?php
+
+namespace Icinga\Module\Director\Controllers;
+
+use gipfl\IcingaWeb2\Link;
+use Icinga\Module\Director\Forms\DirectorJobForm;
+use Icinga\Module\Director\Web\Controller\ActionController;
+use Icinga\Module\Director\Objects\DirectorJob;
+use Icinga\Module\Director\Web\Controller\BranchHelper;
+use Icinga\Module\Director\Web\Widget\JobDetails;
+
+class JobController extends ActionController
+{
+ use BranchHelper;
+
+ /**
+ * @throws \Icinga\Exception\MissingParameterException
+ * @throws \Icinga\Exception\NotFoundError
+ */
+ public function indexAction()
+ {
+ $this->setAutorefreshInterval(10);
+ $job = $this->requireJob();
+ $this
+ ->addJobTabs($job, 'show')
+ ->addTitle($this->translate('Job: %s'), $job->get('job_name'))
+ ->addToBasketLink()
+ ->content()->add(new JobDetails($job));
+ }
+
+ public function addAction()
+ {
+ $this
+ ->addSingleTab($this->translate('New Job'))
+ ->addTitle($this->translate('Add a new Job'));
+ if ($this->showNotInBranch($this->translate('Creating Jobs'))) {
+ return;
+ }
+
+ $this->content()->add(
+ DirectorJobForm::load()
+ ->setSuccessUrl('director/job')
+ ->setDb($this->db())
+ ->handleRequest()
+ );
+ }
+
+ /**
+ * @throws \Icinga\Exception\MissingParameterException
+ * @throws \Icinga\Exception\NotFoundError
+ */
+ public function editAction()
+ {
+ $job = $this->requireJob();
+ $this
+ ->addJobTabs($job, 'edit')
+ ->addTitle($this->translate('Job: %s'), $job->get('job_name'))
+ ->addToBasketLink();
+ if ($this->showNotInBranch($this->translate('Modifying Jobs'))) {
+ return;
+ }
+
+ $form = DirectorJobForm::load()
+ ->setListUrl('director/jobs')
+ ->setObject($job)
+ ->handleRequest();
+ $this->content()->add($form);
+ }
+
+ /**
+ * @return DirectorJob
+ * @throws \Icinga\Exception\NotFoundError
+ * @throws \Icinga\Exception\MissingParameterException
+ */
+ protected function requireJob()
+ {
+ return DirectorJob::loadWithAutoIncId((int) $this->params->getRequired('id'), $this->db());
+ }
+
+ /**
+ * @return $this
+ * @throws \Icinga\Exception\MissingParameterException
+ * @throws \Icinga\Exception\NotFoundError
+ */
+ protected function addToBasketLink()
+ {
+ $job = $this->requireJob();
+ $this->actions()->add(Link::create(
+ $this->translate('Add to Basket'),
+ 'director/basket/add',
+ [
+ 'type' => 'DirectorJob',
+ 'names' => $job->getUniqueIdentifier()
+ ],
+ ['class' => 'icon-tag']
+ ));
+
+ return $this;
+ }
+
+ protected function addJobTabs(DirectorJob $job, $active)
+ {
+ $id = $job->get('id');
+
+ $this->tabs()->add('show', [
+ 'url' => 'director/job',
+ 'urlParams' => ['id' => $id],
+ 'label' => $this->translate('Job'),
+ ])->add('edit', [
+ 'url' => 'director/job/edit',
+ 'urlParams' => ['id' => $id],
+ 'label' => $this->translate('Config'),
+ ])->activate($active);
+
+ return $this;
+ }
+}