Hello tout le monde!
J'ai développé un module qui permet de restreindre l'achat de certains produits selon le type de client (je vous passe les détails).
Tout fonctionne correctement :
- le formulaire d'ajout au panier ne s'affiche pas si le client n'a pas les droits.
- si le client s'amuse à modifier le formulaire en mettant l'ID d'un produit restreint alors qu'il n'a pas les droits, ça ne s'ajoute pas au panier (vérifié via CART_ADDITEM).
Par contre, si un client ajoute des produits restreints à son panier (il a les droits) qu'il se déconnecte et se re-connecte avec un compte qui n'a pas les droits, il faudrait que ça supprime les produits restreints du panier.
J'ai essayé de le faire via :
- CUSTOMER_LOGIN (en 64)
- CUSTOMER_LOGOUT (en 256)
Mais ça ne marche pas.
Pour CUSTOMER_LOGOUT, je force (dans le code) le customer à null : ça supprime bien du panier mais ma redirection prend le dessus sur la déconnexion :
public function checkProducts($logout=false)
{
$redirect = false;
$cart = $this->request->getSession()->getSessionCart();
if(null != $cart){
$cartItems = $cart->getCartItems();
foreach ($cartItems as $cartItem) {
$itemId = $cartItem->getId();
$product = $cartItem->getProduct();
$canBuy = $this->checkRestriction($product,$logout);
if(!$canBuy){
$redirect = true;
CartItemQuery::create()
->filterByCartId($cart->getId())
->filterById($itemId)
->delete();
$cart->clearCartItems();
}
}
if($redirect){
throw new RedirectException(URL::getInstance()->absoluteUrl("/cart", ["restriction_error"=>1]));
}
}
}
Je peux toujours supprimer la redirection à ce niveau, s'il n'y a pas d'autre solution.
Pour CUSTOMER_LOGIN, j'obtiens cette erreur :
Désolé. Une erreur s'est produite : In this context (no cart in session), an EventDispatcher should be provided to Session::getSessionCart().
Une idée pour améliorer ça ?
Sinon il faudrait que je laisse comme ça mais que je vérifie le panier AVANT le passage de commande ?
Last edited by Elyos (12-04-2024 10:08:35)