summaryrefslogtreecommitdiff
path: root/app/Subscriber
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2015-05-10 15:15:58 -0400
committerFrederic Guillot <fred@kanboard.net>2015-05-10 15:15:58 -0400
commitbd3c44c3d337d49b02e19da0c6baed1a4abec37b (patch)
tree95156ad897763e6739e4db582fa10a8a371ea86b /app/Subscriber
parentc9dcd7061708114c72c0c7d80d108661308b1e50 (diff)
Recurring tasks (#847): move hardcoded conditions to event subscriber + refactoring
Diffstat (limited to 'app/Subscriber')
-rw-r--r--app/Subscriber/Base.php1
-rw-r--r--app/Subscriber/RecurringTaskSubscriber.php38
2 files changed, 39 insertions, 0 deletions
diff --git a/app/Subscriber/Base.php b/app/Subscriber/Base.php
index 95f311e7..10040626 100644
--- a/app/Subscriber/Base.php
+++ b/app/Subscriber/Base.php
@@ -24,6 +24,7 @@ use Pimple\Container;
* @property \Model\ProjectDailySummary $projectDailySummary
* @property \Model\Subtask $subtask
* @property \Model\Task $task
+ * @property \Model\TaskDuplication $taskDuplication
* @property \Model\TaskExport $taskExport
* @property \Model\TaskFinder $taskFinder
* @property \Model\SubtaskTimeTracking $subtaskTimeTracking
diff --git a/app/Subscriber/RecurringTaskSubscriber.php b/app/Subscriber/RecurringTaskSubscriber.php
new file mode 100644
index 00000000..57812fba
--- /dev/null
+++ b/app/Subscriber/RecurringTaskSubscriber.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace Subscriber;
+
+use Event\TaskEvent;
+use Model\Task;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+class RecurringTaskSubscriber extends Base implements EventSubscriberInterface
+{
+ public static function getSubscribedEvents()
+ {
+ return array(
+ Task::EVENT_MOVE_COLUMN => array('onMove', 0),
+ Task::EVENT_CLOSE => array('onClose', 0),
+ );
+ }
+
+ public function onMove(TaskEvent $event)
+ {
+ if ($event['recurrence_status'] == Task::RECURE_STATUS_PENDING) {
+
+ if ($event['recurrence_trigger'] == Task::RECURE_TRIGGER_FIRST && $this->board->getFirstColumn($event['project_id']) == $event['src_column_id']) {
+ $this->taskDuplication->duplicateRecurringTask($event['task_id']);
+ }
+ else if ($event['recurrence_trigger'] == Task::RECURE_TRIGGER_LAST && $this->board->getLastColumn($event['project_id']) == $event['dst_column_id']) {
+ $this->taskDuplication->duplicateRecurringTask($event['task_id']);
+ }
+ }
+ }
+
+ public function onClose(TaskEvent $event)
+ {
+ if ($event['recurrence_status'] == Task::RECURE_STATUS_PENDING && $event['recurrence_trigger'] == Task::RECURE_TRIGGER_CLOSE) {
+ $this->taskDuplication->duplicateRecurringTask($event['task_id']);
+ }
+ }
+}