Skip to content

Commit

Permalink
available disable use cookie for store user timezone
Browse files Browse the repository at this point in the history
  • Loading branch information
peter-gribanov committed Dec 7, 2016
1 parent 6b27e7e commit 569420c
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 30 deletions.
9 changes: 7 additions & 2 deletions README.md
Expand Up @@ -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'
```
Expand Down
4 changes: 4 additions & 0 deletions src/DependencyInjection/Configuration.php
Expand Up @@ -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'
*
Expand All @@ -37,6 +38,9 @@ public function getConfigTreeBuilder()
->end()
->arrayNode('cookie')
->children()
->scalarNode('used')
->defaultValue(true)
->end()
->scalarNode('name')
->cannotBeEmpty()
->defaultValue('_time_zone_name')
Expand Down
5 changes: 3 additions & 2 deletions src/DependencyInjection/GpsLabDateExtension.php
Expand Up @@ -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');
Expand Down
38 changes: 21 additions & 17 deletions src/Event/Listener/ResponseListener.php
Expand Up @@ -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;
}

/**
Expand All @@ -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));
}
}
}
Expand Down
11 changes: 9 additions & 2 deletions src/Resources/config/services.yml
Expand Up @@ -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
Expand All @@ -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%'
2 changes: 1 addition & 1 deletion src/TimeZone/Resolver/ConsoleResolver.php
Expand Up @@ -14,7 +14,7 @@ class ConsoleResolver implements ResolverInterface
/**
* @var \DateTimeZone
*/
protected $default_time_zone;
private $default_time_zone;

/**
* @param string $time_zone
Expand Down
23 changes: 17 additions & 6 deletions src/TimeZone/Resolver/RequestResolver.php
Expand Up @@ -16,29 +16,40 @@ 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;
}

/**
* @return \DateTimeZone|null
*/
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);
Expand Down

0 comments on commit 569420c

Please sign in to comment.