]> source.dussan.org Git - nextcloud-server.git/commitdiff
Send events when enabling and disabling of apps
authorArthur Schiwon <blizzz@owncloud.com>
Tue, 9 Feb 2016 01:51:12 +0000 (02:51 +0100)
committerArthur Schiwon <blizzz@owncloud.com>
Tue, 9 Feb 2016 01:51:12 +0000 (02:51 +0100)
lib/private/app/appmanager.php
lib/private/server.php
lib/public/app/managerevent.php [new file with mode: 0644]
tests/lib/app.php
tests/lib/app/manager.php

index bf07a2ef54842ea8a9f4ef5762b1c4703540ff70..eeb2216d5a8d64d5724ad5127986dd118139a5e5 100644 (file)
 namespace OC\App;
 
 use OCP\App\IAppManager;
+use OCP\App\ManagerEvent;
 use OCP\IAppConfig;
 use OCP\ICacheFactory;
 use OCP\IGroupManager;
 use OCP\IUser;
 use OCP\IUserSession;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 
 class AppManager implements IAppManager {
 
@@ -68,6 +70,9 @@ class AppManager implements IAppManager {
        /** @var string[] */
        private $alwaysEnabled;
 
+       /** @var EventDispatcherInterface */
+       private $dispatcher;
+
        /**
         * @param \OCP\IUserSession $userSession
         * @param \OCP\IAppConfig $appConfig
@@ -77,11 +82,13 @@ class AppManager implements IAppManager {
        public function __construct(IUserSession $userSession,
                                                                IAppConfig $appConfig,
                                                                IGroupManager $groupManager,
-                                                               ICacheFactory $memCacheFactory) {
+                                                               ICacheFactory $memCacheFactory,
+                                                               EventDispatcherInterface $dispatcher) {
                $this->userSession = $userSession;
                $this->appConfig = $appConfig;
                $this->groupManager = $groupManager;
                $this->memCacheFactory = $memCacheFactory;
+               $this->dispatcher = $dispatcher;
        }
 
        /**
@@ -201,6 +208,9 @@ class AppManager implements IAppManager {
        public function enableApp($appId) {
                $this->installedAppsCache[$appId] = 'yes';
                $this->appConfig->setValue($appId, 'enabled', 'yes');
+               $this->dispatcher->dispatch(ManagerEvent::EVENT_APP_ENABLE, new ManagerEvent(
+                       ManagerEvent::EVENT_APP_ENABLE, $appId
+               ));
                $this->clearAppsCache();
        }
 
@@ -226,6 +236,9 @@ class AppManager implements IAppManager {
                }, $groups);
                $this->installedAppsCache[$appId] = json_encode($groupIds);
                $this->appConfig->setValue($appId, 'enabled', json_encode($groupIds));
+               $this->dispatcher->dispatch(ManagerEvent::EVENT_APP_ENABLE_FOR_GROUPS, new ManagerEvent(
+                       ManagerEvent::EVENT_APP_ENABLE_FOR_GROUPS, $appId, $groups
+               ));
                $this->clearAppsCache();
        }
 
@@ -241,6 +254,9 @@ class AppManager implements IAppManager {
                }
                unset($this->installedAppsCache[$appId]);
                $this->appConfig->setValue($appId, 'enabled', 'no');
+               $this->dispatcher->dispatch(ManagerEvent::EVENT_APP_ENABLE, new ManagerEvent(
+                       ManagerEvent::EVENT_APP_DISABLE, $appId
+               ));
                $this->clearAppsCache();
        }
 
index 55ac64a0c2d152505ca9dd063406f9ff996cd35c..0d1bed4e7d227bcf1e8dbde0ee01a24949431f1f 100644 (file)
@@ -413,7 +413,8 @@ class Server extends ServerContainer implements IServerContainer {
                                $c->getUserSession(),
                                $c->getAppConfig(),
                                $c->getGroupManager(),
-                               $c->getMemCacheFactory()
+                               $c->getMemCacheFactory(),
+                               $c->getEventDispatcher()
                        );
                });
                $this->registerService('DateTimeZone', function (Server $c) {
diff --git a/lib/public/app/managerevent.php b/lib/public/app/managerevent.php
new file mode 100644 (file)
index 0000000..99e9b11
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+/**
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ *
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCP\App;
+
+use Symfony\Component\EventDispatcher\Event;
+
+/**
+ * Class ManagerEvent
+ *
+ * @package OCP\APP
+ * @since 9.0.0
+ */
+class ManagerEvent extends Event {
+
+       const EVENT_APP_ENABLE = 'OCP\App\IAppManager::enableApp';
+       const EVENT_APP_ENABLE_FOR_GROUPS = 'OCP\App\IAppManager::enableAppForGroups';
+       const EVENT_APP_DISABLE = 'OCP\App\IAppManager::disableApp';
+
+       /** @var string */
+       protected $event;
+       /** @var string */
+       protected $appID;
+       /** @var \OCP\IGroup[] */
+       protected $groups;
+
+       /**
+        * DispatcherEvent constructor.
+        *
+        * @param string $event
+        * @param $appID
+        * @param \OCP\IGroup[] $groups
+        * @since 9.0.0
+        */
+       public function __construct($event, $appID, array $groups = null) {
+               $this->event = $event;
+               $this->appID = $appID;
+               $this->groups = $groups;
+       }
+
+       /**
+        * @return string
+        * @since 9.0.0
+        */
+       public function getEvent() {
+               return $this->event;
+       }
+
+       /**
+        * @return string
+        * @since 9.0.0
+        */
+       public function getAppID() {
+               return $this->appID;
+       }
+
+       /**
+        * returns the group Ids
+        * @return string[]
+        * @since 9.0.0
+        */
+       public function getGroups() {
+               return array_map(function ($group) {
+                       /** @var \OCP\IGroup $group */
+                       return $group->getGID();
+               }, $this->groups);
+       }
+}
index 3fb42ea23829de8653d575d55dc4fcb2d7a133b9..065296827ddf58fcc151820cdc4361d52530d94e 100644 (file)
@@ -485,7 +485,7 @@ class Test_App extends \Test\TestCase {
                        return $appConfig;
                });
                \OC::$server->registerService('AppManager', function (\OC\Server $c) use ($appConfig) {
-                       return new \OC\App\AppManager($c->getUserSession(), $appConfig, $c->getGroupManager(), $c->getMemCacheFactory());
+                       return new \OC\App\AppManager($c->getUserSession(), $appConfig, $c->getGroupManager(), $c->getMemCacheFactory(), $c->getEventDispatcher());
                });
        }
 
@@ -497,7 +497,7 @@ class Test_App extends \Test\TestCase {
                        return new \OC\AppConfig($c->getDatabaseConnection());
                });
                \OC::$server->registerService('AppManager', function (\OC\Server $c) {
-                       return new \OC\App\AppManager($c->getUserSession(), $c->getAppConfig(), $c->getGroupManager(), $c->getMemCacheFactory());
+                       return new \OC\App\AppManager($c->getUserSession(), $c->getAppConfig(), $c->getGroupManager(), $c->getMemCacheFactory(), $c->getEventDispatcher());
                });
 
                // Remove the cache of the mocked apps list with a forceRefresh
index ee9b1f308ea8b65ee8b1bdb0ccb97dfab710c5c6..ef7c01658e154cddbec984cc7565c81579ef540a 100644 (file)
@@ -79,6 +79,9 @@ class Manager extends TestCase {
        /** @var \OCP\App\IAppManager */
        protected $manager;
 
+       /** @var  \Symfony\Component\EventDispatcher\EventDispatcherInterface */
+       protected $eventDispatcher;
+
        protected function setUp() {
                parent::setUp();
 
@@ -87,11 +90,12 @@ class Manager extends TestCase {
                $this->appConfig = $this->getAppConfig();
                $this->cacheFactory = $this->getMock('\OCP\ICacheFactory');
                $this->cache = $this->getMock('\OCP\ICache');
+               $this->eventDispatcher = $this->getMock('\Symfony\Component\EventDispatcher\EventDispatcherInterface');
                $this->cacheFactory->expects($this->any())
                        ->method('create')
                        ->with('settings')
                        ->willReturn($this->cache);
-               $this->manager = new \OC\App\AppManager($this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory);
+               $this->manager = new \OC\App\AppManager($this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory, $this->eventDispatcher);
        }
 
        protected function expectClearCache() {
@@ -149,7 +153,7 @@ class Manager extends TestCase {
                /** @var \OC\App\AppManager|\PHPUnit_Framework_MockObject_MockObject $manager */
                $manager = $this->getMockBuilder('OC\App\AppManager')
                        ->setConstructorArgs([
-                               $this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory
+                               $this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory, $this->eventDispatcher
                        ])
                        ->setMethods([
                                'getAppInfo'
@@ -192,7 +196,7 @@ class Manager extends TestCase {
                /** @var \OC\App\AppManager|\PHPUnit_Framework_MockObject_MockObject $manager */
                $manager = $this->getMockBuilder('OC\App\AppManager')
                        ->setConstructorArgs([
-                               $this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory
+                               $this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory, $this->eventDispatcher
                        ])
                        ->setMethods([
                                'getAppInfo'
@@ -301,7 +305,7 @@ class Manager extends TestCase {
 
        public function testGetAppsNeedingUpgrade() {
                $this->manager = $this->getMockBuilder('\OC\App\AppManager')
-                       ->setConstructorArgs([$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory])
+                       ->setConstructorArgs([$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory, $this->eventDispatcher])
                        ->setMethods(['getAppInfo'])
                        ->getMock();
 
@@ -342,7 +346,7 @@ class Manager extends TestCase {
 
        public function testGetIncompatibleApps() {
                $this->manager = $this->getMockBuilder('\OC\App\AppManager')
-                       ->setConstructorArgs([$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory])
+                       ->setConstructorArgs([$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory, $this->eventDispatcher])
                        ->setMethods(['getAppInfo'])
                        ->getMock();