From 92a5a0f8607e136e42e411a8b7aa9e948d3e3611 Mon Sep 17 00:00:00 2001
From: Frederic Guillot <fred@kanboard.net>
Date: Sun, 31 Jul 2016 11:28:33 -0400
Subject: Cleanup events and stuff before processing job in worker

---
 app/Core/Action/ActionManager.php | 16 ++++++++++++++++
 app/Core/Queue/JobHandler.php     | 14 +++++++++++++-
 2 files changed, 29 insertions(+), 1 deletion(-)

(limited to 'app/Core')

diff --git a/app/Core/Action/ActionManager.php b/app/Core/Action/ActionManager.php
index 1dfd820c..aec9ef02 100644
--- a/app/Core/Action/ActionManager.php
+++ b/app/Core/Action/ActionManager.php
@@ -139,4 +139,20 @@ class ActionManager extends Base
 
         return $this;
     }
+
+    /**
+     * Remove all listeners for automated actions
+     *
+     * @access public
+     */
+    public function removeEvents()
+    {
+        foreach ($this->dispatcher->getListeners() as $eventName => $listeners) {
+            foreach ($listeners as $listener) {
+                if (is_array($listener) && $listener[0] instanceof ActionBase) {
+                    $this->dispatcher->removeListener($eventName, $listener);
+                }
+            }
+        }
+    }
 }
diff --git a/app/Core/Queue/JobHandler.php b/app/Core/Queue/JobHandler.php
index 326f3cef..11c1fb69 100644
--- a/app/Core/Queue/JobHandler.php
+++ b/app/Core/Queue/JobHandler.php
@@ -43,8 +43,8 @@ class JobHandler extends Base
 
         try {
             $className = $payload['class'];
-            $this->memoryCache->flush();
             $this->prepareJobSession($payload['user_id']);
+            $this->prepareJobEnvironment();
 
             if (DEBUG) {
                 $this->logger->debug(__METHOD__.' Received job => '.$className.' ('.getmypid().')');
@@ -75,4 +75,16 @@ class JobHandler extends Base
             $this->userSession->initialize($user);
         }
     }
+
+    /**
+     * Flush in-memory caching and specific events
+     *
+     * @access protected
+     */
+    protected function prepareJobEnvironment()
+    {
+        $this->memoryCache->flush();
+        $this->actionManager->removeEvents();
+        $this->dispatcher->dispatch('app.bootstrap');
+    }
 }
-- 
cgit v1.2.3