arch-8.x-1.x-dev/modules/stock/src/Manager/WarehouseManager.php

modules/stock/src/Manager/WarehouseManager.php
<?php

namespace Drupal\arch_stock\Manager;

use Drupal\arch_stock\Entity\Warehouse;
use Drupal\arch_stock\WarehouseDefault;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Warehouse manager.
 *
 * @package Drupal\arch_stock\Manager
 */
class WarehouseManager implements WarehouseManagerInterface, ContainerInjectionInterface {

  /**
   * Defined warehouse.
   *
   * @var \Drupal\arch_stock\Entity\WarehouseInterface[]
   */
  protected $warehouses;

  /**
   * Default warehouse.
   *
   * @var \Drupal\arch_stock\WarehouseDefault
   */
  protected $defaultWarehouse;

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

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

  /**
   * WarehouseManager constructor.
   *
   * @param \Drupal\arch_stock\WarehouseDefault $default_warehouse
   *   Default warehouse.
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   Config factory.
   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
   *   Module handler.
   */
  public function __construct(
    WarehouseDefault $default_warehouse,
    ConfigFactoryInterface $config_factory,
    ModuleHandlerInterface $module_handler,
  ) {
    $this->defaultWarehouse = $default_warehouse;
    $this->configFactory = $config_factory;
    $this->moduleHandler = $module_handler;
  }

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

  /**
   * Get default warehouse.
   *
   * @return \Drupal\arch_stock\Entity\WarehouseInterface
   *   Default warehouse.
   */
  public function getDefaultWarehouse() {
    return $this->defaultWarehouse->get();
  }

  /**
   * List of defined warehouses.
   *
   * @return \Drupal\arch_stock\Entity\WarehouseInterface[]
   *   Warehouse list.
   */
  public function getWarehouses() {
    if (!isset($this->warehouses)) {
      $default = $this->getDefaultWarehouse();
      $warehouses = [$default->id() => $default];

      $config_ids = $this->configFactory->listAll('arch_stock.warehouse.');
      foreach ($this->configFactory->loadMultiple($config_ids) as $config) {
        $data = $config->get();
        $warehouses[$data['id']] = Warehouse::create($data);
      }

      uasort($warehouses, '\Drupal\arch_stock\Entity\Warehouse::sort');
      $this->warehouses = $warehouses;
    }
    return $this->warehouses;
  }

  /**
   * {@inheritdoc}
   */
  public function getFormOptions() {
    $options = [];
    foreach ($this->getWarehouses() as $warehouse) {
      if (!$warehouse->status()) {
        continue;
      }

      $options[$warehouse->id()] = $warehouse->label();
    }

    return $options;
  }

  /**
   * {@inheritdoc}
   */
  public function getAvailableWarehouses(AccountInterface $account) {
    $warehouses = array_filter($this->getWarehouses(), function ($warehouse) use ($account) {
      /** @var \Drupal\arch_stock\Entity\WarehouseInterface $warehouse */
      $result = $warehouse->access('view', $account, TRUE);
      return !$result->isForbidden();
    });

    $context = [
      'account' => $account,
    ];
    $this->moduleHandler->alter('stock_available_warehouses', $warehouses, $context);
    return $warehouses;
  }

}

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

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