From 7bb09c3f9b3440cf297104f32e80050601d61533 Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Mon, 1 Sep 2014 21:10:27 -0800 Subject: Improve task controller and fix bug description popover --- app/Controller/Task.php | 153 +++++++++++++------------------- app/Model/Acl.php | 18 +--- app/Templates/board_task.php | 2 +- app/Templates/task_close.php | 2 +- app/Templates/task_edit_description.php | 2 +- app/Templates/task_open.php | 2 +- app/Templates/task_remove.php | 2 +- app/Templates/task_sidebar.php | 8 +- assets/js/app.js | 35 +++++--- 9 files changed, 96 insertions(+), 128 deletions(-) diff --git a/app/Controller/Task.php b/app/Controller/Task.php index e905ef30..444065f0 100644 --- a/app/Controller/Task.php +++ b/app/Controller/Task.php @@ -233,26 +233,20 @@ class Task extends Base */ public function close() { - $this->checkCSRFParam(); $task = $this->getTask(); - if ($this->task->close($task['id'])) { - $this->session->flash(t('Task closed successfully.')); - } else { - $this->session->flashError(t('Unable to close this task.')); - } + if ($this->request->getStringParam('confirmation') === 'yes') { - $this->response->redirect('?controller=task&action=show&task_id='.$task['id']); - } + $this->checkCSRFParam(); - /** - * Confirmation dialog before to close a task - * - * @access public - */ - public function confirmClose() - { - $task = $this->getTask(); + if ($this->task->close($task['id'])) { + $this->session->flash(t('Task closed successfully.')); + } else { + $this->session->flashError(t('Unable to close this task.')); + } + + $this->response->redirect('?controller=task&action=show&task_id='.$task['id']); + } $this->response->html($this->taskLayout('task_close', array( 'task' => $task, @@ -268,26 +262,20 @@ class Task extends Base */ public function open() { - $this->checkCSRFParam(); $task = $this->getTask(); - if ($this->task->open($task['id'])) { - $this->session->flash(t('Task opened successfully.')); - } else { - $this->session->flashError(t('Unable to open this task.')); - } + if ($this->request->getStringParam('confirmation') === 'yes') { - $this->response->redirect('?controller=task&action=show&task_id='.$task['id']); - } + $this->checkCSRFParam(); - /** - * Confirmation dialog before to open a task - * - * @access public - */ - public function confirmOpen() - { - $task = $this->getTask(); + if ($this->task->open($task['id'])) { + $this->session->flash(t('Task opened successfully.')); + } else { + $this->session->flashError(t('Unable to open this task.')); + } + + $this->response->redirect('?controller=task&action=show&task_id='.$task['id']); + } $this->response->html($this->taskLayout('task_open', array( 'task' => $task, @@ -303,26 +291,20 @@ class Task extends Base */ public function remove() { - $this->checkCSRFParam(); $task = $this->getTask(); - if ($this->task->remove($task['id'])) { - $this->session->flash(t('Task removed successfully.')); - } else { - $this->session->flashError(t('Unable to remove this task.')); - } + if ($this->request->getStringParam('confirmation') === 'yes') { - $this->response->redirect('?controller=board&action=show&project_id='.$task['project_id']); - } + $this->checkCSRFParam(); - /** - * Confirmation dialog before removing a task - * - * @access public - */ - public function confirmRemove() - { - $task = $this->getTask(); + if ($this->task->remove($task['id'])) { + $this->session->flash(t('Task removed successfully.')); + } else { + $this->session->flashError(t('Unable to remove this task.')); + } + + $this->response->redirect('?controller=board&action=show&project_id='.$task['project_id']); + } $this->response->html($this->taskLayout('task_remove', array( 'task' => $task, @@ -366,63 +348,54 @@ class Task extends Base * * @access public */ - public function editDescription() + public function description() { $task = $this->getTask(); + $ajax = $this->request->isAjax() || $this->request->getIntegerParam('ajax'); - $params = array( - 'values' => $task, - 'errors' => array(), - 'task' => $task, - 'ajax' => $this->request->isAjax(), - 'menu' => 'tasks', - 'title' => t('Edit the description'), - ); - - if ($this->request->isAjax()) { - $this->response->html($this->template->load('task_edit_description', $params)); - } - else { - $this->response->html($this->taskLayout('task_edit_description', $params)); - } - } + if ($this->request->isPost()) { - /** - * Save and validation the description - * - * @access public - */ - public function saveDescription() - { - $task = $this->getTask(); - $values = $this->request->getValues(); + $values = $this->request->getValues(); - list($valid, $errors) = $this->task->validateDescriptionCreation($values); + list($valid, $errors) = $this->task->validateDescriptionCreation($values); - if ($valid) { + if ($valid) { - if ($this->task->update($values)) { - $this->session->flash(t('Task updated successfully.')); - } - else { - $this->session->flashError(t('Unable to update your task.')); - } + if ($this->task->update($values)) { + $this->session->flash(t('Task updated successfully.')); + } + else { + $this->session->flashError(t('Unable to update your task.')); + } - if ($this->request->getIntegerParam('ajax')) { - $this->response->redirect('?controller=board&action=show&project_id='.$task['project_id']); - } - else { - $this->response->redirect('?controller=task&action=show&task_id='.$task['id']); + if ($ajax) { + $this->response->redirect('?controller=board&action=show&project_id='.$task['project_id']); + } + else { + $this->response->redirect('?controller=task&action=show&task_id='.$task['id']); + } } } + else { + $values = $task; + $errors = array(); + } - $this->response->html($this->taskLayout('task_edit_description', array( + $params = array( 'values' => $values, 'errors' => $errors, 'task' => $task, + 'ajax' => $ajax, 'menu' => 'tasks', - 'title' => t('Edit the description') - ))); + 'title' => t('Edit the description'), + ); + + if ($ajax) { + $this->response->html($this->template->load('task_edit_description', $params)); + } + else { + $this->response->html($this->taskLayout('task_edit_description', $params)); + } } /** diff --git a/app/Model/Acl.php b/app/Model/Acl.php index 23f6ff44..f2b287be 100644 --- a/app/Model/Acl.php +++ b/app/Model/Acl.php @@ -37,23 +37,7 @@ class Acl extends Base 'comment' => array('create', 'save', 'confirm', 'remove', 'update', 'edit', 'forbidden'), 'file' => array('create', 'save', 'download', 'confirm', 'remove', 'open', 'image'), 'subtask' => array('create', 'save', 'edit', 'update', 'confirm', 'remove'), - 'task' => array( - 'show', - 'create', - 'save', - 'edit', - 'update', - 'close', - 'confirmclose', - 'open', - 'confirmopen', - 'duplicate', - 'remove', - 'confirmremove', - 'editdescription', - 'savedescription', - 'move', - ), + 'task' => array('show', 'create', 'save', 'edit', 'update', 'close', 'open', 'duplicate', 'remove', 'description', 'move', 'copy'), ); /** diff --git a/app/Templates/board_task.php b/app/Templates/board_task.php index 0bc96579..4370558b 100644 --- a/app/Templates/board_task.php +++ b/app/Templates/board_task.php @@ -69,7 +69,7 @@ - '> + diff --git a/app/Templates/task_close.php b/app/Templates/task_close.php index 5c75b72b..2abfd032 100644 --- a/app/Templates/task_close.php +++ b/app/Templates/task_close.php @@ -8,7 +8,7 @@

- +
\ No newline at end of file diff --git a/app/Templates/task_edit_description.php b/app/Templates/task_edit_description.php index d403190f..2d2a4d0b 100644 --- a/app/Templates/task_edit_description.php +++ b/app/Templates/task_edit_description.php @@ -2,7 +2,7 @@

-
+ diff --git a/app/Templates/task_open.php b/app/Templates/task_open.php index 3526ec81..d28970e3 100644 --- a/app/Templates/task_open.php +++ b/app/Templates/task_open.php @@ -8,7 +8,7 @@

- +
\ No newline at end of file diff --git a/app/Templates/task_remove.php b/app/Templates/task_remove.php index dd4841db..496ac2d8 100644 --- a/app/Templates/task_remove.php +++ b/app/Templates/task_remove.php @@ -8,7 +8,7 @@

- +
\ No newline at end of file diff --git a/app/Templates/task_sidebar.php b/app/Templates/task_sidebar.php index 5d93d7b1..4d363fec 100644 --- a/app/Templates/task_sidebar.php +++ b/app/Templates/task_sidebar.php @@ -4,7 +4,7 @@ \ No newline at end of file diff --git a/assets/js/app.js b/assets/js/app.js index 20af61eb..68da5fcb 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -9,22 +9,30 @@ var Kanboard = (function() { e.preventDefault(); e.stopPropagation(); - $.get(e.target.getAttribute("href"), function(content) { + var link = e.target.getAttribute("href"); - $("body").append('
' + content + '
'); + if (! link) { + link = e.target.getAttribute("data-href"); + } - $("#popover-container").click(function() { - $(this).remove(); - }); + if (link) { + $.get(link, function(content) { - $("#popover-content").click(function(e) { - e.stopPropagation(); - }); + $("body").append('
' + content + '
'); - if (callback) { - callback(); - } - }); + $("#popover-container").click(function() { + $(this).remove(); + }); + + $("#popover-content").click(function(e) { + e.stopPropagation(); + }); + + if (callback) { + callback(); + } + }); + } }, // Return true if the page is visible @@ -89,6 +97,9 @@ Kanboard.Board = (function() { Kanboard.Popover(e, Kanboard.Task.Init); }); + // Description popover + $(".task-description-popover").click(Kanboard.Popover); + // Redirect to the task details page $("[data-task-id]").each(function() { $(this).click(function() { -- cgit v1.2.3