arch-8.x-1.x-dev/modules/price/src/Manager/PriceTypeManager.php

modules/price/src/Manager/PriceTypeManager.php
<?php

namespace Drupal\arch_price\Manager;

use Drupal\arch_price\Entity\PriceType;
use Drupal\arch_price\Entity\PriceTypeInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Price type manager.
 *
 * @package Drupal\arch_price\Manager
 */
class PriceTypeManager implements PriceTypeManagerInterface, ContainerInjectionInterface {

  /**
   * Defined type.
   *
   * @var \Drupal\arch_price\Entity\PriceTypeInterface[]
   */
  protected $types;

  /**
   * Settings.
   *
   * @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
   */
  protected $settings;

  /**
   * Default price type ID.
   *
   * @var string
   */
  protected $defaultPriceType;

  /**
   * Config factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * Module handler.
   *
   * @var \Drupal\Core\Extension\ModuleHandlerInterface
   */
  protected $moduleHandler;

  /**
   * PriceTypeManager constructor.
   *
   * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory
   *   Key value store factory.
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   Config factory.
   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
   *   Module handler.
   */
  public function __construct(
    KeyValueFactoryInterface $key_value_factory,
    ConfigFactoryInterface $config_factory,
    ModuleHandlerInterface $module_handler,
  ) {
    $this->settings = $key_value_factory->get('arch_price.settings');
    $this->configFactory = $config_factory;
    $this->moduleHandler = $module_handler;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('keyvalue'),
      $container->get('config.factory'),
      $container->get('module_handler')
    );
  }

  /**
   * Get default price type.
   *
   * @return \Drupal\arch_price\Entity\PriceTypeInterface
   *   Default price type.
   */
  public function getDefaultPriceType() {
    if (!isset($this->defaultPriceType)) {
      $this->getPriceTypes();
      $default = $this->settings->get('default_price_type', 'default');
      $this->defaultPriceType = !empty($this->types[$default]) ? $default : 'default';
    }
    return $this->types[$this->defaultPriceType];
  }

  /**
   * List of defined price types.
   *
   * @return \Drupal\arch_price\Entity\PriceTypeInterface[]
   *   Price type list.
   */
  public function getPriceTypes() {
    if (!isset($this->types)) {
      $config_ids = $this->configFactory->listAll('arch_price.price_type.');
      foreach ($this->configFactory->loadMultiple($config_ids) as $config) {
        $data = $config->get();
        $types[$data['id']] = PriceType::create($data);
      }

      uasort($types, '\Drupal\arch_price\Entity\PriceType::sort');
      $this->types = $types;
    }
    return $this->types;
  }

  /**
   * {@inheritdoc}
   */
  public function getTypeListForWidget() {
    $skipp_fields = [
      'uuid',
      'langcode',
      'dependencies',
      'locked',
      'status',
      'description',
    ];
    $price_types = [];
    foreach ($this->getPriceTypes() as $price_type) {
      if (!$price_type->status()) {
        continue;
      }

      $type = $price_type->toArray();
      foreach ($skipp_fields as $field) {
        unset($type[$field]);
      }
      $price_types[$price_type->id()] = $type;
    }

    return $price_types;
  }

  /**
   * {@inheritdoc}
   */
  public function getAvailablePriceTypes(AccountInterface $account, $operation = 'view') {
    $price_types = array_filter($this->getPriceTypes(), function (PriceTypeInterface $price_type) use ($account, $operation) {
      $type_access = $price_type->access($operation, $account, TRUE);
      return !$type_access->isForbidden();
    });

    $this->moduleHandler->alter('arch_available_price_types', $price_types, $account, $operation);
    return $price_types;
  }

}

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

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