diff options
author | Frédéric Guillot <fred@kanboard.net> | 2014-05-26 12:27:33 -0400 |
---|---|---|
committer | Frédéric Guillot <fred@kanboard.net> | 2014-05-26 12:27:33 -0400 |
commit | 2cb6b77ac87c52e9655a1333d39d0263b4880ed5 (patch) | |
tree | 0539622e8cf589a1f71ffe8ddcbfcc0a4122579f | |
parent | dbc4443bb18ab2f588b5f8e2f6dbec4332a46660 (diff) |
Improve events handling
-rw-r--r-- | README.markdown | 2 | ||||
-rw-r--r-- | app/Core/Event.php | 27 | ||||
-rw-r--r-- | app/Model/Task.php | 10 | ||||
-rw-r--r-- | tests/ActionTest.php | 23 | ||||
-rw-r--r-- | tests/TaskTest.php | 19 |
5 files changed, 51 insertions, 30 deletions
diff --git a/README.markdown b/README.markdown index b4337988..e3c5b24c 100644 --- a/README.markdown +++ b/README.markdown @@ -21,7 +21,7 @@ Features - Multiple boards/projects - Boards customization, rename or add columns -- Tasks with different colors, Markdown support for the description +- Tasks with different colors, categories, sub-tasks, attachments, Markdown support for the description - Automatic actions - Users management with a basic privileges separation (administrator or regular user) - External authentication: Google Account and LDAP/ActiveDirectory diff --git a/app/Core/Event.php b/app/Core/Event.php index 2c029b49..ac81bf87 100644 --- a/app/Core/Event.php +++ b/app/Core/Event.php @@ -67,13 +67,16 @@ class Event */ public function trigger($eventName, array $data) { - $this->lastEvent = $eventName; - $this->events[] = $eventName; + if (! $this->isEventTriggered($eventName)) { - if (isset($this->listeners[$eventName])) { - foreach ($this->listeners[$eventName] as $listener) { - if ($listener->execute($data)) { - $this->lastListener = get_class($listener); + $this->lastEvent = $eventName; + $this->events[] = $eventName; + + if (isset($this->listeners[$eventName])) { + foreach ($this->listeners[$eventName] as $listener) { + if ($listener->execute($data)) { + $this->lastListener = get_class($listener); + } } } } @@ -113,6 +116,18 @@ class Event } /** + * Check if an event have been triggered + * + * @access public + * @param string $eventName Event name + * @return bool + */ + public function isEventTriggered($eventName) + { + return in_array($eventName, $this->events); + } + + /** * Check if a listener bind to an event * * @access public diff --git a/app/Model/Task.php b/app/Model/Task.php index 45c68aec..04500272 100644 --- a/app/Model/Task.php +++ b/app/Model/Task.php @@ -359,12 +359,10 @@ class Task extends Base // Trigger events if ($result) { - $events = array(); - - if (! in_array($this->event->getLastTriggeredEvent(), array(self::EVENT_CREATE_UPDATE))) { - $events[] = self::EVENT_CREATE_UPDATE; - $events[] = self::EVENT_UPDATE; - } + $events = array( + self::EVENT_CREATE_UPDATE, + self::EVENT_UPDATE, + ); if (isset($values['column_id']) && $original_task['column_id'] != $values['column_id']) { $events[] = self::EVENT_MOVE_COLUMN; diff --git a/tests/ActionTest.php b/tests/ActionTest.php index 391f0e25..5cab0fc0 100644 --- a/tests/ActionTest.php +++ b/tests/ActionTest.php @@ -86,6 +86,9 @@ class ActionTest extends Base // We move our task $task->move(1, 4, 1); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_MOVE_COLUMN)); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_UPDATE)); + // Our task should be closed $t1 = $task->getById(1); $this->assertEquals(4, $t1['column_id']); @@ -109,15 +112,16 @@ class ActionTest extends Base 'owner_id' => 1, 'color_id' => 'red', 'column_id' => 1, + 'category_id' => 1, ))); // We create a new action, when the category_id=2 then the color_id should be green $this->assertTrue($action->create(array( 'project_id' => 1, 'event_name' => Task::EVENT_MOVE_POSITION, - 'action_name' => 'TaskClose', + 'action_name' => 'TaskAssignColorCategory', 'params' => array( - 'column_id' => 1, + 'category_id' => 1, 'color_id' => 'green', ) ))); @@ -125,21 +129,24 @@ class ActionTest extends Base // We bind events $action->attachEvents(); - $this->assertTrue($this->event->hasListener(Task::EVENT_MOVE_POSITION, 'Action\TaskClose')); + $this->assertTrue($this->event->hasListener(Task::EVENT_MOVE_POSITION, 'Action\TaskAssignColorCategory')); // Our task should have the color red and position=0 $t1 = $task->getById(1); $this->assertEquals(0, $t1['position']); $this->assertEquals(1, $t1['is_active']); + $this->assertEquals('red', $t1['color_id']); // We move our task $task->move(1, 1, 2); - $this->assertEquals(Task::EVENT_CLOSE, $this->event->getLastTriggeredEvent()); + + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_MOVE_POSITION)); // Our task should be green and have the position 2 $t1 = $task->getById(1); $this->assertEquals(2, $t1['position']); - $this->assertEquals(0, $t1['is_active']); + $this->assertEquals(1, $t1['is_active']); + $this->assertEquals('green', $t1['color_id']); } public function testExecuteMultipleActions() @@ -197,7 +204,9 @@ class ActionTest extends Base // We move our task $task->move(1, 4, 1); - $this->assertEquals(Task::EVENT_CREATE, $this->event->getLastTriggeredEvent()); + + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_CLOSE)); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_MOVE_COLUMN)); // Our task should be closed $t1 = $task->getById(1); @@ -212,6 +221,4 @@ class ActionTest extends Base $this->assertEquals(2, $t2['project_id']); $this->assertEquals('unit_test', $t2['title']); } - - } diff --git a/tests/TaskTest.php b/tests/TaskTest.php index 2f645131..da7e6a70 100644 --- a/tests/TaskTest.php +++ b/tests/TaskTest.php @@ -110,7 +110,7 @@ class TaskTest extends Base // We duplicate our task $this->assertEquals(2, $t->duplicate(1)); - $this->assertEquals(Task::EVENT_CREATE, $this->event->getLastTriggeredEvent()); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_CREATE)); // Check the values of the duplicated task $task = $t->getById(2); @@ -136,7 +136,7 @@ class TaskTest extends Base // We duplicate our task to the 2nd project $this->assertEquals(2, $t->duplicateToAnotherProject(1, 2)); - $this->assertEquals(Task::EVENT_CREATE, $this->event->getLastTriggeredEvent()); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_CREATE)); // Check the values of the duplicated task $task = $t->getById(2); @@ -157,30 +157,31 @@ class TaskTest extends Base // We create task $this->assertEquals(1, $t->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 1))); - $this->assertEquals(Task::EVENT_CREATE, $this->event->getLastTriggeredEvent()); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_CREATE)); // We update a task $this->assertTrue($t->update(array('title' => 'test2', 'id' => 1))); - $this->assertEquals(Task::EVENT_UPDATE, $this->event->getLastTriggeredEvent()); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_UPDATE)); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_CREATE_UPDATE)); // We close our task $this->assertTrue($t->close(1)); - $this->assertEquals(Task::EVENT_CLOSE, $this->event->getLastTriggeredEvent()); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_CLOSE)); // We open our task $this->assertTrue($t->open(1)); - $this->assertEquals(Task::EVENT_OPEN, $this->event->getLastTriggeredEvent()); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_OPEN)); // We change the column of our task $this->assertTrue($t->move(1, 2, 1)); - $this->assertEquals(Task::EVENT_MOVE_COLUMN, $this->event->getLastTriggeredEvent()); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_MOVE_COLUMN)); // We change the position of our task $this->assertTrue($t->move(1, 2, 2)); - $this->assertEquals(Task::EVENT_MOVE_POSITION, $this->event->getLastTriggeredEvent()); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_MOVE_POSITION)); // We change the column and the position of our task $this->assertTrue($t->move(1, 1, 3)); - $this->assertEquals(Task::EVENT_MOVE_COLUMN, $this->event->getLastTriggeredEvent()); + $this->assertTrue($this->event->isEventTriggered(Task::EVENT_MOVE_COLUMN)); } } |