]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add getInstalledApps and getAppsForUser to the app manager
authorRobin Appelman <icewind@owncloud.com>
Mon, 2 Feb 2015 13:47:29 +0000 (14:47 +0100)
committerRobin Appelman <icewind@owncloud.com>
Mon, 16 Feb 2015 14:15:35 +0000 (15:15 +0100)
lib/private/app/appmanager.php
lib/public/app/iappmanager.php
tests/lib/app/manager.php

index 20a765e3434e18a9b10fa1b0fa5dc2a4f1477945..f35fc3e5e6b63d94c37f1682b2bafa9f9dfbbadd 100644 (file)
@@ -12,6 +12,7 @@ namespace OC\App;
 use OCP\App\IAppManager;
 use OCP\IAppConfig;
 use OCP\IGroupManager;
+use OCP\IUser;
 use OCP\IUserSession;
 
 class AppManager implements IAppManager {
@@ -49,7 +50,7 @@ class AppManager implements IAppManager {
        /**
         * @return string[] $appId => $enabled
         */
-       private function getInstalledApps() {
+       private function getInstalledAppsValues() {
                if (!$this->installedAppsCache) {
                        $values = $this->appConfig->getValues(false, 'enabled');
                        $this->installedAppsCache = array_filter($values, function ($value) {
@@ -60,6 +61,29 @@ class AppManager implements IAppManager {
                return $this->installedAppsCache;
        }
 
+       /**
+        * List all installed apps
+        *
+        * @return string[]
+        */
+       public function getInstalledApps() {
+               return array_keys($this->getInstalledAppsValues());
+       }
+
+       /**
+        * List all apps enabled for a user
+        *
+        * @param \OCP\IUser $user
+        * @return string[]
+        */
+       public function getAppsEnabledForUser(IUser $user) {
+               $apps = $this->getInstalledAppsValues();
+               $appsForUser = array_filter($apps, function ($enabled) use ($user) {
+                       return $this->checkAppForUser($enabled, $user);
+               });
+               return array_keys($appsForUser);
+       }
+
        /**
         * Check if an app is enabled for user
         *
@@ -71,24 +95,32 @@ class AppManager implements IAppManager {
                if (is_null($user)) {
                        $user = $this->userSession->getUser();
                }
-               $installedApps = $this->getInstalledApps();
+               $installedApps = $this->getInstalledAppsValues();
                if (isset($installedApps[$appId])) {
-                       $enabled = $installedApps[$appId];
-                       if ($enabled === 'yes') {
-                               return true;
-                       } elseif (is_null($user)) {
-                               return false;
-                       } else {
-                               $groupIds = json_decode($enabled);
-                               $userGroups = $this->groupManager->getUserGroupIds($user);
-                               foreach ($userGroups as $groupId) {
-                                       if (array_search($groupId, $groupIds) !== false) {
-                                               return true;
-                                       }
+                       return $this->checkAppForUser($installedApps[$appId], $user);
+               } else {
+                       return false;
+               }
+       }
+
+       /**
+        * @param string $enabled
+        * @param IUser $user
+        * @return bool
+        */
+       private function checkAppForUser($enabled, $user) {
+               if ($enabled === 'yes') {
+                       return true;
+               } elseif (is_null($user)) {
+                       return false;
+               } else {
+                       $groupIds = json_decode($enabled);
+                       $userGroups = $this->groupManager->getUserGroupIds($user);
+                       foreach ($userGroups as $groupId) {
+                               if (array_search($groupId, $groupIds) !== false) {
+                                       return true;
                                }
-                               return false;
                        }
-               } else {
                        return false;
                }
        }
@@ -100,7 +132,7 @@ class AppManager implements IAppManager {
         * @return bool
         */
        public function isInstalled($appId) {
-               $installedApps = $this->getInstalledApps();
+               $installedApps = $this->getInstalledAppsValues();
                return isset($installedApps[$appId]);
        }
 
index ebd84a1ce9da4af138a5bc81f8a87de80d3d821c..c79dcf9a573d2693aea3a4a0d786b6fad4bc49b5 100644 (file)
@@ -9,6 +9,8 @@
 
 namespace OCP\App;
 
+use OCP\IUser;
+
 interface IAppManager {
        /**
         * Check if an app is enabled for user
@@ -48,4 +50,19 @@ interface IAppManager {
         * @param string $appId
         */
        public function disableApp($appId);
+
+       /**
+        * List all apps enabled for a user
+        *
+        * @param \OCP\IUser $user
+        * @return string[]
+        */
+       public function getAppsEnabledForUser(IUser $user);
+
+       /**
+        * List all installed apps
+        *
+        * @return string[]
+        */
+       public function getInstalledApps();
 }
index 4c0555b501f9feeebbb0d55589b4b3ed28d1bf4a..4eaf4f08be99e2694a924d6e5f416b0ba4146376 100644 (file)
@@ -192,4 +192,36 @@ class Manager extends \PHPUnit_Framework_TestCase {
                $appConfig->setValue('test', 'enabled', '["foo"]');
                $this->assertTrue($manager->isEnabledForUser('test'));
        }
+
+       public function testGetInstalledApps() {
+               $userSession = $this->getMock('\OCP\IUserSession');
+               $groupManager = $this->getMock('\OCP\IGroupManager');
+
+               $appConfig = $this->getAppConfig();
+               $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+               $appConfig->setValue('test1', 'enabled', 'yes');
+               $appConfig->setValue('test2', 'enabled', 'no');
+               $appConfig->setValue('test3', 'enabled', '["foo"]');
+               $this->assertEquals(['test1', 'test3'], $manager->getInstalledApps());
+       }
+
+       public function testGetAppsForUser() {
+               $userSession = $this->getMock('\OCP\IUserSession');
+               $groupManager = $this->getMock('\OCP\IGroupManager');
+
+               $user = new User('user1', null);
+
+               $groupManager->expects($this->any())
+                       ->method('getUserGroupIds')
+                       ->with($user)
+                       ->will($this->returnValue(array('foo', 'bar')));
+
+               $appConfig = $this->getAppConfig();
+               $manager = new \OC\App\AppManager($userSession, $appConfig, $groupManager);
+               $appConfig->setValue('test1', 'enabled', 'yes');
+               $appConfig->setValue('test2', 'enabled', 'no');
+               $appConfig->setValue('test3', 'enabled', '["foo"]');
+               $appConfig->setValue('test4', 'enabled', '["asd"]');
+               $this->assertEquals(['test1', 'test3'], $manager->getAppsEnabledForUser($user));
+       }
 }