summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2015-06-20 16:50:52 -0400
committerFrederic Guillot <fred@kanboard.net>2015-06-20 16:50:52 -0400
commitb6b733b22f9e9f38786166c1274b135a99bce02a (patch)
tree6a861a141cefd42ebd7571d2e9f3a649ed19e6c7
parenta409bf3ff496f9df496bc9eebe7200b9849bd2ee (diff)
Close all subtasks when a task is closed
-rw-r--r--app/Model/Subtask.php12
-rw-r--r--app/Model/TaskStatus.php3
-rw-r--r--app/Template/task/close.php2
-rw-r--r--tests/units/SubtaskTest.php22
-rw-r--r--tests/units/TaskStatusTest.php24
5 files changed, 61 insertions, 2 deletions
diff --git a/app/Model/Subtask.php b/app/Model/Subtask.php
index 65fa0f0c..a869ae91 100644
--- a/app/Model/Subtask.php
+++ b/app/Model/Subtask.php
@@ -228,6 +228,18 @@ class Subtask extends Base
}
/**
+ * Close all subtasks of a task
+ *
+ * @access public
+ * @param integer $task_id
+ * @return boolean
+ */
+ public function closeAll($task_id)
+ {
+ return $this->db->table(self::TABLE)->eq('task_id', $task_id)->update(array('status' => self::STATUS_DONE));
+ }
+
+ /**
* Get subtasks with consecutive positions
*
* If you remove a subtask, the positions are not anymore consecutives
diff --git a/app/Model/TaskStatus.php b/app/Model/TaskStatus.php
index 30a65e1e..3f62667c 100644
--- a/app/Model/TaskStatus.php
+++ b/app/Model/TaskStatus.php
@@ -62,6 +62,7 @@ class TaskStatus extends Base
*/
public function close($task_id)
{
+ $this->subtask->closeAll($task_id);
return $this->changeStatus($task_id, Task::STATUS_CLOSED, time(), Task::EVENT_CLOSE);
}
@@ -113,7 +114,7 @@ class TaskStatus extends Base
}
/**
- * Check the status of task
+ * Check the status of a task
*
* @access private
* @param integer $task_id Task id
diff --git a/app/Template/task/close.php b/app/Template/task/close.php
index 79150333..160d5400 100644
--- a/app/Template/task/close.php
+++ b/app/Template/task/close.php
@@ -4,7 +4,7 @@
<div class="confirm">
<p class="alert alert-info">
- <?= t('Do you really want to close this task: "%s"?', $this->e($task['title'])) ?>
+ <?= t('Do you really want to close the task "%s" as well as all subtasks?', $this->e($task['title'])) ?>
</p>
<div class="form-actions">
diff --git a/tests/units/SubtaskTest.php b/tests/units/SubtaskTest.php
index 791f8089..2abd81d9 100644
--- a/tests/units/SubtaskTest.php
+++ b/tests/units/SubtaskTest.php
@@ -11,6 +11,28 @@ use Model\User;
class SubTaskTest extends Base
{
+ public function testCloseAll()
+ {
+ $tc = new TaskCreation($this->container);
+ $s = new Subtask($this->container);
+ $p = new Project($this->container);
+
+ $this->assertEquals(1, $p->create(array('name' => 'test1')));
+ $this->assertEquals(1, $tc->create(array('title' => 'test 1', 'project_id' => 1)));
+
+ $this->assertEquals(1, $s->create(array('title' => 'subtask #1', 'task_id' => 1)));
+ $this->assertEquals(2, $s->create(array('title' => 'subtask #2', 'task_id' => 1)));
+
+ $this->assertTrue($s->closeAll(1));
+
+ $subtasks = $s->getAll(1);
+ $this->assertNotEmpty($subtasks);
+
+ foreach ($subtasks as $subtask) {
+ $this->assertEquals(Subtask::STATUS_DONE, $subtask['status']);
+ }
+ }
+
public function testMoveUp()
{
$tc = new TaskCreation($this->container);
diff --git a/tests/units/TaskStatusTest.php b/tests/units/TaskStatusTest.php
index 5c59698b..c1f79142 100644
--- a/tests/units/TaskStatusTest.php
+++ b/tests/units/TaskStatusTest.php
@@ -2,6 +2,7 @@
require_once __DIR__.'/Base.php';
+use Model\Subtask;
use Model\Task;
use Model\TaskCreation;
use Model\TaskFinder;
@@ -74,4 +75,27 @@ class TaskStatusTest extends Base
$this->assertArrayHasKey('task_id', $event);
$this->assertNotEmpty($event['task_id']);
}
+
+ public function testThatAllSubtasksAreClosed()
+ {
+ $ts = new TaskStatus($this->container);
+ $tc = new TaskCreation($this->container);
+ $s = new Subtask($this->container);
+ $p = new Project($this->container);
+
+ $this->assertEquals(1, $p->create(array('name' => 'test1')));
+ $this->assertEquals(1, $tc->create(array('title' => 'test 1', 'project_id' => 1)));
+
+ $this->assertEquals(1, $s->create(array('title' => 'subtask #1', 'task_id' => 1)));
+ $this->assertEquals(2, $s->create(array('title' => 'subtask #2', 'task_id' => 1)));
+
+ $this->assertTrue($ts->close(1));
+
+ $subtasks = $s->getAll(1);
+ $this->assertNotEmpty($subtasks);
+
+ foreach ($subtasks as $subtask) {
+ $this->assertEquals(Subtask::STATUS_DONE, $subtask['status']);
+ }
+ }
}