summaryrefslogtreecommitdiff
path: root/modules/taxonomy/taxonomy.module
diff options
context:
space:
mode:
Diffstat (limited to 'modules/taxonomy/taxonomy.module')
-rw-r--r--modules/taxonomy/taxonomy.module24
1 files changed, 24 insertions, 0 deletions
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 28d488ec8..3879efdb6 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -475,6 +475,30 @@ function taxonomy_vocabulary_delete($vid) {
module_invoke_all('taxonomy_vocabulary_delete', $vocabulary);
module_invoke_all('entity_delete', $vocabulary, 'taxonomy_vocabulary');
+ // 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 ($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);
+ }
+ }
+ }
+
cache_clear_all();
taxonomy_vocabulary_static_reset();