summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/Controller/Board.php70
-rw-r--r--app/Controller/Subtask.php10
-rw-r--r--app/Model/Acl.php2
-rw-r--r--app/Model/SubTask.php22
-rw-r--r--app/Template/board/comments.php13
-rw-r--r--app/Template/board/description.php5
-rw-r--r--app/Template/board/files.php14
-rw-r--r--app/Template/board/subtasks.php16
-rw-r--r--app/Template/board/task.php8
-rw-r--r--app/Template/subtask/icons.php7
-rw-r--r--app/Template/subtask_show.php8
-rw-r--r--app/helpers.php5
12 files changed, 158 insertions, 22 deletions
diff --git a/app/Controller/Board.php b/app/Controller/Board.php
index bdc82136..f04e847f 100644
--- a/app/Controller/Board.php
+++ b/app/Controller/Board.php
@@ -405,4 +405,74 @@ class Board extends Base
$this->response->status(401);
}
}
+
+ /**
+ * Get subtasks on mouseover
+ *
+ * @access public
+ */
+ public function subtasks()
+ {
+ $task = $this->getTask();
+ $this->response->html($this->template->load('board/subtasks', array(
+ 'subtasks' => $this->subTask->getAll($task['id'])
+ )));
+ }
+
+ /**
+ * Change the status of a subtask from the mouseover
+ *
+ * @access public
+ */
+ public function toggleSubtask()
+ {
+ $task = $this->getTask();
+ $this->subTask->toggleStatus($this->request->getIntegerParam('subtask_id'));
+
+ $this->response->html($this->template->load('board/subtasks', array(
+ 'subtasks' => $this->subTask->getAll($task['id'])
+ )));
+ }
+
+ /**
+ * Display all attachments during the task mouseover
+ *
+ * @access public
+ */
+ public function attachments()
+ {
+ $task = $this->getTask();
+
+ $this->response->html($this->template->load('board/files', array(
+ 'files' => $this->file->getAll($task['id'])
+ )));
+ }
+
+ /**
+ * Display comments during a task mouseover
+ *
+ * @access public
+ */
+ public function comments()
+ {
+ $task = $this->getTask();
+
+ $this->response->html($this->template->load('board/comments', array(
+ 'comments' => $this->comment->getAll($task['id'])
+ )));
+ }
+
+ /**
+ * Display the description
+ *
+ * @access public
+ */
+ public function description()
+ {
+ $task = $this->getTask();
+
+ $this->response->html($this->template->load('board/description', array(
+ 'task' => $task
+ )));
+ }
}
diff --git a/app/Controller/Subtask.php b/app/Controller/Subtask.php
index bc50b5e1..e48e7767 100644
--- a/app/Controller/Subtask.php
+++ b/app/Controller/Subtask.php
@@ -183,15 +183,9 @@ class Subtask extends Base
public function toggleStatus()
{
$task = $this->getTask();
- $subtask = $this->getSubtask();
-
- $value = array(
- 'id' => $subtask['id'],
- 'status' => ($subtask['status'] + 1) % 3,
- 'task_id' => $task['id'],
- );
+ $subtask_id = $this->request->getIntegerParam('subtask_id');
- if (! $this->subTask->update($value)) {
+ if (! $this->subTask->toggleStatus($subtask_id)) {
$this->session->flashError(t('Unable to update your sub-task.'));
}
diff --git a/app/Model/Acl.php b/app/Model/Acl.php
index d96d5deb..4a5032d3 100644
--- a/app/Model/Acl.php
+++ b/app/Model/Acl.php
@@ -32,8 +32,8 @@ class Acl extends Base
*/
private $user_actions = array(
'app' => array('index', 'preview'),
- 'board' => array('index', 'show', 'save', 'check', 'changeassignee', 'updateassignee', 'changecategory', 'updatecategory', 'movecolumn', 'edit', 'update', 'add', 'confirm', 'remove'),
'project' => array('index', 'show', 'exporttasks', 'exportdaily', 'share', 'edit', 'update', 'users', 'remove', 'duplicate', 'disable', 'enable', 'activity', 'search', 'tasks', 'create', 'save'),
+ 'board' => array('index', 'show', 'save', 'check', 'changeassignee', 'updateassignee', 'changecategory', 'updatecategory', 'movecolumn', 'edit', 'update', 'add', 'confirm', 'remove', 'subtasks', 'togglesubtask', 'attachments', 'comments', 'description'),
'user' => array('edit', 'forbidden', 'logout', 'show', 'external', 'unlinkgoogle', 'unlinkgithub', 'sessions', 'removesession', 'last', 'notifications', 'password'),
'comment' => array('create', 'save', 'confirm', 'remove', 'update', 'edit', 'forbidden'),
'file' => array('create', 'save', 'download', 'confirm', 'remove', 'open', 'image'),
diff --git a/app/Model/SubTask.php b/app/Model/SubTask.php
index 6e61330b..1faad680 100644
--- a/app/Model/SubTask.php
+++ b/app/Model/SubTask.php
@@ -172,6 +172,28 @@ class SubTask extends Base
}
/**
+ * Change the status of subtask
+ *
+ * Todo -> In progress -> Done -> Todo -> etc...
+ *
+ * @access public
+ * @param integer $subtask_id
+ * @return bool
+ */
+ public function toggleStatus($subtask_id)
+ {
+ $subtask = $this->getById($subtask_id);
+
+ $values = array(
+ 'id' => $subtask['id'],
+ 'status' => ($subtask['status'] + 1) % 3,
+ 'task_id' => $subtask['task_id'],
+ );
+
+ return $this->update($values);
+ }
+
+ /**
* Remove
*
* @access public
diff --git a/app/Template/board/comments.php b/app/Template/board/comments.php
new file mode 100644
index 00000000..83d6bd9a
--- /dev/null
+++ b/app/Template/board/comments.php
@@ -0,0 +1,13 @@
+<section>
+ <?php foreach ($comments as $comment): ?>
+ <p class="comment-title">
+ <span class="comment-username"><?= Helper\escape($comment['name'] ?: $comment['username']) ?></span> @ <span class="comment-date"><?= dt('%b %e, %Y, %k:%M %p', $comment['date']) ?></span>
+ </p>
+
+ <div class="comment-inner">
+ <div class="markdown">
+ <?= Helper\markdown($comment['comment']) ?>
+ </div>
+ </div>
+ <?php endforeach ?>
+</section>
diff --git a/app/Template/board/description.php b/app/Template/board/description.php
new file mode 100644
index 00000000..85e042dd
--- /dev/null
+++ b/app/Template/board/description.php
@@ -0,0 +1,5 @@
+<section class="tooltip-large">
+<div class="markdown">
+ <?= Helper\markdown($task['description']) ?>
+</div>
+</section> \ No newline at end of file
diff --git a/app/Template/board/files.php b/app/Template/board/files.php
new file mode 100644
index 00000000..66d5bff9
--- /dev/null
+++ b/app/Template/board/files.php
@@ -0,0 +1,14 @@
+<section>
+ <?php foreach ($files as $file): ?>
+ <i class="fa fa-file-o fa-fw"></i>
+
+ <?= Helper\a(
+ Helper\escape($file['name']),
+ 'file',
+ 'download',
+ array('file_id' => $file['id'], 'task_id' => $file['task_id'])
+ ) ?>
+
+ <br/>
+ <?php endforeach ?>
+</section>
diff --git a/app/Template/board/subtasks.php b/app/Template/board/subtasks.php
new file mode 100644
index 00000000..c7f995d7
--- /dev/null
+++ b/app/Template/board/subtasks.php
@@ -0,0 +1,16 @@
+<section id="tooltip-subtasks">
+<?php foreach ($subtasks as $subtask): ?>
+ <?= Helper\template('subtask/icons', array('subtask' => $subtask)) ?>
+
+ <?= Helper\a(
+ Helper\escape($subtask['title']),
+ 'board',
+ 'toggleSubtask',
+ array('task_id' => $subtask['task_id'], 'subtask_id' => $subtask['id'])
+ ) ?>
+
+ <?= Helper\escape(empty($subtask['username']) ? '' : ' ['.Helper\get_username($subtask).']') ?>
+
+ <br/>
+<?php endforeach ?>
+</section> \ No newline at end of file
diff --git a/app/Template/board/task.php b/app/Template/board/task.php
index 02ae46c1..e29ff2bb 100644
--- a/app/Template/board/task.php
+++ b/app/Template/board/task.php
@@ -90,19 +90,19 @@
<div class="task-board-icons">
<?php if (! empty($task['nb_subtasks'])): ?>
- <span title="<?= t('Sub-Tasks') ?>"><?= $task['nb_completed_subtasks'].'/'.$task['nb_subtasks'] ?> <i class="fa fa-bars"></i></span>
+ <span title="<?= t('Sub-Tasks') ?>" class="task-board-tooltip" data-href="<?= helper\u('board', 'subtasks', array('task_id' => $task['id'])) ?>"><?= $task['nb_completed_subtasks'].'/'.$task['nb_subtasks'] ?> <i class="fa fa-bars"></i></span>
<?php endif ?>
<?php if (! empty($task['nb_files'])): ?>
- <span title="<?= t('Attachments') ?>"><?= $task['nb_files'] ?> <i class="fa fa-paperclip"></i></span>
+ <span title="<?= t('Attachments') ?>" class="task-board-tooltip" data-href="<?= helper\u('board', 'attachments', array('task_id' => $task['id'])) ?>"><?= $task['nb_files'] ?> <i class="fa fa-paperclip"></i></span>
<?php endif ?>
<?php if (! empty($task['nb_comments'])): ?>
- <span title="<?= p($task['nb_comments'], t('%d comment', $task['nb_comments']), t('%d comments', $task['nb_comments'])) ?>"><?= $task['nb_comments'] ?> <i class="fa fa-comment-o"></i></span>
+ <span title="<?= p($task['nb_comments'], t('%d comment', $task['nb_comments']), t('%d comments', $task['nb_comments'])) ?>" class="task-board-tooltip" data-href="<?= helper\u('board', 'comments', array('task_id' => $task['id'])) ?>"><?= $task['nb_comments'] ?> <i class="fa fa-comment-o"></i></span>
<?php endif ?>
<?php if (! empty($task['description'])): ?>
- <span title="<?= t('Description') ?>">
+ <span title="<?= t('Description') ?>" class="task-board-tooltip" data-href="<?= helper\u('board', 'description', array('task_id' => $task['id'])) ?>">
<?php if (! isset($not_editable)): ?>
<a class="task-description-popover" href="?controller=task&amp;action=description&amp;task_id=<?= $task['id'] ?>"><i class="fa fa-file-text-o" data-href="?controller=task&amp;action=description&amp;task_id=<?= $task['id'] ?>"></i></a>
<?php else: ?>
diff --git a/app/Template/subtask/icons.php b/app/Template/subtask/icons.php
new file mode 100644
index 00000000..1f31d51f
--- /dev/null
+++ b/app/Template/subtask/icons.php
@@ -0,0 +1,7 @@
+<?php if ($subtask['status'] == 0): ?>
+ <i class="fa fa-square-o fa-fw"></i>
+<?php elseif ($subtask['status'] == 1): ?>
+ <i class="fa fa-gears fa-fw"></i>
+<?php else: ?>
+ <i class="fa fa-check-square-o fa-fw"></i>
+<?php endif ?> \ No newline at end of file
diff --git a/app/Template/subtask_show.php b/app/Template/subtask_show.php
index 29f4bfd1..686b160e 100644
--- a/app/Template/subtask_show.php
+++ b/app/Template/subtask_show.php
@@ -19,13 +19,7 @@
<tr>
<td><?= Helper\escape($subtask['title']) ?></td>
<td>
- <?php if ($subtask['status'] == 0): ?>
- <i class="fa fa-square-o fa-fw"></i>
- <?php elseif ($subtask['status'] == 1): ?>
- <i class="fa fa-gears fa-fw"></i>
- <?php else: ?>
- <i class="fa fa-check-square-o fa-fw"></i>
- <?php endif ?>
+ <?= Helper\template('subtask/icons', array('subtask' => $subtask)) ?>
<?php if (! isset($not_editable)): ?>
<?= Helper\a(Helper\escape($subtask['status_name']), 'subtask', 'toggleStatus', array('task_id' => $task['id'], 'subtask_id' => $subtask['id'])) ?>
diff --git a/app/helpers.php b/app/helpers.php
index 6c8e8955..0129853f 100644
--- a/app/helpers.php
+++ b/app/helpers.php
@@ -574,11 +574,12 @@ function form_numeric($name, $values = array(), array $errors = array(), array $
* @param array $params Url parameters
* @param boolean $csrf Add a CSRF token
* @param string $class CSS class attribute
+ * @param boolean $new_tab Open the link in a new tab
* @return string
*/
-function a($label, $controller, $action, array $params = array(), $csrf = false, $class = '', $title = '')
+function a($label, $controller, $action, array $params = array(), $csrf = false, $class = '', $title = '', $new_tab = false)
{
- return '<a href="'.u($controller, $action, $params, $csrf).'" class="'.$class.'" title="'.$title.'">'.$label.'</a>';
+ return '<a href="'.u($controller, $action, $params, $csrf).'" class="'.$class.'" title="'.$title.'" '.($new_tab ? 'target="_blank"' : '').'>'.$label.'</a>';
}
/**