From 569420c9e12f9613c01f55c642054696335b0e11 Mon Sep 17 00:00:00 2001 From: Peter Gribanov Date: Wed, 7 Dec 2016 17:38:32 +0300 Subject: [PATCH] available disable use cookie for store user timezone --- README.md | 9 ++++- src/DependencyInjection/Configuration.php | 4 ++ .../GpsLabDateExtension.php | 5 ++- src/Event/Listener/ResponseListener.php | 38 ++++++++++--------- src/Resources/config/services.yml | 11 +++++- src/TimeZone/Resolver/ConsoleResolver.php | 2 +- src/TimeZone/Resolver/RequestResolver.php | 23 ++++++++--- 7 files changed, 62 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 3856dd8..18154ce 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,14 @@ gps_lab_date: # As a default uset timezone from date_default_timezone_get() time_zone: 'Europe/Moscow' - # HTTP Cookie var names for store user timezone - # It's a default values + # HTTP Cookie parameters for store user timezone cookie: + + # You can disable use cookie for store user timezone + used: true + + # HTTP Cookie variable names + # It's a default values name: '_time_zone_name' offset: '_time_zone_offset' ``` diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 844622a..c2f038c 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -22,6 +22,7 @@ class Configuration implements ConfigurationInterface * gps_lab_date: * time_zone: 'Europe/Moscow' * cookie: + * used: true * name: '_time_zone_name' * offset: '_time_zone_offset' * @@ -37,6 +38,9 @@ public function getConfigTreeBuilder() ->end() ->arrayNode('cookie') ->children() + ->scalarNode('used') + ->defaultValue(true) + ->end() ->scalarNode('name') ->cannotBeEmpty() ->defaultValue('_time_zone_name') diff --git a/src/DependencyInjection/GpsLabDateExtension.php b/src/DependencyInjection/GpsLabDateExtension.php index 050c3c0..3c7884d 100644 --- a/src/DependencyInjection/GpsLabDateExtension.php +++ b/src/DependencyInjection/GpsLabDateExtension.php @@ -21,8 +21,9 @@ public function load(array $configs, ContainerBuilder $container) $config = $this->processConfiguration(new Configuration(), $configs); $container->setParameter('date.time_zone', $config['time_zone']); - $container->setParameter('date.time_zone.param.name', $config['cookie']['name']); - $container->setParameter('date.time_zone.param.offset', $config['cookie']['offset']); + $container->setParameter('date.time_zone.cookie.used', $config['cookie']['used']); + $container->setParameter('date.time_zone.cookie.param.name', $config['cookie']['name']); + $container->setParameter('date.time_zone.cookie.param.offset', $config['cookie']['offset']); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('services.yml'); diff --git a/src/Event/Listener/ResponseListener.php b/src/Event/Listener/ResponseListener.php index f75090c..9ad41ed 100644 --- a/src/Event/Listener/ResponseListener.php +++ b/src/Event/Listener/ResponseListener.php @@ -18,31 +18,35 @@ class ResponseListener /** * @var KeeperInterface */ - protected $keeper; + private $keeper; + + /** + * @var bool + */ + private $cookie_used = true; /** * @var string */ - protected $tz_param_name = ''; + private $cookie_param_name = ''; /** * @var string */ - protected $tz_param_offset = ''; + private $cookie_param_offset = ''; /** * @param KeeperInterface $tz_keeper - * @param string $tz_param_name - * @param string $tz_param_offset + * @param bool $cookie_used + * @param string $cookie_param_name + * @param string $cookie_param_offset */ - public function __construct( - KeeperInterface $tz_keeper, - $tz_param_name, - $tz_param_offset - ) { + public function __construct(KeeperInterface $tz_keeper, $cookie_used, $cookie_param_name, $cookie_param_offset) + { $this->keeper = $tz_keeper; - $this->tz_param_name = $tz_param_name; - $this->tz_param_offset = $tz_param_offset; + $this->cookie_used = $cookie_used; + $this->cookie_param_name = $cookie_param_name; + $this->cookie_param_offset = $cookie_param_offset; } /** @@ -52,18 +56,18 @@ public function __construct( */ public function onKernelResponseSaveUserTimeZone(FilterResponseEvent $event) { - if ($event->isMasterRequest()) { + if ($this->cookie_used && $event->isMasterRequest()) { $cookies = $event->getRequest()->cookies; $headers = $event->getResponse()->headers; $tz = $this->keeper->getUserTimeZone(); $offset = $tz->getOffset($this->keeper->getDefaultDateTime()); if ( - $cookies->get($this->tz_param_name) != $tz->getName() || - $cookies->get($this->tz_param_offset) != $offset + $cookies->get($this->cookie_param_name) != $tz->getName() || + $cookies->get($this->cookie_param_offset) != $offset ) { - $headers->setCookie($this->getCookie($this->tz_param_name, $tz->getName())); - $headers->setCookie($this->getCookie($this->tz_param_offset, $offset)); + $headers->setCookie($this->getCookie($this->cookie_param_name, $tz->getName())); + $headers->setCookie($this->getCookie($this->cookie_param_offset, $offset)); } } } diff --git a/src/Resources/config/services.yml b/src/Resources/config/services.yml index c60d46a..b9f8780 100644 --- a/src/Resources/config/services.yml +++ b/src/Resources/config/services.yml @@ -38,7 +38,10 @@ services: gpslab.date.tz.resolver.request: class: GpsLab\Bundle\DateBundle\Date\TimeZone\Resolver\RequestResolver - arguments: [ '@request_stack', '%date.time_zone.param.name%' ] + arguments: + - '@request_stack' + - '%date.time_zone.cookie.used%' + - '%date.time_zone.cookie.param.name%' tags: - { name: gpslab.date.tz.resolver, priority: 1000 } public: false @@ -55,4 +58,8 @@ services: class: GpsLab\Bundle\DateBundle\Event\Listener\ResponseListener tags: - { name: kernel.event_listener, event: kernel.response, method: onKernelResponseSaveUserTimeZone } - arguments: [ '@gpslab.date.tz.keeper', '%date.time_zone.param.name%', '%date.time_zone.param.offset%' ] + arguments: + - '@gpslab.date.tz.keeper' + - '%date.time_zone.cookie.used%' + - '%date.time_zone.cookie.param.name%' + - '%date.time_zone.cookie.param.offset%' diff --git a/src/TimeZone/Resolver/ConsoleResolver.php b/src/TimeZone/Resolver/ConsoleResolver.php index 197fa47..f30b331 100644 --- a/src/TimeZone/Resolver/ConsoleResolver.php +++ b/src/TimeZone/Resolver/ConsoleResolver.php @@ -14,7 +14,7 @@ class ConsoleResolver implements ResolverInterface /** * @var \DateTimeZone */ - protected $default_time_zone; + private $default_time_zone; /** * @param string $time_zone diff --git a/src/TimeZone/Resolver/RequestResolver.php b/src/TimeZone/Resolver/RequestResolver.php index 38c9d39..f1034c2 100644 --- a/src/TimeZone/Resolver/RequestResolver.php +++ b/src/TimeZone/Resolver/RequestResolver.php @@ -16,21 +16,28 @@ class RequestResolver implements ResolverInterface /** * @var RequestStack */ - protected $request_stack; + private $request_stack; + + /** + * @var bool + */ + private $cookie_used = true; /** * @var string */ - protected $time_zone_param = ''; + private $cookie_param_name = ''; /** * @param RequestStack $request_stack - * @param string $time_zone_param + * @param bool $cookie_used + * @param string $cookie_param_name */ - public function __construct(RequestStack $request_stack, $time_zone_param) + public function __construct(RequestStack $request_stack, $cookie_used, $cookie_param_name) { $this->request_stack = $request_stack; - $this->time_zone_param = $time_zone_param; + $this->cookie_used = $cookie_used; + $this->cookie_param_name = $cookie_param_name; } /** @@ -38,7 +45,11 @@ public function __construct(RequestStack $request_stack, $time_zone_param) */ public function getUserTimeZone() { - $time_zone = $this->request_stack->getMasterRequest()->cookies->get($this->time_zone_param); + if (!$this->cookie_used) { + return null; + } + + $time_zone = $this->request_stack->getMasterRequest()->cookies->get($this->cookie_param_name); if (in_array($time_zone, \DateTimeZone::listIdentifiers())) { return new \DateTimeZone($time_zone);