summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Controller/SubtaskController.php23
-rw-r--r--app/Model/SubtaskModel.php2
-rw-r--r--app/Template/board/tooltip_subtasks.php4
-rw-r--r--app/Template/dashboard/subtasks.php2
-rw-r--r--app/Template/subtask/create.php3
-rw-r--r--app/Template/subtask/edit.php3
-rw-r--r--app/Template/subtask/table.php2
-rw-r--r--app/Template/task_creation/show.php5
-rw-r--r--doc/plugin-hooks.markdown134
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.