diff options
author | Frédéric Guillot <fguillot@users.noreply.github.com> | 2014-03-23 22:10:43 -0400 |
---|---|---|
committer | Frédéric Guillot <fguillot@users.noreply.github.com> | 2014-03-23 22:10:43 -0400 |
commit | 0d55f5aa35d21b79c5d79f7214c4c9e05b1d2684 (patch) | |
tree | 3a70e8fbf58dcbe93df0597f70a1f0bb893e5f40 /controllers | |
parent | ab63ffafc565e75c73c27910abd465bebb09306e (diff) |
Comment edit/remove actions
Diffstat (limited to 'controllers')
-rw-r--r-- | controllers/base.php | 86 | ||||
-rw-r--r-- | controllers/comment.php | 191 | ||||
-rw-r--r-- | controllers/task.php | 73 |
3 files changed, 275 insertions, 75 deletions
diff --git a/controllers/base.php b/controllers/base.php index 81fb8884..cb76cc05 100644 --- a/controllers/base.php +++ b/controllers/base.php @@ -2,8 +2,20 @@ namespace Controller; +/** + * Base controller + * + * @package controller + * @author Frederic Guillot + */ abstract class Base { + /** + * Constructor + * + * @access public + * @param Core\Registry $registry + */ public function __construct(\Core\Registry $registry) { $this->acl = $registry->acl; @@ -17,6 +29,11 @@ abstract class Base $this->event = $registry->shared('event'); } + /** + * Method executed before each action + * + * @access public + */ public function beforeAction($controller, $action) { // Start the session @@ -50,7 +67,13 @@ abstract class Base $this->action->attachEvents(); } - public function checkProjectPermissions($project_id) + /** + * Check if the current user have access to the given project + * + * @access protected + * @param integer $project_id Project id + */ + protected function checkProjectPermissions($project_id) { if ($this->acl->isRegularUser()) { @@ -60,14 +83,73 @@ abstract class Base } } - public function redirectNoProject() + /** + * Redirection when there is no project in the database + * + * @access protected + */ + protected function redirectNoProject() { $this->session->flash(t('There is no active project, the first step is to create a new project.')); $this->response->redirect('?controller=project&action=create'); } + /** + * Application not found page (404 error) + * + * @access public + */ public function notfound() { $this->response->html($this->template->layout('app_notfound', array('title' => t('Page not found')))); } + + /** + * Display the template show task (common between different actions) + * + * @access protected + * @param array $task Task data + * @param array $comment_form Comment form data + * @param array $description_form Description form data + * @param array $comment_edit_form Comment edit form data + */ + protected function showTask(array $task, array $comment_form = array(), array $description_form = array(), array $comment_edit_form = array()) + { + if (empty($comment_form)) { + $comment_form = array( + 'values' => array('task_id' => $task['id'], 'user_id' => $this->acl->getUserId()), + 'errors' => array() + ); + } + + if (empty($description_form)) { + $description_form = array( + 'values' => array('id' => $task['id']), + 'errors' => array() + ); + } + + if (empty($comment_edit_form)) { + $comment_edit_form = array( + 'values' => array('id' => 0), + 'errors' => array() + ); + } + else { + $hide_comment_form = true; + } + + $this->response->html($this->template->layout('task_show', array( + 'hide_comment_form' => isset($hide_comment_form), + 'comment_edit_form' => $comment_edit_form, + 'comment_form' => $comment_form, + 'description_form' => $description_form, + 'comments' => $this->comment->getAll($task['id']), + 'task' => $task, + 'columns_list' => $this->board->getColumnsList($task['project_id']), + 'colors_list' => $this->task->getColors(), + 'menu' => 'tasks', + 'title' => $task['title'], + ))); + } } diff --git a/controllers/comment.php b/controllers/comment.php new file mode 100644 index 00000000..93dbb5ad --- /dev/null +++ b/controllers/comment.php @@ -0,0 +1,191 @@ +<?php + +namespace Controller; + +require_once __DIR__.'/base.php'; + +/** + * Comment controller + * + * @package controller + * @author Frederic Guillot + */ +class Comment extends Base +{ + /** + * Forbidden page for comments + * + * @access public + */ + public function forbidden() + { + $this->response->html($this->template->layout('comment_forbidden', array( + 'menu' => 'tasks', + 'title' => t('Access Forbidden') + ))); + } + + /** + * Add a comment + * + * @access public + */ + public function save() + { + $task = $this->task->getById($this->request->getIntegerParam('task_id'), true); + $values = $this->request->getValues(); + + if (! $task) $this->notfound(); + $this->checkProjectPermissions($task['project_id']); + + list($valid, $errors) = $this->comment->validateCreation($values); + + if ($valid) { + + if ($this->comment->create($values)) { + $this->session->flash(t('Comment added successfully.')); + } + else { + $this->session->flashError(t('Unable to create your comment.')); + } + + $this->response->redirect('?controller=task&action=show&task_id='.$task['id']); + } + + $this->showTask( + $task, + array('values' => $values, 'errors' => $errors) + ); + } + + /** + * Edit a comment + * + * @access public + */ + public function edit() + { + $task_id = $this->request->getIntegerParam('task_id'); + $comment_id = $this->request->getIntegerParam('comment_id'); + + $task = $this->task->getById($task_id, true); + $comment = $this->comment->getById($comment_id); + + if (! $task || ! $comment) $this->notfound(); + $this->checkProjectPermissions($task['project_id']); + + if ($this->acl->isAdminUser() || $comment['user_id'] == $this->acl->getUserId()) { + + $this->showTask( + $task, + array(), + array(), + array('values' => array('id' => $comment['id']), 'errors' => array()) + ); + } + + $this->forbidden(); + } + + /** + * Update and validate a comment + * + * @access public + */ + public function update() + { + $task_id = $this->request->getIntegerParam('task_id'); + $comment_id = $this->request->getIntegerParam('comment_id'); + + $task = $this->task->getById($task_id, true); + $comment = $this->comment->getById($comment_id); + + $values = $this->request->getValues(); + + if (! $task || ! $comment) $this->notfound(); + $this->checkProjectPermissions($task['project_id']); + + if ($this->acl->isAdminUser() || $comment['user_id'] == $this->acl->getUserId()) { + + list($valid, $errors) = $this->comment->validateModification($values); + + if ($valid) { + + if ($this->comment->update($values)) { + $this->session->flash(t('Comment updated successfully.')); + } + else { + $this->session->flashError(t('Unable to update your comment.')); + } + + $this->response->redirect('?controller=task&action=show&task_id='.$task['id'].'#comment-'.$comment_id); + } + + $this->showTask( + $task, + array(), + array(), + array('values' => $values, 'errors' => $errors) + ); + } + + $this->forbidden(); + } + + /** + * Confirmation dialog before removing a comment + * + * @access public + */ + public function confirm() + { + $project_id = $this->request->getIntegerParam('project_id'); + $comment_id = $this->request->getIntegerParam('comment_id'); + + $this->checkProjectPermissions($project_id); + + $comment = $this->comment->getById($comment_id); + if (! $comment) $this->notfound(); + + if ($this->acl->isAdminUser() || $comment['user_id'] == $this->acl->getUserId()) { + + $this->response->html($this->template->layout('comment_remove', array( + 'comment' => $comment, + 'project_id' => $project_id, + 'menu' => 'tasks', + 'title' => t('Remove a comment') + ))); + } + + $this->forbidden(); + } + + /** + * Remove a comment + * + * @access public + */ + public function remove() + { + $project_id = $this->request->getIntegerParam('project_id'); + $comment_id = $this->request->getIntegerParam('comment_id'); + + $this->checkProjectPermissions($project_id); + + $comment = $this->comment->getById($comment_id); + if (! $comment) $this->notfound(); + + if ($this->acl->isAdminUser() || $comment['user_id'] == $this->acl->getUserId()) { + + if ($this->comment->remove($comment['id'])) { + $this->session->flash(t('Comment removed successfully.')); + } else { + $this->session->flashError(t('Unable to remove this comment.')); + } + + $this->response->redirect('?controller=task&action=show&task_id='.$comment['task_id']); + } + + $this->forbidden(); + } +} diff --git a/controllers/task.php b/controllers/task.php index 0dae014e..7aefb98c 100644 --- a/controllers/task.php +++ b/controllers/task.php @@ -52,46 +52,6 @@ class Task extends Base } /** - * Display the template show task, common between different task view - * - * @access public - */ - private function showTask(array $task, array $comment_form = array(), array $description_form = array()) - { - if (empty($comment_form)) { - - $comment_form = array( - 'values' => array( - 'task_id' => $task['id'], - 'user_id' => $this->acl->getUserId() - ), - 'errors' => array() - ); - } - - if (empty($description_form)) { - - $description_form = array( - 'values' => array( - 'id' => $task['id'], - ), - 'errors' => array() - ); - } - - $this->response->html($this->template->layout('task_show', array( - 'comment_form' => $comment_form, - 'description_form' => $description_form, - 'comments' => $this->comment->getAll($task['id']), - 'task' => $task, - 'columns_list' => $this->board->getColumnsList($task['project_id']), - 'colors_list' => $this->task->getColors(), - 'menu' => 'tasks', - 'title' => $task['title'], - ))); - } - - /** * Show a task * * @access public @@ -107,39 +67,6 @@ class Task extends Base } /** - * Add a comment - * - * @access public - */ - public function comment() - { - $task = $this->task->getById($this->request->getIntegerParam('task_id'), true); - $values = $this->request->getValues(); - - if (! $task) $this->notfound(); - $this->checkProjectPermissions($task['project_id']); - - list($valid, $errors) = $this->comment->validateCreation($values); - - if ($valid) { - - if ($this->comment->create($values)) { - $this->session->flash(t('Comment added successfully.')); - } - else { - $this->session->flashError(t('Unable to create your comment.')); - } - - $this->response->redirect('?controller=task&action=show&task_id='.$task['id']); - } - - $this->showTask( - $task, - array('values' => $values, 'errors' => $errors) - ); - } - - /** * Add a description from the show task page * * @access public |