diff --git a/apps/dav/lib/AppInfo/Application.php b/apps/dav/lib/AppInfo/Application.php
index 9d5921a1e83a5..9807b5850806c 100644
--- a/apps/dav/lib/AppInfo/Application.php
+++ b/apps/dav/lib/AppInfo/Application.php
@@ -64,6 +64,7 @@
use OCA\DAV\UserMigration\CalendarMigrator;
use OCA\DAV\UserMigration\ContactsMigrator;
use OCP\Accounts\UserUpdatedEvent;
+use OCP\App\IAppManager;
use OCP\AppFramework\App;
use OCP\AppFramework\Bootstrap\IBootContext;
use OCP\AppFramework\Bootstrap\IBootstrap;
@@ -217,7 +218,7 @@ public function register(IRegistrationContext $context): void {
public function boot(IBootContext $context): void {
// Load all dav apps
- \OC_App::loadApps(['dav']);
+ $context->getServerContainer()->get(IAppManager::class)->loadApps(['dav']);
$context->injectFn($this->registerContactsManager(...));
$context->injectFn($this->registerCalendarManager(...));
diff --git a/apps/dav/tests/unit/bootstrap.php b/apps/dav/tests/unit/bootstrap.php
index 886a7f0b859f2..ee76bb6677b54 100644
--- a/apps/dav/tests/unit/bootstrap.php
+++ b/apps/dav/tests/unit/bootstrap.php
@@ -1,18 +1,21 @@
addPsr4('Test\\', OC::$SERVERROOT . '/tests/lib/', true);
-
-\OC_App::loadApp('dav');
-
-OC_Hook::clear();
+Server::get(IAppManager::class)->loadApp('dav');
diff --git a/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php b/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php
index 78f6df9d7bcce..3eec3df675ac9 100644
--- a/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php
+++ b/apps/user_ldap/tests/Integration/ExceptionOnLostConnection.php
@@ -9,6 +9,8 @@
use OC\ServerNotAvailableException;
use OCA\User_LDAP\LDAP;
+use OCP\App\IAppManager;
+use OCP\Server;
/**
* Class ExceptionOnLostConnection
@@ -63,7 +65,7 @@ public function __destruct() {
*/
public function setUp(): void {
require_once __DIR__ . '/../../../../lib/base.php';
- \OC_App::loadApps(['user_ldap']);
+ Server::get(IAppManager::class)->loadApps(['user_ldap']);
$ch = $this->getCurl();
$proxyInfoJson = curl_exec($ch);
diff --git a/apps/user_status/tests/bootstrap.php b/apps/user_status/tests/bootstrap.php
index c24f86c7cbeab..c98daca1dfc2d 100644
--- a/apps/user_status/tests/bootstrap.php
+++ b/apps/user_status/tests/bootstrap.php
@@ -6,14 +6,15 @@
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
+
+use OCP\App\IAppManager;
+use OCP\Server;
+
if (!defined('PHPUNIT_RUN')) {
define('PHPUNIT_RUN', 1);
}
require_once __DIR__ . '/../../../lib/base.php';
+require_once __DIR__ . '/../../../tests/autoload.php';
-\OC::$composerAutoloader->addPsr4('Test\\', OC::$SERVERROOT . '/tests/lib/', true);
-
-\OC_App::loadApp('user_status');
-
-OC_Hook::clear();
+Server::get(IAppManager::class)->loadApp('user_status');
diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml
index 21007bec0bf26..2e29009afaf76 100644
--- a/build/psalm-baseline.xml
+++ b/build/psalm-baseline.xml
@@ -209,7 +209,6 @@
-
@@ -2925,8 +2924,6 @@
-
-
@@ -4473,14 +4470,6 @@
-
-
-
-
-
-
-
-
diff --git a/core/Command/Db/ConvertType.php b/core/Command/Db/ConvertType.php
index bca41407f68e9..0067bec4d9e30 100644
--- a/core/Command/Db/ConvertType.php
+++ b/core/Command/Db/ConvertType.php
@@ -14,6 +14,7 @@
use OC\DB\ConnectionFactory;
use OC\DB\MigrationService;
use OC\DB\PgSqlTools;
+use OCP\App\IAppManager;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\DB\Types;
use OCP\IConfig;
@@ -38,6 +39,7 @@ class ConvertType extends Command implements CompletionAwareInterface {
public function __construct(
protected IConfig $config,
protected ConnectionFactory $connectionFactory,
+ protected IAppManager $appManager,
) {
parent::__construct();
}
@@ -208,11 +210,13 @@ protected function createSchema(Connection $fromDB, Connection $toDB, InputInter
$toMS->migrate($currentMigration);
}
- $apps = $input->getOption('all-apps') ? \OC_App::getAllApps() : \OC_App::getEnabledApps();
+ $apps = $input->getOption('all-apps')
+ ? $this->appManager->getAllAppsInAppsFolders()
+ : $this->appManager->getEnabledApps();
foreach ($apps as $app) {
$output->writeln(' - ' . $app . '');
// Make sure autoloading works...
- \OC_App::loadApp($app);
+ $this->appManager->loadApp($app);
$fromMS = new MigrationService($app, $fromDB);
$currentMigration = $fromMS->getMigration('current');
if ($currentMigration !== '0') {
diff --git a/lib/private/Files/SetupManager.php b/lib/private/Files/SetupManager.php
index d6260c38fb0ea..37ecd5779e603 100644
--- a/lib/private/Files/SetupManager.php
+++ b/lib/private/Files/SetupManager.php
@@ -21,12 +21,12 @@
use OC\Lockdown\Filesystem\NullStorage;
use OC\Share\Share;
use OC\Share20\ShareDisableChecker;
-use OC_App;
use OC_Hook;
use OCA\Files_External\Config\ExternalMountPoint;
use OCA\Files_Sharing\External\Mount;
use OCA\Files_Sharing\ISharedMountPoint;
use OCA\Files_Sharing\SharedMount;
+use OCP\App\IAppManager;
use OCP\Constants;
use OCP\Diagnostics\IEventLogger;
use OCP\EventDispatcher\IEventDispatcher;
@@ -81,6 +81,7 @@ public function __construct(
private LoggerInterface $logger,
private IConfig $config,
private ShareDisableChecker $shareDisableChecker,
+ private IAppManager $appManager,
) {
$this->cache = $cacheFactory->createDistributed('setupmanager::');
$this->listeningForProviders = false;
@@ -104,7 +105,7 @@ private function setupBuiltinWrappers() {
$this->setupBuiltinWrappersDone = true;
// load all filesystem apps before, so no setup-hook gets lost
- OC_App::loadApps(['filesystem']);
+ $this->appManager->loadApps(['filesystem']);
$prevLogging = Filesystem::logWarningWhenAddingStorageWrapper(false);
Filesystem::addStorageWrapper('mount_options', function ($mountPoint, IStorage $storage, IMountPoint $mount) {
diff --git a/lib/private/Files/SetupManagerFactory.php b/lib/private/Files/SetupManagerFactory.php
index 6ae38c6fdbc63..d2fe978fa9e63 100644
--- a/lib/private/Files/SetupManagerFactory.php
+++ b/lib/private/Files/SetupManagerFactory.php
@@ -9,6 +9,7 @@
namespace OC\Files;
use OC\Share20\ShareDisableChecker;
+use OCP\App\IAppManager;
use OCP\Diagnostics\IEventLogger;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Config\IMountProviderCollection;
@@ -36,6 +37,7 @@ public function __construct(
private LoggerInterface $logger,
private IConfig $config,
private ShareDisableChecker $shareDisableChecker,
+ private IAppManager $appManager,
) {
$this->setupManager = null;
}
@@ -55,6 +57,7 @@ public function create(IMountManager $mountManager): SetupManager {
$this->logger,
$this->config,
$this->shareDisableChecker,
+ $this->appManager,
);
}
return $this->setupManager;
diff --git a/ocs/v1.php b/ocs/v1.php
index 97032e6374036..e12cd6ddc1147 100644
--- a/ocs/v1.php
+++ b/ocs/v1.php
@@ -2,14 +2,6 @@
declare(strict_types=1);
-use OC\Route\Router;
-use OC\SystemConfig;
-use OC\User\LoginException;
-use OCP\IConfig;
-use OCP\IRequest;
-use OCP\IUserSession;
-use OCP\Server;
-
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -20,9 +12,17 @@
require_once __DIR__ . '/../lib/base.php';
use OC\OCS\ApiHelper;
+use OC\Route\Router;
+use OC\SystemConfig;
+use OC\User\LoginException;
+use OCP\App\IAppManager;
use OCP\AppFramework\Http;
use OCP\AppFramework\OCSController;
+use OCP\IConfig;
+use OCP\IRequest;
+use OCP\IUserSession;
use OCP\Security\Bruteforce\MaxDelayReached;
+use OCP\Server;
use OCP\Util;
use Psr\Log\LoggerInterface;
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
@@ -41,14 +41,15 @@
* Try the appframework routes
*/
try {
- OC_App::loadApps(['session']);
- OC_App::loadApps(['authentication']);
- OC_App::loadApps(['extended_authentication']);
+ $appManager = Server::get(IAppManager::class);
+ $appManager->loadApps(['session']);
+ $appManager->loadApps(['authentication']);
+ $appManager->loadApps(['extended_authentication']);
// load all apps to get all api routes properly setup
// FIXME: this should ideally appear after handleLogin but will cause
// side effects in existing apps
- OC_App::loadApps();
+ $appManager->loadApps();
$request = Server::get(IRequest::class);
$request->throwDecodingExceptionIfAny();
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index 3e50e6aef622d..81bb930de658d 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -1,10 +1,16 @@
addPsr4('Tests\\', OC::$SERVERROOT . '/tests/', true);
// load all apps
+$appManager = Server::get(IAppManager::class);
foreach (new \DirectoryIterator(__DIR__ . '/../apps/') as $file) {
if ($file->isDot()) {
continue;
}
- \OC_App::loadApp($file->getFilename());
+ $appManager->loadApp($file->getFilename());
}
OC_Hook::clear();
diff --git a/tests/lib/Traits/EncryptionTrait.php b/tests/lib/Traits/EncryptionTrait.php
index 50c20befc4d99..44d5dcab8cb36 100644
--- a/tests/lib/Traits/EncryptionTrait.php
+++ b/tests/lib/Traits/EncryptionTrait.php
@@ -15,6 +15,7 @@
use OCA\Encryption\Crypto\Encryption;
use OCA\Encryption\KeyManager;
use OCA\Encryption\Users\Setup;
+use OCP\App\IAppManager;
use OCP\Encryption\IManager;
use OCP\IConfig;
use OCP\IUserManager;
@@ -102,7 +103,7 @@ protected function setUpEncryptionTrait() {
$this->userManager = Server::get(IUserManager::class);
$this->setupManager = Server::get(SetupManager::class);
- \OC_App::loadApp('encryption');
+ Server::get(IAppManager::class)->loadApp('encryption');
$this->encryptionApp = new Application([], $isReady);