-<?php
-
-namespace Rapsys\AirBundle\EventSubscriber;
-
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-use Symfony\Component\HttpKernel\Event\ControllerEvent;
-use Symfony\Component\HttpKernel\Event\RequestEvent;
-use Symfony\Component\HttpKernel\Event\ResponseEvent;
-use Symfony\Component\HttpKernel\KernelEvents;
-use Symfony\Component\Routing\RouterInterface;
-
-class FacebookSubscriber implements EventSubscriberInterface {
- ///Supported locales array
- private $locales;
-
- ///Router instance
- private $router;
-
- /*
- * Inject router interface and locales
- *
- * @param RouterInterface $router The router instance
- * @param array $locales The supported locales
- */
- public function __construct(RouterInterface $router, array $locales) {
- //Set locales
- $this->locales = $locales;
-
- //Set router
- $this->router = $router;
- }
-
- /**
- * Change locale for request with ?fb_locale=xx
- *
- * @param RequestEvent The request event
- */
- public function onKernelRequest(RequestEvent $event) {
- //Retrieve request
- $request = $event->getRequest();
-
- //Check for facebook locale
- if (
- $request->query->has('fb_locale') &&
- in_array($preferred = $request->query->get('fb_locale'), $this->locales)
- ) {
- //Set locale
- $request->setLocale($preferred);
-
- //Set default locale
- $request->setDefaultLocale($preferred);
-
- //Get router context
- $context = $this->router->getContext();
-
- //Set context locale
- $context->setParameter('_locale', $preferred);
-
- //Set back router context
- $this->router->setContext($context);
- }
- }
-
- /**
- * Get subscribed events
- *
- * @return array The subscribed events
- */
- public static function getSubscribedEvents() {
- return [
- // must be registered before the default locale listener
- KernelEvents::REQUEST => [['onKernelRequest', 10]]
- ];
- }
-}