TextItemFieldDependencyCollector.php in Dependency Calculation 8
File
src/EventSubscriber/DependencyCollector/TextItemFieldDependencyCollector.php
View source
<?php
namespace Drupal\depcalc\EventSubscriber\DependencyCollector;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\depcalc\DependencyCalculatorEvents;
use Drupal\depcalc\DependentEntityWrapper;
use Drupal\depcalc\Event\CalculateEntityDependenciesEvent;
use Drupal\depcalc\FieldExtractor;
class TextItemFieldDependencyCollector extends BaseDependencyCollector {
protected $entityTypeManager;
public function __construct(EntityTypeManagerInterface $entity_type_manager) {
$this->entityTypeManager = $entity_type_manager;
}
public static function getSubscribedEvents() {
$events[DependencyCalculatorEvents::CALCULATE_DEPENDENCIES][] = [
'onCalculateDependencies',
];
return $events;
}
public function onCalculateDependencies(CalculateEntityDependenciesEvent $event) {
$entity = $event
->getEntity();
if (!$entity instanceof ContentEntityInterface) {
return;
}
$fields = FieldExtractor::getFieldsFromEntity($entity, function (ContentEntityInterface $entity, $field_name, FieldItemListInterface $field) {
return in_array($field
->getFieldDefinition()
->getType(), [
'text_with_summary',
'text',
'text_long',
]);
});
if (!$fields) {
return;
}
foreach ($fields as $field) {
foreach ($field as $item) {
$values = $item
->getValue();
if (!empty($values['format']) && ($format = $this->entityTypeManager
->getStorage('filter_format')
->load($values['format']))) {
$format_wrapper = new DependentEntityWrapper($format);
$local_dependencies = [];
$this
->mergeDependencies($format_wrapper, $event
->getStack(), $this
->getCalculator()
->calculateDependencies($format_wrapper, $event
->getStack(), $local_dependencies));
$event
->addDependency($format_wrapper);
if (\Drupal::moduleHandler()
->moduleExists('editor')) {
$editor = $format = $this->entityTypeManager
->getStorage('editor')
->load($values['format']);
if ($editor) {
$editor_wrapper = new DependentEntityWrapper($editor);
$editor_wrapper
->addDependency($format_wrapper, $event
->getStack());
$local_dependencies = [];
$this
->mergeDependencies($editor_wrapper, $event
->getStack(), $this
->getCalculator()
->calculateDependencies($editor_wrapper, $event
->getStack(), $local_dependencies));
$event
->addDependency($editor_wrapper);
$event
->setModuleDependencies([
'editor',
'ckeditor',
]);
}
}
}
}
}
}
}