Add the possibility to remove a task

This commit is contained in:
Frédéric Guillot 2014-05-17 18:26:17 -04:00
parent 4d677b720e
commit f9c24f3c2c
13 changed files with 219 additions and 146 deletions

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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']);
}
/**
@ -302,16 +302,56 @@ class Task extends Base
* @access public
*/
public function confirmOpen()
{
$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_open', array(
'task' => $task,
'menu' => 'tasks',
'title' => t('Open a task')
)));
}
/**
* 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']);
$this->response->html($this->template->layout('task_open', array(
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('Open a task')
'title' => t('Remove a task')
)));
}

View File

@ -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"?' => '',
);

View File

@ -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 » ?',
);

View File

@ -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"?' => '',
);

View File

@ -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"?' => '',
);

View File

@ -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'),

View File

@ -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&amp;action=close&amp;task_id=<?= $task['id'] ?>" class="btn btn-red"><?= t('Yes') ?></a>
<?= t('or') ?> <a href="?controller=task&amp;action=show&amp;task_id=<?= $task['id'] ?>"><?= t('cancel') ?></a>
</div>
<div class="form-actions">
<a href="?controller=task&amp;action=close&amp;task_id=<?= $task['id'] ?>" class="btn btn-red"><?= t('Yes') ?></a>
<?= t('or') ?> <a href="?controller=task&amp;action=show&amp;task_id=<?= $task['id'] ?>"><?= t('cancel') ?></a>
</div>
</section>
</div>

16
templates/task_layout.php Normal file
View File

@ -0,0 +1,16 @@
<section id="main">
<div class="page-header">
<h2><?= Helper\escape($task['project_name']) ?> &gt; <?= t('Task #%d', $task['id']) ?></h2>
<ul>
<li><a href="?controller=board&amp;action=show&amp;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>

10
templates/task_remove.php Normal file
View File

@ -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&amp;action=remove&amp;task_id=<?= $task['id'] ?>" class="btn btn-red"><?= t('Yes') ?></a>
<?= t('or') ?> <a href="?controller=task&amp;action=show&amp;task_id=<?= $task['id'] ?>"><?= t('cancel') ?></a>
</div>
</div>

View File

@ -1,121 +1,89 @@
<section id="main">
<div class="page-header">
<h2><?= Helper\escape($task['project_name']) ?> &gt; <?= t('Task #%d', $task['id']) ?></h2>
<ul>
<li><a href="?controller=board&amp;action=show&amp;project_id=<?= $task['project_id'] ?>"><?= t('Back to the board') ?></a></li>
</ul>
<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&amp;action=description&amp;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>
<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 ?>
<?php if (! isset($hide_comment_form) || $hide_comment_form === false): ?>
<form method="post" action="?controller=comment&amp;action=save&amp;task_id=<?= $task['id'] ?>" autocomplete="off">
<?= 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>
<div class="form-actions">
<input type="submit" value="<?= t('Post comment') ?>" class="btn btn-blue"/>
</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&amp;action=duplicate&amp;project_id=<?= $task['project_id'] ?>&amp;task_id=<?= $task['id'] ?>"><?= t('Duplicate') ?></a></li>
<li><a href="?controller=task&amp;action=edit&amp;task_id=<?= $task['id'] ?>"><?= t('Edit') ?></a></li>
<li>
<?php if ($task['is_active'] == 1): ?>
<a href="?controller=task&amp;action=confirmClose&amp;task_id=<?= $task['id'] ?>"><?= t('Close this task') ?></a>
<?php else: ?>
<a href="?controller=task&amp;action=confirmOpen&amp;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>
<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&amp;action=description&amp;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>
<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 ?>
<?php if (! isset($hide_comment_form) || $hide_comment_form === false): ?>
<form method="post" action="?controller=comment&amp;action=save&amp;task_id=<?= $task['id'] ?>" autocomplete="off">
<?= 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>
<div class="form-actions">
<input type="submit" value="<?= t('Post comment') ?>" class="btn btn-blue"/>
</div>
</form>
<?php endif ?>
</div>
</section>
</section>
</form>
<?php endif ?>

View File

@ -0,0 +1,17 @@
<div class="task-show-sidebar">
<h2><?= t('Actions') ?></h2>
<div class="task-show-actions">
<ul>
<li><a href="?controller=task&amp;action=duplicate&amp;project_id=<?= $task['project_id'] ?>&amp;task_id=<?= $task['id'] ?>"><?= t('Duplicate') ?></a></li>
<li><a href="?controller=task&amp;action=edit&amp;task_id=<?= $task['id'] ?>"><?= t('Edit') ?></a></li>
<li>
<?php if ($task['is_active'] == 1): ?>
<a href="?controller=task&amp;action=confirmClose&amp;task_id=<?= $task['id'] ?>"><?= t('Close this task') ?></a>
<?php else: ?>
<a href="?controller=task&amp;action=confirmOpen&amp;task_id=<?= $task['id'] ?>"><?= t('Open this task') ?></a>
<?php endif ?>
</li>
<li><a href="?controller=task&amp;action=confirmRemove&amp;task_id=<?= $task['id'] ?>"><?= t('Remove') ?></a></li>
</ul>
</div>
</div>