You are here

function taxonomy_csv_vocabulary_duplicate in Taxonomy CSV import/export 6.2

Same name and namespace in other branches
  1. 6.5 taxonomy_csv.vocabulary.api.inc \taxonomy_csv_vocabulary_duplicate()
  2. 6.3 taxonomy_csv.vocabulary.api.inc \taxonomy_csv_vocabulary_duplicate()
  3. 6.4 taxonomy_csv.vocabulary.api.inc \taxonomy_csv_vocabulary_duplicate()
  4. 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();
}