blob: 0d2f8e883234a7f2a5c57906f8b8c68080e9f88d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
<?php
namespace Icinga\Module\Director\Web\Table;
use ipl\Html\Html;
use Icinga\Data\DataArray\ArrayDatasource;
use Icinga\Module\Director\CustomVariable\CustomVariableDictionary;
use Icinga\Module\Director\Objects\IcingaHost;
use gipfl\IcingaWeb2\Link;
use gipfl\IcingaWeb2\Table\SimpleQueryBasedTable;
class IcingaHostAppliedForServiceTable extends SimpleQueryBasedTable
{
protected $title;
protected $host;
/** @var CustomVariableDictionary */
protected $cv;
protected $searchColumns = [
'service',
];
/** @var bool */
protected $readonly = false;
/** @var string|null */
protected $highlightedService;
/**
* @param IcingaHost $host
* @param CustomVariableDictionary $dict
* @return static
*/
public static function load(IcingaHost $host, CustomVariableDictionary $dict)
{
$table = (new static())->setHost($host)->setDictionary($dict);
$table->getAttributes()->set('data-base-target', '_self');
return $table;
}
public function setDictionary(CustomVariableDictionary $dict)
{
$this->cv = $dict;
return $this;
}
public function setTitle($title)
{
$this->title = $title;
return $this;
}
public function setHost(IcingaHost $host)
{
$this->host = $host;
return $this;
}
/**
* Show no related links
*
* @param bool $readonly
* @return $this
*/
public function setReadonly($readonly = true)
{
$this->readonly = (bool) $readonly;
return $this;
}
public function highlightService($service)
{
$this->highlightedService = $service;
return $this;
}
public function renderRow($row)
{
if ($this->readonly) {
if ($this->highlightedService === $row->service) {
$link = Html::tag('span', ['class' => 'icon-right-big'], $row->service);
} else {
$link = $row->service;
}
} else {
$link = Link::create($row->service, 'director/host/appliedservice', [
'name' => $this->host->object_name,
'service' => $row->service,
]);
}
return $this::row([$link]);
}
public function getColumnsToBeRendered()
{
return [
$this->title ?: $this->translate('Service name'),
];
}
public function prepareQuery()
{
$data = [];
foreach ($this->cv->getValue() as $key => $var) {
$data[] = (object) array(
'service' => $key,
);
}
return (new ArrayDatasource($data))->select();
}
}
|