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
|
<?php
namespace Icinga\Module\Director\DataType;
use Icinga\Module\Director\Hook\DataTypeHook;
use Icinga\Module\Director\Objects\IcingaObject;
use Icinga\Module\Director\Web\Form\DirectorObjectForm;
use Icinga\Module\Director\Web\Form\QuickForm;
class DataTypeDirectorObject extends DataTypeHook
{
public function getFormElement($name, QuickForm $form)
{
/** @var DirectorObjectForm $form */
$db = $form->getDb()->getDbAdapter();
$type = $this->getSetting('icinga_object_type');
$dummy = IcingaObject::createByType($type);
$display = in_array($type, ['service_set', 'notification'])
? 'object_name'
: 'COALESCE(display_name, object_name)';
$query = $db->select()->from($dummy->getTableName(), [
'object_name' => 'object_name',
'display_name' => $display
])->order($display);
if ($type === 'service_set') {
$query->where('host_id IS NULL');
} elseif ($type === 'notification') {
$query->where('object_type = ?', 'apply');
} else {
$query->where('object_type = ?', 'object');
}
$enum = $db->fetchPairs($query);
$params = [];
if ($this->getSetting('data_type') === 'array') {
$elementType = $type === 'notification' ? 'select' : 'extensibleSet';
$params['sorted'] = true;
$params = ['multiOptions' => $enum];
} else {
$params = ['multiOptions' => [
null => $form->translate('- please choose -'),
] + $enum];
$elementType = 'select';
}
return $form->createElement($elementType, $name, $params);
}
public static function addSettingsFormFields(QuickForm $form)
{
$enum = [
'host' => $form->translate('Hosts'),
'hostgroup' => $form->translate('Host groups'),
'notification' => $form->translate('Notification Apply Rules'),
'service' => $form->translate('Services'),
'servicegroup' => $form->translate('Service groups'),
'service_set' => $form->translate('Service Set'),
'user' => $form->translate('Users'),
'usergroup' => $form->translate('User groups'),
];
$form->addElement('select', 'icinga_object_type', [
'label' => $form->translate('Object'),
'description' => $form->translate(
'Please choose a specific Icinga object type'
),
'required' => true,
'multiOptions' => $form->optionalEnum($enum),
'sorted' => true,
]);
$form->addElement('select', 'data_type', [
'label' => $form->translate('Target data type'),
'multiOptions' => $form->optionalEnum([
'string' => $form->translate('String'),
'array' => $form->translate('Array'),
]),
'required' => true,
]);
return $form;
}
}
|