From db15ff2314f550dcc644e76ae9ec9d2f08204f7a Mon Sep 17 00:00:00 2001 From: printempw Date: Tue, 17 Jan 2017 21:41:20 +0800 Subject: [PATCH] fix url to config pages of plugins --- app/Http/Controllers/PluginController.php | 75 +++++++++---------- app/Http/Routes/web.php | 9 ++- app/Services/Plugin.php | 16 +++- app/Services/PluginManager.php | 5 +- .../admin-operations/plugins/operations.tpl | 2 +- 5 files changed, 58 insertions(+), 49 deletions(-) diff --git a/app/Http/Controllers/PluginController.php b/app/Http/Controllers/PluginController.php index 3571b3c8..fa26c424 100644 --- a/app/Http/Controllers/PluginController.php +++ b/app/Http/Controllers/PluginController.php @@ -12,61 +12,54 @@ class PluginController extends Controller { public function showMarket() { - return "developing"; + return 'Plugin market is under development. Maybe you will want to check this.'; + } + + public function showManage() + { + return view('admin.plugins'); + } + + public function config($name, Request $request) + { + $plugin = plugin($name); + + if ($plugin && $plugin->isEnabled() && $plugin->hasConfigView()) { + return $plugin->getConfigView(); + } else { + abort(404, trans('admin.plugins.operations.no-config-notice')); + } } public function manage(Request $request, PluginManager $plugins) { - if ($request->has('action') && $request->has('name')) { - $name = $request->get('name'); + $plugin = plugin($name = $request->get('name')); - if ($plugins->getPlugins()->has($name)) { - $plugin = $plugins->getPlugin($name); + if ($plugin) { + // pass the plugin title through the translator + $plugin->title = trans($plugin->title); - // pass the plugin title through the translator - $plugin->title = trans($plugin->title); + switch ($request->get('action')) { + case 'enable': + $plugins->enable($name); - switch ($request->get('action')) { - case 'enable': - $plugins->enable($name); + return json(trans('admin.plugins.operations.enabled', ['plugin' => $plugin->title]), 0); - return json(trans('admin.plugins.operations.enabled', ['plugin' => $plugin->title]), 0); - break; + case 'disable': + $plugins->disable($name); - case 'disable': - $plugins->disable($name); + return json(trans('admin.plugins.operations.disabled', ['plugin' => $plugin->title]), 0); - return json(trans('admin.plugins.operations.disabled', ['plugin' => $plugin->title]), 0); - break; + case 'delete': + $plugins->uninstall($name); - case 'delete': - if ($request->isMethod('post')) { - event(new Events\PluginWasDeleted($plugin)); + return json(trans('admin.plugins.operations.deleted'), 0); - $plugins->uninstall($name); - - return json(trans('admin.plugins.operations.deleted'), 0); - } - break; - - case 'config': - if ($plugin->isEnabled() && $plugin->hasConfigView()) { - return View::file($plugin->getViewPath('config')); - } else { - abort(404); - } - - break; - - default: - # code... - break; - } + default: + # code... + break; } - } - - return view('admin.plugins'); } public function getPluginData(PluginManager $plugins) diff --git a/app/Http/Routes/web.php b/app/Http/Routes/web.php index f2c86eb0..c6ea2681 100644 --- a/app/Http/Routes/web.php +++ b/app/Http/Routes/web.php @@ -113,9 +113,12 @@ Route::group(['middleware' => 'admin', 'prefix' => 'admin'], function () Route::post('/players', 'AdminController@playerAjaxHandler'); Route::group(['prefix' => 'plugins'], function () { - Route::any('/manage', 'PluginController@manage'); - Route::get('/data', 'PluginController@getPluginData'); - Route::any('/market', 'PluginController@showMarket'); + Route::get ('/data', 'PluginController@getPluginData'); + Route::any ('/market', 'PluginController@showMarket'); + + Route::get ('/manage', 'PluginController@showManage'); + Route::post('/manage', 'PluginController@manage'); + Route::any ('/config/{name}', 'PluginController@config'); }); Route::group(['prefix' => 'update'], function () { diff --git a/app/Services/Plugin.php b/app/Services/Plugin.php index 6a1b4be8..17d94ab4 100644 --- a/app/Services/Plugin.php +++ b/app/Services/Plugin.php @@ -153,12 +153,24 @@ class Plugin implements Arrayable, ArrayAccess public function getViewPath($name) { - return $this->path."/views/$name.tpl"; + return $this->getViewPathByFileName("$name.tpl"); + } + + public function getViewPathByFileName($filename) + { + return $this->path."/views/$filename"; + } + + public function getConfigView() + { + return $this->hasConfigView() ? view()->file($this->getViewPathByFileName(Arr::get($this->packageInfo, 'config'))) : null; } public function hasConfigView() { - return Arr::get($this->packageInfo, 'config') != ""; + $filename = Arr::get($this->packageInfo, 'config'); + + return $filename && file_exists($this->getViewPathByFileName($filename)); } /** diff --git a/app/Services/PluginManager.php b/app/Services/PluginManager.php index 75cb18b1..89f81cd4 100644 --- a/app/Services/PluginManager.php +++ b/app/Services/PluginManager.php @@ -167,12 +167,13 @@ class PluginManager $this->disable($name); + // fire event before deleeting plugin files + $this->dispatcher->fire(new Events\PluginWasDeleted($plugin)); + $this->filesystem->deleteDirectory($plugin->getPath()); // refresh plugin list $this->plugins = null; - - $this->dispatcher->fire(new Events\PluginWasDeleted($plugin)); } /** diff --git a/resources/views/vendor/admin-operations/plugins/operations.tpl b/resources/views/vendor/admin-operations/plugins/operations.tpl index 1d3338ca..6dba4c18 100644 --- a/resources/views/vendor/admin-operations/plugins/operations.tpl +++ b/resources/views/vendor/admin-operations/plugins/operations.tpl @@ -5,7 +5,7 @@ @endif @if ($plugin->isEnabled() && $plugin->hasConfigView()) -{{ trans('admin.plugins.operations.configure') }} +{{ trans('admin.plugins.operations.configure') }} @else {{ trans('admin.plugins.operations.configure') }} @endif