protected function VocabularyStorageController::postDelete

Overrides Drupal\Core\Entity\DatabaseStorageController::postDelete().

Overrides DatabaseStorageController::postDelete

File

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

Class

VocabularyStorageController
Defines a controller class for taxonomy vocabularies.

Namespace

Drupal\taxonomy

Code

protected function postDelete($entities) {

  // 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) {
      foreach ($entities as $vocabulary) {
        if ($allowed_value['vocabulary'] == $vocabulary->machine_name) {
          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);
      }
    }
  }
}