function taxonomy_csv_vocabulary_duplicate in Taxonomy CSV import/export 7.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()
- 6.4 taxonomy_csv.vocabulary.api.inc \taxonomy_csv_vocabulary_duplicate()
Duplicates a vocabulary object. If not exist, creates an empty vocabulary.
@todo To be finished.
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 114 - 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 = (object) array(
'name' => $name,
'machine_name' => taxonomy_csv_vocabulary_machine_name_create($name),
'description' => $original_vocabulary->description,
'hierarchy' => $original_vocabulary->hierarchy,
'module' => $original_vocabulary->module,
'weight' => $original_vocabulary->weight,
);
$result = taxonomy_vocabulary_save($duplicated_vocabulary);
// Add specific fields.
$fields = field_info_instances('taxonomy_term', $original_vocabulary->machine_name);
foreach ($fields as $field) {
taxonomy_csv_vocabulary_field_add($duplicated_vocabulary->machine_name, $field);
}
// Get all terms and attributes of original vocabulary and copy them in the
// new one in three steps.
$original_terms = taxonomy_term_load_multiple(array(), array(
'vid' => $original_vocabulary->vid,
));
// First step: copy each term except term reference fields (parents...).
$duplicated_terms = array();
foreach ($original_terms as $original_term) {
// Check needed when vocabulary allows multiple parents.
if (!isset($duplicated_terms[$original_term->tid])) {
// @todo Add other non term reference fields (text...).
$duplicated_terms[$original_term->tid] = (object) array(
'vid' => $duplicated_vocabulary->vid,
'name' => $original_term->name,
'description' => $original_term->description,
'format' => $original_term->format,
'weight' => $original_term->weight,
);
$result = taxonomy_term_save($duplicated_terms[$original_term->tid]);
}
}
// Second step: update duplicated terms with parents.
foreach ($duplicated_terms as $original_tid => $duplicated_term) {
$original_parents = taxonomy_get_parents($original_tid);
if (count($original_parents) > 0) {
foreach ($original_parents as $original_parent_term_id => $original_parent_term) {
$duplicated_terms[$original_tid]->parent[] = $duplicated_terms[$original_parent_term_id]->tid;
}
$result = taxonomy_term_save($duplicated_terms[$original_tid]);
}
}
// Third step: update duplicated terms with taxonomy_term_reference fields.
// @todo Finish this step.
return $duplicated_vocabulary;
}
return taxonomy_csv_vocabulary_create();
}