mirror of
https://github.com/flarum/core.git
synced 2025-05-09 00:45:25 +02:00
Use composer.json for extension metadata
This commit is contained in:
parent
0142b01cc5
commit
e251cf34c4
@ -26,29 +26,31 @@ export default class ExtensionsPage extends Component {
|
|||||||
<div className="ExtensionsPage-list">
|
<div className="ExtensionsPage-list">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<ul className="ExtensionList">
|
<ul className="ExtensionList">
|
||||||
{app.extensions
|
{Object.keys(app.extensions)
|
||||||
.sort((a, b) => a.name.localeCompare(b.name))
|
.sort((a, b) => app.extensions[a].extra['flarum-extension'].title.localeCompare(app.extensions[b].extra['flarum-extension'].title))
|
||||||
.map(extension => (
|
.map(name => {
|
||||||
<li className={'ExtensionListItem ' + (!this.isEnabled(extension.name) ? 'disabled' : '')}>
|
const extension = app.extensions[name];
|
||||||
|
|
||||||
|
return <li className={'ExtensionListItem ' + (!this.isEnabled(name) ? 'disabled' : '')}>
|
||||||
{Dropdown.component({
|
{Dropdown.component({
|
||||||
icon: 'ellipsis-v',
|
icon: 'ellipsis-v',
|
||||||
children: this.controlItems(extension).toArray(),
|
children: this.controlItems(name).toArray(),
|
||||||
className: 'ExtensionListItem-controls',
|
className: 'ExtensionListItem-controls',
|
||||||
buttonClassName: 'Button Button--icon Button--flat',
|
buttonClassName: 'Button Button--icon Button--flat',
|
||||||
menuClassName: 'Dropdown-menu--right'
|
menuClassName: 'Dropdown-menu--right'
|
||||||
})}
|
})}
|
||||||
<div className="ExtensionListItem-content">
|
<div className="ExtensionListItem-content">
|
||||||
<span className="ExtensionListItem-icon ExtensionIcon" style={extension.icon}>
|
<span className="ExtensionListItem-icon ExtensionIcon" style={extension.extra['flarum-extension'].icon}>
|
||||||
{extension.icon ? icon(extension.icon.name) : ''}
|
{extension.extra['flarum-extension'].icon ? icon(extension.extra['flarum-extension'].icon.name) : ''}
|
||||||
</span>
|
</span>
|
||||||
<h4 className="ExtensionListItem-title">
|
<h4 className="ExtensionListItem-title">
|
||||||
{extension.title}{' '}
|
{extension.extra['flarum-extension'].title}{' '}
|
||||||
<small className="ExtensionListItem-version">{extension.version}</small>
|
<small className="ExtensionListItem-version">{extension.version}</small>
|
||||||
</h4>
|
</h4>
|
||||||
<div className="ExtensionListItem-description">{extension.description}</div>
|
<div className="ExtensionListItem-description">{extension.description}</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>;
|
||||||
))}
|
})}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -56,9 +58,15 @@ export default class ExtensionsPage extends Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
controlItems(extension) {
|
controlItems(name) {
|
||||||
const items = new ItemList();
|
const items = new ItemList();
|
||||||
const enabled = this.isEnabled(extension.name);
|
const extension = app.extensions[name];
|
||||||
|
const enabled = this.isEnabled(name);
|
||||||
|
|
||||||
|
items.add('info', <span>
|
||||||
|
Package Name: {extension.name}<br/>
|
||||||
|
Installed in: {name}
|
||||||
|
</span>);
|
||||||
|
|
||||||
if (app.extensionSettings[extension.name]) {
|
if (app.extensionSettings[extension.name]) {
|
||||||
items.add('settings', Button.component({
|
items.add('settings', Button.component({
|
||||||
@ -73,7 +81,7 @@ export default class ExtensionsPage extends Component {
|
|||||||
children: enabled ? 'Disable' : 'Enable',
|
children: enabled ? 'Disable' : 'Enable',
|
||||||
onclick: () => {
|
onclick: () => {
|
||||||
app.request({
|
app.request({
|
||||||
url: app.forum.attribute('apiUrl') + '/extensions/' + extension.name,
|
url: app.forum.attribute('apiUrl') + '/extensions/' + name,
|
||||||
method: 'PATCH',
|
method: 'PATCH',
|
||||||
data: {enabled: !enabled}
|
data: {enabled: !enabled}
|
||||||
}).then(() => window.location.reload());
|
}).then(() => window.location.reload());
|
||||||
@ -88,8 +96,8 @@ export default class ExtensionsPage extends Component {
|
|||||||
children: 'Uninstall',
|
children: 'Uninstall',
|
||||||
onclick: () => {
|
onclick: () => {
|
||||||
app.request({
|
app.request({
|
||||||
url: app.forum.attribute('apiUrl') + '/extensions/' + extension.name,
|
url: app.forum.attribute('apiUrl') + '/extensions/' + name,
|
||||||
method: 'DELETE',
|
method: 'DELETE'
|
||||||
}).then(() => window.location.reload());
|
}).then(() => window.location.reload());
|
||||||
|
|
||||||
app.modal.show(new LoadingModal());
|
app.modal.show(new LoadingModal());
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
namespace Flarum\Support;
|
namespace Flarum\Support;
|
||||||
|
|
||||||
|
use Flarum\Core;
|
||||||
use Flarum\Support\ServiceProvider;
|
use Flarum\Support\ServiceProvider;
|
||||||
use Flarum\Core\Settings\SettingsRepository;
|
use Flarum\Core\Settings\SettingsRepository;
|
||||||
use Illuminate\Contracts\Container\Container;
|
use Illuminate\Contracts\Container\Container;
|
||||||
@ -37,9 +38,17 @@ class ExtensionManager
|
|||||||
$dirs = array_diff(scandir($extensionsDir), ['.', '..']);
|
$dirs = array_diff(scandir($extensionsDir), ['.', '..']);
|
||||||
$extensions = [];
|
$extensions = [];
|
||||||
|
|
||||||
|
$installed = json_decode(file_get_contents(public_path('vendor/composer/installed.json')), true);
|
||||||
|
|
||||||
foreach ($dirs as $dir) {
|
foreach ($dirs as $dir) {
|
||||||
if (file_exists($manifest = $extensionsDir . '/' . $dir . '/flarum.json')) {
|
if (file_exists($manifest = $extensionsDir . '/' . $dir . '/composer.json')) {
|
||||||
$extensions[] = json_decode(file_get_contents($manifest));
|
$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)
|
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) {
|
$this->app->bind('Illuminate\Database\Schema\Builder', function ($container) {
|
||||||
return $container->make('Illuminate\Database\ConnectionInterface')->getSchemaBuilder();
|
return $container->make('Illuminate\Database\ConnectionInterface')->getSchemaBuilder();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user