예제 #1
0
 /**
  * Entity builder: populates the line item title from the purchased entity.
  *
  * @param string $entity_type
  *   The entity type identifier.
  * @param \Drupal\commerce_order\Entity\LineItemInterface $line_item
  *   The line item.
  * @param array $form
  *   The complete form array.
  * @param \Drupal\Core\Form\FormStateInterface $form_state
  *   The current state of the form.
  */
 public static function populateTitle($entity_type, LineItemInterface $line_item, array $form, FormStateInterface $form_state)
 {
     $purchased_entity = $line_item->getPurchasedEntity();
     if ($line_item->isNew() && $purchased_entity) {
         $line_item->setTitle($purchased_entity->getLineItemTitle());
     }
 }
예제 #2
0
 /**
  * {@inheritdoc}
  */
 public function matchAll(LineItemInterface $line_item, array $line_items)
 {
     $purchased_entity = $line_item->getPurchasedEntity();
     if (empty($purchased_entity)) {
         // Don't support combining line items without a purchased entity.
         return [];
     }
     $comparison_fields = ['type', 'purchased_entity'];
     $event = new LineItemComparisonFieldsEvent($comparison_fields, $line_item);
     $this->event_dispatcher->dispatch(CartEvents::LINE_ITEM_COMPARISON_FIELDS, $event);
     $comparison_fields = $event->getComparisonFields();
     $matched_line_items = [];
     /** @var \Drupal\commerce_order\Entity\LineItemInterface $existing_line_item */
     foreach ($line_items as $existing_line_item) {
         foreach ($comparison_fields as $comparison_field) {
             if (!$existing_line_item->hasField($comparison_field) || !$line_item->hasField($comparison_field)) {
                 // The field is missing on one of the line items.
                 continue 2;
             }
             if ($existing_line_item->get($comparison_field)->getValue() !== $line_item->get($comparison_field)->getValue()) {
                 // Line item doesn't match.
                 continue 2;
             }
         }
         $matched_line_items[] = $existing_line_item;
     }
     return $matched_line_items;
 }
예제 #3
0
 /**
  * {@inheritdoc}
  */
 public function addLineItem(OrderInterface $cart, LineItemInterface $line_item, $combine = TRUE, $save_cart = TRUE)
 {
     $purchased_entity = $line_item->getPurchasedEntity();
     $quantity = $line_item->getQuantity();
     $matching_line_item = NULL;
     if ($combine) {
         $matching_line_item = $this->lineItemMatcher->match($line_item, $cart->getLineItems());
     }
     $needs_cart_save = FALSE;
     if ($matching_line_item) {
         $new_quantity = $matching_line_item->getQuantity() + $quantity;
         $matching_line_item->setQuantity($new_quantity);
         $matching_line_item->save();
     } else {
         $line_item->save();
         $cart->addLineItem($line_item);
         $needs_cart_save = TRUE;
     }
     $event = new CartEntityAddEvent($cart, $purchased_entity, $quantity, $line_item);
     $this->eventDispatcher->dispatch(CartEvents::CART_ENTITY_ADD, $event);
     if ($needs_cart_save && $save_cart) {
         $cart->save();
     }
     return $line_item;
 }