function taxonomy_csv_vocabulary_duplicate in Taxonomy CSV import/export 6.4
Same name and namespace in other branches
- 6.5 taxonomy_csv.vocabulary.api.inc \taxonomy_csv_vocabulary_duplicate()
- 6.2 taxonomy_csv.vocabulary.api.inc \taxonomy_csv_vocabulary_duplicate()
- 6.3 taxonomy_csv.vocabulary.api.inc \taxonomy_csv_vocabulary_duplicate()
- 7.4 taxonomy_csv.vocabulary.api.inc \taxonomy_csv_vocabulary_duplicate()
Duplicates a vocabulary object. If not exist, creates an empty vocabulary.
Parameters
$vocabulary_id: Vocabulary id to duplicate.
Return value
Duplicated vocabulary object.
1 call to taxonomy_csv_vocabulary_duplicate()
- _taxonomy_csv_import_vocabulary_prepare in import/
taxonomy_csv.import.api.inc - Prepare a vocabulary for import.
File
- ./
taxonomy_csv.vocabulary.api.inc, line 49 - Prepare and manage vocabularies.
Code
function taxonomy_csv_vocabulary_duplicate($vocabulary_id) {
$original_vocabulary = taxonomy_vocabulary_load($vocabulary_id);
if ($original_vocabulary) {
// Creates an unused name.
// Check if name begins with 'Copy of #name' in order to serialize name.
$name = t('Copy of [!vocabulary_name]', array(
'!vocabulary_name' => $original_vocabulary->name,
));
$name = _taxonomy_csv_vocabulary_name_create(strpos($original_vocabulary->name, $name) === FALSE ? $name : $original_vocabulary->name);
// Duplicate original vocabulary. Relations and hierarchy are updated later.
$duplicated_vocabulary = array(
'name' => $name,
'description' => $original_vocabulary->description,
'help' => $original_vocabulary->help,
'relations' => $original_vocabulary->relations,
'hierarchy' => $original_vocabulary->hierarchy,
'multiple' => $original_vocabulary->multiple,
'required' => $original_vocabulary->required,
'tags' => $original_vocabulary->tags,
'module' => $original_vocabulary->module,
'weight' => $original_vocabulary->weight,
'nodes' => array(),
);
$result = taxonomy_save_vocabulary($duplicated_vocabulary);
$duplicated_vocabulary = taxonomy_csv_vocabulary_load_name($duplicated_vocabulary['name']);
// Get all terms and attributes of original vocabulary and copy them in the
// new one in two steps.
$original_terms = taxonomy_get_tree($original_vocabulary->vid);
// First step: copy each term except relations and parents.
$duplicated_terms = array();
foreach ($original_terms as $original_term) {
$duplicated_terms[$original_term->tid] = (object) array(
'vid' => $duplicated_vocabulary->vid,
'name' => $original_term->name,
'description' => $original_term->description,
'weight' => $original_term->weight,
'synonyms' => taxonomy_get_synonyms($original_term->tid),
);
// Term id is automatically memorized.
$result = taxonomy_csv_term_save($duplicated_terms[$original_term->tid]);
}
// Second step: update duplicated terms with parents and relations.
foreach ($original_terms as $original_term) {
$duplicated_terms[$original_term->tid]->parents = array();
foreach ($original_term->parents as $original_parent_tid) {
if ($original_parent_tid != 0) {
$duplicated_terms[$original_term->tid]->parents[] = $duplicated_terms[$original_parent_tid]->tid;
}
}
$duplicated_terms[$original_term->tid]->relations = array();
$original_related_terms = taxonomy_get_related($original_term->tid);
foreach ($original_related_terms as $original_related_term) {
$duplicated_terms[$original_term->tid]->relations[] = $duplicated_terms[$original_related_term->tid]->tid;
}
$result = taxonomy_csv_term_save($duplicated_terms[$original_term->tid]);
}
return $duplicated_vocabulary;
}
return taxonomy_csv_vocabulary_create();
}