<?php


/**
 * @file
 * Document Converter Class
 */

/**
 * This class implements document (doc, odt, pdf, etc.) conversion for a generic
 * multi-format document collection.
 */
class DocumentConverter {

  private $converter_service_url = "http://localhost:8080/converter/service";

  /**
   * Constructor
   * @param type $converter_url 
   */
  public function __construct($converter_url = NULL) {
    if (!empty($converter_url))
      $this->converter_service_url = $converter_url;
  }

  /**
   * Convert ???
   * @param type $parameterArray
   * @param type $dsid
   * @param type $file
   * @param type $output_ext
   * @return string 
   */
  function convert($parameterArray = NULL, $dsid, $file, $output_ext) {
    module_load_include('inc', 'fedora_repository', 'MimeClass');

    #debug:
    #drupal_set_message("Sending $file to ". $this->converter_service_url ." for convertsion to $output_ext", 'status');

    if (!empty($parameterArray['converter_url'])) {
      $this->converter_service_url = $parameterArray['converter_url'];
    }

    $helper = new MimeClass();
    $inputType = $helper->get_mimetype($file);
    $outputType = $helper->get_mimetype($output_ext);
    $inputData = file_get_contents($file);

    $outputFile = $file . "_" . $dsid . "." . $output_ext;

    #debug:
    #drupal_set_message("inputType: $inputType", 'status');
    #drupal_set_message("outputType: $outputType", 'status');
    #drupal_set_message("outputFile: $outputFile", 'status');

    $ch = curl_init($this->converter_service_url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: $inputType", "Accept: $outputType"));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 120); // times out after 2 minutes 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $inputData); // add POST fields 
    #curl_setopt($ch, CURLOPT_HEADER, 1);
    #curl_setopt($ch, CURLOPT_VERBOSE, 1);

    $data = curl_exec($ch); // run the whole process 

    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if (200 == $code) {

      $returnValue = file_put_contents($outputFile, $data);
      if ($returnValue > 0) {
        drupal_set_message(t("Conversion successful."), 'status');
        $_SESSION['fedora_ingest_files']["$dsid"] = $outputFile;
        return $outputFile;
      }
      else {
        return $returnValue; // a.k.a. FALSE.
      }
    }
    else {
      drupal_set_message(t("Conversion Failed. Webservice returned $code."), 'status');
      return FALSE;
    }
  }

}

/*
  $documentConverter = new DocumentConverter();
  $inputFile = "document.docx";
  $outputType = "txt";
  $documentConverter->convert( NULL, 'TXT', $inputFile, $outputType);
  /* */