InitializeProcessor.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * @package Grav\Common\Processors
  4. *
  5. * @copyright Copyright (C) 2015 - 2019 Trilby Media, LLC. All rights reserved.
  6. * @license MIT License; see LICENSE file for details.
  7. */
  8. namespace Grav\Common\Processors;
  9. use Grav\Common\Config\Config;
  10. use Grav\Common\Uri;
  11. use Grav\Common\Utils;
  12. use Grav\Framework\Session\Exceptions\SessionException;
  13. use Psr\Http\Message\ResponseInterface;
  14. use Psr\Http\Message\ServerRequestInterface;
  15. use Psr\Http\Server\RequestHandlerInterface;
  16. class InitializeProcessor extends ProcessorBase
  17. {
  18. public $id = 'init';
  19. public $title = 'Initialize';
  20. public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
  21. {
  22. $this->startTimer();
  23. /** @var Config $config */
  24. $config = $this->container['config'];
  25. $config->debug();
  26. // Use output buffering to prevent headers from being sent too early.
  27. ob_start();
  28. if ($config->get('system.cache.gzip') && !@ob_start('ob_gzhandler')) {
  29. // Enable zip/deflate with a fallback in case of if browser does not support compressing.
  30. ob_start();
  31. }
  32. // Initialize the timezone.
  33. $timezone = $config->get('system.timezone');
  34. if ($timezone) {
  35. date_default_timezone_set($timezone);
  36. }
  37. // FIXME: Initialize session should happen later after plugins have been loaded. This is a workaround to fix session issues in AWS.
  38. if (isset($this->container['session']) && $config->get('system.session.initialize', true)) {
  39. // TODO: remove in 2.0.
  40. $this->container['accounts'];
  41. try {
  42. $this->container['session']->init();
  43. } catch (SessionException $e) {
  44. $this->container['session']->init();
  45. $message = 'Session corruption detected, restarting session...';
  46. $this->addMessage($message);
  47. $this->container['messages']->add($message, 'error');
  48. }
  49. }
  50. /** @var Uri $uri */
  51. $uri = $this->container['uri'];
  52. $uri->init();
  53. // Redirect pages with trailing slash if configured to do so.
  54. $path = $uri->path() ?: '/';
  55. if ($path !== '/'
  56. && $config->get('system.pages.redirect_trailing_slash', false)
  57. && Utils::endsWith($path, '/')) {
  58. $redirect = (string) $uri::getCurrentRoute()->toString();
  59. $this->container->redirect($redirect);
  60. }
  61. $this->container->setLocale();
  62. $this->stopTimer();
  63. return $handler->handle($request);
  64. }
  65. }