public function getPlugins()
{
if (is_null($this->plugins)) {
$plugins = new Collection();
$installed = [];
$resource = opendir(base_path('plugins'));
// traverse plugins dir
while ($filename = @readdir($resource)) {
if ($filename == "." || $filename == "..") {
continue;
}
$path = base_path('plugins') . "/" . $filename;
if (is_dir($path)) {
if (file_exists($path . "/package.json")) {
// load packages installed
$installed[$filename] = json_decode($this->filesystem->get($path . "/package.json"), true);
}
}
}
closedir($resource);
foreach ($installed as $path => $package) {
// Instantiates an Plugin object using the package path and package.json file.
$plugin = new Plugin($this->getPluginsDir() . '/' . $path, $package);
// Per default all plugins are installed if they are registered in composer.
$plugin->setInstalled(true);
$plugin->setNameSpace(Arr::get($package, 'namespace'));
$plugin->setVersion(Arr::get($package, 'version'));
$plugin->setEnabled($this->isEnabled($plugin->name));
$plugins->put($plugin->name, $plugin);
}
$this->plugins = $plugins->sortBy(function ($plugin, $name) {
return $plugin->name;
});
}
return $this->plugins;
}
public function manage(Request $request, PluginManager $plugins) { if ($request->has('action') && $request->has('id')) { $id = $request->get('id'); if ($plugins->getPlugins()->has($id)) { $plugin = $plugins->getPlugin($id); switch ($request->get('action')) { case 'enable': $plugins->enable($id); return redirect('admin/plugins/manage'); break; case 'disable': $plugins->disable($id); return redirect('admin/plugins/manage'); break; case 'delete': if ($request->isMethod('post')) { event(new Events\PluginWasDeleted($plugin)); $plugins->uninstall($id); return json('插件已被成功删除', 0); } break; case 'config': if ($plugin->isEnabled() && $plugin->hasConfigView()) { return View::file($plugin->getViewPath('config')); } else { abort(404); } break; default: # code... break; } } } $data = ['installed' => $plugins->getPlugins(), 'enabled' => $plugins->getEnabledPlugins()]; return view('admin.plugins', $data); }