diff --git a/core/lib/Thelia/Cart/CartTrait.php b/core/lib/Thelia/Cart/CartTrait.php
index 26075dc75..5c60f0afa 100644
--- a/core/lib/Thelia/Cart/CartTrait.php
+++ b/core/lib/Thelia/Cart/CartTrait.php
@@ -97,7 +97,7 @@ trait CartTrait
protected function createCart(Session $session)
{
$cart = new CartModel();
- $cart->setToken($this->generateCookie());
+ $cart->setToken($this->generateCookie($session));
if (null !== $customer = $session->getCustomerUser()) {
$cart->setCustomer($customer);
@@ -120,7 +120,7 @@ trait CartTrait
*/
protected function duplicateCart(EventDispatcherInterface $dispatcher, CartModel $cart, Session $session, Customer $customer = null)
{
- $newCart = $cart->duplicate($this->generateCookie(), $customer, $dispatcher);
+ $newCart = $cart->duplicate($this->generateCookie($session), $customer, $dispatcher);
$session->setCart($newCart->getId());
$cartEvent = new CartEvent($newCart);
@@ -130,11 +130,13 @@ trait CartTrait
return $cartEvent->getCart();
}
- protected function generateCookie()
+ protected function generateCookie(Session $session)
{
$id = null;
if (ConfigQuery::read("cart.session_only", 0) == 0) {
$id = uniqid('', true);
+ $session->set('cart_use_cookie', $id);
+
setcookie(
"thelia_cart",
$id,
diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml
index 9657f80e0..614364294 100644
--- a/core/lib/Thelia/Config/Resources/config.xml
+++ b/core/lib/Thelia/Config/Resources/config.xml
@@ -96,6 +96,10 @@
+
+
+
+
diff --git a/core/lib/Thelia/Core/EventListener/ResponseListener.php b/core/lib/Thelia/Core/EventListener/ResponseListener.php
new file mode 100644
index 000000000..de14189fc
--- /dev/null
+++ b/core/lib/Thelia/Core/EventListener/ResponseListener.php
@@ -0,0 +1,84 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Core\EventListener;
+
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\HttpFoundation\Cookie;
+use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
+use Symfony\Component\HttpKernel\KernelEvents;
+use Thelia\Model\ConfigQuery;
+
+
+/**
+ * Class ResponseListener
+ * @package Thelia\Core\EventListener
+ * @author Manuel Raynaud
+ */
+class ResponseListener implements EventSubscriberInterface
+{
+
+ public function beforeResponse(FilterResponseEvent $event)
+ {
+ $session = $event->getRequest()->getSession();
+
+ if (null !== $id = $session->get("cart_use_cookie")) {
+ $response = $event->getResponse();
+ $response->headers->setCookie(new Cookie(
+ "thelia_cart",
+ $id,
+ time()+ConfigQuery::read("cart.cookie_lifetime", 60*60*24*365),
+ '/'
+ ));
+
+ $session->set("cart_use_cookie", null);
+ }
+ }
+
+ /**
+ * Returns an array of event names this subscriber wants to listen to.
+ *
+ * The array keys are event names and the value can be:
+ *
+ * * The method name to call (priority defaults to 0)
+ * * An array composed of the method name to call and the priority
+ * * An array of arrays composed of the method names to call and respective
+ * priorities, or 0 if unset
+ *
+ * For instance:
+ *
+ * * array('eventName' => 'methodName')
+ * * array('eventName' => array('methodName', $priority))
+ * * array('eventName' => array(array('methodName1', $priority), array('methodName2'))
+ *
+ * @return array The event names to listen to
+ *
+ * @api
+ */
+ public static function getSubscribedEvents()
+ {
+ return [
+ KernelEvents::RESPONSE => ['beforeResponse', 128]
+ ];
+ }
+}
\ No newline at end of file
diff --git a/local/modules/Klikandpay b/local/modules/Klikandpay
index 15cc539db..a72c066e7 160000
--- a/local/modules/Klikandpay
+++ b/local/modules/Klikandpay
@@ -1 +1 @@
-Subproject commit 15cc539db98eebd675538e6c35a92a3ca749195c
+Subproject commit a72c066e7400d2350dca24016a302582cb7e7b62