/** * {@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()); } }
/** * 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); }
/** * {@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(); } }