8.3.x Vocabulary.php public static Vocabulary::postDelete(EntityStorageInterface $storage, array $entities)
8.0.x Vocabulary.php public static Vocabulary::postDelete(EntityStorageInterface $storage, array $entities)
8.1.x Vocabulary.php public static Vocabulary::postDelete(EntityStorageInterface $storage, array $entities)
8.2.x Vocabulary.php public static Vocabulary::postDelete(EntityStorageInterface $storage, array $entities)
8.4.x Vocabulary.php public static Vocabulary::postDelete(EntityStorageInterface $storage, array $entities)

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 133

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 = array();
  foreach ($entities as $vocabulary) {
    $vocabularies[$vocabulary->id()] = $vocabulary->id();
  }
  // Load all Taxonomy module fields and delete those which use only this
  // vocabulary.
  $field_storages = entity_load_multiple_by_properties('field_storage_config', array('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();
      }
    }
  }
}