You are here

taxonomy_xml.export.inc in Taxonomy import/export via XML 7

Helper functions for vocab exports.

File

taxonomy_xml.export.inc
View source
<?php

/**
 * @file
 * Helper functions for vocab exports.
 */

/**
 * Displays an unordered list of all available vocabularies for export.
 *
 * @return array
 *   An unordered HTML list
 */
function taxonomy_xml_export() {

  // Return the list of vocabularies.
  $output = '';
  $vocabularies = taxonomy_get_vocabularies();
  $format_infos = taxonomy_xml_format_info();
  if (empty($vocabularies)) {
    $output .= t('There are no vocabularies present');
  }
  else {
    $export_table = array();
    foreach ($vocabularies as $vocabulary) {
      $row = array();
      $vocabcount = db_query("SELECT count(*) FROM {taxonomy_term_data} WHERE vid = :vid", array(
        ':vid' => $vocabulary->vid,
      ))
        ->fetchField();
      $row['name'] = $vocabulary->name . ' (' . $vocabcount . ' ' . t('terms') . ')';
      foreach ($format_infos as $format_id => $format_info) {
        if (!empty($format_info['create'])) {
          $link = "taxonomy/vocabulary/" . $vocabulary->vid . "/" . $format_id;
          $link = TAXONOMY_XML_VOCAB_PATH . '/' . $vocabulary->machine_name . '/' . $format_id;
          $description = @$format_info['description'];
          $extra = array(
            'attributes' => array(
              'title' => $description,
            ),
          );
          $row[$format_id] = l($format_info['name'], $link, $extra);
        }
      }
      $export_table[$vocabulary->vid] = $row;
    }
    $output = theme('table', array(
      'rows' => $export_table,
    ));
  }
  return $output;
}

/**
 * Return a flat file representation of the requested vocab.
 *
 * Default format is the original custom Drupal XML file.
 *
 * Constructs and prints result to the screen, with appropriate headers.
 */
function taxonomy_xml_export_vocabulary($vocabulary, $format = 'xml') {
  $vocabulary = is_numeric($vocabulary) ? taxonomy_vocabulary_load($vocabulary) : $vocabulary;
  $vid = $vocabulary->vid;

  // Retrieving Vocabulary name.
  $vname = drupal_strtolower(str_replace(' ', '_', trim($vocabulary->name)));

  // Load the appropriate library, guess at the format name file.
  module_load_include('inc', 'taxonomy_xml', 'formats/' . $format . '_format');
  $create_funcname = "taxonomy_xml_{$format}_create";
  $file = $create_funcname($vid);
  if (!empty($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.5') || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera'))) {
    header('Content-Type: application/dummy');
  }
  else {
    header('Content-Type: text/xml; charset=UTF-8');
  }
  if (headers_sent()) {
    echo 'Some data has already been output to browser, can\'t send file';
  }
  header('Content-Length: ' . strlen($file));
  header("Content-Disposition: attachment; filename=taxonomy_{$vname}.{$format}.xml");
  echo $file;
}

/**
 * Return a representation of the requested term.
 *
 * Constructs and prints result to the screen, with appropriate headers.
 *
 * @todo UNFINISHED, currently a stub copy from full vocab export
 */
function taxonomy_xml_export_term($term, $format = 'rdf') {
  $term = is_numeric($term) ? taxonomy_term_load($term) : $term;
  if (empty($term)) {
    trigger_error("NULL term loaded");
    dpm(func_get_args());
    return "Failed";
  }

  // Retrieving Vocabulary name.
  $vocabulary = taxonomy_vocabulary_load($term->vid);
  $vname = drupal_strtolower(str_replace(' ', '_', trim($vocabulary->name)));
  module_load_include('inc', 'taxonomy_xml', 'formats/' . $format . '_format');
  $create_funcname = "taxonomy_xml_{$format}_create_term";
  if (!function_exists($create_funcname)) {
    trigger_error("The {$format} format does not currently support exporting individual terms");
    return "Failed to export term '{$term->name}' ({$term->tid}) as {$format}";
  }
  $file = $create_funcname($term);
  if (!empty($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.5') || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera'))) {
    header('Content-Type: application/dummy');
  }
  else {
    header('Content-Type: text/xml; charset=UTF-8');
  }
  if (headers_sent()) {
    echo 'Some data has already been output to browser, can\'t send file';
  }
  header('Content-Length: ' . strlen($file));
  header("Content-Disposition: attachment; filename=taxonomy_{$vname}.{$format}.xml");
  echo $file;
}

Functions

Namesort descending Description
taxonomy_xml_export Displays an unordered list of all available vocabularies for export.
taxonomy_xml_export_term Return a representation of the requested term.
taxonomy_xml_export_vocabulary Return a flat file representation of the requested vocab.