commerce_product_bundles-8.x-1.0/src/Service/ProductBundleVariationFieldManager.php

src/Service/ProductBundleVariationFieldManager.php
<?php

namespace Drupal\commerce_product_bundles\Service;

use Drupal\commerce_product\Entity\ProductInterface;
use Drupal\commerce_product_bundles\Entity\ProductBundleVariationInterface;

/**
 * Class ProductBundleVariationFieldManager
 *
 * @package Drupal\commerce_product_bundles\Service
 *
 */
class ProductBundleVariationFieldManager implements ProductBundleVariationFieldManagerInterface {

  /**
   * {@inheritdoc}
   */
  public function prepareBundleVariations(ProductBundleVariationInterface $selected_bundle_variation, $check_access = TRUE, $account = NULL) {
    $products = [];

    $bundle_ref_eck = $this->getBundleValues($selected_bundle_variation);

    foreach ($bundle_ref_eck as $key_ref => $val) {
      $definition = [
        'quantity' => $val['quantity'],
        'ref_variations' => $val['variation_ids'],
        'ref_product' => $val['product_id']
      ];

      // Do not construct object if we do not have required values!
      if(!empty($definition['ref_variations']) && !empty($definition['ref_product'])) {
        $ref_product_eck = new ProductBundleVariationReference($definition);

        if($ref_product_eck->getRefProduct(FALSE, $check_access, $account) instanceof ProductInterface) {
          // Add unique key so we can differ between same product with same/diff PV.
          $products[$val['product_id'] . '__' . $key_ref] = $ref_product_eck;
        }
      }
    }

    return $products;
  }

  /**
   * Gets the product bundle variation ref. PV.
   *
   * @param \Drupal\commerce_product_bundles\Entity\ProductBundleVariationInterface $bundle_variation
   *
   * @return array
   */
  protected function getBundleValues(ProductBundleVariationInterface $bundle_variation) {
    $values = [];
    $variation_values = $bundle_variation->getProductVariations();
    foreach ($variation_values as $key => $value) {
      $values[] = [
        'product_id' => $value['product_id'],
        'variation_ids' => $value['variation_ids'],
        'quantity' => $value['quantity']
      ];
    }

    return $values;
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc