]>
Commit | Line | Data |
---|---|---|
1b8620b1 A |
1 | <?php |
2 | ||
3 | declare(strict_types=1); | |
4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | |
6 | ||
7 | use Exception; | |
1a8ac737 | 8 | use Shaarli\Render\TemplatePage; |
1b8620b1 A |
9 | use Slim\Http\Request; |
10 | use Slim\Http\Response; | |
11 | ||
12 | /** | |
13 | * Class PluginsController | |
14 | * | |
15 | * Slim controller used to handle Shaarli plugins configuration page (display + save new config). | |
16 | */ | |
17 | class PluginsController extends ShaarliAdminController | |
18 | { | |
19 | /** | |
20 | * GET /admin/plugins - Displays the configuration page | |
21 | */ | |
22 | public function index(Request $request, Response $response): Response | |
23 | { | |
24 | $pluginMeta = $this->container->pluginManager->getPluginsMeta(); | |
25 | ||
26 | // Split plugins into 2 arrays: ordered enabled plugins and disabled. | |
27 | $enabledPlugins = array_filter($pluginMeta, function ($v) { | |
28 | return ($v['order'] ?? false) !== false; | |
29 | }); | |
30 | $enabledPlugins = load_plugin_parameter_values($enabledPlugins, $this->container->conf->get('plugins', [])); | |
31 | uasort( | |
32 | $enabledPlugins, | |
33 | function ($a, $b) { | |
34 | return $a['order'] - $b['order']; | |
35 | } | |
36 | ); | |
37 | $disabledPlugins = array_filter($pluginMeta, function ($v) { | |
38 | return ($v['order'] ?? false) === false; | |
39 | }); | |
40 | ||
41 | $this->assignView('enabledPlugins', $enabledPlugins); | |
42 | $this->assignView('disabledPlugins', $disabledPlugins); | |
43 | $this->assignView( | |
44 | 'pagetitle', | |
45 | t('Plugin Administration') .' - '. $this->container->conf->get('general.title', 'Shaarli') | |
46 | ); | |
47 | ||
1a8ac737 | 48 | return $response->write($this->render(TemplatePage::PLUGINS_ADMIN)); |
1b8620b1 A |
49 | } |
50 | ||
51 | /** | |
52 | * POST /admin/plugins - Update Shaarli's configuration | |
53 | */ | |
54 | public function save(Request $request, Response $response): Response | |
55 | { | |
56 | $this->checkToken($request); | |
57 | ||
58 | try { | |
59 | $parameters = $request->getParams() ?? []; | |
60 | ||
9fbc4229 | 61 | $this->executePageHooks('save_plugin_parameters', $parameters); |
1b8620b1 A |
62 | |
63 | if (isset($parameters['parameters_form'])) { | |
64 | unset($parameters['parameters_form']); | |
4ff703e3 | 65 | unset($parameters['token']); |
1b8620b1 A |
66 | foreach ($parameters as $param => $value) { |
67 | $this->container->conf->set('plugins.'. $param, escape($value)); | |
68 | } | |
69 | } else { | |
70 | $this->container->conf->set('general.enabled_plugins', save_plugin_config($parameters)); | |
71 | } | |
72 | ||
73 | $this->container->conf->write($this->container->loginManager->isLoggedIn()); | |
74 | $this->container->history->updateSettings(); | |
75 | ||
76 | $this->saveSuccessMessage(t('Setting successfully saved.')); | |
77 | } catch (Exception $e) { | |
78 | $this->saveErrorMessage( | |
8e9169ce | 79 | t('Error while saving plugin configuration: ') . PHP_EOL . $e->getMessage() |
1b8620b1 A |
80 | ); |
81 | } | |
82 | ||
83 | return $this->redirect($response, '/admin/plugins'); | |
84 | } | |
1b8620b1 | 85 | } |