diff options
author | Frédéric Guillot <fred@kanboard.net> | 2018-06-01 15:58:17 -0700 |
---|---|---|
committer | Frédéric Guillot <fred@kanboard.net> | 2018-06-01 15:58:17 -0700 |
commit | 912cf378d730b3df8d285ba765711d9c456bdea0 (patch) | |
tree | cc26710f2e1e4e9eb958b873a2fb537cf3a389cb /app | |
parent | cd6da138973f6bfe7c71846ff6cc1d6fb97c4813 (diff) |
Add checkboxes in list view to move tasks to another column at once
Diffstat (limited to 'app')
38 files changed, 244 insertions, 0 deletions
diff --git a/app/Controller/TaskBulkMoveColumnController.php b/app/Controller/TaskBulkMoveColumnController.php new file mode 100644 index 00000000..f3607df6 --- /dev/null +++ b/app/Controller/TaskBulkMoveColumnController.php @@ -0,0 +1,44 @@ +<?php + +namespace Kanboard\Controller; + +use Kanboard\Core\Controller\AccessForbiddenException; + +class TaskBulkMoveColumnController extends BaseController +{ + public function show(array $values = [], array $errors = []) + { + $project = $this->getProject(); + + if (empty($values)) { + $values['task_ids'] = $this->request->getStringParam('task_ids'); + } + + $this->response->html($this->template->render('task_bulk_move_column/show', [ + 'project' => $project, + 'values' => $values, + 'errors' => $errors, + 'columns' => $this->columnModel->getList($project['id']), + 'swimlanes' => $this->swimlaneModel->getList($project['id'], false, true), + ])); + } + + public function save() + { + $project = $this->getProject(); + $values = $this->request->getValues(); + $taskIDs = explode(',', $values['task_ids']); + + foreach ($taskIDs as $taskID) { + $task = $this->taskFinderModel->getById($taskID); + + if (! $this->helper->projectRole->canMoveTask($task['project_id'], $task['column_id'], $values['column_id'])) { + throw new AccessForbiddenException(e('You are not allowed to move this task.')); + } + + $this->taskPositionModel->moveBottom($project['id'], $taskID, $values['swimlane_id'], $values['column_id']); + } + + $this->response->redirect($this->helper->url->to('TaskListController', 'show', ['project_id' => $project['id']]), true); + } +} diff --git a/app/Locale/bs_BA/translations.php b/app/Locale/bs_BA/translations.php index 4efddd68..df615277 100644 --- a/app/Locale/bs_BA/translations.php +++ b/app/Locale/bs_BA/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/ca_ES/translations.php b/app/Locale/ca_ES/translations.php index 657de0a3..7b854aaf 100644 --- a/app/Locale/ca_ES/translations.php +++ b/app/Locale/ca_ES/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/cs_CZ/translations.php b/app/Locale/cs_CZ/translations.php index 1851df43..7217ff9a 100644 --- a/app/Locale/cs_CZ/translations.php +++ b/app/Locale/cs_CZ/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php index 9511f53a..9a8caa96 100644 --- a/app/Locale/da_DK/translations.php +++ b/app/Locale/da_DK/translations.php @@ -1377,4 +1377,8 @@ return array( '%s moved the task #%d to the swimlane "%s"' => '%s flyttet opgave #%d til spor "%s"', '%sh spent' => '%sh brugt', '%sh estimated' => '%sh anslået', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php index 7e681cc4..fd32baef 100644 --- a/app/Locale/de_DE/translations.php +++ b/app/Locale/de_DE/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/el_GR/translations.php b/app/Locale/el_GR/translations.php index 38cad369..a16f6c85 100644 --- a/app/Locale/el_GR/translations.php +++ b/app/Locale/el_GR/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php index 7b099df1..15448f80 100644 --- a/app/Locale/es_ES/translations.php +++ b/app/Locale/es_ES/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php index 456e04ed..d91bc296 100644 --- a/app/Locale/fi_FI/translations.php +++ b/app/Locale/fi_FI/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/fr_FR/translations.php b/app/Locale/fr_FR/translations.php index 9411547d..279fb70d 100644 --- a/app/Locale/fr_FR/translations.php +++ b/app/Locale/fr_FR/translations.php @@ -1377,4 +1377,8 @@ return array( '%s moved the task #%d to the swimlane "%s"' => '%s a déplacé la tâche #%d vers la swimlane « %s »', '%sh spent' => '%sh passé', '%sh estimated' => '%sh estimé', + 'Select All' => 'Tout sélectionner', + 'Unselect All' => 'Tout désélectionner', + 'Apply action' => 'Appliquer une action', + 'Move selected tasks to another column' => 'Déplaçer les tâches sélectionnées vers une autre colonne', ); diff --git a/app/Locale/hr_HR/translations.php b/app/Locale/hr_HR/translations.php index c0915760..a834eaa3 100644 --- a/app/Locale/hr_HR/translations.php +++ b/app/Locale/hr_HR/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php index b4a71041..9235ece2 100644 --- a/app/Locale/hu_HU/translations.php +++ b/app/Locale/hu_HU/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/id_ID/translations.php b/app/Locale/id_ID/translations.php index 5a60aac7..71c89c1f 100644 --- a/app/Locale/id_ID/translations.php +++ b/app/Locale/id_ID/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/it_IT/translations.php b/app/Locale/it_IT/translations.php index c74d0736..00ef9599 100644 --- a/app/Locale/it_IT/translations.php +++ b/app/Locale/it_IT/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php index 58f25804..7d476b2a 100644 --- a/app/Locale/ja_JP/translations.php +++ b/app/Locale/ja_JP/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/ko_KR/translations.php b/app/Locale/ko_KR/translations.php index 35f29815..8f79fc00 100644 --- a/app/Locale/ko_KR/translations.php +++ b/app/Locale/ko_KR/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/my_MY/translations.php b/app/Locale/my_MY/translations.php index 668c76eb..ef82d749 100644 --- a/app/Locale/my_MY/translations.php +++ b/app/Locale/my_MY/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/nb_NO/translations.php b/app/Locale/nb_NO/translations.php index 85a458a4..e5e3d5aa 100644 --- a/app/Locale/nb_NO/translations.php +++ b/app/Locale/nb_NO/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/nl_NL/translations.php b/app/Locale/nl_NL/translations.php index f4083aa5..2f067090 100644 --- a/app/Locale/nl_NL/translations.php +++ b/app/Locale/nl_NL/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php index be91d579..b3ccc0a6 100644 --- a/app/Locale/pl_PL/translations.php +++ b/app/Locale/pl_PL/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php index 7e38f325..edd02c81 100644 --- a/app/Locale/pt_BR/translations.php +++ b/app/Locale/pt_BR/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/pt_PT/translations.php b/app/Locale/pt_PT/translations.php index 8493b22d..ea2be376 100644 --- a/app/Locale/pt_PT/translations.php +++ b/app/Locale/pt_PT/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/ro_RO/translations.php b/app/Locale/ro_RO/translations.php index 8c41ecfb..50939126 100644 --- a/app/Locale/ro_RO/translations.php +++ b/app/Locale/ro_RO/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index e3decf38..60a01fc3 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -1377,4 +1377,8 @@ return array( '%s moved the task #%d to the swimlane "%s"' => '%s перенёс задачу #%d на дорожку "%s"', '%sh spent' => '%sч затрачено', '%sh estimated' => '%sч запланировано', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/sr_Latn_RS/translations.php b/app/Locale/sr_Latn_RS/translations.php index f6ae8ae8..724bebd4 100644 --- a/app/Locale/sr_Latn_RS/translations.php +++ b/app/Locale/sr_Latn_RS/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php index c777dcf9..781372c5 100644 --- a/app/Locale/sv_SE/translations.php +++ b/app/Locale/sv_SE/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php index b259cf64..b568ef09 100644 --- a/app/Locale/th_TH/translations.php +++ b/app/Locale/th_TH/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/tr_TR/translations.php b/app/Locale/tr_TR/translations.php index 92b12014..b7aa82cb 100644 --- a/app/Locale/tr_TR/translations.php +++ b/app/Locale/tr_TR/translations.php @@ -1377,4 +1377,8 @@ return array( '%s moved the task #%d to the swimlane "%s"' => '%s , #%d görevini "%s" kulvarına taşıdı', '%sh spent' => '%sh harcandı', '%sh estimated' => '%sh tahmin edildi', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/uk_UA/translations.php b/app/Locale/uk_UA/translations.php index f7c8da56..40d69dea 100644 --- a/app/Locale/uk_UA/translations.php +++ b/app/Locale/uk_UA/translations.php @@ -1377,4 +1377,8 @@ return array( '%s moved the task #%d to the swimlane "%s"' => '%s перемістив задачу #%d на доріжку "%s"', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/vi_VN/translations.php b/app/Locale/vi_VN/translations.php index 10f1b55d..1a5dcd70 100644 --- a/app/Locale/vi_VN/translations.php +++ b/app/Locale/vi_VN/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php index d9401dc2..ac6230e2 100644 --- a/app/Locale/zh_CN/translations.php +++ b/app/Locale/zh_CN/translations.php @@ -1377,4 +1377,8 @@ return array( '%s moved the task #%d to the swimlane "%s"' => '%s将任务 #%d 移动到了里程碑 "%s" 下', '%sh spent' => '花费%s小时', '%sh estimated' => '预估%s小时', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Locale/zh_TW/translations.php b/app/Locale/zh_TW/translations.php index ab35c1e6..ebdcd276 100644 --- a/app/Locale/zh_TW/translations.php +++ b/app/Locale/zh_TW/translations.php @@ -1377,4 +1377,8 @@ return array( // '%s moved the task #%d to the swimlane "%s"' => '', // '%sh spent' => '', // '%sh estimated' => '', + // 'Select All' => '', + // 'Unselect All' => '', + // 'Apply action' => '', + // 'Move selected tasks to another column' => '', ); diff --git a/app/Model/TaskPositionModel.php b/app/Model/TaskPositionModel.php index 9f7eb983..6c109f3d 100644 --- a/app/Model/TaskPositionModel.php +++ b/app/Model/TaskPositionModel.php @@ -12,6 +12,42 @@ use Kanboard\Core\Base; */ class TaskPositionModel extends Base { + public function moveBottom($project_id, $task_id, $swimlane_id, $column_id) + { + $this->db->startTransaction(); + + $task = $this->taskFinderModel->getById($task_id); + + $result = $this->db->table(TaskModel::TABLE) + ->eq('project_id', $project_id) + ->eq('swimlane_id', $swimlane_id) + ->eq('column_id', $column_id) + ->columns('MAX(position) AS pos') + ->findOne(); + + $position = 1; + if (! empty($result)) { + $position = $result['pos'] + 1; + } + + $result = $this->db->table(TaskModel::TABLE) + ->eq('id', $task_id) + ->eq('project_id', $project_id) + ->update([ + 'swimlane_id' => $swimlane_id, + 'column_id' => $column_id, + 'position' => $position + ]); + + $this->db->closeTransaction(); + + if ($result) { + $this->fireEvents($task, $column_id, $position, $swimlane_id); + } + + return $result; + } + /** * Move a task to another column or to another position * diff --git a/app/ServiceProvider/AuthenticationProvider.php b/app/ServiceProvider/AuthenticationProvider.php index 797e70d0..9cb437ac 100644 --- a/app/ServiceProvider/AuthenticationProvider.php +++ b/app/ServiceProvider/AuthenticationProvider.php @@ -106,6 +106,7 @@ class AuthenticationProvider implements ServiceProviderInterface $acl->add('TaskSuppressionController', '*', Role::PROJECT_MEMBER); $acl->add('TaskCreationController', '*', Role::PROJECT_MEMBER); $acl->add('TaskBulkController', '*', Role::PROJECT_MEMBER); + $acl->add('TaskBulkMoveColumnController', '*', Role::PROJECT_MEMBER); $acl->add('TaskDuplicationController', '*', Role::PROJECT_MEMBER); $acl->add('TaskRecurrenceController', '*', Role::PROJECT_MEMBER); $acl->add('TaskImportController', '*', Role::PROJECT_MANAGER); diff --git a/app/Template/task_bulk_move_column/show.php b/app/Template/task_bulk_move_column/show.php new file mode 100644 index 00000000..3333391e --- /dev/null +++ b/app/Template/task_bulk_move_column/show.php @@ -0,0 +1,16 @@ +<div class="page-header"> + <h2><?= t('Move selected tasks to another column') ?></h2> +</div> + +<form action="<?= $this->url->href('TaskBulkMoveColumnController', 'save', ['project_id' => $project['id']]) ?>" method="post"> + <?= $this->form->csrf() ?> + <?= $this->form->hidden('task_ids', $values) ?> + + <?= $this->form->label(t('Swimlane'), 'swimlane_id') ?> + <?= $this->form->select('swimlane_id', $swimlanes, $values) ?> + + <?= $this->form->label(t('Column'), 'column_id') ?> + <?= $this->form->select('column_id', $columns, $values) ?> + + <?= $this->modal->submitButtons() ?> +</form> diff --git a/app/Template/task_list/header.php b/app/Template/task_list/header.php index 7704e2df..599286aa 100644 --- a/app/Template/task_list/header.php +++ b/app/Template/task_list/header.php @@ -6,6 +6,24 @@ <?= t('%d task', $paginator->getTotal()) ?> <?php endif ?> </div> + <?php if (isset($show_items_selection)): ?> + <?php if ($this->user->hasProjectAccess('TaskModificationController', 'save', $project['id'])): ?> + <div class="list-item-links"> + <a href="#" data-list-item-selection="all"><?= t('Select All') ?></a> / <a href="#" data-list-item-selection="none"><?= t('Unselect All') ?></a> + </div> + <div class="list-item-actions list-item-action-hidden"> + - + <div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon"><strong><?= t('Apply action') ?> <i class="fa fa-caret-down"></i></strong></a> + <ul> + <li> + <a href="<?= $this->url->href('TaskBulkMoveColumnController', 'show', ['project_id' => $project['id']]) ?>" data-list-item-action="modal"><?= t('Move selected tasks to another column') ?></a> + </li> + </ul> + </div> + </div> + <?php endif ?> + <?php endif ?> <div class="table-list-header-menu"> <?php if (isset($project)): ?> <?php if ($this->user->hasSubtaskListActivated()): ?> diff --git a/app/Template/task_list/listing.php b/app/Template/task_list/listing.php index 97393972..7891b543 100644 --- a/app/Template/task_list/listing.php +++ b/app/Template/task_list/listing.php @@ -7,12 +7,14 @@ <?= $this->render('task_list/header', array( 'paginator' => $paginator, 'project' => $project, + 'show_items_selection' => true, )) ?> <?php foreach ($paginator->getCollection() as $task): ?> <div class="table-list-row color-<?= $task['color_id'] ?>"> <?= $this->render('task_list/task_title', array( 'task' => $task, + 'show_items_selection' => true, )) ?> <?= $this->render('task_list/task_details', array( diff --git a/app/Template/task_list/task_title.php b/app/Template/task_list/task_title.php index 028e9b70..92d61b6c 100644 --- a/app/Template/task_list/task_title.php +++ b/app/Template/task_list/task_title.php @@ -1,5 +1,8 @@ <div> <?php if ($this->user->hasProjectAccess('TaskModificationController', 'edit', $task['project_id'])): ?> + <?php if (isset($show_items_selection)): ?> + <input type="checkbox" data-list-item="selectable" name="tasks[]" value="<?= $task['id'] ?>"> + <?php endif ?> <?= $this->render('task/dropdown', array('task' => $task)) ?> <?php else: ?> <strong><?= '#'.$task['id'] ?></strong> |