vlsuite-1.0.x-dev/modules/vlsuite_block/src/Plugin/Derivative/VLSuiteMediaBgFieldBlockDeriver.php

modules/vlsuite_block/src/Plugin/Derivative/VLSuiteMediaBgFieldBlockDeriver.php
<?php

namespace Drupal\vlsuite_block\Plugin\Derivative;

use Drupal\layout_builder\Plugin\Derivative\FieldBlockDeriver;
use Drupal\Component\Plugin\PluginBase;
use Drupal\Core\Config\ConfigFactoryInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Entity\EntityTypeRepositoryInterface;
use Drupal\Core\Entity\EntityFieldManagerInterface;
use Drupal\Core\Field\FieldTypePluginManagerInterface;
use Drupal\Core\Field\FormatterPluginManager;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;

/**
 * Entity field block definitions for each field that can be used as section bg.
 *
 * @internal
 *   Plugin derivers are internal.
 */
class VLSuiteMediaBgFieldBlockDeriver extends FieldBlockDeriver {

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

  /**
   * Constructs new VLSuiteMediaBgFieldBlockDeriver.
   *
   * @param \Drupal\Core\Entity\EntityTypeRepositoryInterface $entity_type_repository
   *   The entity type repository.
   * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
   *   The entity field manager.
   * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_manager
   *   The field type manager.
   * @param \Drupal\Core\Field\FormatterPluginManager $formatter_manager
   *   The formatter manager.
   * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $bundle_info_manager
   *   The formatter manager.
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   Config factory.
   */
  public function __construct(EntityTypeRepositoryInterface $entity_type_repository, EntityFieldManagerInterface $entity_field_manager, FieldTypePluginManagerInterface $field_type_manager, FormatterPluginManager $formatter_manager, EntityTypeBundleInfoInterface $bundle_info_manager, ConfigFactoryInterface $config_factory) {
    parent::__construct($entity_type_repository, $entity_field_manager, $field_type_manager, $formatter_manager, $bundle_info_manager);

    $this->configFactory = $config_factory;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, $base_plugin_id) {
    return new static(
      $container->get('entity_type.repository'),
      $container->get('entity_field.manager'),
      $container->get('plugin.manager.field.field_type'),
      $container->get('plugin.manager.field.formatter'),
      $container->get('entity_type.bundle.info'),
      $container->get('config.factory')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function getDerivativeDefinitions($base_plugin_definition) {
    parent::getDerivativeDefinitions($base_plugin_definition);
    foreach (array_keys($this->derivatives) as $derivative_id) {
      $this->derivatives[$derivative_id]['category'] = $base_plugin_definition['category'];
      [$entity_type_id, $bundle, $field_name] = explode(PluginBase::DERIVATIVE_SEPARATOR, $derivative_id, 3);
      $field_definition = $this->entityFieldManager->getFieldDefinitions($entity_type_id, $bundle)[$field_name];
      $target_type = $field_definition->getType() == 'entity_reference' ? $field_definition->getFieldStorageDefinition()->getSetting('target_type') : NULL;
      $allowed_bundles = $target_type === 'media' ? array_keys($field_definition->getSetting('handler_settings')['target_bundles'] ?? []) : [];
      $bg_types = array_keys($this->configFactory->get('vlsuite_media.settings')->get('bg_types') ?? []);
      if (!($target_type === 'media' && !empty(array_intersect($allowed_bundles, $bg_types)))) {
        unset($this->derivatives[$derivative_id]);
      }
    }
    return $this->derivatives;
  }

}

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

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