function EntityDisplayBase::onDependencyRemoval

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Entity/EntityDisplayBase.php \Drupal\Core\Entity\EntityDisplayBase::onDependencyRemoval()
  2. 8.9.x core/lib/Drupal/Core/Entity/EntityDisplayBase.php \Drupal\Core\Entity\EntityDisplayBase::onDependencyRemoval()
  3. 11.x core/lib/Drupal/Core/Entity/EntityDisplayBase.php \Drupal\Core\Entity\EntityDisplayBase::onDependencyRemoval()

Overrides ConfigEntityBase::onDependencyRemoval

1 call to EntityDisplayBase::onDependencyRemoval()
LayoutBuilderEntityViewDisplay::onDependencyRemoval in core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
Informs the entity that entities it depends on will be deleted.
1 method overrides EntityDisplayBase::onDependencyRemoval()
LayoutBuilderEntityViewDisplay::onDependencyRemoval in core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
Informs the entity that entities it depends on will be deleted.

File

core/lib/Drupal/Core/Entity/EntityDisplayBase.php, line 445

Class

EntityDisplayBase
Provides a common base class for entity view and form displays.

Namespace

Drupal\Core\Entity

Code

public function onDependencyRemoval(array $dependencies) {
  $changed = parent::onDependencyRemoval($dependencies);
  foreach ($dependencies['config'] as $entity) {
    if ($entity->getEntityTypeId() == 'field_config') {
      // Remove components for fields that are being deleted.
      $this->removeComponent($entity->getName());
      unset($this->hidden[$entity->getName()]);
      $changed = TRUE;
    }
  }
  foreach ($this->getComponents() as $name => $component) {
    if ($renderer = $this->getRenderer($name)) {
      if (in_array($renderer->getPluginDefinition()['provider'], $dependencies['module'])) {
        // Revert to the defaults if the plugin that supplies the widget or
        // formatter depends on a module that is being uninstalled.
        $this->setComponent($name);
        $changed = TRUE;
      }
      // Give this component the opportunity to react on dependency removal.
      $component_removed_dependencies = $this->getPluginRemovedDependencies($renderer->calculateDependencies(), $dependencies);
      if ($component_removed_dependencies) {
        if ($renderer->onDependencyRemoval($component_removed_dependencies)) {
          // Update component settings to reflect changes.
          $component['settings'] = $renderer->getSettings();
          $component['third_party_settings'] = [];
          foreach ($renderer->getThirdPartyProviders() as $module) {
            $component['third_party_settings'][$module] = $renderer->getThirdPartySettings($module);
          }
          $this->setComponent($name, $component);
          $changed = TRUE;
        }
        // If there are unresolved deleted dependencies left, disable this
        // component to avoid the removal of the entire display entity.
        if ($this->getPluginRemovedDependencies($renderer->calculateDependencies(), $dependencies)) {
          $this->removeComponent($name);
          $arguments = [
            '@display' => (string) $this->getEntityType()
              ->getLabel(),
            '@id' => $this->id(),
            '@name' => $name,
          ];
          $this->getLogger()
            ->warning("@display '@id': Component '@name' was disabled because its settings depend on removed dependencies.", $arguments);
          $changed = TRUE;
        }
      }
    }
  }
  return $changed;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.