From e7d758d520eb0f309c1ab74403e652bf0db6cda6 Mon Sep 17 00:00:00 2001 From: Jolien Trog Date: Fri, 10 Oct 2025 16:36:33 +0200 Subject: [PATCH] Add simple time period list and detail view shows time period display name --- .../controllers/TimeperiodController.php | 41 ++++++++++++++++--- .../controllers/TimeperiodsController.php | 19 ++++----- configuration.php | 6 +++ .../Widget/Detail/TimePeriodDetailsTable.php | 38 +++++++++++++++++ .../Widget/ItemTable/TimePeriodsTable.php | 13 +++--- 5 files changed, 96 insertions(+), 21 deletions(-) create mode 100644 library/Icingadb/Widget/Detail/TimePeriodDetailsTable.php diff --git a/application/controllers/TimeperiodController.php b/application/controllers/TimeperiodController.php index c2f695c7..3a925348 100644 --- a/application/controllers/TimeperiodController.php +++ b/application/controllers/TimeperiodController.php @@ -1,6 +1,37 @@ -// Controller für details zu einer Timeperiod - +/* Icinga DB Web | (c) 2020 Icinga GmbH | GPLv2 */ + +namespace Icinga\Module\Icingadb\Controllers; + +use Icinga\Module\Icingadb\Widget\Detail\TimePeriodDetailsTable; +use ipl\Stdlib\Filter; +use Icinga\Module\Icingadb\Model\Timeperiod; +use Icinga\Module\Icingadb\Web\Controller; +use Icinga\Module\Icingadb\Widget\ItemTable\TimePeriodsTable; +use ipl\Web\Compat\CompatController; + +class TimeperiodController extends Controller +{ + public function indexAction(): void + { + $this->addTitleTab('Time Period'); + $timePeriodId = $this->params->getRequired('id'); + + $timePeriod = Timeperiod::on($this->getDb()) + ->filter(Filter::equal('id', $timePeriodId)) + ->first(); + +// $query = Timeperiod::on($db); + + $this->addContent(new TimePeriodDetailsTable($timePeriod)); + + } +} + + +// Controller für details zu einer Timeperiod + +//indexAction +// +//Detail; zeigt Display Name oben im Header, Name und Ranges im Content diff --git a/application/controllers/TimeperiodsController.php b/application/controllers/TimeperiodsController.php index 1e9c6d83..f1acded2 100644 --- a/application/controllers/TimeperiodsController.php +++ b/application/controllers/TimeperiodsController.php @@ -1,28 +1,21 @@ -// Controller für alle Timeperiods zeigt Liste - - addTitleTab('Time Periods'); + $db = $this->getDb(); $query = Timeperiod::on($db); @@ -30,6 +23,10 @@ class TimeperiodsController extends CompatController $this->addContent(new TimePeriodsTable($query)); - } } + +// Controller für alle Timeperiods zeigt Liste + +//indexAction +//Liste; zeigt erst mal nur Display Name diff --git a/configuration.php b/configuration.php index 72f04b09..d2de26c4 100644 --- a/configuration.php +++ b/configuration.php @@ -553,6 +553,12 @@ namespace Icinga\Module\Icingadb { 'description' => $this->translate('List history'), 'icon' => 'history' ]); + $section->add(N_('Time Periods'), [ + 'url' => 'icingadb/timeperiods', + 'priority' => 130, + 'description' => $this->translate('List time periods'), + 'icon' => 'clock' + ]); } $this->provideConfigTab('database', [ diff --git a/library/Icingadb/Widget/Detail/TimePeriodDetailsTable.php b/library/Icingadb/Widget/Detail/TimePeriodDetailsTable.php new file mode 100644 index 00000000..7001863c --- /dev/null +++ b/library/Icingadb/Widget/Detail/TimePeriodDetailsTable.php @@ -0,0 +1,38 @@ + 'common-table']; + + protected Model $timePeriod; + + public function __construct(Model $timePeriod) + { + $this->timePeriod = $timePeriod; + } + + protected function assemble(): void + { + $this->getHeader()->addHtml(self::row([ + $this->timePeriod->display_name, + ], null, 'th')); + + $tbody = $this->getBody(); + + $tbody->addHtml(self::row([ + + $this->timePeriod->display_name, + $this->timePeriod->name, + ])); + } +} diff --git a/library/Icingadb/Widget/ItemTable/TimePeriodsTable.php b/library/Icingadb/Widget/ItemTable/TimePeriodsTable.php index 77f11d5d..fae51013 100644 --- a/library/Icingadb/Widget/ItemTable/TimePeriodsTable.php +++ b/library/Icingadb/Widget/ItemTable/TimePeriodsTable.php @@ -8,6 +8,7 @@ use Icinga\Module\Icingadb\Common\DetailActions; use Icinga\Module\Icingadb\Common\Links; use ipl\Html\Html; use ipl\Html\Table; +use ipl\Orm\Query; use ipl\Web\Url; use ipl\Web\Widget\ItemTable; use ipl\Web\Widget\Link; @@ -16,22 +17,24 @@ class TimePeriodsTable extends Table { protected $defaultAttributes = ['class' => 'common-table']; - protected Query $timeperiods; + protected Query $timePeriods; - public function __construct($timeperiods) + public function __construct($timePeriods) { - $this->timeperiods = $timeperiods; + $this->timePeriods = $timePeriods; } protected function assemble() { $tbody = $this->getBody(); - foreach ($this->timeperiods as $timeperiod) { - $displayName = new Link($timeperiod->display_name, Url::fromPath('timeperiods/details', ['id' =>$timeperiod->id])); + + foreach ($this->timePeriods as $timePeriod) { + $displayName = new Link($timePeriod->display_name, Url::fromPath('icingadb/timeperiod/index', ['id' =>$timePeriod->id])); $displayName = Html::tag('strong')->add($displayName->setBaseTarget('_next')); $r = Table::row([ $displayName +// hier muss noch rage rein! ]); $tbody->addHtml($r);