Support specifying enchants.config in plugin
This commit is contained in:
parent
4cc7b4441f
commit
776e8652a0
|
|
@ -11,8 +11,14 @@ class PluginController extends Controller
|
||||||
public function config(PluginManager $plugins, $name)
|
public function config(PluginManager $plugins, $name)
|
||||||
{
|
{
|
||||||
$plugin = $plugins->get($name);
|
$plugin = $plugins->get($name);
|
||||||
if ($plugin && $plugin->isEnabled() && $plugin->hasConfigView()) {
|
if ($plugin && $plugin->isEnabled()) {
|
||||||
return $plugin->getConfigView();
|
if ($plugin->hasConfigClass()) {
|
||||||
|
return app()->call($plugin->getConfigClass().'@render');
|
||||||
|
} elseif ($plugin->hasConfigView()) {
|
||||||
|
return $plugin->getConfigView();
|
||||||
|
} else {
|
||||||
|
return abort(404, trans('admin.plugins.operations.no-config-notice'));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return abort(404, trans('admin.plugins.operations.no-config-notice'));
|
return abort(404, trans('admin.plugins.operations.no-config-notice'));
|
||||||
}
|
}
|
||||||
|
|
@ -89,7 +95,7 @@ class PluginController extends Controller
|
||||||
'version' => $plugin->version,
|
'version' => $plugin->version,
|
||||||
'url' => $plugin->url,
|
'url' => $plugin->url,
|
||||||
'enabled' => $plugin->isEnabled(),
|
'enabled' => $plugin->isEnabled(),
|
||||||
'config' => $plugin->hasConfigView(),
|
'config' => $plugin->hasConfig(),
|
||||||
'dependencies' => [
|
'dependencies' => [
|
||||||
'all' => $plugin->require,
|
'all' => $plugin->require,
|
||||||
'unsatisfied' => $plugins->getUnsatisfied($plugin),
|
'unsatisfied' => $plugins->getUnsatisfied($plugin),
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ class SideMenuComposer
|
||||||
$pluginConfigs = resolve(PluginManager::class)
|
$pluginConfigs = resolve(PluginManager::class)
|
||||||
->getEnabledPlugins()
|
->getEnabledPlugins()
|
||||||
->filter(function ($plugin) {
|
->filter(function ($plugin) {
|
||||||
return $plugin->hasConfigView();
|
return $plugin->hasConfig();
|
||||||
})
|
})
|
||||||
->map(function ($plugin) {
|
->map(function ($plugin) {
|
||||||
return [
|
return [
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,23 @@ class Plugin
|
||||||
return "$baseUrl/{$this->name}/assets/$relativeUri?v=".$this->version;
|
return "$baseUrl/{$this->name}/assets/$relativeUri?v=".$this->version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function hasConfig(): bool
|
||||||
|
{
|
||||||
|
return $this->hasConfigClass() || $this->hasConfigView();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasConfigClass(): bool
|
||||||
|
{
|
||||||
|
return Arr::has($this->manifest, 'enchants.config');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getConfigClass()
|
||||||
|
{
|
||||||
|
$name = Arr::get($this->manifest, 'enchants.config');
|
||||||
|
|
||||||
|
return Str::start($name, $this->manifest['namespace'].'\\');
|
||||||
|
}
|
||||||
|
|
||||||
public function getViewPath(string $filename): string
|
public function getViewPath(string $filename): string
|
||||||
{
|
{
|
||||||
return $this->path."/views/$filename";
|
return $this->path."/views/$filename";
|
||||||
|
|
|
||||||
|
|
@ -50,15 +50,25 @@ class PluginControllerTest extends TestCase
|
||||||
->with('fake4')
|
->with('fake4')
|
||||||
->once()
|
->once()
|
||||||
->andReturn($plugin);
|
->andReturn($plugin);
|
||||||
|
|
||||||
|
$plugin = new Plugin(resource_path(''), [
|
||||||
|
'namespace' => 'App\\Services',
|
||||||
|
'enchants' => [
|
||||||
|
'config' => 'OptionForm',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
$plugin->setEnabled(true);
|
||||||
|
$mock->shouldReceive('get')
|
||||||
|
->with('fake5')
|
||||||
|
->once()
|
||||||
|
->andReturn($plugin);
|
||||||
});
|
});
|
||||||
|
|
||||||
// No such plugin.
|
// No such plugin.
|
||||||
$this->get('/admin/plugins/config/fake1')
|
$this->get('/admin/plugins/config/fake1')->assertNotFound();
|
||||||
->assertNotFound();
|
|
||||||
|
|
||||||
// Plugin is disabled
|
// Plugin is disabled
|
||||||
$this->get('/admin/plugins/config/fake2')
|
$this->get('/admin/plugins/config/fake2')->assertNotFound();
|
||||||
->assertNotFound();
|
|
||||||
|
|
||||||
// Plugin is enabled but it doesn't have config view
|
// Plugin is enabled but it doesn't have config view
|
||||||
$this->get('/admin/plugins/config/fake3')
|
$this->get('/admin/plugins/config/fake3')
|
||||||
|
|
@ -66,8 +76,14 @@ class PluginControllerTest extends TestCase
|
||||||
->assertNotFound();
|
->assertNotFound();
|
||||||
|
|
||||||
// Plugin has config view
|
// Plugin has config view
|
||||||
$this->get('/admin/plugins/config/fake4')
|
$this->get('/admin/plugins/config/fake4')->assertSuccessful();
|
||||||
->assertSuccessful();
|
|
||||||
|
// Plugin has config class
|
||||||
|
app()->instance(
|
||||||
|
\App\Services\OptionForm::class,
|
||||||
|
new \App\Services\OptionForm('t')
|
||||||
|
);
|
||||||
|
$this->get('/admin/plugins/config/fake5')->assertSee('card');
|
||||||
|
|
||||||
option(['plugins_enabled' => '[]']);
|
option(['plugins_enabled' => '[]']);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user