public function getExtensions()
{
if (is_null($this->extensions) && $this->filesystem->exists($this->app->basePath() . '/vendor/composer/installed.json')) {
$extensions = new Collection();
// Load all packages installed by composer.
$installed = json_decode($this->filesystem->get($this->app->basePath() . '/vendor/composer/installed.json'), true);
foreach ($installed as $package) {
if (Arr::get($package, 'type') != 'flarum-extension' || empty(Arr::get($package, 'name'))) {
continue;
}
// Instantiates an Extension object using the package path and composer.json file.
$extension = new Extension($this->getExtensionsDir() . '/' . Arr::get($package, 'name'), $package);
// Per default all extensions are installed if they are registered in composer.
$extension->setInstalled(true);
$extension->setVersion(Arr::get($package, 'version'));
$extension->setEnabled($this->isEnabled($extension->getId()));
$extensions->put($extension->getId(), $extension);
}
$this->extensions = $extensions->sortBy(function ($extension, $name) {
return $extension->composerJsonAttribute('extra.flarum-extension.title');
});
}
return $this->extensions;
}