You are here

function taxonomy_xml_import_form_submit in Taxonomy import/export via XML 6

Same name and namespace in other branches
  1. 6.2 taxonomy_xml.module \taxonomy_xml_import_form_submit()
  2. 7 taxonomy_xml.admin.inc \taxonomy_xml_import_form_submit()

Imports the actual XML.

File

./taxonomy_xml.module, line 374
taxonomy_xml.module This module makes it possible to import and export taxonomies as XML documents.

Code

function taxonomy_xml_import_form_submit($form, &$form_state) {

  #if ( function_exists('xdebug_start_trace')) { xdebug_start_trace() ; }

  // Remember current prefs, just for convenience
  // Speaking of convenience, why does my form discard these values all the time?
  variable_set('taxonomy_xml_format', $form_state['values']['format']);
  variable_set('taxonomy_xml_vid', $form_state['values']['vid']);
  variable_set('taxonomy_xml_duplicate', $form_state['values']['duplicate']);
  variable_set('taxonomy_xml_reuseids', $form_state['values']['reuseids']);
  variable_set('taxonomy_xml_source_selector', $form_state['values']['source_selector']);
  variable_set('taxonomy_xml_service_id', $form_state['values']['service_id']);
  variable_set('taxonomy_xml_identifier', $form_state['values']['identifier']);
  variable_set('taxonomy_xml_url', $form_state['values']['url']);
  variable_set('taxonomy_xml_recurse_down', $form_state['values']['recurse_down']);

  // Allow either upload, web service or URL sources
  //
  switch ($form_state['values']['source_selector']) {
    case 'upload-file':

      // Retrieve submitted data and parse it
      global $user;
      $limits = _upload_file_limits($user);
      $validators = array(
        'file_validate_extensions' => array(
          $limits['extensions'],
        ),
      );
      if ($file = file_save_upload('upload_file', $validators)) {
        $fd = fopen($file->filepath, "rb");
        if (!$fd) {
          form_set_error('upload_file', t('Vocabulary import failed: file %filename cannot be read.', array(
            '%filename' => $file->filename,
          )));
        }
        else {
          $info = fstat($fd);
          $len = $info["size"];
          $text = fread($fd, $len);
          fclose($fd);
          drupal_set_message(t('Loaded file %filename. Now processing it.', array(
            '%filename' => $file->filename,
          )));
          $form_state['values']['file'] = $file;
          taxonomy_xml_invoke_import($text, $form_state['values']);
        }
      }
      else {
        form_set_error('upload_file', t('Vocabulary import failed: file was not uploaded.'));
      }
      break;
    case 'url':

      // Retrieve remote URL and parser it
      if ($url = $form_state['values']['url']) {
        $text = taxonomy_xml_cached_get_contents($url);
        drupal_set_message(t('Retrieved Submitted URL %url. Now starting an import process.', array(
          '%url' => $url,
        )));
        taxonomy_xml_invoke_import($text, $form_state['values'], $url);
      }
      break;
    case 'service':

      // Invoke service and parse response
      $services = taxonomy_xml_lookup_services(NULL, 'full');
      $service = $services[$form_state['values']['service_id']];

      // Don't yet have a subroutine for invoking services, just create a lookup and call it.
      $req = taxonomy_xml_sub_placeholders_into_pattern($service['pattern'], $form_state['values']);
      $text = taxonomy_xml_cached_get_contents($req);
      drupal_set_message(t('Requested service %servicename from URL %req. Now starting an import process.', array(
        '%servicename' => $service['provider'],
        '%req' => $req,
      )));

      // Before running, need to make sure the preferences on the form
      // are in line with those set for the service -
      // ie, the format is selected right. Maybe more later?
      $form_state['values']['format'] = $service['format'];
      variable_set('taxonomy_xml_format', $form_state['values']['format']);
      taxonomy_xml_invoke_import($text, $form_state['values'], $req);
      break;
  }

  // The initial import may have queued up some further process to do.
  // Check the queue and run it when this form goes.
  $_SESSION['taxonomy_xml_batch_count'] = 0;
  batch_set(taxonomy_xml_add_term_to_batch_queue());
}