entity_hierarchy-8.x-2.24/modules/entity_hierarchy_microsite/src/Plugin/MicrositePluginTrait.php
modules/entity_hierarchy_microsite/src/Plugin/MicrositePluginTrait.php
<?php
namespace Drupal\entity_hierarchy_microsite\Plugin;
use Drupal\Core\Entity\EntityFieldManagerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\entity_hierarchy_microsite\ChildOfMicrositeLookupInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Defines a trait for microsite plugin functionality.
*/
trait MicrositePluginTrait {
/**
* Child of microsite lookup.
*
* @var \Drupal\entity_hierarchy_microsite\ChildOfMicrositeLookupInterface
*/
protected $childOfMicrositeLookup;
/**
* Entity field manager.
*
* @var \Drupal\Core\Entity\EntityFieldManagerInterface
*/
protected $entityFieldManager;
/**
* Sets value of NestedSetStorageFactory.
*
* @param \Drupal\entity_hierarchy_microsite\ChildOfMicrositeLookupInterface $childOfMicrositeLookup
* Lookup.
*
* @return $this
*/
public function setChildOfMicrositeLookup(ChildOfMicrositeLookupInterface $childOfMicrositeLookup) {
$this->childOfMicrositeLookup = $childOfMicrositeLookup;
return $this;
}
/**
* Entity field manager.
*
* @param \Drupal\Core\Entity\EntityFieldManagerInterface $entityFieldManager
* Entity field manager.
*
* @return $this
*/
protected function setEntityFieldManager(EntityFieldManagerInterface $entityFieldManager) {
$this->entityFieldManager = $entityFieldManager;
return $this;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
// @phpstan-ignore-next-line
$instance = new static($configuration, $plugin_id, $plugin_definition);
return $instance->setChildOfMicrositeLookup($container->get('entity_hierarchy_microsite.microsite_lookup'))
->setEntityFieldManager($container->get('entity_field.manager'));
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return ['field' => ''] + parent::defaultConfiguration();
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['field'] = [
'#type' => 'select',
'#title' => $this->t('Entity hierarchy field'),
'#options' => $this->getFieldOptions(),
'#empty_option' => 'None',
'#empty_value' => '',
'#default_value' => $this->configuration['field'],
'#description' => $this->t('Select the field to use to identify if the current node is the child of a microsite'),
];
return parent::buildConfigurationForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$this->configuration['field'] = $form_state->getValue('field');
parent::submitConfigurationForm($form, $form_state);
}
/**
* Gets field options.
*
* @return array
* Field names keyed by label.
*/
protected function getFieldOptions() {
$fields = $this->entityFieldManager->getFieldMapByFieldType('entity_reference_hierarchy');
$options = [];
if (isset($fields['node'])) {
foreach ($fields['node'] as $field_name => $detail) {
foreach ($detail['bundles'] as $bundle) {
/** @var \Drupal\Core\Field\FieldDefinitionInterface $field */
$field = $this->entityFieldManager->getFieldDefinitions('node', $bundle)[$field_name];
$options[$field_name] = $field->getLabel();
}
}
}
return $options;
}
}
