summaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/App/AppStore/Bundles/Bundle.php59
-rw-r--r--lib/private/App/AppStore/Bundles/BundleFetcher.php80
-rw-r--r--lib/private/App/AppStore/Bundles/CoreBundle.php42
-rw-r--r--lib/private/App/AppStore/Bundles/EnterpriseBundle.php47
-rw-r--r--lib/private/App/AppStore/Bundles/GroupwareBundle.php44
-rw-r--r--lib/private/App/AppStore/Bundles/SocialSharingBundle.php46
-rw-r--r--lib/private/Contacts/ContactsMenu/ContactsStore.php44
-rw-r--r--lib/private/Contacts/ContactsMenu/Manager.php17
-rw-r--r--lib/private/Files/Utils/Scanner.php45
-rw-r--r--lib/private/Installer.php33
-rw-r--r--lib/private/Repair.php7
-rw-r--r--lib/private/Repair/NC12/InstallCoreBundle.php78
-rw-r--r--lib/private/Server.php8
-rw-r--r--lib/private/Setup.php20
-rw-r--r--lib/private/Updater.php7
-rw-r--r--lib/private/legacy/app.php6
16 files changed, 567 insertions, 16 deletions
diff --git a/lib/private/App/AppStore/Bundles/Bundle.php b/lib/private/App/AppStore/Bundles/Bundle.php
new file mode 100644
index 00000000000..47efc4e0cce
--- /dev/null
+++ b/lib/private/App/AppStore/Bundles/Bundle.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\App\AppStore\Bundles;
+
+use OCP\IL10N;
+
+abstract class Bundle {
+ /** @var IL10N */
+ protected $l10n;
+
+ /**
+ * @param IL10N $l10n
+ */
+ public function __construct(IL10N $l10n) {
+ $this->l10n = $l10n;
+ }
+
+ /**
+ * Get the identifier of the bundle
+ *
+ * @return string
+ */
+ public final function getIdentifier() {
+ return substr(strrchr(get_class($this), '\\'), 1);
+ }
+
+ /**
+ * Get the name of the bundle
+ *
+ * @return string
+ */
+ public abstract function getName();
+
+ /**
+ * Get the list of app identifiers in the bundle
+ *
+ * @return array
+ */
+ public abstract function getAppIdentifiers();
+}
diff --git a/lib/private/App/AppStore/Bundles/BundleFetcher.php b/lib/private/App/AppStore/Bundles/BundleFetcher.php
new file mode 100644
index 00000000000..01cd4d6a518
--- /dev/null
+++ b/lib/private/App/AppStore/Bundles/BundleFetcher.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\App\AppStore\Bundles;
+
+use OCP\IL10N;
+
+class BundleFetcher {
+ /** @var IL10N */
+ private $l10n;
+
+ /**
+ * @param IL10N $l10n
+ */
+ public function __construct(IL10N $l10n) {
+ $this->l10n = $l10n;
+ }
+
+ /**
+ * @return Bundle[]
+ */
+ public function getBundles() {
+ return [
+ new EnterpriseBundle($this->l10n),
+ new GroupwareBundle($this->l10n),
+ new SocialSharingBundle($this->l10n),
+ ];
+ }
+
+ /**
+ * Bundles that should be installed by default after installation
+ *
+ * @return Bundle[]
+ */
+ public function getDefaultInstallationBundle() {
+ return [
+ new CoreBundle($this->l10n),
+ ];
+ }
+
+ /**
+ * Get the bundle with the specified identifier
+ *
+ * @param string $identifier
+ * @return Bundle
+ * @throws \BadMethodCallException If the bundle does not exist
+ */
+ public function getBundleByIdentifier($identifier) {
+ /** @var Bundle[] $bundles */
+ $bundles = array_merge(
+ $this->getBundles(),
+ $this->getDefaultInstallationBundle()
+ );
+ foreach($bundles as $bundle) {
+ if($bundle->getIdentifier() === $identifier) {
+ return $bundle;
+ }
+ }
+
+ throw new \BadMethodCallException('Bundle with specified identifier does not exist');
+ }
+}
diff --git a/lib/private/App/AppStore/Bundles/CoreBundle.php b/lib/private/App/AppStore/Bundles/CoreBundle.php
new file mode 100644
index 00000000000..a87292b9ec9
--- /dev/null
+++ b/lib/private/App/AppStore/Bundles/CoreBundle.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\App\AppStore\Bundles;
+
+class CoreBundle extends Bundle {
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getName() {
+ return 'Core bundle';
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getAppIdentifiers() {
+ return [
+ 'bruteforcesettings',
+ ];
+ }
+
+}
diff --git a/lib/private/App/AppStore/Bundles/EnterpriseBundle.php b/lib/private/App/AppStore/Bundles/EnterpriseBundle.php
new file mode 100644
index 00000000000..6d43a6210fa
--- /dev/null
+++ b/lib/private/App/AppStore/Bundles/EnterpriseBundle.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\App\AppStore\Bundles;
+
+class EnterpriseBundle extends Bundle {
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getName() {
+ return (string)$this->l10n->t('Enterprise bundle');
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getAppIdentifiers() {
+ return [
+ 'admin_audit',
+ 'user_ldap',
+ 'files_retention',
+ 'files_automatedtagging',
+ 'user_saml',
+ 'files_accesscontrol',
+ ];
+ }
+
+}
diff --git a/lib/private/App/AppStore/Bundles/GroupwareBundle.php b/lib/private/App/AppStore/Bundles/GroupwareBundle.php
new file mode 100644
index 00000000000..7e7414f69c7
--- /dev/null
+++ b/lib/private/App/AppStore/Bundles/GroupwareBundle.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\App\AppStore\Bundles;
+
+class GroupwareBundle extends Bundle {
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getName() {
+ return (string)$this->l10n->t('Groupware bundle');
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getAppIdentifiers() {
+ return [
+ 'calendar',
+ 'contacts',
+ 'spreed',
+ ];
+ }
+
+}
diff --git a/lib/private/App/AppStore/Bundles/SocialSharingBundle.php b/lib/private/App/AppStore/Bundles/SocialSharingBundle.php
new file mode 100644
index 00000000000..8da84e8d1ef
--- /dev/null
+++ b/lib/private/App/AppStore/Bundles/SocialSharingBundle.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\App\AppStore\Bundles;
+
+class SocialSharingBundle extends Bundle {
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getName() {
+ return (string)$this->l10n->t('Social sharing bundle');
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getAppIdentifiers() {
+ return [
+ 'socialsharing_twitter',
+ 'socialsharing_googleplus',
+ 'socialsharing_facebook',
+ 'socialsharing_email',
+ 'socialsharing_diaspora',
+ ];
+ }
+
+}
diff --git a/lib/private/Contacts/ContactsMenu/ContactsStore.php b/lib/private/Contacts/ContactsMenu/ContactsStore.php
index 1cdb5d6fc5f..40a0bf87031 100644
--- a/lib/private/Contacts/ContactsMenu/ContactsStore.php
+++ b/lib/private/Contacts/ContactsMenu/ContactsStore.php
@@ -60,6 +60,50 @@ class ContactsStore {
}
/**
+ * @param IUser $user
+ * @param integer $shareType
+ * @param string $shareWith
+ * @return IEntry|null
+ */
+ public function findOne(IUser $user, $shareType, $shareWith) {
+ switch($shareType) {
+ case 0:
+ case 6:
+ $filter = ['UID'];
+ break;
+ case 4:
+ $filter = ['EMAIL'];
+ break;
+ default:
+ return null;
+ }
+
+ $userId = $user->getUID();
+ $allContacts = $this->contactsManager->search($shareWith, $filter);
+ $contacts = array_filter($allContacts, function($contact) use ($userId) {
+ return $contact['UID'] !== $userId;
+ });
+ $match = null;
+
+ foreach ($contacts as $contact) {
+ if ($shareType === 4 && isset($contact['EMAIL'])) {
+ if (in_array($shareWith, $contact['EMAIL'])) {
+ $match = $contact;
+ break;
+ }
+ }
+ if ($shareType === 0 || $shareType === 6) {
+ if ($contact['UID'] === $shareWith && $contact['isLocalSystemBook'] === true) {
+ $match = $contact;
+ break;
+ }
+ }
+ }
+
+ return $match ? $this->contactArrayToEntry($match) : null;
+ }
+
+ /**
* @param array $contact
* @return Entry
*/
diff --git a/lib/private/Contacts/ContactsMenu/Manager.php b/lib/private/Contacts/ContactsMenu/Manager.php
index 16d77c2df08..766b4623253 100644
--- a/lib/private/Contacts/ContactsMenu/Manager.php
+++ b/lib/private/Contacts/ContactsMenu/Manager.php
@@ -51,7 +51,7 @@ class Manager {
}
/**
- * @param string $user
+ * @param IUser $user
* @param string $filter
* @return array
*/
@@ -70,6 +70,21 @@ class Manager {
}
/**
+ * @param IUser $user
+ * @param integer $shareType
+ * @param string $shareWith
+ * @return IEntry
+ */
+ public function findOne(IUser $user, $shareType, $shareWith) {
+ $entry = $this->store->findOne($user, $shareType, $shareWith);
+ if ($entry) {
+ $this->processEntries([$entry], $user);
+ }
+
+ return $entry;
+ }
+
+ /**
* @param IEntry[] $entries
* @return IEntry[]
*/
diff --git a/lib/private/Files/Utils/Scanner.php b/lib/private/Files/Utils/Scanner.php
index 02f355fd4d9..fac95462ce5 100644
--- a/lib/private/Files/Utils/Scanner.php
+++ b/lib/private/Files/Utils/Scanner.php
@@ -47,6 +47,8 @@ use OCP\ILogger;
* @package OC\Files\Utils
*/
class Scanner extends PublicEmitter {
+ const MAX_ENTRIES_TO_COMMIT = 10000;
+
/**
* @var string $user
*/
@@ -63,6 +65,20 @@ class Scanner extends PublicEmitter {
protected $logger;
/**
+ * Whether to use a DB transaction
+ *
+ * @var bool
+ */
+ protected $useTransaction;
+
+ /**
+ * Number of entries scanned to commit
+ *
+ * @var int
+ */
+ protected $entriesToCommit;
+
+ /**
* @param string $user
* @param \OCP\IDBConnection $db
* @param ILogger $logger
@@ -71,6 +87,8 @@ class Scanner extends PublicEmitter {
$this->logger = $logger;
$this->user = $user;
$this->db = $db;
+ // when DB locking is used, no DB transactions will be used
+ $this->useTransaction = !(\OC::$server->getLockingProvider() instanceof DBLockingProvider);
}
/**
@@ -200,22 +218,22 @@ class Scanner extends PublicEmitter {
$scanner = $storage->getScanner();
$scanner->setUseTransactions(false);
$this->attachListener($mount);
- $isDbLocking = \OC::$server->getLockingProvider() instanceof DBLockingProvider;
$scanner->listen('\OC\Files\Cache\Scanner', 'removeFromCache', function ($path) use ($storage) {
- $this->triggerPropagator($storage, $path);
+ $this->postProcessEntry($storage, $path);
});
$scanner->listen('\OC\Files\Cache\Scanner', 'updateCache', function ($path) use ($storage) {
- $this->triggerPropagator($storage, $path);
+ $this->postProcessEntry($storage, $path);
});
$scanner->listen('\OC\Files\Cache\Scanner', 'addToCache', function ($path) use ($storage) {
- $this->triggerPropagator($storage, $path);
+ $this->postProcessEntry($storage, $path);
});
if (!$storage->file_exists($relativePath)) {
throw new NotFoundException($dir);
}
- if (!$isDbLocking) {
+
+ if ($this->useTransaction) {
$this->db->beginTransaction();
}
try {
@@ -233,7 +251,7 @@ class Scanner extends PublicEmitter {
$this->logger->logException($e);
$this->emit('\OC\Files\Utils\Scanner', 'StorageNotAvailable', [$e]);
}
- if (!$isDbLocking) {
+ if ($this->useTransaction) {
$this->db->commit();
}
}
@@ -242,5 +260,20 @@ class Scanner extends PublicEmitter {
private function triggerPropagator(IStorage $storage, $internalPath) {
$storage->getPropagator()->propagateChange($internalPath, time());
}
+
+ private function postProcessEntry(IStorage $storage, $internalPath) {
+ $this->triggerPropagator($storage, $internalPath);
+ if ($this->useTransaction) {
+ $this->entriesToCommit++;
+ if ($this->entriesToCommit >= self::MAX_ENTRIES_TO_COMMIT) {
+ $propagator = $storage->getPropagator();
+ $this->entriesToCommit = 0;
+ $this->db->commit();
+ $propagator->commitBatch();
+ $this->db->beginTransaction();
+ $propagator->beginBatch();
+ }
+ }
+ }
}
diff --git a/lib/private/Installer.php b/lib/private/Installer.php
index 0d6030d5744..8702f264e54 100644
--- a/lib/private/Installer.php
+++ b/lib/private/Installer.php
@@ -42,6 +42,8 @@
namespace OC;
use Doctrine\DBAL\Exception\TableExistsException;
+use OC\App\AppManager;
+use OC\App\AppStore\Bundles\Bundle;
use OC\App\AppStore\Fetcher\AppFetcher;
use OC\App\CodeChecker\CodeChecker;
use OC\App\CodeChecker\EmptyCheck;
@@ -50,7 +52,9 @@ use OC\Archive\TAR;
use OC_App;
use OC_DB;
use OC_Helper;
+use OCP\App\IAppManager;
use OCP\Http\Client\IClientService;
+use OCP\IConfig;
use OCP\ILogger;
use OCP\ITempManager;
use phpseclib\File\X509;
@@ -67,21 +71,26 @@ class Installer {
private $tempManager;
/** @var ILogger */
private $logger;
+ /** @var IConfig */
+ private $config;
/**
* @param AppFetcher $appFetcher
* @param IClientService $clientService
* @param ITempManager $tempManager
* @param ILogger $logger
+ * @param IConfig $config
*/
public function __construct(AppFetcher $appFetcher,
IClientService $clientService,
ITempManager $tempManager,
- ILogger $logger) {
+ ILogger $logger,
+ IConfig $config) {
$this->appFetcher = $appFetcher;
$this->clientService = $clientService;
$this->tempManager = $tempManager;
$this->logger = $logger;
+ $this->config = $config;
}
/**
@@ -109,6 +118,7 @@ class Installer {
}
}
+ \OC_App::registerAutoloading($appId, $basedir);
\OC_App::setupBackgroundJobs($info['background-jobs']);
//run appinfo/install.php
@@ -420,6 +430,27 @@ class Installer {
}
/**
+ * Installs the app within the bundle and marks the bundle as installed
+ *
+ * @param Bundle $bundle
+ * @throws \Exception If app could not get installed
+ */
+ public function installAppBundle(Bundle $bundle) {
+ $appIds = $bundle->getAppIdentifiers();
+ foreach($appIds as $appId) {
+ if(!$this->isDownloaded($appId)) {
+ $this->downloadApp($appId);
+ }
+ $this->installApp($appId);
+ $app = new OC_App();
+ $app->enable($appId);
+ }
+ $bundles = json_decode($this->config->getAppValue('core', 'installed.bundles', json_encode([])), true);
+ $bundles[] = $bundle->getIdentifier();
+ $this->config->setAppValue('core', 'installed.bundles', json_encode($bundles));
+ }
+
+ /**
* Installs shipped apps
*
* This function installs all apps found in the 'apps' directory that should be enabled by default;
diff --git a/lib/private/Repair.php b/lib/private/Repair.php
index e808774ec93..65e0342905a 100644
--- a/lib/private/Repair.php
+++ b/lib/private/Repair.php
@@ -30,12 +30,14 @@
namespace OC;
+use OC\App\AppStore\Bundles\BundleFetcher;
use OC\Repair\CleanTags;
use OC\Repair\Collation;
use OC\Repair\MoveUpdaterStepFile;
use OC\Repair\NC11\CleanPreviews;
use OC\Repair\NC11\FixMountStorages;
use OC\Repair\NC11\MoveAvatars;
+use OC\Repair\NC12\InstallCoreBundle;
use OC\Repair\NC12\UpdateLanguageCodes;
use OC\Repair\OldGroupMembershipShares;
use OC\Repair\RemoveRootShares;
@@ -136,6 +138,11 @@ class Repair implements IOutput{
),
new FixMountStorages(\OC::$server->getDatabaseConnection()),
new UpdateLanguageCodes(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig()),
+ new InstallCoreBundle(
+ \OC::$server->query(BundleFetcher::class),
+ \OC::$server->getConfig(),
+ \OC::$server->query(Installer::class)
+ )
];
}
diff --git a/lib/private/Repair/NC12/InstallCoreBundle.php b/lib/private/Repair/NC12/InstallCoreBundle.php
new file mode 100644
index 00000000000..38583b09a89
--- /dev/null
+++ b/lib/private/Repair/NC12/InstallCoreBundle.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Repair\NC12;
+
+use OC\App\AppStore\Bundles\BundleFetcher;
+use OC\Installer;
+use OCP\IConfig;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+
+class InstallCoreBundle implements IRepairStep {
+ /** @var BundleFetcher */
+ private $bundleFetcher;
+ /** @var IConfig */
+ private $config;
+ /** @var Installer */
+ private $installer;
+
+ /**
+ * @param BundleFetcher $bundleFetcher
+ * @param IConfig $config
+ * @param Installer $installer
+ */
+ public function __construct(BundleFetcher $bundleFetcher,
+ IConfig $config,
+ Installer $installer) {
+ $this->bundleFetcher = $bundleFetcher;
+ $this->config = $config;
+ $this->installer = $installer;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName() {
+ return 'Install new core bundle components';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function run(IOutput $output) {
+ $versionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0');
+
+ if (version_compare($versionFromBeforeUpdate, '12.0.0.14', '>')) {
+ return;
+ }
+
+ $defaultBundle = $this->bundleFetcher->getDefaultInstallationBundle();
+ foreach($defaultBundle as $bundle) {
+ try {
+ $this->installer->installAppBundle($bundle);
+ $output->info('Successfully installed core app bundle.');
+ } catch (\Exception $e) {
+ $output->warning('Could not install core app bundle: ' . $e->getMessage());
+ }
+ }
+ }
+}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 7724feb551b..b05e05660b0 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -43,6 +43,7 @@ namespace OC;
use bantu\IniGetWrapper\IniGetWrapper;
use OC\App\AppManager;
+use OC\App\AppStore\Bundles\BundleFetcher;
use OC\App\AppStore\Fetcher\AppFetcher;
use OC\App\AppStore\Fetcher\CategoryFetcher;
use OC\AppFramework\Http\Request;
@@ -816,7 +817,12 @@ class Server extends ServerContainer implements IServerContainer {
);
});
$this->registerAlias('MimeTypeLoader', \OCP\Files\IMimeTypeLoader::class);
-
+ $this->registerService(BundleFetcher::class, function () {
+ return new BundleFetcher($this->getL10N('lib'));
+ });
+ $this->registerService(AppFetcher::class, function() {
+ return $this->getAppFetcher();
+ });
$this->registerService(\OCP\Notification\IManager::class, function (Server $c) {
return new Manager(
$c->query(IValidator::class)
diff --git a/lib/private/Setup.php b/lib/private/Setup.php
index e2806efad48..b1cf289d9aa 100644
--- a/lib/private/Setup.php
+++ b/lib/private/Setup.php
@@ -41,6 +41,7 @@ namespace OC;
use bantu\IniGetWrapper\IniGetWrapper;
use Exception;
+use OC\App\AppStore\Bundles\BundleFetcher;
use OCP\Defaults;
use OCP\IL10N;
use OCP\ILogger;
@@ -63,11 +64,12 @@ class Setup {
/**
* @param SystemConfig $config
* @param IniGetWrapper $iniWrapper
+ * @param IL10N $l10n
* @param Defaults $defaults
* @param ILogger $logger
* @param ISecureRandom $random
*/
- function __construct(SystemConfig $config,
+ public function __construct(SystemConfig $config,
IniGetWrapper $iniWrapper,
IL10N $l10n,
Defaults $defaults,
@@ -364,8 +366,22 @@ class Setup {
$group =\OC::$server->getGroupManager()->createGroup('admin');
$group->addUser($user);
- //guess what this does
+ // Install shipped apps and specified app bundles
Installer::installShippedApps();
+ $installer = new Installer(
+ \OC::$server->getAppFetcher(),
+ \OC::$server->getHTTPClientService(),
+ \OC::$server->getTempManager(),
+ \OC::$server->getLogger(),
+ \OC::$server->getConfig()
+ );
+ $bundleFetcher = new BundleFetcher(\OC::$server->getL10N('lib'));
+ $defaultInstallationBundles = $bundleFetcher->getDefaultInstallationBundle();
+ foreach($defaultInstallationBundles as $bundle) {
+ try {
+ $installer->installAppBundle($bundle);
+ } catch (Exception $e) {}
+ }
// create empty file in data dir, so we can later find
// out that this is indeed an ownCloud data directory
diff --git a/lib/private/Updater.php b/lib/private/Updater.php
index 4427e4c48dc..c080ee0eb43 100644
--- a/lib/private/Updater.php
+++ b/lib/private/Updater.php
@@ -243,11 +243,11 @@ class Updater extends BasicEmitter {
}
// update all shipped apps
- $disabledApps = $this->checkAppsRequirements();
+ $this->checkAppsRequirements();
$this->doAppUpgrade();
// upgrade appstore apps
- $this->upgradeAppStoreApps($disabledApps);
+ $this->upgradeAppStoreApps(\OC::$server->getAppManager()->getInstalledApps());
// install new shipped apps on upgrade
OC_App::loadApps('authentication');
@@ -441,7 +441,8 @@ class Updater extends BasicEmitter {
\OC::$server->getAppFetcher(),
\OC::$server->getHTTPClientService(),
\OC::$server->getTempManager(),
- $this->log
+ $this->log,
+ \OC::$server->getConfig()
);
if (Installer::isUpdateAvailable($app, \OC::$server->getAppFetcher())) {
$this->emit('\OC\Updater', 'upgradeAppStoreApp', [$app]);
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 3800b8b770e..111da7d0d40 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -365,7 +365,8 @@ class OC_App {
\OC::$server->getAppFetcher(),
\OC::$server->getHTTPClientService(),
\OC::$server->getTempManager(),
- \OC::$server->getLogger()
+ \OC::$server->getLogger(),
+ \OC::$server->getConfig()
);
$isDownloaded = $installer->isDownloaded($appId);
@@ -427,7 +428,8 @@ class OC_App {
\OC::$server->getAppFetcher(),
\OC::$server->getHTTPClientService(),
\OC::$server->getTempManager(),
- \OC::$server->getLogger()
+ \OC::$server->getLogger(),
+ \OC::$server->getConfig()
);
return $installer->removeApp($app);
}