report = Report::fromDb($this->params->getRequired('id')); } public function indexAction() { $this->setTitle($this->report->getName()); $this->addControl($this->assembleActions()); $this->addContent($this->report->toHtml()); } public function editAction() { $this->setTitle('Edit Report'); $values = [ 'name' => $this->report->getName(), 'timeframe' => $this->report->getTimeframe()->getId(), ]; $reportlet = $this->report->getReportlets()[0]; $values['reportlet'] = $reportlet->getClass(); foreach ($reportlet->getConfig() as $name => $value) { $values[$name] = $value; } $form = new ReportForm(); $form->setId($this->report->getId()); $form->populate($values); $form->handleRequest(ServerRequest::fromGlobals()); $this->redirectForm($form, 'reporting/reports'); $this->addContent($form); } public function sendAction() { $this->setTitle('Send Report'); $form = new SendForm(); $form ->setReport($this->report) ->handleRequest(ServerRequest::fromGlobals()); $this->redirectForm($form, "reporting/report?id={$this->report->getId()}"); $this->addContent(new Modal($form)); } public function scheduleAction() { $this->setTitle('Schedule'); $form = new ScheduleForm(); $form ->setReport($this->report) ->handleRequest(ServerRequest::fromGlobals()); $this->redirectForm($form, "reporting/report?id={$this->report->getId()}"); $this->addContent(new Modal($form)); $this->getResponse()->setHeader('X-Icinga-History', 'no', true); } protected function assembleActions() { $reportId = $this->report->getId(); $download = (new DropdownLink('Download')) ->addLink('PDF', Url::fromPath('reporting/report/download?type=pdf', ['id' => $reportId])); $send = (new DropdownLink('Send', 'forward')) ->addLink('PDF', Url::fromPath('reporting/report/send?type=pdf', ['id' => $reportId])); if ($this->report->providesCsv()) { $download->addLink('CSV', Url::fromPath('reporting/report/download?type=csv', ['id' => $reportId])); $send->addLink('CSV', Url::fromPath('reporting/report/send?type=csv', ['id' => $reportId])); } if ($this->report->providesJson()) { $download->addLink('JSON', Url::fromPath('reporting/report/download?type=json', ['id' => $reportId])); $send->addLink('JSON', Url::fromPath('reporting/report/send?type=json', ['id' => $reportId])); } $actions = new ActionBar(); $actions ->addLink('Modify', Url::fromPath('reporting/report/edit', ['id' => $reportId]), 'edit') ->add(new ModalToggle('Schedule', Url::fromPath('reporting/report/schedule', ['id' => $reportId]), 'calendar-empty')) ->add($download) ->addLink('Send', Url::fromPath('reporting/report/send', ['id' => $reportId]), 'forward'); return $actions; } }