diff options
author | Frédéric Guillot <fred@kanboard.net> | 2014-05-17 18:26:17 -0400 |
---|---|---|
committer | Frédéric Guillot <fred@kanboard.net> | 2014-05-17 18:26:17 -0400 |
commit | f9c24f3c2c46eccd18e70704c0e8767fa6023206 (patch) | |
tree | 0e26337e3910ef10a88a8093967748ce54bcc701 | |
parent | 4d677b720e818f9d14585479699335ec41ed3541 (diff) |
Add the possibility to remove a task
-rw-r--r-- | assets/css/app.css | 5 | ||||
-rw-r--r-- | controllers/base.php | 17 | ||||
-rw-r--r-- | controllers/task.php | 52 | ||||
-rw-r--r-- | locales/es_ES/translations.php | 4 | ||||
-rw-r--r-- | locales/fr_FR/translations.php | 4 | ||||
-rw-r--r-- | locales/pl_PL/translations.php | 4 | ||||
-rw-r--r-- | locales/pt_BR/translations.php | 4 | ||||
-rw-r--r-- | models/acl.php | 2 | ||||
-rw-r--r-- | templates/task_close.php | 22 | ||||
-rw-r--r-- | templates/task_layout.php | 16 | ||||
-rw-r--r-- | templates/task_remove.php | 10 | ||||
-rw-r--r-- | templates/task_show.php | 196 | ||||
-rw-r--r-- | templates/task_sidebar.php | 17 |
13 files changed, 213 insertions, 140 deletions
diff --git a/assets/css/app.css b/assets/css/app.css index 8d89f01c..dbb302fd 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -881,8 +881,5 @@ tr td.task-orange, /* confirmation box */ .confirm { max-width: 700px; - padding-top: 5px; - padding-bottom: 5px; - padding-left: 15px; - border-left: 2px dotted #ddd; + font-size: 1.1em; } diff --git a/controllers/base.php b/controllers/base.php index 37353ff0..07c5db63 100644 --- a/controllers/base.php +++ b/controllers/base.php @@ -289,7 +289,7 @@ abstract class Base $hide_comment_form = true; } - $this->response->html($this->template->layout('task_show', array( + $this->response->html($this->taskLayout('task_show', array( 'hide_comment_form' => isset($hide_comment_form), 'comment_edit_form' => $comment_edit_form, 'comment_form' => $comment_form, @@ -302,4 +302,19 @@ abstract class Base 'title' => $task['title'], ))); } + + /** + * Common layout for task views + * + * @access protected + * @param string $template Template name + * @param array $params Template parameters + */ + protected function taskLayout($template, array $params) + { + $content = $this->template->load($template, $params); + $params['task_content_for_layout'] = $content; + + return $this->template->layout('task_layout', $params); + } } diff --git a/controllers/task.php b/controllers/task.php index 9065c576..f5738a55 100644 --- a/controllers/task.php +++ b/controllers/task.php @@ -253,7 +253,7 @@ class Task extends Base $this->session->flashError(t('Unable to close this task.')); } - $this->response->redirect('?controller=board&action=show&project_id='.$task['project_id']); + $this->response->redirect('?controller=task&action=show&task_id='.$task['id']); } /** @@ -263,12 +263,12 @@ class Task extends Base */ public function confirmClose() { - $task = $this->task->getById($this->request->getIntegerParam('task_id')); + $task = $this->task->getById($this->request->getIntegerParam('task_id'), true); if (! $task) $this->notfound(); $this->checkProjectPermissions($task['project_id']); - $this->response->html($this->template->layout('task_close', array( + $this->response->html($this->taskLayout('task_close', array( 'task' => $task, 'menu' => 'tasks', 'title' => t('Close a task') @@ -293,7 +293,7 @@ class Task extends Base $this->session->flashError(t('Unable to open this task.')); } - $this->response->redirect('?controller=board&action=show&project_id='.$task['project_id']); + $this->response->redirect('?controller=task&action=show&task_id='.$task['id']); } /** @@ -303,12 +303,12 @@ class Task extends Base */ public function confirmOpen() { - $task = $this->task->getById($this->request->getIntegerParam('task_id')); + $task = $this->task->getById($this->request->getIntegerParam('task_id'), true); if (! $task) $this->notfound(); $this->checkProjectPermissions($task['project_id']); - $this->response->html($this->template->layout('task_open', array( + $this->response->html($this->taskLayout('task_open', array( 'task' => $task, 'menu' => 'tasks', 'title' => t('Open a task') @@ -316,6 +316,46 @@ class Task extends Base } /** + * Remove a task + * + * @access public + */ + public function remove() + { + $task = $this->task->getById($this->request->getIntegerParam('task_id')); + + if (! $task) $this->notfound(); + $this->checkProjectPermissions($task['project_id']); + + 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']); + } + + /** + * Confirmation dialog before removing a task + * + * @access public + */ + public function confirmRemove() + { + $task = $this->task->getById($this->request->getIntegerParam('task_id'), true); + + if (! $task) $this->notfound(); + $this->checkProjectPermissions($task['project_id']); + + $this->response->html($this->taskLayout('task_remove', array( + 'task' => $task, + 'menu' => 'tasks', + 'title' => t('Remove a task') + ))); + } + + /** * Duplicate a task (fill the form for a new task) * * @access public diff --git a/locales/es_ES/translations.php b/locales/es_ES/translations.php index ea7da4ba..e1d54c03 100644 --- a/locales/es_ES/translations.php +++ b/locales/es_ES/translations.php @@ -305,4 +305,8 @@ return array( // 'Login with my Google Account' => '', // 'Project not found.' => '', // 'Task #%d' => '', + // 'Task removed successfully.' => '', + // 'Unable to remove this task.' => '', + // 'Remove a task' => '', + // 'Do you really want to remove this task: "%s"?' => '', ); diff --git a/locales/fr_FR/translations.php b/locales/fr_FR/translations.php index 0db18901..ac216c9b 100644 --- a/locales/fr_FR/translations.php +++ b/locales/fr_FR/translations.php @@ -305,4 +305,8 @@ return array( 'Login with my Google Account' => 'Se connecter avec mon compte Google', 'Project not found.' => 'Projet introuvable.', 'Task #%d' => 'Tâche n°%d', + 'Task removed successfully.' => 'Tâche supprimée avec succès.', + 'Unable to remove this task.' => 'Impossible de supprimer cette tâche.', + 'Remove a task' => 'Supprimer une tâche', + 'Do you really want to remove this task: "%s"?' => 'Voulez-vous vraiment supprimer cette tâche « %s » ?', ); diff --git a/locales/pl_PL/translations.php b/locales/pl_PL/translations.php index d2018ef8..a8feb807 100644 --- a/locales/pl_PL/translations.php +++ b/locales/pl_PL/translations.php @@ -310,4 +310,8 @@ return array( // 'Login with my Google Account' => '', // 'Project not found.' => '', // 'Task #%d' => '', + // 'Task removed successfully.' => '', + // 'Unable to remove this task.' => '', + // 'Remove a task' => '', + // 'Do you really want to remove this task: "%s"?' => '', ); diff --git a/locales/pt_BR/translations.php b/locales/pt_BR/translations.php index 9ef5a7f8..ffb578c5 100644 --- a/locales/pt_BR/translations.php +++ b/locales/pt_BR/translations.php @@ -306,4 +306,8 @@ return array( // 'Login with my Google Account' => '', // 'Project not found.' => '', // 'Task #%d' => '', + // 'Task removed successfully.' => '', + // 'Unable to remove this task.' => '', + // 'Remove a task' => '', + // 'Do you really want to remove this task: "%s"?' => '', ); diff --git a/models/acl.php b/models/acl.php index 4ab3ff41..0d1cd06e 100644 --- a/models/acl.php +++ b/models/acl.php @@ -34,7 +34,7 @@ class Acl extends Base 'app' => array('index'), 'board' => array('index', 'show', 'assign', 'assigntask', 'save', 'check'), 'project' => array('tasks', 'index', 'forbidden', 'search'), - 'task' => array('show', 'create', 'save', 'edit', 'update', 'close', 'confirmclose', 'open', 'confirmopen', 'description', 'duplicate'), + 'task' => array('show', 'create', 'save', 'edit', 'update', 'close', 'confirmclose', 'open', 'confirmopen', 'description', 'duplicate', 'remove', 'confirmremove'), 'comment' => array('save', 'confirm', 'remove', 'update', 'edit'), 'user' => array('index', 'edit', 'update', 'forbidden', 'logout', 'index', 'unlinkgoogle'), 'config' => array('index', 'removeremembermetoken'), diff --git a/templates/task_close.php b/templates/task_close.php index 6bc32813..3531b37d 100644 --- a/templates/task_close.php +++ b/templates/task_close.php @@ -1,16 +1,10 @@ -<section id="main"> - <div class="page-header"> - <h2><?= t('Close a task') ?></h2> - </div> - - <div class="confirm"> - <p class="alert alert-info"> - <?= t('Do you really want to close this task: "%s"?', Helper\escape($task['title'])) ?> - </p> +<div class="confirm"> + <p class="alert alert-info"> + <?= t('Do you really want to close this task: "%s"?', Helper\escape($task['title'])) ?> + </p> - <div class="form-actions"> - <a href="?controller=task&action=close&task_id=<?= $task['id'] ?>" class="btn btn-red"><?= t('Yes') ?></a> - <?= t('or') ?> <a href="?controller=task&action=show&task_id=<?= $task['id'] ?>"><?= t('cancel') ?></a> - </div> + <div class="form-actions"> + <a href="?controller=task&action=close&task_id=<?= $task['id'] ?>" class="btn btn-red"><?= t('Yes') ?></a> + <?= t('or') ?> <a href="?controller=task&action=show&task_id=<?= $task['id'] ?>"><?= t('cancel') ?></a> </div> -</section>
\ No newline at end of file +</div>
\ No newline at end of file diff --git a/templates/task_layout.php b/templates/task_layout.php new file mode 100644 index 00000000..9a6bbd00 --- /dev/null +++ b/templates/task_layout.php @@ -0,0 +1,16 @@ +<section id="main"> + <div class="page-header"> + <h2><?= Helper\escape($task['project_name']) ?> > <?= t('Task #%d', $task['id']) ?></h2> + <ul> + <li><a href="?controller=board&action=show&project_id=<?= $task['project_id'] ?>"><?= t('Back to the board') ?></a></li> + </ul> + </div> + <section class="task-show"> + + <?= Helper\template('task_sidebar', array('task' => $task)) ?> + + <div class="task-show-main"> + <?= $task_content_for_layout ?> + </div> + </section> +</section>
\ No newline at end of file diff --git a/templates/task_remove.php b/templates/task_remove.php new file mode 100644 index 00000000..1aa9503b --- /dev/null +++ b/templates/task_remove.php @@ -0,0 +1,10 @@ +<div class="confirm"> + <p class="alert alert-info"> + <?= t('Do you really want to remove this task: "%s"?', Helper\escape($task['title'])) ?> + </p> + + <div class="form-actions"> + <a href="?controller=task&action=remove&task_id=<?= $task['id'] ?>" class="btn btn-red"><?= t('Yes') ?></a> + <?= t('or') ?> <a href="?controller=task&action=show&task_id=<?= $task['id'] ?>"><?= t('cancel') ?></a> + </div> +</div>
\ No newline at end of file diff --git a/templates/task_show.php b/templates/task_show.php index b16a20a0..f0cea410 100644 --- a/templates/task_show.php +++ b/templates/task_show.php @@ -1,121 +1,89 @@ -<section id="main"> - <div class="page-header"> - <h2><?= Helper\escape($task['project_name']) ?> > <?= t('Task #%d', $task['id']) ?></h2> - <ul> - <li><a href="?controller=board&action=show&project_id=<?= $task['project_id'] ?>"><?= t('Back to the board') ?></a></li> - </ul> - </div> - <section class="task-show"> - - <div class="task-show-sidebar"> - - <h2><?= t('Actions') ?></h2> - <div class="task-show-actions"> - <ul> - <li><a href="?controller=task&action=duplicate&project_id=<?= $task['project_id'] ?>&task_id=<?= $task['id'] ?>"><?= t('Duplicate') ?></a></li> - <li><a href="?controller=task&action=edit&task_id=<?= $task['id'] ?>"><?= t('Edit') ?></a></li> - <li> - <?php if ($task['is_active'] == 1): ?> - <a href="?controller=task&action=confirmClose&task_id=<?= $task['id'] ?>"><?= t('Close this task') ?></a> - <?php else: ?> - <a href="?controller=task&action=confirmOpen&task_id=<?= $task['id'] ?>"><?= t('Open this task') ?></a> - <?php endif ?> - </li> - </ul> - </div> - </div> - - <div class="task-show-main"> - <article class="task task-<?= $task['color_id'] ?> task-show-details"> - <h2><?= Helper\escape($task['title']) ?></h2> - <?php if ($task['score']): ?> - <span class="task-score"><?= Helper\escape($task['score']) ?></span> - <?php endif ?> - <ul> - <li> - <?= dt('Created on %B %e, %G at %k:%M %p', $task['date_creation']) ?> - </li> - <?php if ($task['date_completed']): ?> - <li> - <?= dt('Completed on %B %e, %G at %k:%M %p', $task['date_completed']) ?> - </li> - <?php endif ?> - <?php if ($task['date_due']): ?> - <li> - <strong><?= dt('Must be done before %B %e, %G', $task['date_due']) ?></strong> - </li> - <?php endif ?> - <li> - <strong> - <?php if ($task['username']): ?> - <?= t('Assigned to %s', $task['username']) ?> - <?php else: ?> - <?= t('There is nobody assigned') ?> - <?php endif ?> - </strong> - </li> - <li> - <?= t('Column on the board:') ?> - <strong><?= Helper\escape($task['column_title']) ?></strong> - (<?= Helper\escape($task['project_name']) ?>) - </li> - <li> - <?php if ($task['is_active'] == 1): ?> - <?= t('Status is open') ?> - <?php else: ?> - <?= t('Status is closed') ?> - <?php endif ?> - </li> - </ul> - </article> +<article class="task task-<?= $task['color_id'] ?> task-show-details"> + <h2><?= Helper\escape($task['title']) ?></h2> +<?php if ($task['score']): ?> + <span class="task-score"><?= Helper\escape($task['score']) ?></span> +<?php endif ?> +<ul> + <li> + <?= dt('Created on %B %e, %G at %k:%M %p', $task['date_creation']) ?> + </li> + <?php if ($task['date_completed']): ?> + <li> + <?= dt('Completed on %B %e, %G at %k:%M %p', $task['date_completed']) ?> + </li> + <?php endif ?> + <?php if ($task['date_due']): ?> + <li> + <strong><?= dt('Must be done before %B %e, %G', $task['date_due']) ?></strong> + </li> + <?php endif ?> + <li> + <strong> + <?php if ($task['username']): ?> + <?= t('Assigned to %s', $task['username']) ?> + <?php else: ?> + <?= t('There is nobody assigned') ?> + <?php endif ?> + </strong> + </li> + <li> + <?= t('Column on the board:') ?> + <strong><?= Helper\escape($task['column_title']) ?></strong> + (<?= Helper\escape($task['project_name']) ?>) + </li> + <li> + <?php if ($task['is_active'] == 1): ?> + <?= t('Status is open') ?> + <?php else: ?> + <?= t('Status is closed') ?> + <?php endif ?> + </li> +</ul> +</article> - <h2><?= t('Description') ?></h2> - <?php if ($task['description']): ?> - <article class="markdown task-show-description"> - <?= Helper\parse($task['description']) ?: t('There is no description.') ?> - </article> - <?php else: ?> - <form method="post" action="?controller=task&action=description&task_id=<?= $task['id'] ?>" autocomplete="off"> +<h2><?= t('Description') ?></h2> +<?php if ($task['description']): ?> + <article class="markdown task-show-description"> + <?= Helper\parse($task['description']) ?: t('There is no description.') ?> + </article> +<?php else: ?> + <form method="post" action="?controller=task&action=description&task_id=<?= $task['id'] ?>" autocomplete="off"> - <?= Helper\form_hidden('id', $description_form['values']) ?> - <?= Helper\form_textarea('description', $description_form['values'], $description_form['errors'], array('required', 'placeholder="'.t('Leave a description').'"')) ?><br/> - <div class="form-help"><a href="http://kanboard.net/documentation/syntax-guide" target="_blank" rel="noreferrer"><?= t('Write your text in Markdown') ?></a></div> + <?= Helper\form_hidden('id', $description_form['values']) ?> + <?= Helper\form_textarea('description', $description_form['values'], $description_form['errors'], array('required', 'placeholder="'.t('Leave a description').'"')) ?><br/> + <div class="form-help"><a href="http://kanboard.net/documentation/syntax-guide" target="_blank" rel="noreferrer"><?= t('Write your text in Markdown') ?></a></div> - <div class="form-actions"> - <input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/> - </div> - </form> - <?php endif ?> - - <h2><?= t('Comments') ?></h2> - <?php if ($comments): ?> - <ul id="comments"> - <?php foreach ($comments as $comment): ?> - <?= Helper\template('comment_show', array( - 'comment' => $comment, - 'task' => $task, - 'display_edit_form' => $comment['id'] == $comment_edit_form['values']['id'], - 'values' => $comment_edit_form['values'] + array('comment' => $comment['comment']), - 'errors' => $comment_edit_form['errors'] - )) ?> - <?php endforeach ?> - </ul> - <?php endif ?> + <div class="form-actions"> + <input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/> + </div> + </form> +<?php endif ?> - <?php if (! isset($hide_comment_form) || $hide_comment_form === false): ?> - <form method="post" action="?controller=comment&action=save&task_id=<?= $task['id'] ?>" autocomplete="off"> +<h2><?= t('Comments') ?></h2> +<?php if ($comments): ?> + <ul id="comments"> + <?php foreach ($comments as $comment): ?> + <?= Helper\template('comment_show', array( + 'comment' => $comment, + 'task' => $task, + 'display_edit_form' => $comment['id'] == $comment_edit_form['values']['id'], + 'values' => $comment_edit_form['values'] + array('comment' => $comment['comment']), + 'errors' => $comment_edit_form['errors'] + )) ?> + <?php endforeach ?> + </ul> +<?php endif ?> - <?= Helper\form_hidden('task_id', $comment_form['values']) ?> - <?= Helper\form_hidden('user_id', $comment_form['values']) ?> - <?= Helper\form_textarea('comment', $comment_form['values'], $comment_form['errors'], array('required', 'placeholder="'.t('Leave a comment').'"'), 'comment-textarea') ?><br/> - <div class="form-help"><a href="http://kanboard.net/documentation/syntax-guide" target="_blank" rel="noreferrer"><?= t('Write your text in Markdown') ?></a></div> +<?php if (! isset($hide_comment_form) || $hide_comment_form === false): ?> +<form method="post" action="?controller=comment&action=save&task_id=<?= $task['id'] ?>" autocomplete="off"> - <div class="form-actions"> - <input type="submit" value="<?= t('Post comment') ?>" class="btn btn-blue"/> - </div> - </form> - <?php endif ?> - </div> + <?= Helper\form_hidden('task_id', $comment_form['values']) ?> + <?= Helper\form_hidden('user_id', $comment_form['values']) ?> + <?= Helper\form_textarea('comment', $comment_form['values'], $comment_form['errors'], array('required', 'placeholder="'.t('Leave a comment').'"'), 'comment-textarea') ?><br/> + <div class="form-help"><a href="http://kanboard.net/documentation/syntax-guide" target="_blank" rel="noreferrer"><?= t('Write your text in Markdown') ?></a></div> - </section> -</section> + <div class="form-actions"> + <input type="submit" value="<?= t('Post comment') ?>" class="btn btn-blue"/> + </div> +</form> +<?php endif ?>
\ No newline at end of file diff --git a/templates/task_sidebar.php b/templates/task_sidebar.php new file mode 100644 index 00000000..314d5214 --- /dev/null +++ b/templates/task_sidebar.php @@ -0,0 +1,17 @@ +<div class="task-show-sidebar"> + <h2><?= t('Actions') ?></h2> + <div class="task-show-actions"> + <ul> + <li><a href="?controller=task&action=duplicate&project_id=<?= $task['project_id'] ?>&task_id=<?= $task['id'] ?>"><?= t('Duplicate') ?></a></li> + <li><a href="?controller=task&action=edit&task_id=<?= $task['id'] ?>"><?= t('Edit') ?></a></li> + <li> + <?php if ($task['is_active'] == 1): ?> + <a href="?controller=task&action=confirmClose&task_id=<?= $task['id'] ?>"><?= t('Close this task') ?></a> + <?php else: ?> + <a href="?controller=task&action=confirmOpen&task_id=<?= $task['id'] ?>"><?= t('Open this task') ?></a> + <?php endif ?> + </li> + <li><a href="?controller=task&action=confirmRemove&task_id=<?= $task['id'] ?>"><?= t('Remove') ?></a></li> + </ul> + </div> +</div>
\ No newline at end of file |