From 62edb8a50dafeb6cee82d16404ba63fed9294e9f Mon Sep 17 00:00:00 2001 From: Luke Towers Date: Tue, 29 Nov 2022 19:24:41 -0600 Subject: [PATCH 1/5] Register plugin namespaces as autoloaded packages --- modules/system/classes/PluginManager.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/system/classes/PluginManager.php b/modules/system/classes/PluginManager.php index d29d28a839..cd39f86472 100644 --- a/modules/system/classes/PluginManager.php +++ b/modules/system/classes/PluginManager.php @@ -150,6 +150,8 @@ public function loadPlugin(string $namespace, string $path): ?PluginBase $className = $namespace . '\Plugin'; $classPath = $path . '/Plugin.php'; + $this->app->make(ClassLoader::class)->autoloadPackage($namespace, $path); + try { // Autoloader failed? if (!class_exists($className)) { From ae388732e7e38b8dbe5bd0bcfaed264d7d28621a Mon Sep 17 00:00:00 2001 From: Luke Towers Date: Tue, 29 Nov 2022 19:30:20 -0600 Subject: [PATCH 2/5] Remove old way of registering class loader --- modules/system/tests/bootstrap/app.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/system/tests/bootstrap/app.php b/modules/system/tests/bootstrap/app.php index 9be7e9d5db..ce6dae1f77 100644 --- a/modules/system/tests/bootstrap/app.php +++ b/modules/system/tests/bootstrap/app.php @@ -17,7 +17,3 @@ ); $loader->register(); -$loader->addDirectories([ - 'modules', - 'plugins' -]); From ea2c10adfd43d28755a04bbae1bbe959c3244ecd Mon Sep 17 00:00:00 2001 From: Luke Towers Date: Tue, 29 Nov 2022 19:58:00 -0600 Subject: [PATCH 3/5] Ensure modules get registered to the class loader --- modules/backend/ServiceProvider.php | 2 ++ modules/cms/ServiceProvider.php | 2 ++ modules/system/ServiceProvider.php | 2 ++ 3 files changed, 6 insertions(+) diff --git a/modules/backend/ServiceProvider.php b/modules/backend/ServiceProvider.php index 5933c03797..1dedc46b87 100644 --- a/modules/backend/ServiceProvider.php +++ b/modules/backend/ServiceProvider.php @@ -19,6 +19,8 @@ class ServiceProvider extends ModuleServiceProvider */ public function register() { + parent::register(); + $this->registerConsole(); $this->registerMailer(); $this->registerAssetBundles(); diff --git a/modules/cms/ServiceProvider.php b/modules/cms/ServiceProvider.php index a394973966..609528428a 100644 --- a/modules/cms/ServiceProvider.php +++ b/modules/cms/ServiceProvider.php @@ -34,6 +34,8 @@ class ServiceProvider extends ModuleServiceProvider */ public function register() { + parent::register(); + $this->registerConsole(); $this->registerTwigParser(); $this->registerAssetBundles(); diff --git a/modules/system/ServiceProvider.php b/modules/system/ServiceProvider.php index ec4e8b11bc..90ca44ae2e 100644 --- a/modules/system/ServiceProvider.php +++ b/modules/system/ServiceProvider.php @@ -35,6 +35,8 @@ class ServiceProvider extends ModuleServiceProvider */ public function register() { + parent::register(); + $this->registerSingletons(); $this->registerPrivilegedActions(); From 65847bc27e2a9513720c9a8e99a24ed06615ab4f Mon Sep 17 00:00:00 2001 From: Luke Towers Date: Tue, 29 Nov 2022 20:18:26 -0600 Subject: [PATCH 4/5] Manually register plugin namespaces for autoloading --- modules/system/tests/bootstrap/app.php | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/modules/system/tests/bootstrap/app.php b/modules/system/tests/bootstrap/app.php index ce6dae1f77..20b7952181 100644 --- a/modules/system/tests/bootstrap/app.php +++ b/modules/system/tests/bootstrap/app.php @@ -17,3 +17,32 @@ ); $loader->register(); + +/* + * Manually register all module classes for autoloading + */ +// @TODO: Implement this + +/* + * Manually register all plugin classes for autoloading + */ +$dirPath = $baseDir . '/plugins'; +if (is_dir($dirPath)) { + $it = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dirPath, FilesystemIterator::FOLLOW_SYMLINKS) + ); + $it->setMaxDepth(2); + $it->rewind(); + + while ($it->valid()) { + if (($it->getDepth() > 1) && $it->isFile() && (strtolower($it->getFilename()) === "plugin.php")) { + $filePath = dirname($it->getPathname()); + $pluginName = basename($filePath); + $vendorName = basename(dirname($filePath)); + + $loader->autoloadPackage($vendorName . '\\' . $pluginName, $filePath); + } + + $it->next(); + } +} From 405754b06b741654aef4a637176e4a7e4f9f9e5c Mon Sep 17 00:00:00 2001 From: Luke Towers Date: Tue, 29 Nov 2022 20:46:23 -0600 Subject: [PATCH 5/5] Manually register modules for autoloading --- modules/system/tests/bootstrap/app.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/system/tests/bootstrap/app.php b/modules/system/tests/bootstrap/app.php index 20b7952181..11dd502e78 100644 --- a/modules/system/tests/bootstrap/app.php +++ b/modules/system/tests/bootstrap/app.php @@ -21,7 +21,9 @@ /* * Manually register all module classes for autoloading */ -// @TODO: Implement this +foreach (glob($baseDir . '/modules/*', GLOB_ONLYDIR) as $modulePath) { + $loader->autoloadPackage(basename($modulePath), $modulePath); +} /* * Manually register all plugin classes for autoloading