summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/css/app.css5
-rw-r--r--controllers/base.php17
-rw-r--r--controllers/task.php52
-rw-r--r--locales/es_ES/translations.php4
-rw-r--r--locales/fr_FR/translations.php4
-rw-r--r--locales/pl_PL/translations.php4
-rw-r--r--locales/pt_BR/translations.php4
-rw-r--r--models/acl.php2
-rw-r--r--templates/task_close.php22
-rw-r--r--templates/task_layout.php16
-rw-r--r--templates/task_remove.php10
-rw-r--r--templates/task_show.php196
-rw-r--r--templates/task_sidebar.php17
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&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> \ 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']) ?> &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> \ 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&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> \ 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']) ?> &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">
-
- <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>
+<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">
+<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>
+ <?= 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&amp;action=save&amp;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&amp;action=save&amp;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&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> \ No newline at end of file