diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Accounts/AccountManager.php | 13 | ||||
-rw-r--r-- | lib/private/Files/Type/Loader.php | 15 | ||||
-rw-r--r-- | lib/private/Installer.php | 28 | ||||
-rw-r--r-- | lib/private/User/User.php | 5 | ||||
-rw-r--r-- | lib/private/legacy/app.php | 29 |
5 files changed, 57 insertions, 33 deletions
diff --git a/lib/private/Accounts/AccountManager.php b/lib/private/Accounts/AccountManager.php index 41fdad148aa..7db686c33a1 100644 --- a/lib/private/Accounts/AccountManager.php +++ b/lib/private/Accounts/AccountManager.php @@ -114,6 +114,19 @@ class AccountManager { } /** + * delete user from accounts table + * + * @param IUser $user + */ + public function deleteUser(IUser $user) { + $uid = $user->getUID(); + $query = $this->connection->getQueryBuilder(); + $query->delete($this->table) + ->where($query->expr()->eq('uid', $query->createNamedParameter($uid))) + ->execute(); + } + + /** * get stored data from a given user * * @param IUser $user diff --git a/lib/private/Files/Type/Loader.php b/lib/private/Files/Type/Loader.php index 4dd798e7b07..1ae783e8f83 100644 --- a/lib/private/Files/Type/Loader.php +++ b/lib/private/Files/Type/Loader.php @@ -154,18 +154,23 @@ class Loader implements IMimeTypeLoader { * Update filecache mimetype based on file extension * * @param string $ext file extension - * @param int $mimetypeId + * @param int $mimeTypeId * @return int number of changed rows */ - public function updateFilecache($ext, $mimetypeId) { + public function updateFilecache($ext, $mimeTypeId) { + $folderMimeTypeId = $this->getId('httpd/unix-directory'); $update = $this->dbConnection->getQueryBuilder(); $update->update('filecache') - ->set('mimetype', $update->createNamedParameter($mimetypeId)) + ->set('mimetype', $update->createNamedParameter($mimeTypeId)) ->where($update->expr()->neq( - 'mimetype', $update->createNamedParameter($mimetypeId) + 'mimetype', $update->createNamedParameter($mimeTypeId) + )) + ->andWhere($update->expr()->neq( + 'mimetype', $update->createNamedParameter($folderMimeTypeId) )) ->andWhere($update->expr()->like( - $update->createFunction('LOWER(`name`)'), $update->createNamedParameter($ext) + $update->createFunction('LOWER(' . $update->getColumnName('name') . ')'), + $update->createNamedParameter('%' . $this->dbConnection->escapeLikeParameter('.' . $ext)) )); return $update->execute(); } 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/User/User.php b/lib/private/User/User.php index f55807bc769..5e5d3f0d772 100644 --- a/lib/private/User/User.php +++ b/lib/private/User/User.php @@ -30,6 +30,7 @@ namespace OC\User; +use OC\Accounts\AccountManager; use OC\Files\Cache\Storage; use OC\Hooks\Emitter; use OC_Helper; @@ -235,6 +236,10 @@ class User implements IUser { $notification->setUser($this->uid); \OC::$server->getNotificationManager()->markProcessed($notification); + /** @var AccountManager $accountManager */ + $accountManager = \OC::$server->query(AccountManager::class); + $accountManager->deleteUser($this); + if ($this->emitter) { $this->emitter->emit('\OC\User', 'postDelete', array($this)); } 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)) { |