summaryrefslogtreecommitdiffstats
path: root/application/controllers/ReportController.php.modal
diff options
context:
space:
mode:
Diffstat (limited to 'application/controllers/ReportController.php.modal')
-rw-r--r--application/controllers/ReportController.php.modal126
1 files changed, 126 insertions, 0 deletions
diff --git a/application/controllers/ReportController.php.modal b/application/controllers/ReportController.php.modal
new file mode 100644
index 0000000..915bf2b
--- /dev/null
+++ b/application/controllers/ReportController.php.modal
@@ -0,0 +1,126 @@
+<?php
+
+namespace Icinga\Module\Reporting\Controllers;
+
+use GuzzleHttp\Psr7\ServerRequest;
+use Icinga\Module\Reporting\Database;
+use Icinga\Module\Reporting\Report;
+use Icinga\Module\Reporting\Web\Controller;
+use Icinga\Module\Reporting\Web\Forms\ReportForm;
+use Icinga\Module\Reporting\Web\Forms\ScheduleForm;
+use Icinga\Module\Reporting\Web\Forms\SendForm;
+use ipl\Web\Widget\ModalToggle;
+use ipl\Web\Widget\Modal;
+use reportingipl\Web\Url;
+use reportingipl\Web\Widget\ActionBar;
+use reportingipl\Web\Widget\DropdownLink;
+
+class ReportController extends Controller
+{
+ use Database;
+
+ /** @var Report */
+ protected $report;
+
+ public function init()
+ {
+ $this->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;
+ }
+}