function taxonomy_vocabulary_delete
7.x taxonomy.module | taxonomy_vocabulary_delete($vid) |
Delete a vocabulary.
Parameters
$vid: A vocabulary ID.
Return value
Constant indicating items were deleted.
8 calls to taxonomy_vocabulary_delete()
- EntityCrudHookTestCase::testTaxonomyVocabularyHooks in drupal-7.x/
modules/ simpletest/ tests/ entity_crud_hook_test.test - Tests hook invocations for CRUD operations on taxonomy vocabularies.
- TaxonomyTermFieldMultipleVocabularyTestCase::testTaxonomyTermFieldMultipleVocabularies in drupal-7.x/
modules/ taxonomy/ taxonomy.test - Tests term reference field and widget with multiple vocabularies.
- TaxonomyTermFieldTestCase::testTaxonomyTermFieldWidgets in drupal-7.x/
modules/ taxonomy/ taxonomy.test - Test widgets.
- TaxonomyVocabularyFunctionalTest::testTaxonomyAdminNoVocabularies in drupal-7.x/
modules/ taxonomy/ taxonomy.test - Test the vocabulary overview with no vocabularies.
- TaxonomyVocabularyTestCase::testTaxonomyVocabularyDeleteWithTerms in drupal-7.x/
modules/ taxonomy/ taxonomy.test - Test deleting a taxonomy that contains terms.
File
- drupal-7.x/
modules/ taxonomy/ taxonomy.module, line 467 - Enables the organization of content into categories.
Code
function taxonomy_vocabulary_delete($vid) {
$vocabulary = taxonomy_vocabulary_load($vid);
$transaction = db_transaction();
try {
// Only load terms without a parent, child terms will get deleted too.
$result = db_query('SELECT t.tid FROM {taxonomy_term_data} t INNER JOIN {taxonomy_term_hierarchy} th ON th.tid = t.tid WHERE t.vid = :vid AND th.parent = 0', array(':vid' => $vid))->fetchCol();
foreach ($result as $tid) {
taxonomy_term_delete($tid);
}
db_delete('taxonomy_vocabulary')
->condition('vid', $vid)
->execute();
field_attach_delete_bundle('taxonomy_term', $vocabulary->machine_name);
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();
return SAVED_DELETED;
}
catch (Exception $e) {
$transaction->rollback();
watchdog_exception('taxonomy', $e);
throw $e;
}
}