diff options
Diffstat (limited to 'app/Controller')
-rw-r--r-- | app/Controller/Board.php | 100 | ||||
-rw-r--r-- | app/Controller/Category.php | 4 | ||||
-rw-r--r-- | app/Controller/Swimlane.php | 256 | ||||
-rw-r--r-- | app/Controller/Task.php | 1 |
4 files changed, 310 insertions, 51 deletions
diff --git a/app/Controller/Board.php b/app/Controller/Board.php index 7d498f81..c5823328 100644 --- a/app/Controller/Board.php +++ b/app/Controller/Board.php @@ -130,12 +130,14 @@ class Board extends Base // Display the board with a specific layout $this->response->html($this->template->layout('board/public', array( 'project' => $project, - 'columns' => $this->board->get($project['id']), + 'swimlanes' => $this->board->getBoard($project['id']), 'categories' => $this->category->getList($project['id'], false), 'title' => $project['name'], 'no_layout' => true, 'not_editable' => true, 'board_public_refresh_interval' => $this->config->get('board_public_refresh_interval'), + 'board_private_refresh_interval' => $this->config->get('board_private_refresh_interval'), + 'board_highlight_period' => $this->config->get('board_highlight_period'), ))); } @@ -188,7 +190,7 @@ class Board extends Base 'users' => $this->projectPermission->getMemberList($project['id'], true, true), 'projects' => $projects, 'project' => $project, - 'board' => $this->board->get($project['id']), + 'swimlanes' => $this->board->getBoard($project['id']), 'categories' => $this->category->getList($project['id'], true, true), 'title' => $project['name'], 'board_selector' => $board_selector, @@ -339,35 +341,38 @@ class Board extends Base { $project_id = $this->request->getIntegerParam('project_id'); - if ($project_id > 0 && $this->request->isAjax()) { + if (! $project_id || ! $this->request->isAjax()) { + return $this->response->status(403); + } - if (! $this->projectPermission->isUserAllowed($project_id, $this->acl->getUserId())) { - $this->response->text('Forbidden', 403); - } + if (! $this->projectPermission->isUserAllowed($project_id, $this->acl->getUserId())) { + $this->response->text('Forbidden', 403); + } - $values = $this->request->getJson(); + $values = $this->request->getJson(); - if ($this->taskPosition->movePosition($project_id, $values['task_id'], $values['column_id'], $values['position'])) { + $result =$this->taskPosition->movePosition( + $project_id, + $values['task_id'], + $values['column_id'], + $values['position'], + $values['swimlane_id'] + ); - $this->response->html( - $this->template->load('board/show', array( - 'project' => $this->project->getById($project_id), - 'board' => $this->board->get($project_id), - 'categories' => $this->category->getList($project_id, false), - 'board_private_refresh_interval' => $this->config->get('board_private_refresh_interval'), - 'board_highlight_period' => $this->config->get('board_highlight_period'), - )), - 201 - ); - } - else { - - $this->response->status(400); - } - } - else { - $this->response->status(403); + if (! $result) { + return $this->response->status(400); } + + $this->response->html( + $this->template->load('board/show', array( + 'project' => $this->project->getById($project_id), + 'swimlanes' => $this->board->getBoard($project_id), + 'categories' => $this->category->getList($project_id, false), + 'board_private_refresh_interval' => $this->config->get('board_private_refresh_interval'), + 'board_highlight_period' => $this->config->get('board_highlight_period'), + )), + 201 + ); } /** @@ -377,33 +382,30 @@ class Board extends Base */ public function check() { - if ($this->request->isAjax()) { - - $project_id = $this->request->getIntegerParam('project_id'); - $timestamp = $this->request->getIntegerParam('timestamp'); + if (! $this->request->isAjax()) { + return $this->response->status(403); + } - if ($project_id > 0 && ! $this->projectPermission->isUserAllowed($project_id, $this->acl->getUserId())) { - $this->response->text('Forbidden', 403); - } + $project_id = $this->request->getIntegerParam('project_id'); + $timestamp = $this->request->getIntegerParam('timestamp'); - if ($this->project->isModifiedSince($project_id, $timestamp)) { - $this->response->html( - $this->template->load('board/show', array( - 'project' => $this->project->getById($project_id), - 'board' => $this->board->get($project_id), - 'categories' => $this->category->getList($project_id, false), - 'board_private_refresh_interval' => $this->config->get('board_private_refresh_interval'), - 'board_highlight_period' => $this->config->get('board_highlight_period'), - )) - ); - } - else { - $this->response->status(304); - } + if (! $this->projectPermission->isUserAllowed($project_id, $this->acl->getUserId())) { + $this->response->text('Forbidden', 403); } - else { - $this->response->status(403); + + if (! $this->project->isModifiedSince($project_id, $timestamp)) { + return $this->response->status(304); } + + $this->response->html( + $this->template->load('board/show', array( + 'project' => $this->project->getById($project_id), + 'swimlanes' => $this->board->getBoard($project_id), + 'categories' => $this->category->getList($project_id, false), + 'board_private_refresh_interval' => $this->config->get('board_private_refresh_interval'), + 'board_highlight_period' => $this->config->get('board_highlight_period'), + )) + ); } /** diff --git a/app/Controller/Category.php b/app/Controller/Category.php index 27c0d9fc..b30608b7 100644 --- a/app/Controller/Category.php +++ b/app/Controller/Category.php @@ -14,7 +14,7 @@ class Category extends Base * Get the category (common method between actions) * * @access private - * @param $project_id + * @param integer $project_id * @return array */ private function getCategory($project_id) @@ -48,7 +48,7 @@ class Category extends Base } /** - * Validate and save a new project + * Validate and save a new category * * @access public */ diff --git a/app/Controller/Swimlane.php b/app/Controller/Swimlane.php new file mode 100644 index 00000000..f0920f60 --- /dev/null +++ b/app/Controller/Swimlane.php @@ -0,0 +1,256 @@ +<?php + +namespace Controller; + +use Model\Swimlane as SwimlaneModel; + +/** + * Swimlanes + * + * @package controller + * @author Frederic Guillot + */ +class Swimlane extends Base +{ + /** + * Get the swimlane (common method between actions) + * + * @access private + * @param integer $project_id + * @return array + */ + private function getSwimlane($project_id) + { + $swimlane = $this->swimlane->getById($this->request->getIntegerParam('swimlane_id')); + + if (! $swimlane) { + $this->session->flashError(t('Swimlane not found.')); + $this->response->redirect('?controller=swimlane&action=index&project_id='.$project_id); + } + + return $swimlane; + } + + /** + * List of swimlanes for a given project + * + * @access public + */ + public function index(array $values = array(), array $errors = array()) + { + $project = $this->getProjectManagement(); + + $this->response->html($this->projectLayout('swimlane/index', array( + 'default_swimlane' => $this->swimlane->getDefault($project['id']), + 'active_swimlanes' => $this->swimlane->getAllByStatus($project['id'], SwimlaneModel::ACTIVE), + 'inactive_swimlanes' => $this->swimlane->getAllByStatus($project['id'], SwimlaneModel::INACTIVE), + 'values' => $values + array('project_id' => $project['id']), + 'errors' => $errors, + 'project' => $project, + 'title' => t('Swimlanes') + ))); + } + + /** + * Validate and save a new swimlane + * + * @access public + */ + public function save() + { + $project = $this->getProjectManagement(); + + $values = $this->request->getValues(); + list($valid, $errors) = $this->swimlane->validateCreation($values); + + if ($valid) { + + if ($this->swimlane->create($project['id'], $values['name'])) { + $this->session->flash(t('Your swimlane have been created successfully.')); + $this->response->redirect('?controller=swimlane&action=index&project_id='.$project['id']); + } + else { + $this->session->flashError(t('Unable to create your swimlane.')); + } + } + + $this->index($values, $errors); + } + + /** + * Change the default swimlane + * + * @access public + */ + public function change() + { + $project = $this->getProjectManagement(); + + $values = $this->request->getValues(); + list($valid, $errors) = $this->swimlane->validateDefaultModification($values); + + if ($valid) { + + if ($this->swimlane->updateDefault($values)) { + $this->session->flash(t('The default swimlane have been updated successfully.')); + $this->response->redirect('?controller=swimlane&action=index&project_id='.$project['id']); + } + else { + $this->session->flashError(t('Unable to update this swimlane.')); + } + } + + $this->index(); + } + + /** + * Edit a swimlane (display the form) + * + * @access public + */ + public function edit(array $values = array(), array $errors = array()) + { + $project = $this->getProjectManagement(); + $swimlane = $this->getSwimlane($project['id']); + + $this->response->html($this->projectLayout('swimlane/edit', array( + 'values' => empty($values) ? $swimlane : $values, + 'errors' => $errors, + 'project' => $project, + 'title' => t('Swimlanes') + ))); + } + + /** + * Edit a swimlane (validate the form and update the database) + * + * @access public + */ + public function update() + { + $project = $this->getProjectManagement(); + + $values = $this->request->getValues(); + list($valid, $errors) = $this->swimlane->validateModification($values); + + if ($valid) { + + if ($this->swimlane->rename($values['id'], $values['name'])) { + $this->session->flash(t('Swimlane updated successfully.')); + $this->response->redirect('?controller=swimlane&action=index&project_id='.$project['id']); + } + else { + $this->session->flashError(t('Unable to update this swimlane.')); + } + } + + $this->edit($values, $errors); + } + + /** + * Confirmation dialog before removing a swimlane + * + * @access public + */ + public function confirm() + { + $project = $this->getProjectManagement(); + $swimlane = $this->getSwimlane($project['id']); + + $this->response->html($this->projectLayout('swimlane/remove', array( + 'project' => $project, + 'swimlane' => $swimlane, + 'title' => t('Remove a swimlane') + ))); + } + + /** + * Remove a swimlane + * + * @access public + */ + public function remove() + { + $this->checkCSRFParam(); + $project = $this->getProjectManagement(); + $swimlane_id = $this->request->getIntegerParam('swimlane_id'); + + if ($this->swimlane->remove($project['id'], $swimlane_id)) { + $this->session->flash(t('Swimlane removed successfully.')); + } else { + $this->session->flashError(t('Unable to remove this swimlane.')); + } + + $this->response->redirect('?controller=swimlane&action=index&project_id='.$project['id']); + } + + /** + * Disable a swimlane + * + * @access public + */ + public function disable() + { + $this->checkCSRFParam(); + $project = $this->getProjectManagement(); + $swimlane_id = $this->request->getIntegerParam('swimlane_id'); + + if ($this->swimlane->disable($project['id'], $swimlane_id)) { + $this->session->flash(t('Swimlane updated successfully.')); + } else { + $this->session->flashError(t('Unable to update this swimlane.')); + } + + $this->response->redirect('?controller=swimlane&action=index&project_id='.$project['id']); + } + + /** + * Enable a swimlane + * + * @access public + */ + public function enable() + { + $this->checkCSRFParam(); + $project = $this->getProjectManagement(); + $swimlane_id = $this->request->getIntegerParam('swimlane_id'); + + if ($this->swimlane->enable($project['id'], $swimlane_id)) { + $this->session->flash(t('Swimlane updated successfully.')); + } else { + $this->session->flashError(t('Unable to update this swimlane.')); + } + + $this->response->redirect('?controller=swimlane&action=index&project_id='.$project['id']); + } + + /** + * Move up a swimlane + * + * @access public + */ + public function moveup() + { + $this->checkCSRFParam(); + $project = $this->getProjectManagement(); + $swimlane_id = $this->request->getIntegerParam('swimlane_id'); + + $this->swimlane->moveUp($project['id'], $swimlane_id); + $this->response->redirect('?controller=swimlane&action=index&project_id='.$project['id']); + } + + /** + * Move down a swimlane + * + * @access public + */ + public function movedown() + { + $this->checkCSRFParam(); + $project = $this->getProjectManagement(); + $swimlane_id = $this->request->getIntegerParam('swimlane_id'); + + $this->swimlane->moveDown($project['id'], $swimlane_id); + $this->response->redirect('?controller=swimlane&action=index&project_id='.$project['id']); + } +} diff --git a/app/Controller/Task.php b/app/Controller/Task.php index 8d38317c..33b4b039 100644 --- a/app/Controller/Task.php +++ b/app/Controller/Task.php @@ -94,6 +94,7 @@ class Task extends Base if (empty($values)) { $values = array( + 'swimlane_id' => $this->request->getIntegerParam('swimlane_id'), 'column_id' => $this->request->getIntegerParam('column_id'), 'color_id' => $this->request->getStringParam('color_id'), 'owner_id' => $this->request->getIntegerParam('owner_id'), |