/**
  * {@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;
 }
 /**
  * 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());
     }
 }
Exemple #3
0
 /**
  * Gets the index of the given line item.
  *
  * @param \Drupal\commerce_order\Entity\LineItemInterface $line_item
  *   The line item.
  *
  * @return int|bool
  *   The index of the given line item, or FALSE if not found.
  */
 protected function getLineItemIndex(LineItemInterface $line_item)
 {
     $values = $this->get('line_items')->getValue();
     $line_item_ids = array_map(function ($value) {
         return $value['target_id'];
     }, $values);
     return array_search($line_item->id(), $line_item_ids);
 }
Exemple #4
0
 /**
  * {@inheritdoc}
  */
 public function removeLineItem(OrderInterface $cart, LineItemInterface $line_item, $save_cart = TRUE)
 {
     $line_item->delete();
     $cart->removeLineItem($line_item);
     $this->eventDispatcher->dispatch(CartEvents::CART_LINE_ITEM_REMOVE, new CartLineItemRemoveEvent($cart, $line_item));
     if ($save_cart) {
         $cart->save();
     }
 }