SettingController.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Controllers;
  3. use Psr\Http\Message\ResponseInterface as Response;
  4. use Psr\Http\Message\ServerRequestInterface as Request;
  5. class SettingController extends Controller
  6. {
  7. /**
  8. * @param Request $request
  9. * @param Response $response
  10. *
  11. * @return Response
  12. */
  13. public function saveSettings(Request $request, Response $response): Response
  14. {
  15. if (!preg_match('/[0-9]+[K|M|G|T]/i', param($request, 'default_user_quota', '1G'))) {
  16. $this->session->alert(lang('invalid_quota', 'danger'));
  17. return redirect($response, route('system'));
  18. }
  19. $this->updateSetting('register_enabled', param($request, 'register_enabled', 'off'));
  20. $this->updateSetting('hide_by_default', param($request, 'hide_by_default', 'off'));
  21. $this->updateSetting('quota_enabled', param($request, 'quota_enabled', 'off'));
  22. $this->updateSetting('default_user_quota', stringToBytes(param($request, 'default_user_quota', '1G')));
  23. $this->updateSetting('copy_url_behavior', param($request, 'copy_url_behavior') === null ? 'default' : 'raw');
  24. $this->applyTheme($request);
  25. $this->applyLang($request);
  26. $this->updateSetting('custom_head', param($request, 'custom_head'));
  27. $this->session->alert(lang('settings_saved'));
  28. return redirect($response, route('system'));
  29. }
  30. /**
  31. * @param Request $request
  32. */
  33. public function applyLang(Request $request)
  34. {
  35. if (param($request, 'lang') !== 'auto') {
  36. $this->updateSetting('copy_url_behavior', param($request, 'lang'));
  37. } else {
  38. $this->database->query('DELETE FROM `settings` WHERE `key` = \'lang\'');
  39. }
  40. }
  41. /**
  42. * @param Request $request
  43. */
  44. public function applyTheme(Request $request)
  45. {
  46. if (param($request, 'css') !== null) {
  47. if (!is_writable(BASE_DIR.'static/bootstrap/css/bootstrap.min.css')) {
  48. $this->session->alert(lang('cannot_write_file'), 'danger');
  49. } else {
  50. file_put_contents(BASE_DIR.'static/bootstrap/css/bootstrap.min.css', file_get_contents(param($request, 'css')));
  51. }
  52. // if is default, remove setting
  53. if (param($request, 'css') !== 'https://bootswatch.com/_vendor/bootstrap/dist/css/bootstrap.min.css') {
  54. $this->updateSetting('css', param($request, 'css'));
  55. } else {
  56. $this->database->query('DELETE FROM `settings` WHERE `key` = \'css\'');
  57. }
  58. }
  59. }
  60. /**
  61. * @param $key
  62. * @param null $value
  63. */
  64. private function updateSetting($key, $value = null)
  65. {
  66. if (!$this->database->query('SELECT `value` FROM `settings` WHERE `key` = '.$this->database->getPdo()->quote($key))->fetch()) {
  67. $this->database->query('INSERT INTO `settings`(`key`, `value`) VALUES ('.$this->database->getPdo()->quote($key).', ?)', $value);
  68. } else {
  69. $this->database->query('UPDATE `settings` SET `value`=? WHERE `key` = '.$this->database->getPdo()->quote($key), $value);
  70. }
  71. }
  72. }