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;
}
}
