From 02e40f7c47aa36130ff745538fb3031867d8daa1 Mon Sep 17 00:00:00 2001 From: Toby Zerner Date: Fri, 25 Sep 2015 16:01:34 +0930 Subject: [PATCH] Allow extensions to return a callback instead of a provider name This is useful for very simple extensions like language packs, because it means no Composer/namespacing and thus bootstrap.php doesn't have to be changed at all. --- src/Support/ExtensionManager.php | 13 ------------- src/Support/ExtensionsServiceProvider.php | 20 ++++++++++---------- 2 files changed, 10 insertions(+), 23 deletions(-) diff --git a/src/Support/ExtensionManager.php b/src/Support/ExtensionManager.php index a7022b899..86e7dabaa 100644 --- a/src/Support/ExtensionManager.php +++ b/src/Support/ExtensionManager.php @@ -53,8 +53,6 @@ class ExtensionManager $enabled[] = $extension; - $this->load($extension); - $this->migrate($extension); $this->setEnabled($enabled); @@ -76,8 +74,6 @@ class ExtensionManager { $this->disable($extension); - $this->load($extension); - $this->migrateDown($extension); } @@ -125,15 +121,6 @@ class ExtensionManager return in_array($extension, $this->getEnabled()); } - protected function load($extension) - { - if (file_exists($file = $this->getExtensionsDir() . '/' . $extension . '/bootstrap.php')) { - $className = require $file; - - $ext = new $className($this->app); - } - } - protected function getExtensionsDir() { return public_path('extensions'); diff --git a/src/Support/ExtensionsServiceProvider.php b/src/Support/ExtensionsServiceProvider.php index 6f47f7e2f..9b89b4eb6 100644 --- a/src/Support/ExtensionsServiceProvider.php +++ b/src/Support/ExtensionsServiceProvider.php @@ -23,19 +23,19 @@ class ExtensionsServiceProvider extends ServiceProvider $config = $this->app->make('Flarum\Core\Settings\SettingsRepository')->get('extensions_enabled'); $extensions = json_decode($config, true); - $providers = []; - - foreach ($extensions as $extension) { - if (file_exists($file = public_path().'/extensions/'.$extension.'/bootstrap.php')) { - $providerName = require $file; - $providers[$extension] = $this->app->register($providerName); - } - } $events = $this->app->make('events'); - foreach ($providers as $provider) { - $provider->listen($events); + foreach ($extensions as $extension) { + if (file_exists($file = public_path().'/extensions/'.$extension.'/bootstrap.php')) { + $provider = require $file; + + if (is_string($provider)) { + $this->app->register($provider)->listen($events); + } elseif (is_callable($provider)) { + $provider($events); + } + } } } }