From bd3ebba95714981ebbc452b81f28fba4963f46e3 Mon Sep 17 00:00:00 2001 From: GoZ Date: Wed, 1 Feb 2017 15:28:03 +0100 Subject: [PATCH 1/3] Issue #2846890: Create a log entry when item is removed from cart or qty is changed programatically --- .../commerce_log.commerce_log_templates.yml | 4 ++++ .../EventSubscriber/CartEventSubscriber.php | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/modules/log/commerce_log.commerce_log_templates.yml b/modules/log/commerce_log.commerce_log_templates.yml index 13dc722d95..bd3a6d3d87 100644 --- a/modules/log/commerce_log.commerce_log_templates.yml +++ b/modules/log/commerce_log.commerce_log_templates.yml @@ -6,6 +6,10 @@ cart_item_removed: category: commerce_cart label: 'Removed from cart' template: '

{{ purchased_entity_label }} removed from the cart.

' +cart_item_quantity_changed: + category: commerce_cart + label: 'Quantity changed from cart' + template: '

Quantity for {{ purchased_entity_label }} changed in the cart form {{ original_quantity }} to {{ quantity }}.

' order_placed: category: commerce_order diff --git a/modules/log/src/EventSubscriber/CartEventSubscriber.php b/modules/log/src/EventSubscriber/CartEventSubscriber.php index f95e7bd30e..3d8af3075b 100644 --- a/modules/log/src/EventSubscriber/CartEventSubscriber.php +++ b/modules/log/src/EventSubscriber/CartEventSubscriber.php @@ -5,6 +5,7 @@ use Drupal\commerce_cart\Event\CartEntityAddEvent; use Drupal\commerce_cart\Event\CartEvents; use Drupal\commerce_cart\Event\CartOrderItemRemoveEvent; +use Drupal\commerce_cart\Event\CartOrderItemUpdateEvent; use Drupal\Core\Entity\EntityTypeManagerInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -34,6 +35,7 @@ public static function getSubscribedEvents() { $events = [ CartEvents::CART_ENTITY_ADD => ['onCartEntityAdd', -100], CartEvents::CART_ORDER_ITEM_REMOVE => ['onCartOrderItemRemove', -100], + CartEvents::CART_ORDER_ITEM_UPDATE => ['onCartOrderItemUpdate', -100], ]; return $events; } @@ -66,4 +68,21 @@ public function onCartOrderItemRemove(CartOrderItemRemoveEvent $event) { ])->save(); } + /** + * Creates a log when a quantity is updated. + * + * @param \Drupal\commerce_cart\Event\CartOrderItemUpdateEvent $event + * The transition event. + */ + public function onCartOrderItemUpdate(CartOrderItemUpdateEvent $event) { + $cart = $event->getCart(); + $order_item = $event->getOrderItem(); + $original_order_item = $event->getOriginalOrderItem(); + $this->logStorage->generate($cart, 'cart_item_quantity_changed', [ + 'purchased_entity_label' => $order_item->getPurchasedEntity()->label(), + 'original_quantity' => $original_order_item->getQuantity(), + 'quantity' => $order_item->getQuantity(), + ])->save(); + } + } From 825a937791cde28a8fec7e4948f51c8389ed06c8 Mon Sep 17 00:00:00 2001 From: GoZ Date: Wed, 1 Feb 2017 19:45:24 +0100 Subject: [PATCH 2/3] Fix template log wording --- modules/log/commerce_log.commerce_log_templates.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/log/commerce_log.commerce_log_templates.yml b/modules/log/commerce_log.commerce_log_templates.yml index bd3a6d3d87..37fd1443ab 100644 --- a/modules/log/commerce_log.commerce_log_templates.yml +++ b/modules/log/commerce_log.commerce_log_templates.yml @@ -9,7 +9,7 @@ cart_item_removed: cart_item_quantity_changed: category: commerce_cart label: 'Quantity changed from cart' - template: '

Quantity for {{ purchased_entity_label }} changed in the cart form {{ original_quantity }} to {{ quantity }}.

' + template: '

Quantity of {{ purchased_entity_label }} changed in the cart from {{ original_quantity }} to {{ quantity }}.

' order_placed: category: commerce_order From 9cbe2dff3748d2c2c7e683173062b2eb02884a17 Mon Sep 17 00:00:00 2001 From: GoZ Date: Fri, 3 Feb 2017 14:54:57 +0100 Subject: [PATCH 3/3] Add tests logging quantity cart update --- .../tests/src/Kernel/CartIntegrationTest.php | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/log/tests/src/Kernel/CartIntegrationTest.php b/modules/log/tests/src/Kernel/CartIntegrationTest.php index cc760e1859..ea4da3e93a 100644 --- a/modules/log/tests/src/Kernel/CartIntegrationTest.php +++ b/modules/log/tests/src/Kernel/CartIntegrationTest.php @@ -63,7 +63,6 @@ class CartIntegrationTest extends CommerceKernelTestBase { 'commerce_log', 'commerce_product', 'commerce_order', - 'commerce_test', ]; /** @@ -141,6 +140,24 @@ public function testRemovedFromCart() { $this->assertText("{$this->variation->label()} removed from the cart."); } + /** + * Tests that a log is generated when a quantity changed for an order item. + */ + public function testQuantityChangedFromCart() { + $this->enableCommerceCart(); + $cart = $this->cartProvider->createCart('default', $this->store, $this->createUser()); + $order_item = $this->cartManager->addEntity($cart, $this->variation); + $order_item->setQuantity(2); + $this->cartManager->updateOrderItem($cart, $order_item); + + $logs = $this->logStorage->loadByEntity($cart); + $log = end($logs); + $build = $this->logViewBuilder->view($log); + $this->render($build); + + $this->assertText("Quantity of {$this->variation->label()} changed in the cart from 1.0 to 2."); + } + /** * Enables commerce_cart for tests. *