File size: 4,713 Bytes
e4f4821 |
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 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
<?php
namespace Kanboard\Controller;
use Kanboard\Core\Controller\AccessForbiddenException;
/**
* Class ProjectRoleController
*
* @package Kanboard\Controller
* @author Frederic Guillot
*/
class ProjectRoleController extends BaseController
{
/**
* Show roles and permissions
*/
public function show()
{
$project = $this->getProject();
$this->response->html($this->helper->layout->project('project_role/show', array(
'project' => $project,
'roles' => $this->projectRoleModel->getAllWithRestrictions($project['id']),
'title' => t('Custom Project Roles'),
)));
}
/**
* Show form to create new role
*
* @param array $values
* @param array $errors
* @throws AccessForbiddenException
*/
public function create(array $values = array(), array $errors = array())
{
$project = $this->getProject();
$this->response->html($this->template->render('project_role/create', array(
'project' => $project,
'values' => $values + array('project_id' => $project['id']),
'errors' => $errors,
)));
}
/**
* Save new role
*/
public function save()
{
$project = $this->getProject();
$values = $this->request->getValues();
list($valid, $errors) = $this->projectRoleValidator->validateCreation($values);
if ($valid) {
$role_id = $this->projectRoleModel->create($project['id'], $values['role']);
if ($role_id !== false) {
$this->flash->success(t('Your custom project role has been created successfully.'));
} else {
$this->flash->failure(t('Unable to create custom project role.'));
}
$this->response->redirect($this->helper->url->to('ProjectRoleController', 'show', array('project_id' => $project['id'])));
} else {
$this->create($values, $errors);
}
}
/**
* Show form to change existing role
*
* @param array $values
* @param array $errors
* @throws AccessForbiddenException
*/
public function edit(array $values = array(), array $errors = array())
{
$project = $this->getProject();
$role = $this->getRole($project['id']);
if (empty($values)) {
$values = $role;
}
$this->response->html($this->template->render('project_role/edit', array(
'role' => $role,
'project' => $project,
'values' => $values,
'errors' => $errors,
)));
}
/**
* Update role
*/
public function update()
{
$project = $this->getProject();
$role = $this->getRole($project['id']);
$values = $this->request->getValues();
list($valid, $errors) = $this->projectRoleValidator->validateModification($values);
if ($valid) {
if ($this->projectRoleModel->update($role['role_id'], $project['id'], $values['role'])) {
$this->flash->success(t('Your custom project role has been updated successfully.'));
} else {
$this->flash->failure(t('Unable to update custom project role.'));
}
$this->response->redirect($this->helper->url->to('ProjectRoleController', 'show', array('project_id' => $project['id'])));
} else {
$this->edit($values, $errors);
}
}
/**
* Confirm suppression
*
* @access public
*/
public function confirm()
{
$project = $this->getProject();
$role = $this->getRole($project['id']);
$this->response->html($this->helper->layout->project('project_role/remove', array(
'project' => $project,
'role' => $role,
)));
}
/**
* Remove a custom role
*
* @access public
*/
public function remove()
{
$project = $this->getProject();
$this->checkCSRFParam();
$role_id = $this->request->getIntegerParam('role_id');
if ($this->projectRoleModel->remove($project['id'], $role_id)) {
$this->flash->success(t('Custom project role removed successfully.'));
} else {
$this->flash->failure(t('Unable to remove this project role.'));
}
$this->response->redirect($this->helper->url->to('ProjectRoleController', 'show', array('project_id' => $project['id'])));
}
protected function getRole($project_id)
{
$role_id = $this->request->getIntegerParam('role_id');
return $this->projectRoleModel->getById($project_id, $role_id);
}
}
|