3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller\Admin
;
8 use Shaarli\Render\TemplatePage
;
10 use Slim\Http\Response
;
13 * Class PluginsController
15 * Slim controller used to handle Shaarli plugins configuration page (display + save new config).
17 class PluginsController
extends ShaarliAdminController
20 * GET /admin/plugins - Displays the configuration page
22 public function index(Request
$request, Response
$response): Response
24 $pluginMeta = $this->container
->pluginManager
->getPluginsMeta();
26 // Split plugins into 2 arrays: ordered enabled plugins and disabled.
27 $enabledPlugins = array_filter($pluginMeta, function ($v) {
28 return ($v['order'] ?? false) !== false;
30 $enabledPlugins = load_plugin_parameter_values($enabledPlugins, $this->container
->conf
->get('plugins', []));
34 return $a['order'] - $b['order'];
37 $disabledPlugins = array_filter($pluginMeta, function ($v) {
38 return ($v['order'] ?? false) === false;
41 $this->assignView('enabledPlugins', $enabledPlugins);
42 $this->assignView('disabledPlugins', $disabledPlugins);
45 t('Plugin Administration') .' - '. $this->container
->conf
->get('general.title', 'Shaarli')
48 return $response->write($this->render(TemplatePage
::PLUGINS_ADMIN
));
52 * POST /admin/plugins - Update Shaarli's configuration
54 public function save(Request
$request, Response
$response): Response
56 $this->checkToken($request);
59 $parameters = $request->getParams() ?? [];
61 $this->executePageHooks('save_plugin_parameters', $parameters);
63 if (isset($parameters['parameters_form'])) {
64 unset($parameters['parameters_form']);
65 foreach ($parameters as $param => $value) {
66 $this->container
->conf
->set('plugins.'. $param, escape($value));
69 $this->container
->conf
->set('general.enabled_plugins', save_plugin_config($parameters));
72 $this->container
->conf
->write($this->container
->loginManager
->isLoggedIn());
73 $this->container
->history
->updateSettings();
75 $this->saveSuccessMessage(t('Setting successfully saved.'));
76 } catch (Exception
$e) {
77 $this->saveErrorMessage(
78 t('Error while saving plugin configuration: ') . PHP_EOL
. $e->getMessage()
82 return $this->redirect($response, '/admin/plugins');