diff options
Diffstat (limited to 'library/Director/Web/Table/SyncRunTable.php')
-rw-r--r-- | library/Director/Web/Table/SyncRunTable.php | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/library/Director/Web/Table/SyncRunTable.php b/library/Director/Web/Table/SyncRunTable.php new file mode 100644 index 0000000..e08aad7 --- /dev/null +++ b/library/Director/Web/Table/SyncRunTable.php @@ -0,0 +1,90 @@ +<?php + +namespace Icinga\Module\Director\Web\Table; + +use gipfl\Format\LocalTimeFormat; +use Icinga\Module\Director\Objects\SyncRule; +use gipfl\IcingaWeb2\Link; +use gipfl\IcingaWeb2\Table\ZfQueryBasedTable; + +class SyncRunTable extends ZfQueryBasedTable +{ + /** @var SyncRule */ + protected $rule; + + protected $timeFormat; + + public function __construct(SyncRule $rule) + { + parent::__construct($rule->getConnection()); + $this->timeFormat = new LocalTimeFormat(); + $this->getAttributes() + ->set('data-base-target', '_self') + ->add('class', 'history'); + $this->rule = $rule; + } + + public function renderRow($row) + { + $time = strtotime($row->start_time); + $this->renderDayIfNew($time); + return $this::tr([ + $this::td($this->makeSummary($row)), + $this::td(new Link( + $this->timeFormat->getTime($time), + 'director/syncrule/history', + [ + 'id' => $row->rule_id, + 'run_id' => $row->id, + ] + )) + ]); + } + + protected function makeSummary($row) + { + $parts = []; + if ($row->objects_created > 0) { + $parts[] = sprintf( + $this->translate('%d created'), + $row->objects_created + ); + } + if ($row->objects_modified > 0) { + $parts[] = sprintf( + $this->translate('%d modified'), + $row->objects_modified + ); + } + if ($row->objects_deleted > 0) { + $parts[] = sprintf( + $this->translate('%d deleted'), + $row->objects_deleted + ); + } + + return implode(', ', $parts); + } + + public function prepareQuery() + { + return $this->db()->select()->from( + array('sr' => 'sync_run'), + [ + 'id' => 'sr.id', + 'rule_id' => 'sr.rule_id', + 'rule_name' => 'sr.rule_name', + 'start_time' => 'sr.start_time', + 'duration_ms' => 'sr.duration_ms', + 'objects_deleted' => 'sr.objects_deleted', + 'objects_created' => 'sr.objects_created', + 'objects_modified' => 'sr.objects_modified', + 'last_former_activity' => 'sr.last_former_activity', + 'last_related_activity' => 'sr.last_related_activity', + ] + )->where( + 'sr.rule_id = ?', + $this->rule->get('id') + )->order('start_time DESC'); + } +} |