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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
<?php
namespace Icinga\Module\Director\Forms;
use Icinga\Module\Director\Auth\Permission;
use Icinga\Module\Director\Objects\IcingaHost;
use Icinga\Module\Director\Web\Form\DirectorObjectForm;
class IcingaServiceSetForm extends DirectorObjectForm
{
protected $host;
protected $listUrl = 'director/services/sets';
public function setup()
{
if ($this->host === null) {
$this->setupTemplate();
} else {
$this->setupHost();
}
$this->setButtons();
}
protected function setupTemplate()
{
$this->addElement('text', 'object_name', [
'label' => $this->translate('Service set name'),
'description' => $this->translate(
'A short name identifying this set of services'
),
'required' => true,
])
->eventuallyAddNameRestriction('director/service_set/filter-by-name')
->addHidden('object_type', 'template')
->addDescriptionElement()
->addAssignmentElements();
}
protected function setObjectSuccessUrl()
{
if ($this->host) {
$this->setSuccessUrl(
'director/host/services',
array('name' => $this->host->getObjectName())
);
} else {
parent::setObjectSuccessUrl();
}
}
protected function setupHost()
{
$object = $this->object();
if ($this->hasBeenSent()) {
$object->set('object_name', $this->getSentValue('imports'));
$object->set('imports', $object->object_name);
}
if (! $object->hasBeenLoadedFromDb()) {
$this->addSingleImportsElement();
}
if (count($object->get('imports'))) {
$description = $object->getResolvedProperty('description');
if ($description) {
$this->addHtmlHint($description);
}
}
$this->addHidden('object_type', 'object');
$this->addHidden('host', $this->host->getObjectName());
$this->groupMainProperties();
}
public function setHost(IcingaHost $host)
{
$this->host = $host;
return $this;
}
protected function addSingleImportsElement()
{
$enum = $this->enumAllowedTemplates();
$this->addElement('select', 'imports', array(
'label' => $this->translate('Service set'),
'description' => $this->translate(
'The service set that should be assigned to this host'
),
'required' => true,
'multiOptions' => $this->optionallyAddFromEnum($enum),
'class' => 'autosubmit'
));
return $this;
}
protected function addDescriptionElement()
{
$this->addElement('textarea', 'description', array(
'label' => $this->translate('Description'),
'description' => $this->translate(
'A meaningful description explaining your users what to expect'
. ' when assigning this set of services'
),
'rows' => '3',
'required' => ! $this->isTemplate(),
));
return $this;
}
protected function addAssignmentElements()
{
if (! $this->hasPermission(Permission::SERVICE_SET_APPLY)) {
return $this;
}
$this->addAssignFilter([
'suggestionContext' => 'HostFilterColumns',
'description' => $this->translate(
'This allows you to configure an assignment filter. Please feel'
. ' free to combine as many nested operators as you want. You'
. ' might also want to skip this, define it later and/or just'
. ' add this set of services to single hosts. The "contains"'
. ' operator is valid for arrays only. Please use wildcards and'
. ' the = (equals) operator when searching for partial string'
. ' matches, like in *.example.com'
)
]);
return $this;
}
}
|