]>
Commit | Line | Data |
---|---|---|
66063ed1 A |
1 | <?php |
2 | ||
3 | declare(strict_types=1); | |
4 | ||
5 | namespace Shaarli\Front\Controller\Admin; | |
6 | ||
7 | use Shaarli\Languages; | |
1a8ac737 | 8 | use Shaarli\Render\TemplatePage; |
66063ed1 A |
9 | use Shaarli\Render\ThemeUtils; |
10 | use Shaarli\Thumbnailer; | |
11 | use Slim\Http\Request; | |
12 | use Slim\Http\Response; | |
13 | use Throwable; | |
14 | ||
15 | /** | |
8eac2e54 | 16 | * Class ConfigureController |
66063ed1 A |
17 | * |
18 | * Slim controller used to handle Shaarli configuration page (display + save new config). | |
19 | */ | |
20 | class ConfigureController extends ShaarliAdminController | |
21 | { | |
22 | /** | |
9c75f877 | 23 | * GET /admin/configure - Displays the configuration page |
66063ed1 A |
24 | */ |
25 | public function index(Request $request, Response $response): Response | |
26 | { | |
27 | $this->assignView('title', $this->container->conf->get('general.title', 'Shaarli')); | |
28 | $this->assignView('theme', $this->container->conf->get('resource.theme')); | |
29 | $this->assignView( | |
30 | 'theme_available', | |
31 | ThemeUtils::getThemes($this->container->conf->get('resource.raintpl_tpl')) | |
32 | ); | |
8fabcd02 | 33 | $this->assignView('formatter_available', ['default', 'markdown', 'markdownExtra']); |
66063ed1 A |
34 | list($continents, $cities) = generateTimeZoneData( |
35 | timezone_identifiers_list(), | |
36 | $this->container->conf->get('general.timezone') | |
37 | ); | |
38 | $this->assignView('continents', $continents); | |
39 | $this->assignView('cities', $cities); | |
40 | $this->assignView('retrieve_description', $this->container->conf->get('general.retrieve_description', false)); | |
41 | $this->assignView('private_links_default', $this->container->conf->get('privacy.default_private_links', false)); | |
42 | $this->assignView( | |
43 | 'session_protection_disabled', | |
44 | $this->container->conf->get('security.session_protection_disabled', false) | |
45 | ); | |
46 | $this->assignView('enable_rss_permalinks', $this->container->conf->get('feed.rss_permalinks', false)); | |
47 | $this->assignView('enable_update_check', $this->container->conf->get('updates.check_updates', true)); | |
48 | $this->assignView('hide_public_links', $this->container->conf->get('privacy.hide_public_links', false)); | |
49 | $this->assignView('api_enabled', $this->container->conf->get('api.enabled', true)); | |
50 | $this->assignView('api_secret', $this->container->conf->get('api.secret')); | |
51 | $this->assignView('languages', Languages::getAvailableLanguages()); | |
52 | $this->assignView('gd_enabled', extension_loaded('gd')); | |
53 | $this->assignView('thumbnails_mode', $this->container->conf->get('thumbnails.mode', Thumbnailer::MODE_NONE)); | |
54 | $this->assignView('pagetitle', t('Configure') .' - '. $this->container->conf->get('general.title', 'Shaarli')); | |
55 | ||
1a8ac737 | 56 | return $response->write($this->render(TemplatePage::CONFIGURE)); |
66063ed1 A |
57 | } |
58 | ||
59 | /** | |
9c75f877 | 60 | * POST /admin/configure - Update Shaarli's configuration |
66063ed1 A |
61 | */ |
62 | public function save(Request $request, Response $response): Response | |
63 | { | |
64 | $this->checkToken($request); | |
65 | ||
66 | $continent = $request->getParam('continent'); | |
67 | $city = $request->getParam('city'); | |
68 | $tz = 'UTC'; | |
69 | if (null !== $continent && null !== $city && isTimeZoneValid($continent, $city)) { | |
70 | $tz = $continent . '/' . $city; | |
71 | } | |
72 | ||
73 | $this->container->conf->set('general.timezone', $tz); | |
74 | $this->container->conf->set('general.title', escape($request->getParam('title'))); | |
75 | $this->container->conf->set('general.header_link', escape($request->getParam('titleLink'))); | |
76 | $this->container->conf->set('general.retrieve_description', !empty($request->getParam('retrieveDescription'))); | |
77 | $this->container->conf->set('resource.theme', escape($request->getParam('theme'))); | |
78 | $this->container->conf->set( | |
79 | 'security.session_protection_disabled', | |
80 | !empty($request->getParam('disablesessionprotection')) | |
81 | ); | |
82 | $this->container->conf->set( | |
83 | 'privacy.default_private_links', | |
84 | !empty($request->getParam('privateLinkByDefault')) | |
85 | ); | |
86 | $this->container->conf->set('feed.rss_permalinks', !empty($request->getParam('enableRssPermalinks'))); | |
87 | $this->container->conf->set('updates.check_updates', !empty($request->getParam('updateCheck'))); | |
88 | $this->container->conf->set('privacy.hide_public_links', !empty($request->getParam('hidePublicLinks'))); | |
89 | $this->container->conf->set('api.enabled', !empty($request->getParam('enableApi'))); | |
90 | $this->container->conf->set('api.secret', escape($request->getParam('apiSecret'))); | |
91 | $this->container->conf->set('formatter', escape($request->getParam('formatter'))); | |
92 | ||
93 | if (!empty($request->getParam('language'))) { | |
94 | $this->container->conf->set('translation.language', escape($request->getParam('language'))); | |
95 | } | |
96 | ||
97 | $thumbnailsMode = extension_loaded('gd') ? $request->getParam('enableThumbnails') : Thumbnailer::MODE_NONE; | |
98 | if ($thumbnailsMode !== Thumbnailer::MODE_NONE | |
99 | && $thumbnailsMode !== $this->container->conf->get('thumbnails.mode', Thumbnailer::MODE_NONE) | |
100 | ) { | |
3ee8351e A |
101 | $this->saveWarningMessage( |
102 | t('You have enabled or changed thumbnails mode.') . | |
103 | '<a href="'. $this->container->basePath .'/admin/thumbnails">' . t('Please synchronize them.') .'</a>' | |
104 | ); | |
66063ed1 A |
105 | } |
106 | $this->container->conf->set('thumbnails.mode', $thumbnailsMode); | |
107 | ||
108 | try { | |
109 | $this->container->conf->write($this->container->loginManager->isLoggedIn()); | |
110 | $this->container->history->updateSettings(); | |
111 | $this->container->pageCacheManager->invalidateCaches(); | |
112 | } catch (Throwable $e) { | |
3ee8351e A |
113 | $this->assignView('message', t('Error while writing config file after configuration update.')); |
114 | ||
115 | if ($this->container->conf->get('dev.debug', false)) { | |
116 | $this->assignView('stacktrace', $e->getMessage() . PHP_EOL . $e->getTraceAsString()); | |
117 | } | |
118 | ||
119 | return $response->write($this->render('error')); | |
66063ed1 A |
120 | } |
121 | ||
122 | $this->saveSuccessMessage(t('Configuration was saved.')); | |
123 | ||
9c75f877 | 124 | return $this->redirect($response, '/admin/configure'); |
66063ed1 A |
125 | } |
126 | } |