You are here

public static function Vocabulary::postDelete in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/taxonomy/src/Entity/Vocabulary.php \Drupal\taxonomy\Entity\Vocabulary::postDelete()
  2. 9 core/modules/taxonomy/src/Entity/Vocabulary.php \Drupal\taxonomy\Entity\Vocabulary::postDelete()

Acts on deleted entities before the delete hook is invoked.

Used after the entities are deleted but before invoking the delete hook.

Parameters

\Drupal\Core\Entity\EntityStorageInterface $storage: The entity storage object.

\Drupal\Core\Entity\EntityInterface[] $entities: An array of entities.

Overrides ConfigEntityBundleBase::postDelete

File

core/modules/taxonomy/src/Entity/Vocabulary.php, line 121

Class

Vocabulary
Defines the taxonomy vocabulary entity.

Namespace

Drupal\taxonomy\Entity

Code

public static function postDelete(EntityStorageInterface $storage, array $entities) {
  parent::postDelete($storage, $entities);

  // Reset caches.
  $storage
    ->resetCache(array_keys($entities));
  if (reset($entities)
    ->isSyncing()) {
    return;
  }
  $vocabularies = [];
  foreach ($entities as $vocabulary) {
    $vocabularies[$vocabulary
      ->id()] = $vocabulary
      ->id();
  }

  // Load all Taxonomy module fields and delete those which use only this
  // vocabulary.
  $field_storages = \Drupal::entityTypeManager()
    ->getStorage('field_storage_config')
    ->loadByProperties([
    'module' => 'taxonomy',
  ]);
  foreach ($field_storages as $field_storage) {
    $modified_storage = FALSE;

    // Term reference fields may reference terms from more than one
    // vocabulary.
    foreach ($field_storage
      ->getSetting('allowed_values') as $key => $allowed_value) {
      if (isset($vocabularies[$allowed_value['vocabulary']])) {
        $allowed_values = $field_storage
          ->getSetting('allowed_values');
        unset($allowed_values[$key]);
        $field_storage
          ->setSetting('allowed_values', $allowed_values);
        $modified_storage = TRUE;
      }
    }
    if ($modified_storage) {
      $allowed_values = $field_storage
        ->getSetting('allowed_values');
      if (empty($allowed_values)) {
        $field_storage
          ->delete();
      }
      else {

        // Update the field definition with the new allowed values.
        $field_storage
          ->save();
      }
    }
  }
}