3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller\Admin
;
9 use Slim\Http\Response
;
12 * Class PluginsController
14 * Slim controller used to handle Shaarli plugins configuration page (display + save new config).
16 class PluginsController
extends ShaarliAdminController
19 * GET /admin/plugins - Displays the configuration page
21 public function index(Request
$request, Response
$response): Response
23 $pluginMeta = $this->container
->pluginManager
->getPluginsMeta();
25 // Split plugins into 2 arrays: ordered enabled plugins and disabled.
26 $enabledPlugins = array_filter($pluginMeta, function ($v) {
27 return ($v['order'] ?? false) !== false;
29 $enabledPlugins = load_plugin_parameter_values($enabledPlugins, $this->container
->conf
->get('plugins', []));
33 return $a['order'] - $b['order'];
36 $disabledPlugins = array_filter($pluginMeta, function ($v) {
37 return ($v['order'] ?? false) === false;
40 $this->assignView('enabledPlugins', $enabledPlugins);
41 $this->assignView('disabledPlugins', $disabledPlugins);
44 t('Plugin Administration') .' - '. $this->container
->conf
->get('general.title', 'Shaarli')
47 return $response->write($this->render('pluginsadmin'));
51 * POST /admin/plugins - Update Shaarli's configuration
53 public function save(Request
$request, Response
$response): Response
55 $this->checkToken($request);
58 $parameters = $request->getParams() ?? [];
60 $this->executeHooks($parameters);
62 if (isset($parameters['parameters_form'])) {
63 unset($parameters['parameters_form']);
64 foreach ($parameters as $param => $value) {
65 $this->container
->conf
->set('plugins.'. $param, escape($value));
68 $this->container
->conf
->set('general.enabled_plugins', save_plugin_config($parameters));
71 $this->container
->conf
->write($this->container
->loginManager
->isLoggedIn());
72 $this->container
->history
->updateSettings();
74 $this->saveSuccessMessage(t('Setting successfully saved.'));
75 } catch (Exception
$e) {
76 $this->saveErrorMessage(
77 t('ERROR while saving plugin configuration: ') . PHP_EOL
. $e->getMessage()
81 return $this->redirect($response, '/admin/plugins');
85 * @param mixed[] $data Variables passed to the template engine
87 * @return mixed[] Template data after active plugins render_picwall hook execution.
89 protected function executeHooks(array $data): array
91 $this->container
->pluginManager
->executeHooks(
92 'save_plugin_parameters',