session = $session; } /** * @TranslatedRoute("/#product_compare#/") */ public function productCompareAction(Request $request, ProductCompareView $view): Response { $ids = $request->query->all('id'); $ids = Mapping::mapKeys($ids, fn ($k, $v) => [$v, true]); if (findModule(\Modules::JS_SHOP, \Modules::SUB_JS_SHOP_PRODUCTS_COMPARE)) { $view->setProductIds(array_keys($ids)); return $view->getResponse(); } if (!empty($ids)) { // override session with ids from GET parameters $this->session->set(self::SESSION_PRODUCT_COMPARE, (array) $ids); return new RedirectResponse(path('kupshop_productcompare_productcompare_productcompare')); } $products = $this->session->get(self::SESSION_PRODUCT_COMPARE, []); $view->setProductIds(array_keys($products)); return $view->getResponse(); } /** * @TranslatedRoute("/#product_compare#/add/{productId}/", requirements={"productId"="\d+"}) */ public function addProductAction(Request $request, int $productId): Response { $products = $this->session->get(self::SESSION_PRODUCT_COMPARE, []); $products[$productId] = true; $this->session->set(self::SESSION_PRODUCT_COMPARE, $products); if (isAjax()) { return new Response('OK'); } return new RedirectResponse($request->headers->get('referer', '/')); } /** * @TranslatedRoute("/#product_compare#/remove/{productId}/", requirements={"productId"="\d+"}) */ public function removeProductAction(Request $request, int $productId): Response { $products = $this->session->get(self::SESSION_PRODUCT_COMPARE, []); unset($products[$productId]); $this->session->set(self::SESSION_PRODUCT_COMPARE, $products); if (isAjax()) { return new Response('OK'); } return new RedirectResponse($request->headers->get('referer', '/')); } }