commerce_product_bundles-8.x-1.0/src/Plugin/Commerce/Condition/ProductBundleTrait.php
src/Plugin/Commerce/Condition/ProductBundleTrait.php
<?php namespace Drupal\commerce_product_bundles\Plugin\Commerce\Condition; use Drupal\Core\Form\FormStateInterface; /** * Provides common configuration for the product bundle conditions. * * Code was taken from and modified: * @see \Drupal\commerce_product\Plugin\Commerce\Condition\ProductTrait */ trait ProductBundleTrait { /** * The product bundle storage. * * @var \Drupal\Core\Entity\EntityStorageInterface */ protected $productBundleStorage; /** * The entity UUID mapper. * * @var \Drupal\commerce\EntityUuidMapperInterface */ protected $entityUuidMapper; /** * {@inheritdoc} */ public function defaultConfiguration() { return [ 'product_bundles' => [], ] + parent::defaultConfiguration(); } /** * {@inheritdoc} */ public function buildConfigurationForm(array $form, FormStateInterface $form_state) { $form = parent::buildConfigurationForm($form, $form_state); $product_bundles = NULL; $product_bundle_ids = $this->getProductBundleIds(); if (!empty($product_bundle_ids)) { $product_bundles = $this->productBundleStorage->loadMultiple($product_bundle_ids); } $form['product_bundles'] = [ '#type' => 'entity_autocomplete', '#title' => $this->t('Product Bundles'), '#default_value' => $product_bundles, '#target_type' => 'commerce_product_bundles', '#tags' => TRUE, '#required' => TRUE, '#maxlength' => NULL, ]; return $form; } /** * {@inheritdoc} * * @see \Drupal\commerce_product\Plugin\Commerce\Condition\ProductTrait::submitConfigurationForm() */ public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { parent::submitConfigurationForm($form, $form_state); // Convert selected IDs into UUIDs, and store them. $values = $form_state->getValue($form['#parents']); $product_bundle_ids = array_column($values['product_bundles'], 'target_id'); $product_bundle_uuids = $this->entityUuidMapper->mapFromIds('commerce_product_bundles', $product_bundle_ids); $this->configuration['product_bundles'] = []; foreach ($product_bundle_uuids as $uuid) { $this->configuration['product_bundles'][] = [ 'product_bundle' => $uuid, ]; } } /** * Gets the configured product bundle IDs. * * @return array * The product IDs. * * @see \Drupal\commerce_product\Plugin\Commerce\Condition\ProductTrait::getProductIds() */ protected function getProductBundleIds() { $product_ids = array_column($this->configuration['product_bundles'], 'product_bundle_id'); if (!empty($product_ids)) { // Legacy configuration found, with explicit product IDs. return $product_ids; } else { // Map the UUIDs. $product_uuids = array_column($this->configuration['product_bundles'], 'product_bundle'); return $this->entityUuidMapper->mapToIds('commerce_product_bundles', $product_uuids); } } }