diff options
author | Morris Jobke <hey@morrisjobke.de> | 2017-05-15 00:03:35 -0500 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2017-05-15 00:03:35 -0500 |
commit | be33234266db3cae8f2836c579be21b926aea162 (patch) | |
tree | 415e86ab01727dd9d0c183fefc3d361839d7be29 /lib | |
parent | 9ad57cabc8aeaaf0565001936233979426d41a6a (diff) | |
download | nextcloud-server-be33234266db3cae8f2836c579be21b926aea162.tar.gz nextcloud-server-be33234266db3cae8f2836c579be21b926aea162.zip |
Remove OC_App:installApp
* uses Installer->installApp now
* removes unused code
* fixes #4453
* added some additional checks
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Installer.php | 28 | ||||
-rw-r--r-- | lib/private/legacy/app.php | 29 |
2 files changed, 29 insertions, 28 deletions
diff --git a/lib/private/Installer.php b/lib/private/Installer.php index 8702f264e54..35f51b19b07 100644 --- a/lib/private/Installer.php +++ b/lib/private/Installer.php @@ -98,7 +98,7 @@ class Installer { * * @param string $appId App to install * @throws \Exception - * @return integer + * @return string app ID */ public function installApp($appId) { $app = \OC_App::findAppInDirectories($appId); @@ -109,6 +109,29 @@ class Installer { $basedir = $app['path'].'/'.$appId; $info = OC_App::getAppInfo($basedir.'/appinfo/info.xml', true); + $l = \OC::$server->getL10N('core'); + + if(!is_array($info)) { + throw new \Exception( + $l->t('App "%s" cannot be installed because appinfo file cannot be read.', + [$info['name']] + ) + ); + } + + $version = \OCP\Util::getVersion(); + if (!\OC_App::isAppCompatible($version, $info)) { + throw new \Exception( + // TODO $l + $l->t('App "%s" cannot be installed because it is not compatible with this version of the server.', + [$info['name']] + ) + ); + } + + // check for required dependencies + \OC_App::checkAppDependencies($this->config, $l, $info); + //install the database if(is_file($basedir.'/appinfo/database.xml')) { if (\OC::$server->getAppConfig()->getValue($info['id'], 'installed_version') === null) { @@ -120,6 +143,9 @@ class Installer { \OC_App::registerAutoloading($appId, $basedir); \OC_App::setupBackgroundJobs($info['background-jobs']); + if(isset($info['settings']) && is_array($info['settings'])) { + \OC::$server->getSettingsManager()->setupSettings($info['settings']); + } //run appinfo/install.php if((!isset($data['noinstall']) or $data['noinstall']==false)) { diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php index 111da7d0d40..2e9e97d5bd7 100644 --- a/lib/private/legacy/app.php +++ b/lib/private/legacy/app.php @@ -357,8 +357,6 @@ class OC_App { public function enable($appId, $groups = null) { self::$enabledAppsCache = []; // flush - $l = \OC::$server->getL10N('core'); - $config = \OC::$server->getConfig(); // Check if app is already downloaded $installer = new Installer( @@ -374,23 +372,7 @@ class OC_App { $installer->downloadApp($appId); } - if (!Installer::isInstalled($appId)) { - $appId = self::installApp( - $appId, - $config, - $l - ); - $appPath = self::getAppPath($appId); - self::registerAutoloading($appId, $appPath); - $installer->installApp($appId); - } else { - // check for required dependencies - $info = self::getAppInfo($appId); - self::checkAppDependencies($config, $l, $info); - $appPath = self::getAppPath($appId); - self::registerAutoloading($appId, $appPath); - $installer->installApp($appId); - } + $installer->installApp($appId); $appManager = \OC::$server->getAppManager(); if (!is_null($groups)) { @@ -406,13 +388,6 @@ class OC_App { } else { $appManager->enableApp($appId); } - - $info = self::getAppInfo($appId); - if(isset($info['settings']) && is_array($info['settings'])) { - $appPath = self::getAppPath($appId); - self::registerAutoloading($appId, $appPath); - \OC::$server->getSettingsManager()->setupSettings($info['settings']); - } } /** @@ -1258,7 +1233,7 @@ class OC_App { * @param array $info * @throws \Exception */ - protected static function checkAppDependencies($config, $l, $info) { + public static function checkAppDependencies($config, $l, $info) { $dependencyAnalyzer = new DependencyAnalyzer(new Platform($config), $l); $missing = $dependencyAnalyzer->analyze($info); if (!empty($missing)) { |