diff options
-rw-r--r-- | app/Controller/SubtaskController.php | 23 | ||||
-rw-r--r-- | app/Model/SubtaskModel.php | 2 | ||||
-rw-r--r-- | app/Template/board/tooltip_subtasks.php | 4 | ||||
-rw-r--r-- | app/Template/dashboard/subtasks.php | 2 | ||||
-rw-r--r-- | app/Template/subtask/create.php | 3 | ||||
-rw-r--r-- | app/Template/subtask/edit.php | 3 | ||||
-rw-r--r-- | app/Template/subtask/table.php | 2 | ||||
-rw-r--r-- | app/Template/task_creation/show.php | 5 | ||||
-rw-r--r-- | doc/plugin-hooks.markdown | 134 |
9 files changed, 107 insertions, 71 deletions
diff --git a/app/Controller/SubtaskController.php b/app/Controller/SubtaskController.php index 7502d84f..134b057e 100644 --- a/app/Controller/SubtaskController.php +++ b/app/Controller/SubtaskController.php @@ -27,10 +27,7 @@ class SubtaskController extends BaseController $task = $this->getTask(); if (empty($values)) { - $values = array( - 'task_id' => $task['id'], - 'another_subtask' => $this->request->getIntegerParam('another_subtask', 0) - ); + $values = $this->prepareValues($task); } $this->response->html($this->template->render('subtask/create', array( @@ -40,6 +37,24 @@ class SubtaskController extends BaseController 'task' => $task, ))); } + + /** + * Prepare form values + * + * @access protected + * @param array $task + * @return array + */ + protected function prepareValues(array $task) + { + $values = array( + 'task_id' => $task['id'], + 'another_subtask' => $this->request->getIntegerParam('another_subtask', 0) + ); + + $values = $this->hook->merge('controller:subtask:form:default', $values, array('default_values' => $values)); + return $values; + } /** * Validation and creation diff --git a/app/Model/SubtaskModel.php b/app/Model/SubtaskModel.php index 608ffce7..737a933d 100644 --- a/app/Model/SubtaskModel.php +++ b/app/Model/SubtaskModel.php @@ -255,6 +255,7 @@ class SubtaskModel extends Base { $this->helper->model->removeFields($values, array('another_subtask')); $this->helper->model->resetFields($values, array('time_estimated', 'time_spent')); + $this->hook->reference('model:subtask:modification:prepare', $values); } /** @@ -272,6 +273,7 @@ class SubtaskModel extends Base $values['time_estimated'] = isset($values['time_estimated']) ? $values['time_estimated'] : 0; $values['time_spent'] = isset($values['time_spent']) ? $values['time_spent'] : 0; $values['user_id'] = isset($values['user_id']) ? $values['user_id'] : 0; + $this->hook->reference('model:subtask:creation:prepare', $values); } /** diff --git a/app/Template/board/tooltip_subtasks.php b/app/Template/board/tooltip_subtasks.php index 8d5bc059..335c28ce 100644 --- a/app/Template/board/tooltip_subtasks.php +++ b/app/Template/board/tooltip_subtasks.php @@ -1,7 +1,8 @@ <div class="tooltip-large"> <table class="table-small"> <tr> - <th class="column-80"><?= t('Subtask') ?></th> + <th class="column-70"><?= t('Subtask') ?></th> + <?= $this->hook->render('template:board:tooltip:subtasks:header:before-assignee') ?> <th><?= t('Assignee') ?></th> </tr> <?php foreach ($subtasks as $subtask): ?> @@ -9,6 +10,7 @@ <td> <?= $this->subtask->toggleStatus($subtask, $task['project_id']) ?> </td> + <?= $this->hook->render('template:board:tooltip:subtasks:rows', array('subtask' => $subtask)) ?> <td> <?php if (! empty($subtask['username'])): ?> <?= $this->text->e($subtask['name'] ?: $subtask['username']) ?> diff --git a/app/Template/dashboard/subtasks.php b/app/Template/dashboard/subtasks.php index b71deeb9..13770f0f 100644 --- a/app/Template/dashboard/subtasks.php +++ b/app/Template/dashboard/subtasks.php @@ -10,6 +10,7 @@ <th class="column-20"><?= $paginator->order(t('Project'), 'project_name') ?></th> <th><?= $paginator->order(t('Task'), 'task_name') ?></th> <th><?= $paginator->order(t('Subtask'), \Kanboard\Model\SubtaskModel::TABLE.'.title') ?></th> + <?= $this->hook->render('template:dashboard:subtasks:header:before-timetracking', array('paginator' => $paginator)) ?> <th class="column-20"><?= t('Time tracking') ?></th> </tr> <?php foreach ($paginator->getCollection() as $subtask): ?> @@ -26,6 +27,7 @@ <td> <?= $this->subtask->toggleStatus($subtask, $subtask['project_id']) ?> </td> + <?= $this->hook->render('template:dashboard:subtasks:rows', array('subtask' => $subtask)) ?> <td> <?php if (! empty($subtask['time_spent'])): ?> <strong><?= $this->text->e($subtask['time_spent']).'h' ?></strong> <?= t('spent') ?> diff --git a/app/Template/subtask/create.php b/app/Template/subtask/create.php index 3c080f7c..cc4ccba6 100644 --- a/app/Template/subtask/create.php +++ b/app/Template/subtask/create.php @@ -9,7 +9,8 @@ <?= $this->subtask->selectTitle($values, $errors, array('autofocus')) ?> <?= $this->subtask->selectAssignee($users_list, $values, $errors) ?> <?= $this->subtask->selectTimeEstimated($values, $errors) ?> - + <?= $this->hook->render('template:subtask:form:create', array('values' => $values, 'errors' => $errors)) ?> + <?= $this->form->checkbox('another_subtask', t('Create another sub-task'), 1, isset($values['another_subtask']) && $values['another_subtask'] == 1) ?> <div class="form-actions"> diff --git a/app/Template/subtask/edit.php b/app/Template/subtask/edit.php index 8f256cea..07419f79 100644 --- a/app/Template/subtask/edit.php +++ b/app/Template/subtask/edit.php @@ -11,7 +11,8 @@ <?= $this->subtask->selectAssignee($users_list, $values, $errors) ?> <?= $this->subtask->selectTimeEstimated($values, $errors) ?> <?= $this->subtask->selectTimeSpent($values, $errors) ?> - + <?= $this->hook->render('template:subtask:form:edit', array('values' => $values, 'errors' => $errors)) ?> + <div class="form-actions"> <button type="submit" class="btn btn-blue"><?= t('Save') ?></button> <?= t('or') ?> diff --git a/app/Template/subtask/table.php b/app/Template/subtask/table.php index 5c60df44..bea49aed 100644 --- a/app/Template/subtask/table.php +++ b/app/Template/subtask/table.php @@ -7,6 +7,7 @@ <tr> <th class="column-40"><?= t('Title') ?></th> <th><?= t('Assignee') ?></th> + <?= $this->hook->render('template:subtask:table:header:before-timetracking') ?> <th><?= t('Time tracking') ?></th> <?php if ($editable): ?> <th class="column-5"></th> @@ -29,6 +30,7 @@ <?= $this->text->e($subtask['name'] ?: $subtask['username']) ?> <?php endif ?> </td> + <?= $this->hook->render('template:subtask:table:rows', array('subtask' => $subtask)) ?> <td> <ul class="no-bullet"> <li> diff --git a/app/Template/task_creation/show.php b/app/Template/task_creation/show.php index c2cc4aac..0c267aff 100644 --- a/app/Template/task_creation/show.php +++ b/app/Template/task_creation/show.php @@ -10,13 +10,14 @@ <?= $this->task->selectTitle($values, $errors) ?> <?= $this->task->selectDescription($values, $errors) ?> <?= $this->task->selectTags($project) ?> - + + <?= $this->hook->render('template:task:form:first-column', array('values' => $values, 'errors' => $errors)) ?> + <?php if (! isset($duplicate)): ?> <?= $this->form->checkbox('another_task', t('Create another task'), 1, isset($values['another_task']) && $values['another_task'] == 1) ?> <?= $this->form->checkbox('duplicate_multiple_projects', t('Duplicate to multiple projects'), 1) ?> <?php endif ?> - <?= $this->hook->render('template:task:form:first-column', array('values' => $values, 'errors' => $errors)) ?> </div> <div class="form-column"> diff --git a/doc/plugin-hooks.markdown b/doc/plugin-hooks.markdown index b3272d73..8f1a3bb7 100644 --- a/doc/plugin-hooks.markdown +++ b/doc/plugin-hooks.markdown @@ -141,6 +141,8 @@ List of reference hooks: | `model:task:creation:prepare` | Alter form values before to save a task | | `model:task:modification:prepare` | Alter form values before to edit a task | | `model:color:get-list` | Alter default_colors values | +| `model:subtask:modification:prepare` | Alter form values before to save a subtask | +| `model:subtask:creation:prepare` | Alter form values before to edit a subtask | Template Hooks @@ -186,68 +188,76 @@ Template names without prefix are core templates. List of template hooks: -| Hook | Description | -|--------------------------------------------|----------------------------------------------------| -| `template:analytic:sidebar` | Sidebar on analytic pages | -| `template:app:filters-helper:before` | Filter helper dropdown (top) | -| `template:app:filters-helper:after` | Filter helper dropdown (bottom) | -| `template:auth:login-form:before` | Login page (top) | -| `template:auth:login-form:after` | Login page (bottom) | -| `template:board:private:task:before-title` | Task in private board: before title | -| `template:board:private:task:after-title` | Task in private board: after title | -| `template:board:public:task:before-title` | Task in public board: before title | -| `template:board:public:task:after-title` | Task in public board: after title | -| `template:board:task:footer` | Task in board: footer | -| `template:board:task:icons` | Task in board: tooltip icon | -| `template:board:column:dropdown` | Dropdown menu in board columns | -| `template:config:sidebar` | Sidebar on settings page | -| `template:config:application ` | Application settings form | -| `template:config:email` | Email settings page | -| `template:config:integrations` | Integration page in global settings | -| `template:dashboard:sidebar` | Sidebar on dashboard page | -| `template:dashboard:show` | Main page of the dashboard | -| `template:export:sidebar` | Sidebar on export pages | -| `template:import:sidebar` | Sidebar on import pages | -| `template:header:dropdown` | Page header dropdown menu (user avatar icon) | -| `template:header:creation-dropdown` | Page header dropdown menu (plus icon) | -| `template:layout:head` | Page layout `<head/>` tag | -| `template:layout:top` | Page layout top header | -| `template:layout:bottom` | Page layout footer | -| `template:project:dropdown` | "Actions" menu on left in different project views | -| `template:project:header:before` | Project filters (before) | -| `template:project:header:after` | Project filters (after) | -| `template:project:integrations` | Integration page in projects settings | -| `template:project:sidebar` | Sidebar in project settings | -| `template:project-user:sidebar` | Sidebar on project user overview page | -| `template:project-list:menu:before` | Project list: before menu entries | -| `template:project-list:menu:after` | Project list: after menu entries | -| `template:task:layout:top` | Task layout top (after page header) | -| `template:task:details:top` | Task summary top | -| `template:task:details:bottom` | Task summary bottom | -| `template:task:details:first-column` | Task summary first column | -| `template:task:details:second-column` | Task summary second column | -| `template:task:details:third-column` | Task summary third column | -| `template:task:details:fourth-column` | Task summary fourth column | -| `template:task:dropdown` | Task dropdown menu in listing pages | -| `template:task:sidebar:actions` | Sidebar on task page (section actions) | -| `template:task:sidebar:information` | Sidebar on task page (section information) | -| `template:task:form:first-column` | 1st column in task form | -| `template:task:form:second-column` | 2nd column in task form | -| `template:task:form:third-column` | 3nd column in task form | -| `template:task:show:top ` | Show task page: top | -| `template:task:show:bottom` | Show task page: bottom | -| `template:task:show:before-description` | Show task page: before description | -| `template:task:show:before-tasklinks` | Show task page: before tasklinks | -| `template:task:show:before-subtasks` | Show task page: before subtasks | -| `template:task:show:before-timetracking` | Show task page: before timetracking | -| `template:task:show:before-attachments` | Show task page: before attachments | -| `template:task:show:before-comments` | Show task page: before comments | -| `template:user:authentication:form` | "Edit authentication" form in user profile | -| `template:user:create-remote:form` | "Create remote user" form | -| `template:user:external` | "External authentication" page in user profile | -| `template:user:integrations` | Integration page in user profile | -| `template:user:sidebar:actions` | Sidebar in user profile (section actions) | -| `template:user:sidebar:information` | Sidebar in user profile (section information) | +| Hook | Description | +|-----------------------------------------------------------|----------------------------------------------------| +| `template:analytic:sidebar` | Sidebar on analytic pages | +| `template:app:filters-helper:before` | Filter helper dropdown (top) | +| `template:app:filters-helper:after` | Filter helper dropdown (bottom) | +| `template:auth:login-form:before` | Login page (top) | +| `template:auth:login-form:after` | Login page (bottom) | +| `template:board:private:task:before-title` | Task in private board: before title | +| `template:board:private:task:after-title` | Task in private board: after title | +| `template:board:public:task:before-title` | Task in public board: before title | +| `template:board:public:task:after-title` | Task in public board: after title | +| `template:board:task:footer` | Task in board: footer | +| `template:board:task:icons` | Task in board: tooltip icon | +| `template:board:column:dropdown` | Dropdown menu in board columns | +| `template:board:tooltip:subtasks:header:before-assignee` | Header of Subtask table on tootip before Assignee | +| `template:board:tooltip:subtasks:rows` | Column on row of Subtask table on tooltip | +| `template:config:sidebar` | Sidebar on settings page | +| `template:config:application ` | Application settings form | +| `template:config:email` | Email settings page | +| `template:config:integrations` | Integration page in global settings | +| `template:dashboard:sidebar` | Sidebar on dashboard page | +| `template:dashboard:show` | Main page of the dashboard | +| `template:dashboard:subtasks:header:before-timetracking` | Header of Subtask table before Time Tracking | +| `template:dashboard:subtasks:rows` | Column on row of Subtask table of the dashboard | +| `template:export:sidebar` | Sidebar on export pages | +| `template:import:sidebar` | Sidebar on import pages | +| `template:header:dropdown` | Page header dropdown menu (user avatar icon) | +| `template:header:creation-dropdown` | Page header dropdown menu (plus icon) | +| `template:layout:head` | Page layout `<head/>` tag | +| `template:layout:top` | Page layout top header | +| `template:layout:bottom` | Page layout footer | +| `template:project:dropdown` | "Actions" menu on left in different project views | +| `template:project:header:before` | Project filters (before) | +| `template:project:header:after` | Project filters (after) | +| `template:project:integrations` | Integration page in projects settings | +| `template:project:sidebar` | Sidebar in project settings | +| `template:project-user:sidebar` | Sidebar on project user overview page | +| `template:project-list:menu:before` | Project list: before menu entries | +| `template:project-list:menu:after` | Project list: after menu entries | +| `template:task:layout:top` | Task layout top (after page header) | +| `template:task:details:top` | Task summary top | +| `template:task:details:bottom` | Task summary bottom | +| `template:task:details:first-column` | Task summary first column | +| `template:task:details:second-column` | Task summary second column | +| `template:task:details:third-column` | Task summary third column | +| `template:task:details:fourth-column` | Task summary fourth column | +| `template:task:dropdown` | Task dropdown menu in listing pages | +| `template:task:sidebar:actions` | Sidebar on task page (section actions) | +| `template:task:sidebar:information` | Sidebar on task page (section information) | +| `template:task:form:first-column` | 1st column in task form | +| `template:task:form:second-column` | 2nd column in task form | +| `template:task:form:third-column` | 3nd column in task form | +| `template:task:show:top ` | Show task page: top | +| `template:task:show:bottom` | Show task page: bottom | +| `template:task:show:before-description` | Show task page: before description | +| `template:task:show:before-tasklinks` | Show task page: before tasklinks | +| `template:task:show:before-subtasks` | Show task page: before subtasks | +| `template:task:show:before-timetracking` | Show task page: before timetracking | +| `template:task:show:before-attachments` | Show task page: before attachments | +| `template:task:show:before-comments` | Show task page: before comments | +| `template:subtask:form:create` | "Create Subtask" form | +| `template:subtask:form:edit` | "Edit Subtask" form | +| `template:subtask:table:header:before-timetracking` | Subtask table header before Time Tracking | +| `template:subtask:table:rows` | Column on row of subtasks table | +| `template:user:authentication:form` | "Edit authentication" form in user profile | +| `template:user:create-remote:form` | "Create remote user" form | +| `template:user:external` | "External authentication" page in user profile | +| `template:user:integrations` | Integration page in user profile | +| `template:user:sidebar:actions` | Sidebar in user profile (section actions) | +| `template:user:sidebar:information` | Sidebar in user profile (section information) | Another template hooks can be added if necessary, just ask on the issue tracker. |