summaryrefslogtreecommitdiffstats
path: root/library/Director/Web/Table/ImportedrowsTable.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--library/Director/Web/Table/ImportedrowsTable.php103
1 files changed, 103 insertions, 0 deletions
diff --git a/library/Director/Web/Table/ImportedrowsTable.php b/library/Director/Web/Table/ImportedrowsTable.php
new file mode 100644
index 0000000..d5c9811
--- /dev/null
+++ b/library/Director/Web/Table/ImportedrowsTable.php
@@ -0,0 +1,103 @@
+<?php
+
+namespace Icinga\Module\Director\Web\Table;
+
+use ipl\Html\Html;
+use ipl\Html\ValidHtml;
+use gipfl\IcingaWeb2\Table\SimpleQueryBasedTable;
+use Icinga\Data\DataArray\ArrayDatasource;
+use Icinga\Module\Director\Objects\ImportRun;
+use Icinga\Module\Director\PlainObjectRenderer;
+
+class ImportedrowsTable extends SimpleQueryBasedTable
+{
+ protected $columns;
+
+ /** @var ImportRun */
+ protected $importRun;
+
+ protected $keyColumn;
+
+ public static function load(ImportRun $run)
+ {
+ $table = new static();
+ $table->setImportRun($run);
+ return $table;
+ }
+
+ public function setImportRun(ImportRun $run)
+ {
+ $this->importRun = $run;
+ return $this;
+ }
+
+ public function setColumns($columns)
+ {
+ $this->columns = $columns;
+ return $this;
+ }
+
+ protected function getKeyColumn()
+ {
+ if ($this->keyColumn === null) {
+ $this->keyColumn = $this->importRun->importSource()->get('key_column');
+ }
+
+ return $this->keyColumn;
+ }
+
+ public function getColumns()
+ {
+ if ($this->columns === null) {
+ $cols = $this->importRun->listColumnNames();
+
+ $keyColumn = $this->getKeyColumn();
+ if ($keyColumn !== null && ($pos = array_search($keyColumn, $cols)) !== false) {
+ unset($cols[$pos]);
+ array_unshift($cols, $keyColumn);
+ }
+ } else {
+ $cols = $this->columns;
+ }
+
+ return array_combine($cols, $cols);
+ }
+
+ public function renderRow($row)
+ {
+ // Find a better place!
+ if ($row === null) {
+ return null;
+ }
+ $tr = $this::tr();
+
+ foreach ($this->getColumnsToBeRendered() as $column) {
+ $td = $this::td();
+ if (property_exists($row, $column)) {
+ if (is_string($row->$column) || $row->$column instanceof ValidHtml) {
+ $td->setContent($row->$column);
+ } else {
+ $html = Html::tag('pre', null, PlainObjectRenderer::render($row->$column));
+ $td->setContent($html);
+ }
+ }
+ $tr->add($td);
+ }
+
+ return $tr;
+ }
+
+ public function getColumnsToBeRendered()
+ {
+ return $this->getColumns();
+ }
+
+ public function prepareQuery()
+ {
+ $ds = new ArrayDatasource(
+ $this->importRun->fetchRows($this->columns)
+ );
+
+ return $ds->select()->order($this->getKeyColumn());
+ }
+}