From 4c1c4e7d2a1d768ded39a8f049875261fe0df25a Mon Sep 17 00:00:00 2001 From: Alexander Fuhr Date: Wed, 3 Jun 2015 14:59:29 +0200 Subject: [PATCH] ServiceGroupMembers: Add form, table, object and actions --- application/controllers/ListController.php | 11 ++++ application/controllers/ObjectController.php | 27 +++++++++- .../forms/IcingaServicegroupMemberForm.php | 23 ++++++++ .../tables/IcingaServicegroupMemberTable.php | 54 +++++++++++++++++++ configuration.php | 2 + library/Director/Db.php | 18 +++++++ .../Objects/IcingaServicegroupMember.php | 27 ++++++++++ .../Director/Web/Form/DirectorObjectForm.php | 8 +++ 8 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 application/forms/IcingaServicegroupMemberForm.php create mode 100644 application/tables/IcingaServicegroupMemberTable.php create mode 100644 library/Director/Objects/IcingaServicegroupMember.php diff --git a/application/controllers/ListController.php b/application/controllers/ListController.php index 16e92c07..7101bf39 100644 --- a/application/controllers/ListController.php +++ b/application/controllers/ListController.php @@ -81,6 +81,17 @@ class Director_ListController extends ActionController $this->render('table'); } + public function servicegroupmembersAction() + { + $this->view->addLink = $this->view->qlink( + $this->translate('Add Servicegroup Member'), + 'director/object/servicegroupmember' + ); + $this->view->title = $this->translate('Icinga Servicegroup Members'); + $this->view->table = $this->loadTable('icingaServicegroupMember')->setConnection($this->db()); + $this->render('table'); + } + public function commandsAction() { $this->view->addLink = $this->view->qlink( diff --git a/application/controllers/ObjectController.php b/application/controllers/ObjectController.php index 1eddb677..c5846ece 100644 --- a/application/controllers/ObjectController.php +++ b/application/controllers/ObjectController.php @@ -63,8 +63,8 @@ class Director_ObjectController extends ActionController ->setSuccessUrl('director/list/hostgroupmembers'); if (($host_id = $this->params->get('host_id')) - && ($hostgroup_id = $this->params->get('hostgroup_id'))) { - + && ($hostgroup_id = $this->params->get('hostgroup_id')) + ) { $this->view->form->loadObject( array( 'host_id' => $host_id, @@ -111,6 +111,29 @@ class Director_ObjectController extends ActionController $this->render('form'); } + public function servicegroupmemberAction() + { + $this->view->form = $this->loadForm('icingaServicegroupMember') + ->setDb($this->db()) + ->setSuccessUrl('director/list/servicegroupmembers'); + + if (($service_id = $this->params->get('service_id')) + && ($servicegroup_id = $this->params->get('servicegroup_id')) + ) { + $this->view->form->loadObject( + array( + 'service_id' => $service_id, + 'servicegroup_id' => $servicegroup_id, + ) + ); + $this->view->title = $this->translate('Modify Icinga Servicegroup Member'); + } else { + $this->view->title = $this->translate('Add new Icinga Servicegroup Member'); + } + $this->view->form->handleRequest(); + $this->render('form'); + } + public function commandAction() { $this->view->form = $this->loadForm('icingaCommand') diff --git a/application/forms/IcingaServicegroupMemberForm.php b/application/forms/IcingaServicegroupMemberForm.php new file mode 100644 index 00000000..f8626e44 --- /dev/null +++ b/application/forms/IcingaServicegroupMemberForm.php @@ -0,0 +1,23 @@ +addElement('select', 'servicegroup_id', array( + 'label' => $this->translate('Servicegroup'), + 'description' => $this->translate('The name of the servicegroup') + )); + + $this->addElement('select', 'service_id', array( + 'label' => $this->translate('Service'), + 'description' => $this->translate('The name of the service') + )); + + $this->addElement('submit', $this->translate('Store')); + } +} diff --git a/application/tables/IcingaServicegroupMemberTable.php b/application/tables/IcingaServicegroupMemberTable.php new file mode 100644 index 00000000..fe89df4d --- /dev/null +++ b/application/tables/IcingaServicegroupMemberTable.php @@ -0,0 +1,54 @@ + 'sg.id', + 'service_id' => 's.id', + 'servicegroup' => 'sg.object_name', + 'service' => 's.object_name' + ); + } + + protected function getActionUrl($row) + { + return $this->url('director/object/servicegroupmember', array( + 'servicegroup_id' => $row->servicegroup_id, + 'service_id' => $row->service_id, + )); + } + + public function getTitles() + { + $view = $this->view(); + return array( + 'servicegroup' => $view->translate('Servicegroup'), + 'service' => $view->translate('Member'), + ); + } + + public function fetchData() + { + $db = $this->connection()->getConnection(); + $query = $db->select()->from( + array('sg' => 'icinga_servicegroup'), + $this->getColumns() + )->join( + array('sgs' => 'icinga_servicegroup_service'), + 'sgs.servicegroup_id = sg.id', + array() + )->join( + array('s' => 'icinga_service'), + 'sgs.service_id = s.id', + array() + ); + + return $db->fetchAll($query); + } +} diff --git a/configuration.php b/configuration.php index 191c9cda..cf935254 100644 --- a/configuration.php +++ b/configuration.php @@ -29,6 +29,8 @@ $section->add($this->translate('Services')) ->setUrl('director/list/services'); $section->add($this->translate('Servicegroups')) ->setUrl('director/list/servicegroups'); +$section->add($this->translate('Serviceroup Members')) + ->setUrl('director/list/servicegroupmembers'); // USER $section->add($this->translate('Users')) diff --git a/library/Director/Db.php b/library/Director/Db.php index ba79ed4b..2718cf9c 100644 --- a/library/Director/Db.php +++ b/library/Director/Db.php @@ -74,4 +74,22 @@ class Db extends DbConnection ))->where('object_type', 'object')->order('object_name ASC'); return $this->db()->fetchPairs($select); } + + public function enumServices() + { + $select = $this->db()->select()->from('icinga_service', array( + 'id', + 'object_name', + ))->where('object_type', 'object')->order('object_name ASC'); + return $this->db()->fetchPairs($select); + } + + public function enumServicegroups() + { + $select = $this->db()->select()->from('icinga_servicegroup', array( + 'id', + 'object_name', + ))->where('object_type', 'object')->order('object_name ASC'); + return $this->db()->fetchPairs($select); + } } diff --git a/library/Director/Objects/IcingaServicegroupMember.php b/library/Director/Objects/IcingaServicegroupMember.php new file mode 100644 index 00000000..57ac47c8 --- /dev/null +++ b/library/Director/Objects/IcingaServicegroupMember.php @@ -0,0 +1,27 @@ + null, + 'service_id' => null, + ); + + public function onInsert() + { + } + + public function onUpdate() + { + } + + public function onDelete() + { + } +} \ No newline at end of file diff --git a/library/Director/Web/Form/DirectorObjectForm.php b/library/Director/Web/Form/DirectorObjectForm.php index 58f2798b..3d7bf976 100644 --- a/library/Director/Web/Form/DirectorObjectForm.php +++ b/library/Director/Web/Form/DirectorObjectForm.php @@ -114,6 +114,14 @@ abstract class DirectorObjectForm extends QuickForm $this->getElement('hostgroup_id') ->setMultiOptions($this->optionalEnum($db->enumHostgroups())); } + if ($this->hasElement('service_id')) { + $this->getElement('service_id') + ->setMultiOptions($this->optionalEnum($db->enumServices())); + } + if ($this->hasElement('servicegroup_id')) { + $this->getElement('servicegroup_id') + ->setMultiOptions($this->optionalEnum($db->enumServicegroups())); + } if ($this->hasElement('zone_id')) { $this->getElement('zone_id') ->setMultiOptions($this->optionalEnum($db->enumZones()));