diff --git a/framework/core/src/Extension/Extension.php b/framework/core/src/Extension/Extension.php index aead336d6..cb5eb92d0 100644 --- a/framework/core/src/Extension/Extension.php +++ b/framework/core/src/Extension/Extension.php @@ -11,6 +11,8 @@ namespace Flarum\Extension; +use Flarum\Extend\Compat; +use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Support\Arr; use Illuminate\Support\Str; @@ -109,6 +111,28 @@ class Extension implements Arrayable $this->id = "$vendor-$package"; } + public function extend(Container $app) + { + $bootstrapper = $this->getBootstrapperPath(); + + if (!file_exists($bootstrapper)) { + return; + } + + $extenders = array_flatten((array) require $bootstrapper); + + foreach ($extenders as $extender) { + // If an extension has not yet switched to the new bootstrap.php + // format, it might return a function (or more of them). We wrap + // these in a Compat extender to enjoy an unique interface. + if ($extender instanceof \Closure || is_string($extender)) { + $extender = new Compat($extender); + } + + $extender($app, $this); + } + } + /** * {@inheritdoc} */ diff --git a/framework/core/src/Extension/ExtensionManager.php b/framework/core/src/Extension/ExtensionManager.php index 99786e2ea..8bda719b5 100644 --- a/framework/core/src/Extension/ExtensionManager.php +++ b/framework/core/src/Extension/ExtensionManager.php @@ -20,6 +20,7 @@ use Flarum\Extension\Event\Enabling; use Flarum\Extension\Event\Uninstalled; use Flarum\Foundation\Application; use Flarum\Settings\SettingsRepositoryInterface; +use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Filesystem\Filesystem; use Illuminate\Support\Arr; @@ -275,33 +276,15 @@ class ExtensionManager } /** - * Retrieve all extender instances of all enabled extensions. + * Call on all enabled extensions to extend the Flarum application. * - * @return Collection + * @param Container $app */ - public function getActiveExtenders() + public function extend(Container $app) { - return $this->getEnabledExtensions() - ->flatMap(function (Extension $extension) { - $bootstrapper = $extension->getBootstrapperPath(); - - if ($this->filesystem->exists($bootstrapper)) { - return array_map(function ($extender) use ($extension) { - // If an extension has not yet switched to the new bootstrap.php - // format, it might return a function (or more of them). We wrap - // these in a Compat extender to enjoy an unique interface. - if ($extender instanceof \Closure || is_string($extender)) { - $extender = new Compat($extender); - } - - return function ($app) use ($extension, $extender) { - return $extender($app, $extension); - }; - }, array_flatten((array) require $bootstrapper)); - } - - return []; - }); + foreach ($this->getEnabledExtensions() as $extension) { + $extension->extend($app); + } } /** diff --git a/framework/core/src/Extension/ExtensionServiceProvider.php b/framework/core/src/Extension/ExtensionServiceProvider.php index 4a80efb25..b2f5fcf92 100644 --- a/framework/core/src/Extension/ExtensionServiceProvider.php +++ b/framework/core/src/Extension/ExtensionServiceProvider.php @@ -24,11 +24,7 @@ class ExtensionServiceProvider extends AbstractServiceProvider $this->app->bind('flarum.extensions', ExtensionManager::class); $this->app->booting(function (Container $app) { - $extenders = $app->make('flarum.extensions')->getActiveExtenders(); - - foreach ($extenders as $extender) { - $extender($app); - } + $app->make('flarum.extensions')->extend($app); }); }