summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Action/TaskAssignColor.php83
-rw-r--r--app/Model/Action.php1
-rw-r--r--docs/api-json-rpc.markdown1
-rw-r--r--tests/units/ActionTaskAssignColorTest.php41
4 files changed, 126 insertions, 0 deletions
diff --git a/app/Action/TaskAssignColor.php b/app/Action/TaskAssignColor.php
new file mode 100644
index 00000000..b1da17e9
--- /dev/null
+++ b/app/Action/TaskAssignColor.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace Action;
+
+use Model\Task;
+
+/**
+ * Assign a color to a task
+ *
+ * @package action
+ */
+class TaskAssignColor extends Base
+{
+ /**
+ * Get the list of compatible events
+ *
+ * @access public
+ * @return array
+ */
+ public function getCompatibleEvents()
+ {
+ return array(
+ Task::EVENT_MOVE_COLUMN,
+ );
+ }
+
+ /**
+ * Get the required parameter for the action (defined by the user)
+ *
+ * @access public
+ * @return array
+ */
+ public function getActionRequiredParameters()
+ {
+ return array(
+ 'column_id' => t('Column'),
+ 'color_id' => t('Color'),
+ );
+ }
+
+ /**
+ * Get the required parameter for the event
+ *
+ * @access public
+ * @return string[]
+ */
+ public function getEventRequiredParameters()
+ {
+ return array(
+ 'task_id',
+ 'column_id',
+ );
+ }
+
+ /**
+ * Execute the action (set the task color)
+ *
+ * @access public
+ * @param array $data Event data dictionary
+ * @return bool True if the action was executed or false when not executed
+ */
+ public function doAction(array $data)
+ {
+ $values = array(
+ 'id' => $data['task_id'],
+ 'color_id' => $this->getParam('color_id'),
+ );
+
+ return $this->taskModification->update($values);
+ }
+
+ /**
+ * Check if the event data meet the action condition
+ *
+ * @access public
+ * @param array $data Event data dictionary
+ * @return bool
+ */
+ public function hasRequiredCondition(array $data)
+ {
+ return $data['column_id'] == $this->getParam('column_id');
+ }
+}
diff --git a/app/Model/Action.php b/app/Model/Action.php
index 0e132d73..b30d89fa 100644
--- a/app/Model/Action.php
+++ b/app/Model/Action.php
@@ -41,6 +41,7 @@ class Action extends Base
$values = array(
'TaskClose' => t('Close a task'),
'TaskOpen' => t('Open a task'),
+ 'TaskAssignColor' => t('Assign a color to a task'),
'TaskAssignSpecificUser' => t('Assign the task to a specific user'),
'TaskAssignCurrentUser' => t('Assign the task to the person who does the action'),
'TaskDuplicateAnotherProject' => t('Duplicate the task to another project'),
diff --git a/docs/api-json-rpc.markdown b/docs/api-json-rpc.markdown
index dcf92ea8..3c02e818 100644
--- a/docs/api-json-rpc.markdown
+++ b/docs/api-json-rpc.markdown
@@ -1390,6 +1390,7 @@ Response example:
"id": 1433237746,
"result": {
"TaskLogMoveAnotherColumn" : "Add a comment logging moving the task between columns",
+ "TaskAssignColor" : "Assign a color to a task",
"TaskAssignColorUser" : "Assign a color to a specific user",
"TaskAssignCategoryColor" : "Assign automatically a category based on a color",
"TaskAssignColorCategory" : "Assign automatically a color based on a category",
diff --git a/tests/units/ActionTaskAssignColorTest.php b/tests/units/ActionTaskAssignColorTest.php
new file mode 100644
index 00000000..4d2ea70a
--- /dev/null
+++ b/tests/units/ActionTaskAssignColorTest.php
@@ -0,0 +1,41 @@
+<?php
+
+require_once __DIR__.'/Base.php';
+
+use Event\GenericEvent;
+use Model\Task;
+use Model\TaskCreation;
+use Model\TaskFinder;
+use Model\Project;
+
+class ActionTaskAssignColorTest extends Base
+{
+ public function testColorChange()
+ {
+ $action = new Action\TaskAssignColor($this->container, 1, Task::EVENT_MOVE_COLUMN);
+ $action->setParam('column_id', 2);
+ $action->setParam('color_id', 'green');
+
+ // We create a task in the first column
+ $tc = new TaskCreation($this->container);
+ $tf = new TaskFinder($this->container);
+ $p = new Project($this->container);
+
+ $this->assertEquals(1, $p->create(array('name' => 'test')));
+ $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 1, 'color_id' => 'yellow')));
+
+ $event = array(
+ 'project_id' => 1,
+ 'task_id' => 1,
+ 'column_id' => 2,
+ 'color_id' => 'green',
+ );
+
+ // Our event should be executed
+ $this->assertTrue($action->execute(new GenericEvent($event)));
+
+ // Our task should have color green
+ $task = $tf->getById(1);
+ $this->assertEquals('green', $task['color_id']);
+ }
+}