|
|
|
|
@ -33,29 +33,28 @@ use OCP\IUser; |
|
|
|
|
use OCP\IUserSession; |
|
|
|
|
|
|
|
|
|
class AppManager implements IAppManager { |
|
|
|
|
/** |
|
|
|
|
* @var \OCP\IUserSession |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/** @var \OCP\IUserSession */ |
|
|
|
|
private $userSession; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @var \OCP\IAppConfig |
|
|
|
|
*/ |
|
|
|
|
/** @var \OCP\IAppConfig */ |
|
|
|
|
private $appConfig; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @var \OCP\IGroupManager |
|
|
|
|
*/ |
|
|
|
|
/** @var \OCP\IGroupManager */ |
|
|
|
|
private $groupManager; |
|
|
|
|
|
|
|
|
|
/** @var \OCP\ICacheFactory */ |
|
|
|
|
private $memCacheFactory; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @var string[] $appId => $enabled |
|
|
|
|
*/ |
|
|
|
|
/** @var string[] $appId => $enabled */ |
|
|
|
|
private $installedAppsCache; |
|
|
|
|
|
|
|
|
|
/** @var string[] */ |
|
|
|
|
private $shippedApps; |
|
|
|
|
|
|
|
|
|
/** @var string[] */ |
|
|
|
|
private $alwaysEnabled; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param \OCP\IUserSession $userSession |
|
|
|
|
* @param \OCP\IAppConfig $appConfig |
|
|
|
|
@ -117,6 +116,9 @@ class AppManager implements IAppManager { |
|
|
|
|
* @return bool |
|
|
|
|
*/ |
|
|
|
|
public function isEnabledForUser($appId, $user = null) { |
|
|
|
|
if ($this->isAlwaysEnabled($appId)) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
if (is_null($user)) { |
|
|
|
|
$user = $this->userSession->getUser(); |
|
|
|
|
} |
|
|
|
|
@ -134,6 +136,9 @@ class AppManager implements IAppManager { |
|
|
|
|
* @return bool |
|
|
|
|
*/ |
|
|
|
|
private function checkAppForUser($enabled, $user) { |
|
|
|
|
if ($this->isAlwaysEnabled($enabled)) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
if ($enabled === 'yes') { |
|
|
|
|
return true; |
|
|
|
|
} elseif (is_null($user)) { |
|
|
|
|
@ -195,8 +200,8 @@ class AppManager implements IAppManager { |
|
|
|
|
* @throws \Exception if app can't be disabled |
|
|
|
|
*/ |
|
|
|
|
public function disableApp($appId) { |
|
|
|
|
if ($appId === 'files') { |
|
|
|
|
throw new \Exception("files can't be disabled."); |
|
|
|
|
if ($this->isAlwaysEnabled($appId)) { |
|
|
|
|
throw new \Exception("$appId can't be disabled."); |
|
|
|
|
} |
|
|
|
|
unset($this->installedAppsCache[$appId]); |
|
|
|
|
$this->appConfig->setValue($appId, 'enabled', 'no'); |
|
|
|
|
@ -279,4 +284,30 @@ class AppManager implements IAppManager { |
|
|
|
|
return $incompatibleApps; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function isShipped($appId) { |
|
|
|
|
$this->loadShippedJson(); |
|
|
|
|
return in_array($appId, $this->shippedApps); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private function isAlwaysEnabled($appId) { |
|
|
|
|
$this->loadShippedJson(); |
|
|
|
|
return in_array($appId, $this->alwaysEnabled); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private function loadShippedJson() { |
|
|
|
|
if (is_null($this->shippedApps)) { |
|
|
|
|
$shippedJson = \OC::$SERVERROOT . '/core/shipped.json'; |
|
|
|
|
if (file_exists($shippedJson)) { |
|
|
|
|
$content = json_decode(file_get_contents($shippedJson), true); |
|
|
|
|
$this->shippedApps = $content['shippedApps']; |
|
|
|
|
$this->alwaysEnabled = $content['alwaysEnabled']; |
|
|
|
|
} else { |
|
|
|
|
$this->shippedApps = ['files', 'encryption', 'files_external', |
|
|
|
|
'files_sharing', 'files_trashbin', 'files_versions', 'provisioning_api', |
|
|
|
|
'user_ldap', 'user_webdavauth']; |
|
|
|
|
$this->alwaysEnabled = ['files', 'dav']; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|