From 20dbe2f8c1f87f785405e4bb7c2296259ea1dbaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Chans=C3=A9aume?= Date: Fri, 1 Aug 2014 10:30:22 +0200 Subject: [PATCH 1/5] Saves previous url in session, to be used by navigate (to previous) function --- core/lib/Thelia/Core/TheliaHttpKernel.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/core/lib/Thelia/Core/TheliaHttpKernel.php b/core/lib/Thelia/Core/TheliaHttpKernel.php index a17e90484..e89e07765 100644 --- a/core/lib/Thelia/Core/TheliaHttpKernel.php +++ b/core/lib/Thelia/Core/TheliaHttpKernel.php @@ -25,6 +25,7 @@ use Thelia\Core\Event\Currency\CurrencyChangeEvent; use Thelia\Core\Event\SessionEvent; use Thelia\Core\Event\TheliaEvents; use Thelia\Model; +use Thelia\Model\ConfigQuery; /** * @@ -215,6 +216,23 @@ class TheliaHttpKernel extends HttpKernel $session->start(); $request->setSession($session); + // set previous URL + if (null !== $referer = $request->headers->get('referer')){ + if (Model\ConfigQuery::read("one_domain_foreach_lang", false) == 1) { + $components = parse_url($referer); + $lang = Model\LangQuery::create() + ->filterByUrl(sprintf("%s://%s", $components["scheme"], $components["host"]), ModelCriteria::LIKE) + ->findOne(); + if (null !== $lang) { + $session->setReturnToUrl($referer); + } + } else { + if ( false !== strpos($referer, $request->getSchemeAndHttpHost())){ + $session->setReturnToUrl($referer); + } + } + } + return $request; } } From 3c30d0a767c64eddd6c745378c8a4d87cb287a4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Chans=C3=A9aume?= Date: Fri, 1 Aug 2014 10:52:49 +0200 Subject: [PATCH 2/5] php cs fixer --- core/lib/Thelia/Core/TheliaHttpKernel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/lib/Thelia/Core/TheliaHttpKernel.php b/core/lib/Thelia/Core/TheliaHttpKernel.php index e89e07765..e6b8647eb 100644 --- a/core/lib/Thelia/Core/TheliaHttpKernel.php +++ b/core/lib/Thelia/Core/TheliaHttpKernel.php @@ -217,7 +217,7 @@ class TheliaHttpKernel extends HttpKernel $request->setSession($session); // set previous URL - if (null !== $referer = $request->headers->get('referer')){ + if (null !== $referer = $request->headers->get('referer')) { if (Model\ConfigQuery::read("one_domain_foreach_lang", false) == 1) { $components = parse_url($referer); $lang = Model\LangQuery::create() @@ -227,7 +227,7 @@ class TheliaHttpKernel extends HttpKernel $session->setReturnToUrl($referer); } } else { - if ( false !== strpos($referer, $request->getSchemeAndHttpHost())){ + if ( false !== strpos($referer, $request->getSchemeAndHttpHost())) { $session->setReturnToUrl($referer); } } From 3699fb0c10e90f29386163c894423f53390b34fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Chans=C3=A9aume?= Date: Fri, 1 Aug 2014 10:58:25 +0200 Subject: [PATCH 3/5] fixed import --- core/lib/Thelia/Core/TheliaHttpKernel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/lib/Thelia/Core/TheliaHttpKernel.php b/core/lib/Thelia/Core/TheliaHttpKernel.php index e6b8647eb..72b7e7e70 100644 --- a/core/lib/Thelia/Core/TheliaHttpKernel.php +++ b/core/lib/Thelia/Core/TheliaHttpKernel.php @@ -25,7 +25,7 @@ use Thelia\Core\Event\Currency\CurrencyChangeEvent; use Thelia\Core\Event\SessionEvent; use Thelia\Core\Event\TheliaEvents; use Thelia\Model; -use Thelia\Model\ConfigQuery; + /** * From b4e60ba69c9e253cd6b40d08ac695d3392ae0a54 Mon Sep 17 00:00:00 2001 From: Julien Chanseaume Date: Fri, 8 Aug 2014 10:28:45 +0200 Subject: [PATCH 4/5] Use of the kernel.request event --- .../Core/EventListener/RequestListener.php | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/core/lib/Thelia/Core/EventListener/RequestListener.php b/core/lib/Thelia/Core/EventListener/RequestListener.php index fff731301..064b6c21e 100644 --- a/core/lib/Thelia/Core/EventListener/RequestListener.php +++ b/core/lib/Thelia/Core/EventListener/RequestListener.php @@ -15,6 +15,8 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; use Thelia\Core\Translation\Translator; +use Thelia\Model\ConfigQuery; +use Thelia\Model\LangQuery; /** * Class RequestListener @@ -53,6 +55,43 @@ class RequestListener implements EventSubscriberInterface ); } + /** + * Save the previous URL in session which is based on the referer header of the request + * + * @param GetResponseEvent $event + */ + public function registerPreviousUrl(GetResponseEvent $event) + { + + $request = $event->getRequest(); + + // set previous URL + if (null !== $referer = $request->headers->get('referer')) { + + $session = $request->getSession(); + + if (ConfigQuery::read("one_domain_foreach_lang", false) == 1) { + + $components = parse_url($referer); + $lang = LangQuery::create() + ->filterByUrl(sprintf("%s://%s", $components["scheme"], $components["host"]), ModelCriteria::LIKE) + ->findOne(); + + if (null !== $lang) { + $session->setReturnToUrl($referer); + } + + } else { + + if ( false !== strpos($referer, $request->getSchemeAndHttpHost())) { + $session->setReturnToUrl($referer); + } + + } + } + + } + /** * Returns an array of event names this subscriber wants to listen to. * @@ -76,7 +115,10 @@ class RequestListener implements EventSubscriberInterface public static function getSubscribedEvents() { return array( - KernelEvents::REQUEST => array("registerValidatorTranslator", 128) + KernelEvents::REQUEST => array( + array("registerValidatorTranslator", 128), + array("registerPreviousUrl", 128) + ) ); } } From 77b341b770705a0694fc70859d49d63979481c36 Mon Sep 17 00:00:00 2001 From: Julien Chanseaume Date: Fri, 8 Aug 2014 10:32:49 +0200 Subject: [PATCH 5/5] Removed old code. --- core/lib/Thelia/Core/TheliaHttpKernel.php | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/core/lib/Thelia/Core/TheliaHttpKernel.php b/core/lib/Thelia/Core/TheliaHttpKernel.php index 72b7e7e70..a17e90484 100644 --- a/core/lib/Thelia/Core/TheliaHttpKernel.php +++ b/core/lib/Thelia/Core/TheliaHttpKernel.php @@ -26,7 +26,6 @@ use Thelia\Core\Event\SessionEvent; use Thelia\Core\Event\TheliaEvents; use Thelia\Model; - /** * * @author Manuel Raynaud @@ -216,23 +215,6 @@ class TheliaHttpKernel extends HttpKernel $session->start(); $request->setSession($session); - // set previous URL - if (null !== $referer = $request->headers->get('referer')) { - if (Model\ConfigQuery::read("one_domain_foreach_lang", false) == 1) { - $components = parse_url($referer); - $lang = Model\LangQuery::create() - ->filterByUrl(sprintf("%s://%s", $components["scheme"], $components["host"]), ModelCriteria::LIKE) - ->findOne(); - if (null !== $lang) { - $session->setReturnToUrl($referer); - } - } else { - if ( false !== strpos($referer, $request->getSchemeAndHttpHost())) { - $session->setReturnToUrl($referer); - } - } - } - return $request; } }