diff --git a/js/admin/src/components/ExtensionsPage.js b/js/admin/src/components/ExtensionsPage.js index 21f32bc6a..2c6b6e0d4 100644 --- a/js/admin/src/components/ExtensionsPage.js +++ b/js/admin/src/components/ExtensionsPage.js @@ -26,29 +26,31 @@ export default class ExtensionsPage extends Component {
@@ -56,9 +58,15 @@ export default class ExtensionsPage extends Component { ); } - controlItems(extension) { + controlItems(name) { const items = new ItemList(); - const enabled = this.isEnabled(extension.name); + const extension = app.extensions[name]; + const enabled = this.isEnabled(name); + + items.add('info', + Package Name: {extension.name}
+ Installed in: {name} +
); if (app.extensionSettings[extension.name]) { items.add('settings', Button.component({ @@ -73,7 +81,7 @@ export default class ExtensionsPage extends Component { children: enabled ? 'Disable' : 'Enable', onclick: () => { app.request({ - url: app.forum.attribute('apiUrl') + '/extensions/' + extension.name, + url: app.forum.attribute('apiUrl') + '/extensions/' + name, method: 'PATCH', data: {enabled: !enabled} }).then(() => window.location.reload()); @@ -88,8 +96,8 @@ export default class ExtensionsPage extends Component { children: 'Uninstall', onclick: () => { app.request({ - url: app.forum.attribute('apiUrl') + '/extensions/' + extension.name, - method: 'DELETE', + url: app.forum.attribute('apiUrl') + '/extensions/' + name, + method: 'DELETE' }).then(() => window.location.reload()); app.modal.show(new LoadingModal()); diff --git a/src/Support/ExtensionManager.php b/src/Support/ExtensionManager.php index 86e7dabaa..3b6904a2f 100644 --- a/src/Support/ExtensionManager.php +++ b/src/Support/ExtensionManager.php @@ -10,6 +10,7 @@ namespace Flarum\Support; +use Flarum\Core; use Flarum\Support\ServiceProvider; use Flarum\Core\Settings\SettingsRepository; use Illuminate\Contracts\Container\Container; @@ -37,9 +38,17 @@ class ExtensionManager $dirs = array_diff(scandir($extensionsDir), ['.', '..']); $extensions = []; + $installed = json_decode(file_get_contents(public_path('vendor/composer/installed.json')), true); + foreach ($dirs as $dir) { - if (file_exists($manifest = $extensionsDir . '/' . $dir . '/flarum.json')) { - $extensions[] = json_decode(file_get_contents($manifest)); + if (file_exists($manifest = $extensionsDir . '/' . $dir . '/composer.json')) { + $extensions[$dir] = json_decode(file_get_contents($manifest), true); + + foreach ($installed as $package) { + if ($package['name'] === $extensions[$dir]['name']) { + $extensions[$dir]['version'] = $package['version']; + } + } } } @@ -79,7 +88,7 @@ class ExtensionManager public function migrate($extension, $up = true) { - $migrationDir = base_path('../extensions/' . $extension . '/migrations'); + $migrationDir = public_path('extensions/' . $extension . '/migrations'); $this->app->bind('Illuminate\Database\Schema\Builder', function ($container) { return $container->make('Illuminate\Database\ConnectionInterface')->getSchemaBuilder();