Introduce controller UsergroupbackendController

refs #8826
This commit is contained in:
Johannes Meyer 2015-05-29 16:35:30 +02:00
parent 04835db13e
commit ea959c2dfd
5 changed files with 253 additions and 20 deletions

View File

@ -0,0 +1,149 @@
<?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
use \Exception;
use Icinga\Application\Config;
use Icinga\Exception\NotFoundError;
use Icinga\Forms\ConfirmRemovalForm;
use Icinga\Forms\Config\UserGroup\UserGroupBackendForm;
use Icinga\Web\Controller;
use Icinga\Web\Notification;
use Icinga\Web\Url;
/**
* Controller to configure user group backends
*/
class UsergroupbackendController extends Controller
{
/**
* Redirect to this controller's list action
*/
public function indexAction()
{
$this->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');
}
}

View File

@ -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'
);
/**

View File

@ -0,0 +1,6 @@
<div class="controls">
<?= $tabs->showOnlyCloseButton(); ?>
</div>
<div class="content">
<?= $form; ?>
</div>

View File

@ -0,0 +1,63 @@
<?php
$createPermitted = $this->hasPermission('config/application/usergroupbackend/create');
$editPermitted = $this->hasPermission('config/application/usergroupbackend/edit');
$removePermitted = $this->hasPermission('config/application/usergroupbackend/remove');
?>
<div class="controls">
<?= $tabs; ?>
</div>
<div class="content" data-base-target="_next">
<?php if ($createPermitted): ?>
<?= $this->qlink(
$this->translate('Create A New User Group Backend'),
'usergroupbackend/create',
null,
array(
'icon' => 'plus'
)
); ?>
<?php endif ?>
<?php if (count($backendNames) > 0): ?>
<table class="action usergroupbackend-list">
<thead>
<tr>
<th class="backend-name"><?= $this->translate('Backend'); ?></th>
<?php if ($removePermitted): ?>
<th class="backend-remove"><?= $this->translate('Remove'); ?></th>
<?php endif ?>
<tr>
</thead>
<tbody>
<?php foreach ($backendNames as $backendName): ?>
<tr>
<td class="backend-name">
<?php if ($editPermitted): ?>
<?= $this->qlink(
$backendName,
'usergroupbackend/edit',
array('backend' => $backendName),
array('title' => sprintf($this->translate('Edit user group backend %s'), $backendName))
); ?>
<?php else: ?>
<?= $this->escape($backendName); ?>
<?php endif ?>
</td>
<?php if ($removePermitted): ?>
<td class="backend-remove"><?= $this->qlink(
null,
'usergroupbackend/remove',
array('backend' => $backendName),
array(
'title' => sprintf($this->translate('Remove user group backend %s'), $backendName),
'icon' => 'trash'
)
); ?></td>
<?php endif ?>
</tr>
<?php endforeach ?>
</tbody>
</table>
<?php endif ?>
</div>

View File

@ -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;
}
}