Linux SRV-16 6.18.44-paas #1 SMP PREEMPT_DYNAMIC Thu Aug 13 10:08:12 UTC 2026 x86_64
/
proc
/
212
/
root
/
proc
/
self
/
root
/
proc
/
212
/
root
/
proc
/
70528
/
cwd
/
src
/
Controller
/
front
/
//proc/212/root/proc/self/root/proc/212/root/proc/70528/cwd/src/Controller/front/CartController.php
<?php namespace App\Controller\front; use App\Entity\Cart; use App\Entity\User; use App\Entity\Guest; use App\Form\UserType; use App\Entity\Command; use App\Form\GuestType; use App\Form\CommandType; use App\Service\CartService; use App\Service\MailerService; use App\Service\StripeService; use App\Repository\CartRepository; use App\Repository\UserRepository; use App\Repository\GuestRepository; use App\Security\UserAuthenticator; use App\Repository\CartItemRepository; use Doctrine\Persistence\ManagerRegistry; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\Mailer\Transport\TransportInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Security\Http\Authentication\AuthenticationUtils; use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface; /** * @Route("/panier") */ class CartController extends AbstractController { public const DELIVERY_COST = 20; /** * @Route("", name="app_cart_read") */ public function cart(UserRepository $userRepository, ManagerRegistry $doctrine, Session $session, CartRepository $cartRepository): Response { $session->set("old-session-id", $session->getId()); $cart = $cartRepository->findOneBy(["sessionToken" => $session->getId()]); if (!$cart) { $em = $doctrine->getManager(); if ($cartRepository->findOneBy(["sessionToken" => $session->get("old-session-id"), "payementStatus" => "to_be_started"])) { $cart = $cartRepository->findOneBy(["sessionToken" => $session->get("old-session-id"), "payementStatus" => "to_be_started"]); $cart->setSessionToken($session->getId()); $session->remove("old-session-id"); $em->persist($cart); $em->flush(); } else { $cart = new Cart(); $cart->setUser($this->getUser()); $cart->setSessionToken($session->getId()); $session->remove("old-session-id"); $em->persist($cart); $em->flush(); } } else { if ($cart->getStep() === "identify") { return $this->redirectToRoute("app_cart_identify"); } else if ($cart->getStep() === "delivery") { return $this->redirectToRoute("app_cart_payement_method"); } } return $this->render("front/cart/read.html.twig", [ "cart" => $cart ]); } /** * @Route("/item/{id}/delete", name="app_cart_item_delete") */ public function deleteCartItem($id, CartItemRepository $cartItemRepository, ManagerRegistry $doctrine) { $item = $cartItemRepository->find($id); $em = $doctrine->getManager(); $em->remove($item); $em->flush(); $this->addFlash("success", "Article supprimé du panier."); return $this->redirectToRoute("app_cart_read"); } /** * @Route("/{id}/modifier-quantite/{quantity}", name="app_cart_item_modify_quantity") */ public function modifyItemQuantity($id, CartItemRepository $cartItemRepository, $quantity, ManagerRegistry $doctrine, UserRepository $userRepository, Session $session, CartRepository $cartRepository) { $item = $cartItemRepository->find($id); $item->setSelfQuantity($quantity); $em = $doctrine->getManager(); $em->persist($item); $em->flush(); $cart = $cartRepository->findOneBy(["sessionToken" => $session->getId(), "payementStatus" => "to_be_started"]); if (!$cart) { $cart = $cartRepository->findOneBy(["sessionToken" => $session->get("old-session-id"), "payementStatus" => "to_be_started"]); } $price = 0; foreach ($cart->getItems() as $item) { $price += ($item->getPrice()->getPrice() * 1.2) * $item->getSelfQuantity(); } $em = $doctrine->getManager(); $cart->setPrice($price); $em->persist($cart); $em->flush(); return $this->json($price); } /** * @Route("/identification", name="app_cart_identify") */ public function identify(Request $request, AuthenticationUtils $authenticationUtils, ManagerRegistry $doctrine, UserPasswordHasherInterface $hasher, UserAuthenticator $formAuthenticator, UserAuthenticatorInterface $authenticator, Session $session, UserRepository $userRepository, CartRepository $cartRepository) { if ($session->get("sessionId") == null) $session->set("sessionId", $session->getId()); if ($this->getUser()) { /* $user = $userRepository->find($this->getUser()->getId()); $em = $doctrine->getManager(); $cartService = new CartService($user, $doctrine, $session); $cart = $cartRepository->findOneBy(["user" => $this->getUser()->getId(), "payementStatus" => "to_be_started"], ["id" => "DESC"]); if (!$cart) { $cart = $cart = $cartRepository->findOneBy(["sessionToken" => $session->get("sessionId"), "payementStatus" => "to_be_started", "step" => "cart"], ["id" => "DESC"]); } if ($cart->getStep() !== "identify") { $cart->setUser($this->getUser()); $cart->setStep("identify"); $em->persist($cart); $oldCarts = $cartRepository->findOldUserCarts($user, $cart); foreach ($oldCarts as $cart) { $cart->setStep("aborted"); $cart->setPayementStatus("aborted"); $em->persist($cart); } $em->flush(); } */ $em = $doctrine->getManager(); $cart = $cartRepository->findOneBy(["sessionToken" => $session->getId(), "payementStatus" => "to_be_started"]); if (!$cart) { $cart = $cartRepository->findOneBy(["sessionToken" => $session->get("old-session-id"), "payementStatus" => "to_be_started"]); $cart->setSessionToken($session->getId()); $session->remove("old-session-id"); } $cart->setUser($this->getUser()); $cart->setStep("identify"); $em->persist($cart); $em->flush(); return $this->redirectToRoute("app_cart_delivery"); } $user = new User(); $form = $this->createForm(UserType::class, $user); $form->handleRequest($request); $user->setRoles(["ROLE_USER"]); if ($form->isSubmitted() && $form->isValid()) { $plainPassword = $user->getPassword(); $password = $hasher->hashPassword($user, $plainPassword); $user->setPassword($password); $em = $doctrine->getManager(); $em->persist($user); $authenticator->authenticateUser( $user, $formAuthenticator, $request ); $cart = $cartRepository->findOneBy(["sessionToken" => $session->getId(), "payementStatus" => "to_be_started"]); if (!$cart) { $cart = $cartRepository->findOneBy(["sessionToken" => $session->get("old-session-id"), "payementStatus" => "to_be_started"]); $cart->setSessionToken($session->getId()); $session->remove("old-session-id"); } $cart->setUser($user); $cart->setStep("identify"); $em->persist($cart); $em->flush(); return $this->redirectToRoute("app_cart_delivery"); } $guest = new Guest(); $guestForm = $this->createForm(GuestType::class, $guest); $guestForm->handleRequest($request); if ($guestForm->isSubmitted() && $guestForm->isValid()) { $user = null; $cart = $cartRepository->findOneBy(["sessionToken" => $session->getId(), "payementStatus" => "to_be_started"]); $em = $doctrine->getManager(); $cart->setStep("identify"); $em->persist($guest); $em->persist($cart); $em->flush(); $session->set("guest", $guest->getId()); return $this->redirectToRoute("app_cart_delivery"); } $error = $authenticationUtils->getLastAuthenticationError(); return $this->render("front/cart/identification.html.twig", [ "error" => $error, "guest_form" => $guestForm->createView(), "form" => $form->createView() ]); } /** * @Route("/livraison", name="app_cart_delivery") */ public function delivery(Session $session, GuestRepository $guestRepository, Request $request, ManagerRegistry $doctrine, UserRepository $userRepository, CartRepository $cartRepository) { if ($this->getUser()) { /** @var User */ $user = $this->getUser(); $user = $userRepository->find($user->getId()); } else { $user = null; $guest = $session->get("guest"); $guest = $guestRepository->find($guest); } /* $cartService = new CartService($user, $doctrine, $session); $cart = $cartService->getIdentifyCart(); */ $cart = $cartRepository->findOneBy(["sessionToken" => $session->getId(), "payementStatus" => "to_be_started"]); if (!$cart) return $this->redirectToRoute("app_cart_read"); if (!$cart->getCommand()) $command = new Command(); else $command = $cart->getCommand(); $form = $this->createForm(CommandType::class, $command); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em = $doctrine->getManager(); if ($user) $command->setUser($user); else $command->setGuest($guest); $command->setCart($cart); $cart->setStep("delivery"); $cart->setPayementStatus("initiated"); $em->persist($cart); $em->persist($command); $em->flush(); return $this->redirectToRoute("app_cart_payement_method"); } return $this->render("front/cart/delivery.html.twig", [ "form" => $form->createView(), "cart" => $cart ]); } /** * @Route("/payement/methode", name="app_cart_payement_method") */ public function payementMethod(Session $session, ManagerRegistry $doctrine, UserRepository $userRepository, RouterInterface $router, Request $request, CartRepository $cartRepository) { $cart = $cartRepository->findOneBy(["sessionToken" => $session->getId()]); if (!$cart) return $this->redirectToRoute("app_cart_read"); $names = ""; $descriptions = ""; $items = $cart->getItems(); for ($i = 0; $i < count($items); $i++) { $names .= $items[$i]->getProduct()->getName(); $descriptions .= $items[$i]->getProduct()->getDescription(); if ($i < count($items) - 1) { $names .= ", "; $descriptions .= ", "; } } $base = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath(); $token = urlencode(hash("sha512", rand(), false)); $session->set("token", $token); $successUrl = $base . $router->generate("app_payement_success") . "?token=" . $token; $cancelUrl = $base . $router->generate("app_payement_cancel"); $delivery = 0; if ($cart->getCommand()->getDeliveryMode() === "Livraison standard") { $delivery = ($cart->getPrice() < 300) ? self::DELIVERY_COST : 0; } $price = 0; foreach ($cart->getItems() as $item) { $price += ($item->getPrice()->getPrice()) * $item->getSelfQuantity(); } $cart->setPrice($price); $totalPrice = $cart->getPrice() + $delivery; $data = [ "name" => $names, "description" => $descriptions, "amount" => (int) round($totalPrice * 100 + $cart->getPrice() * 0.2 * 100), "success_url" => $successUrl, "cancel_url" => $cancelUrl, "cart_id" => $cart->getId() ]; $stripeService = new StripeService($this->getParameter("conf_sk_stripe")); $session = $stripeService->checkout($data); return $this->render("front/cart/payement-method.html.twig", [ "cart" => $cart, "session" => $session, "totalPrice" => $totalPrice, ]); } /** * @Route("/{id}/continuer-achats", name="front_continue_purchases") */ public function continuePurchases(Cart $cart, ManagerRegistry $doctrine) { $cart->setStep("cart"); $cart->setPayementStatus("to_be_started"); $em = $doctrine->getManager(); $em->persist($cart); $em->flush(); return $this->redirectToRoute("app_product_list"); } /** * @Route("/{id}/prix", name="app_cart_price") */ public function getCartPrice($id, CartRepository $cartRepository) { $cart = $cartRepository->find($id); if (!$cart) { return $this->json("no cart", 404); } $price = 0; $delivery = 0; $tva = 0; foreach ($cart->getItems() as $product) { $price += $product->getPrice()->getPrice(); } if ($price < 300) { $delivery = self::DELIVERY_COST; } $tva = $price * 0.2; return $this->json(["price" => $price, "tva" => $tva, "delivery" => $delivery], 200); } }