Add getInstalledApps and getAppsForUser to the app manager
This commit is contained in:
parent
9c47ab91f2
commit
2b58e8489f
3 changed files with 99 additions and 18 deletions
|
@ -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]);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue