function EntityDisplayBase::onDependencyRemoval

Same name 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 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.