protected function VocabularyStorageController::postDelete

Overrides Drupal\Core\Config\Entity\ConfigStorageController::postDelete().

Overrides ConfigStorageController::postDelete

File

drupal/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyStorageController.php, line 63
Definition of Drupal\taxonomy\VocabularyStorageController.

Class

VocabularyStorageController
Defines a controller class for taxonomy vocabularies.

Namespace

Drupal\taxonomy

Code

protected function postDelete($entities) {
  parent::postDelete($entities);
  $vocabularies = array();
  foreach ($entities as $vocabulary) {
    $vocabularies[$vocabulary
      ->id()] = $vocabulary
      ->id();
  }

  // Load all Taxonomy module fields and delete those which use only this
  // vocabulary.
  $taxonomy_fields = field_read_fields(array(
    'module' => 'taxonomy',
  ));
  foreach ($taxonomy_fields as $field_name => $taxonomy_field) {
    $modified_field = FALSE;

    // Term reference fields may reference terms from more than one
    // vocabulary.
    foreach ($taxonomy_field['settings']['allowed_values'] as $key => $allowed_value) {
      if (isset($vocabularies[$allowed_value['vocabulary']])) {
        unset($taxonomy_field['settings']['allowed_values'][$key]);
        $modified_field = TRUE;
      }
    }
    if ($modified_field) {
      if (empty($taxonomy_field['settings']['allowed_values'])) {
        field_delete_field($field_name);
      }
      else {

        // Update the field definition with the new allowed values.
        field_update_field($taxonomy_field);
      }
    }
  }

  // Reset caches.
  $this
    ->resetCache(array_keys($vocabularies));
}