From ecb42e906b926901ce1aa1dc858e8ccb07da290f Mon Sep 17 00:00:00 2001 From: Manuel Raynaud Date: Wed, 14 Aug 2013 15:55:06 +0200 Subject: [PATCH] refactor update item eventListener --- core/lib/Thelia/Action/Cart.php | 41 ++++++++----------- .../Thelia/Config/Resources/routing/front.xml | 12 ++++-- .../Controller/Front/CartController.php | 27 ++++++++---- .../Thelia/Core/Template/ParserContext.php | 5 +++ templates/default/cart.html | 2 +- 5 files changed, 50 insertions(+), 37 deletions(-) diff --git a/core/lib/Thelia/Action/Cart.php b/core/lib/Thelia/Action/Cart.php index 6f39c1f72..059bdc92b 100755 --- a/core/lib/Thelia/Action/Cart.php +++ b/core/lib/Thelia/Action/Cart.php @@ -49,7 +49,7 @@ class Cart extends BaseAction implements EventSubscriberInterface * add an article in the current cart * @param \Thelia\Core\Event\CartEvent $event */ - public function addArticle(CartEvent $event) + public function addItem(CartEvent $event) { $cart = $event->cart; @@ -67,7 +67,7 @@ class Cart extends BaseAction implements EventSubscriberInterface ->filterByProductSaleElementsId($productSaleElementsId) ->findOne(); - $this->addItem($cart, $productId, $productSaleElementsId, $quantity, $productPrice); + $this->doAddItem($cart, $productId, $productSaleElementsId, $quantity, $productPrice); } if ($append && $cartItem !== null) { @@ -81,7 +81,7 @@ class Cart extends BaseAction implements EventSubscriberInterface * * @param \Thelia\Core\Event\CartEvent $event */ - public function deleteArticle(CartEvent $event) + public function deleteItem(CartEvent $event) { if (null !== $cartItemId = $event->cartItem) { $cart = $event->cart; @@ -101,25 +101,18 @@ class Cart extends BaseAction implements EventSubscriberInterface * * @param \Thelia\Core\Event\CartEvent $event */ - public function modifyArticle(CartEvent $event) + public function changeItem(CartEvent $event) { - $request = $event->getRequest(); + if ((null !== $cartItemId = $event->cartItem) && (null !== $quantity = $event->quantity)) { + $cart = $event->cart; - if (null !== $cartItemId = $request->get("cartItem") && null !== $quantity = $request->get("quantity")) { - - try { - $cart = $event->getCart($request); - - $cartItem = CartItemQuery::create() - ->filterByCartId($cart->getId()) - ->filterById($cartItemId) - ->findOne(); - - if ($cartItem) { - $this->updateQuantity($cartItem, $quantity); - } - } catch (PropelException $e) { - \Thelia\Log\Tlog::getInstance()->error(sprintf("error during updating cartItem with message : %s", $e->getMessage())); + $cartItem = CartItemQuery::create() + ->filterByCartId($cart->getId()) + ->filterById($cartItemId) + ->findOne(); + + if ($cartItem) { + $this->updateQuantity($cartItem, $quantity); } } } @@ -147,9 +140,9 @@ class Cart extends BaseAction implements EventSubscriberInterface public static function getSubscribedEvents() { return array( - "action.addArticle" => array("addArticle", 128), - "action.deleteArticle" => array("deleteArticle", 128), - "action.changeArticle" => array("modifyArticle", 128), + "action.addArticle" => array("addItem", 128), + "action.deleteArticle" => array("deleteItem", 128), + "action.changeArticle" => array("changeItem", 128), ); } @@ -175,7 +168,7 @@ class Cart extends BaseAction implements EventSubscriberInterface * @param float $quantity * @param ProductPrice $productPrice */ - protected function addItem(\Thelia\Model\Cart $cart, $productId, $productSaleElementsId, $quantity, ProductPrice $productPrice) + protected function doAddItem(\Thelia\Model\Cart $cart, $productId, $productSaleElementsId, $quantity, ProductPrice $productPrice) { $cartItem = new CartItem(); $cartItem->setDisptacher($this->getDispatcher()); diff --git a/core/lib/Thelia/Config/Resources/routing/front.xml b/core/lib/Thelia/Config/Resources/routing/front.xml index ad42d42cf..df08b88da 100644 --- a/core/lib/Thelia/Config/Resources/routing/front.xml +++ b/core/lib/Thelia/Config/Resources/routing/front.xml @@ -20,11 +20,17 @@ - Thelia\Controller\Front\CartController::addArticle + Thelia\Controller\Front\CartController::addItem cart - - Thelia\Controller\Front\CartController::changeArticle + + Thelia\Controller\Front\CartController::deleteItem + cart + + + + Thelia\Controller\Front\CartController::changeItem + cart diff --git a/core/lib/Thelia/Controller/Front/CartController.php b/core/lib/Thelia/Controller/Front/CartController.php index 5606ae412..b5a4f9f77 100644 --- a/core/lib/Thelia/Controller/Front/CartController.php +++ b/core/lib/Thelia/Controller/Front/CartController.php @@ -33,7 +33,7 @@ class CartController extends BaseFrontController { use \Thelia\Cart\CartTrait; - public function addArticle() + public function addItem() { $request = $this->getRequest(); @@ -67,28 +67,37 @@ class CartController extends BaseFrontController } } - public function changeArticle() + public function changeItem() { $cartEvent = $this->getCartEvent(); + $cartEvent->cartItem = $this->getRequest()->get("cart_item"); + $cartEvent->quantity = $this->getRequest()->get("quantity"); - $this->dispatch(TheliaEvents::CART_CHANGEITEM, $cartEvent); + try { + $this->getDispatcher()->dispatch(TheliaEvents::CART_CHANGEITEM, $cartEvent); + + $this->redirectSuccess(); + } catch(PropelException $e) { + $this->getParserContext()->setGeneralError($e->getMessage()); + } - $this->redirectSuccess(); } - public function deleteArticle() + public function deleteItem() { $cartEvent = $this->getCartEvent(); - $cartEvent->cartItem = $this->getRequest()->get("cartItem"); + $cartEvent->cartItem = $this->getRequest()->get("cart_item"); try { $this->getDispatcher()->dispatch(TheliaEvents::CART_DELETEITEM, $cartEvent); - } catch (PropelException $e) - { + + $this->redirectSuccess(); + } catch (PropelException $e) { \Thelia\Log\Tlog::getInstance()->error(sprintf("error during deleting cartItem with message : %s", $e->getMessage())); + $this->getParserContext()->setGeneralError($e->getMessage()); } - $this->redirectSuccess(); + } /** diff --git a/core/lib/Thelia/Core/Template/ParserContext.php b/core/lib/Thelia/Core/Template/ParserContext.php index efdf22280..03c3cf45f 100644 --- a/core/lib/Thelia/Core/Template/ParserContext.php +++ b/core/lib/Thelia/Core/Template/ParserContext.php @@ -58,6 +58,11 @@ class ParserContext implements \IteratorAggregate $this->set('error_form', $form); } + public function setGeneralError($error) + { + $this->set('general_error', $error); + } + public function getErrorForm() { return $this->get('error_form', null); diff --git a/templates/default/cart.html b/templates/default/cart.html index 2413ac957..03ec8e3ee 100644 --- a/templates/default/cart.html +++ b/templates/default/cart.html @@ -3,7 +3,7 @@

{intl l='cart'}