From ea959c2dfde844620b81a53fd6664a5af30802ca Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 29 May 2015 16:35:30 +0200 Subject: [PATCH] Introduce controller UsergroupbackendController refs #8826 --- .../UsergroupbackendController.php | 149 ++++++++++++++++++ application/forms/Security/RoleForm.php | 44 +++--- .../views/scripts/usergroupbackend/form.phtml | 6 + .../views/scripts/usergroupbackend/list.phtml | 63 ++++++++ public/css/icinga/main-content.less | 11 ++ 5 files changed, 253 insertions(+), 20 deletions(-) create mode 100644 application/controllers/UsergroupbackendController.php create mode 100644 application/views/scripts/usergroupbackend/form.phtml create mode 100644 application/views/scripts/usergroupbackend/list.phtml diff --git a/application/controllers/UsergroupbackendController.php b/application/controllers/UsergroupbackendController.php new file mode 100644 index 000000000..91560bf55 --- /dev/null +++ b/application/controllers/UsergroupbackendController.php @@ -0,0 +1,149 @@ +redirectNow('usergroupbackend/list'); + } + + /** + * Show a list of all user group backends + */ + public function listAction() + { + $this->assertPermission('config/application/usergroupbackend/*'); + $this->view->backendNames = Config::app('groups')->keys(); + $this->getTabs()->add( + 'usergroupbackend/list', + array( + 'title' => $this->translate('List all user group backends'), + 'label' => $this->translate('User group backends'), + 'url' => 'usergroupbackend/list' + ) + )->activate('usergroupbackend/list'); + } + + /** + * Create a new user group backend + */ + public function createAction() + { + $this->assertPermission('config/application/usergroupbackend/create'); + + $form = new UserGroupBackendForm(); + $form->setRedirectUrl('usergroupbackend/list'); + $form->setTitle($this->translate('Create New User Group Backend')); + $form->addDescription($this->translate('Create a new backend to associate users and groups with.')); + $form->setIniConfig(Config::app('groups')); + $form->setOnSuccess(function (UserGroupBackendForm $form) { + try { + $form->add($form->getValues()); + } catch (Exception $e) { + $form->error($e->getMessage()); + return false; + } + + if ($form->save()) { + Notification::success(t('User group backend successfully created')); + return true; + } + + return false; + }); + $form->handleRequest(); + + $this->view->form = $form; + $this->render('form'); + } + + /** + * Edit an user group backend + */ + public function editAction() + { + $this->assertPermission('config/application/usergroupbackend/edit'); + $backendName = $this->params->getRequired('backend'); + + $form = new UserGroupBackendForm(); + $form->setAction(Url::fromRequest()); + $form->setRedirectUrl('usergroupbackend/list'); + $form->setTitle(sprintf($this->translate('Edit User Group Backend %s'), $backendName)); + $form->setIniConfig(Config::app('groups')); + $form->setOnSuccess(function (UserGroupBackendForm $form) use ($backendName) { + try { + $form->edit($backendName, $form->getValues()); + } catch (Exception $e) { + $form->error($e->getMessage()); + return false; + } + + if ($form->save()) { + Notification::success(sprintf(t('User group backend "%s" successfully updated'), $backendName)); + return true; + } + + return false; + }); + + try { + $form->load($backendName); + $form->handleRequest(); + } catch (NotFoundError $_) { + $this->httpNotFound(sprintf($this->translate('User group backend "%s" not found'), $backendName)); + } + + $this->view->form = $form; + $this->render('form'); + } + + /** + * Remove a user group backend + */ + public function removeAction() + { + $this->assertPermission('config/application/usergroupbackend/remove'); + $backendName = $this->params->getRequired('backend'); + + $backendForm = new UserGroupBackendForm(); + $backendForm->setIniConfig(Config::app('groups')); + $form = new ConfirmRemovalForm(); + $form->setRedirectUrl('usergroupbackend/list'); + $form->setTitle(sprintf($this->translate('Remove User Group Backend %s'), $backendName)); + $form->setOnSuccess(function (ConfirmRemovalForm $form) use ($backendName, $backendForm) { + try { + $backendForm->delete($backendName); + } catch (Exception $e) { + $form->error($e->getMessage()); + return false; + } + + if ($backendForm->save()) { + Notification::success(sprintf(t('User group backend "%s" successfully removed'), $backendName)); + return true; + } + + return false; + }); + $form->handleRequest(); + + $this->view->form = $form; + $this->render('form'); + } +} diff --git a/application/forms/Security/RoleForm.php b/application/forms/Security/RoleForm.php index 536a7efe0..43ae6c1a0 100644 --- a/application/forms/Security/RoleForm.php +++ b/application/forms/Security/RoleForm.php @@ -21,26 +21,30 @@ class RoleForm extends ConfigForm * @var array */ protected $providedPermissions = array( - '*' => '*', - 'config/*' => 'config/*', - 'config/application/*' => 'config/application/*', - 'config/application/general' => 'config/application/general', - 'config/application/authentication' => 'config/application/authentication', - 'config/application/resources' => 'config/application/resources', - 'config/application/roles' => 'config/application/roles', - 'config/application/users/*' => 'config/application/users/*', - 'config/application/users/show' => 'config/application/users/show', - 'config/application/users/add' => 'config/application/users/add', - 'config/application/users/edit' => 'config/application/users/edit', - 'config/application/users/remove' => 'config/application/users/remove', - 'config/application/groups/*' => 'config/application/groups/*', - 'config/application/groups/show' => 'config/application/groups/show', - 'config/application/groups/add' => 'config/application/groups/add', - 'config/application/groups/edit' => 'config/application/groups/edit', - 'config/application/groups/remove' => 'config/application/groups/remove', - 'config/application/groups/member/add' => 'config/application/groups/member/add', - 'config/application/groups/member/remove' => 'config/application/groups/member/remove', - 'config/modules' => 'config/modules' + '*' => '*', + 'config/*' => 'config/*', + 'config/application/*' => 'config/application/*', + 'config/application/general' => 'config/application/general', + 'config/application/authentication' => 'config/application/authentication', + 'config/application/resources' => 'config/application/resources', + 'config/application/roles' => 'config/application/roles', + 'config/application/users/*' => 'config/application/users/*', + 'config/application/users/show' => 'config/application/users/show', + 'config/application/users/add' => 'config/application/users/add', + 'config/application/users/edit' => 'config/application/users/edit', + 'config/application/users/remove' => 'config/application/users/remove', + 'config/application/groups/*' => 'config/application/groups/*', + 'config/application/groups/show' => 'config/application/groups/show', + 'config/application/groups/add' => 'config/application/groups/add', + 'config/application/groups/edit' => 'config/application/groups/edit', + 'config/application/groups/remove' => 'config/application/groups/remove', + 'config/application/groups/member/add' => 'config/application/groups/member/add', + 'config/application/groups/member/remove' => 'config/application/groups/member/remove', + 'config/application/usergroupbackend/*' => 'config/application/usergroupbackend/*', + 'config/application/usergroupbackend/create' => 'config/application/usergroupbackend/create', + 'config/application/usergroupbackend/edit' => 'config/application/usergroupbackend/edit', + 'config/application/usergroupbackend/remove' => 'config/application/usergroupbackend/remove', + 'config/modules' => 'config/modules' ); /** diff --git a/application/views/scripts/usergroupbackend/form.phtml b/application/views/scripts/usergroupbackend/form.phtml new file mode 100644 index 000000000..cbf06590d --- /dev/null +++ b/application/views/scripts/usergroupbackend/form.phtml @@ -0,0 +1,6 @@ +
+ showOnlyCloseButton(); ?> +
+
+ +
\ No newline at end of file diff --git a/application/views/scripts/usergroupbackend/list.phtml b/application/views/scripts/usergroupbackend/list.phtml new file mode 100644 index 000000000..d98d207f1 --- /dev/null +++ b/application/views/scripts/usergroupbackend/list.phtml @@ -0,0 +1,63 @@ +hasPermission('config/application/usergroupbackend/create'); +$editPermitted = $this->hasPermission('config/application/usergroupbackend/edit'); +$removePermitted = $this->hasPermission('config/application/usergroupbackend/remove'); + +?> +
+ +
+
+ +qlink( + $this->translate('Create A New User Group Backend'), + 'usergroupbackend/create', + null, + array( + 'icon' => 'plus' + ) +); ?> + + 0): ?> + + + + + + + + + + + + + + + + + + + +
translate('Backend'); ?>translate('Remove'); ?>
+ + qlink( + $backendName, + 'usergroupbackend/edit', + array('backend' => $backendName), + array('title' => sprintf($this->translate('Edit user group backend %s'), $backendName)) + ); ?> + + escape($backendName); ?> + + qlink( + null, + 'usergroupbackend/remove', + array('backend' => $backendName), + array( + 'title' => sprintf($this->translate('Remove user group backend %s'), $backendName), + 'icon' => 'trash' + ) + ); ?>
+ +
\ No newline at end of file diff --git a/public/css/icinga/main-content.less b/public/css/icinga/main-content.less index e1a305509..2b0e2e50d 100644 --- a/public/css/icinga/main-content.less +++ b/public/css/icinga/main-content.less @@ -355,4 +355,15 @@ form.backend-selection { margin-left: 0; } } +} + +table.usergroupbackend-list { + th.backend-remove { + width: 8em; + text-align: right; + } + + td.backend-remove { + text-align: right; + } } \ No newline at end of file