Add getInstalledApps and getAppsForUser to the app manager

This commit is contained in:
Robin Appelman 2015-02-02 14:47:29 +01:00
parent 9c47ab91f2
commit 2b58e8489f
3 changed files with 99 additions and 18 deletions

View 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,28 +95,36 @@ 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 false;
}
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;
}
}
/**
* Check if an app is installed in the instance
*
@ -100,7 +132,7 @@ class AppManager implements IAppManager {
* @return bool
*/
public function isInstalled($appId) {
$installedApps = $this->getInstalledApps();
$installedApps = $this->getInstalledAppsValues();
return isset($installedApps[$appId]);
}

View 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();
}

View 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));
}
}