<?php namespace App\Http\Controllers; use App\Services\Plugin; use App\Services\PluginManager; use Illuminate\Http\Request; class PluginController extends Controller { public function config(PluginManager $plugins, $name) { $plugin = $plugins->get($name); if ($plugin && $plugin->isEnabled()) { 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 { return abort(404, trans('admin.plugins.operations.no-config-notice')); } } public function readme(PluginManager $plugins, $name) { $plugin = $plugins->get($name); if (empty($plugin)) { return abort(404, trans('admin.plugins.operations.no-readme-notice')); } $readmePath = $plugin->getReadme(); if (empty($readmePath)) { return abort(404, trans('admin.plugins.operations.no-readme-notice')); } $title = $plugin->title; $path = $plugin->getPath().'/'.$readmePath; $content = resolve('parsedown')->text(file_get_contents($path)); return view('admin.plugin.readme', compact('content', 'title')); } public function manage(Request $request, PluginManager $plugins) { $name = $request->input('name'); $plugin = $plugins->get($name); if ($plugin) { // Pass the plugin title through the translator. $plugin->title = trans($plugin->title); switch ($request->get('action')) { case 'enable': $result = $plugins->enable($name); if ($result === true) { return json(trans('admin.plugins.operations.enabled', ['plugin' => $plugin->title]), 0); } else { $reason = $plugins->formatUnresolved($result['unsatisfied'], $result['conflicts']); return json(trans('admin.plugins.operations.unsatisfied.notice'), 1, compact('reason')); } // no break case 'disable': $plugins->disable($name); return json(trans('admin.plugins.operations.disabled', ['plugin' => $plugin->title]), 0); case 'delete': $plugins->delete($name); return json(trans('admin.plugins.operations.deleted'), 0); default: return json(trans('admin.invalid-action'), 1); } } else { return json(trans('admin.plugins.operations.not-found'), 1); } } public function getPluginData(PluginManager $plugins) { return $plugins->all() ->map(function ($plugin) use ($plugins) { return [ 'name' => $plugin->name, 'title' => trans($plugin->title ?: 'EMPTY'), 'author' => $plugin->author, 'description' => trans($plugin->description ?: 'EMPTY'), 'version' => $plugin->version, 'url' => $plugin->url, 'enabled' => $plugin->isEnabled(), 'readme' => (bool) $plugin->getReadme(), 'config' => $plugin->hasConfig(), 'dependencies' => [ 'all' => $plugin->require, 'unsatisfied' => $plugins->getUnsatisfied($plugin), ], ]; }) ->values(); } }