You are here

webform2pdf.download.inc in Webform2PDF 7.4

Implemented menu path: node/%webform_menu/webform-results/downloadpdf node/%webform_menu/submission/%webform_menu_submission/downloadpdf

File

includes/webform2pdf.download.inc
View source
<?php

/**
 * @file
 * Implemented menu path:
 * node/%webform_menu/webform-results/downloadpdf
 * node/%webform_menu/submission/%webform_menu_submission/downloadpdf
 */

/*
 * webform2pdf_submission_download_pdf: download submission as one PDF file
 * $output_type: Suported type: 'I', 'D', 'S' ( http://www.tcpdf.org/doc/classTCPDF.html#a3d6dcb62298ec9d42e9125ee2f5b23a1 )
 */
function webform2pdf_submission_download_pdf($node, $submission, $output_type = 'I') {
  $output_types = array(
    'I',
    'D',
    'S',
  );
  if (in_array($output_type, $output_types)) {
    $template = _webform2pdf_get_template($node->nid);
    $pdf = theme('webform2pdf_pdf_init', array(
      'node' => $node,
      'template' => $template,
    ));
    if (!empty($pdf)) {
      $pdf = theme('webform2pdf_pdf_header', array(
        'pdf' => $pdf,
        'node' => $node,
        'template' => $template,
      ));
      $pdf = theme('webform2pdf_pdf_footer', array(
        'pdf' => $pdf,
        'node' => $node,
        'template' => $template,
      ));
      $pdf = theme('webform2pdf_pdf_page', array(
        'pdf' => $pdf,
      ));

      // todo: @deprecated deprecated since version 5.9.089 (2011-06-13)
      if (method_exists($pdf, 'AliasNbPages')) {

        // initialize document
        $pdf
          ->AliasNbPages();
      }
      $page = theme('webform2pdf_content', array(
        'node' => $node,
        'submission' => $submission,
        'template' => $template,
      ));
      $template['pages'] = explode('%pagebreak', $page);
      $pdf = theme('webform2pdf_pdf_content', array(
        'pdf' => $pdf,
        'node' => $node,
        'template' => $template,
      ));

      // reset pointer to the last page
      $pdf
        ->lastPage();
      $filename = theme('webform2pdf_filename', array(
        'node' => $node,
        'submission' => $submission,
      ));
      switch ($output_type) {
        case 'S':
          return $pdf
            ->Output($filename, 'S');
          break;
        case 'I':

          // http header
          drupal_add_http_header('Content-Type', 'application/pdf');
          drupal_add_http_header('Cache-Control', 'public, must-revalidate, max-age=0');

          // HTTP/1.1
          drupal_add_http_header('Pragma', 'public');
          drupal_add_http_header('Content-Disposition', 'inline; filename="' . $filename . '";');
          break;
        case 'D':
          drupal_add_http_header('Content-Description', 'File Transfer');
          drupal_add_http_header('Cache-Control', 'public, must-revalidate, max-age=0');

          // HTTP/1.1
          drupal_add_http_header('Pragma', 'public');
          drupal_add_http_header('Content-Type', 'application/pdf');

          // use the Content-Disposition header to supply a recommended filename
          drupal_add_http_header('Content-Disposition', 'attachment; filename="' . $filename . '";');
          drupal_add_http_header('Content-Transfer-Encoding', 'binary');
          break;
      }

      // Close and output PDF document
      die($pdf
        ->Output($filename, 'S'));
    }
  }
}

// function webform2pdf_submission_download_pdf()

/*
 * _webform2pdf_download_pdf_form: Creates a form, where the submissions can be downloaded in PDF format
 */
function webform2pdf_download_pdf_form($form, &$form_state, $node) {
  global $user;
  module_load_include('inc', 'webform', 'includes/webform.submissions');
  $header = theme('webform_results_submissions_header', array(
    'node' => $node,
  ));
  $submissions = webform_get_submissions($node->nid, $header);
  $operation_column = end($header);
  $operation_total = $operation_column['colspan'];
  $rows = array();
  foreach ($submissions as $sid => $submission) {
    $row = array(
      $submission->is_draft ? t('@sid (draft)', array(
        '@sid' => $sid,
      )) : $sid,
      format_date($submission->submitted, 'small'),
    );
    if (webform_results_access($node, $user)) {
      $row[] = theme('username', array(
        'account' => $submission,
      ));
      $row[] = $submission->remote_addr;
    }
    $row[] = l(t('View'), 'node/' . $node->nid . '/submission/' . $sid);
    $row[] = array(
      'data' => l(t('Download PDF'), 'node/' . $node->nid . '/submission/' . $sid . '/downloadpdf'),
    );

    // D7 BUG a colspan opciot nem figyeli a tableselect igy nem latszik a downloadpdf link
    $operation_count = 2;
    if ($operation_count < $operation_total) {
      $row[count($row) - 1] += array(
        'colspan' => $operation_total - $operation_count + 1,
      );
    }
    $rows[$sid] = $row;
  }
  $form['submissions']['#type'] = 'tableselect';
  $form['submissions']['#header'] = $header;
  $form['submissions']['#options'] = $rows;
  $form['submissions']['#empty'] = t('There are no submissions for this form. <a href="!url">View this form</a>.', array(
    '!url' => url('node/' . $node->nid),
  ));
  $form['nid'] = array(
    '#type' => 'value',
    '#value' => $node->nid,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Download PDF'),
  );
  return $form;
}

// function webform2pdf_download_pdf_form()

/*
 * webform2pdf_download_pdf_form_submit: webform2pdf_download_pdf_form of submit hook
 */
function webform2pdf_download_pdf_form_submit($form, &$form_state) {

  // filter zero values
  $form_state['values']['submissions'] = array_filter($form_state['values']['submissions']);

  // If there is a selected form element
  if (count($form_state['values']['submissions'])) {

    // call header generator
    $node = node_load($form_state['values']['nid']);
    module_load_include('inc', 'webform', 'includes/webform.submissions');
    $header = theme('webform_results_submissions_header', array(
      'node' => $node,
    ));
    $filters = array(
      'nid' => $form_state['values']['nid'],
      'sid' => $form_state['values']['submissions'],
    );
    $submissions = webform_get_submissions($filters, $header);
    $template = _webform2pdf_get_template($node->nid);
    $pdf = theme('webform2pdf_pdf_init', array(
      'node' => $node,
      'template' => $template,
    ));
    $pdf = theme('webform2pdf_pdf_header', array(
      'pdf' => $pdf,
      'node' => $node,
      'template' => $template,
    ));
    $pdf = theme('webform2pdf_pdf_footer', array(
      'pdf' => $pdf,
      'node' => $node,
      'template' => $template,
    ));
    $pdf = theme('webform2pdf_pdf_page', array(
      'pdf' => $pdf,
    ));
    foreach ($submissions as $key => $submission) {
      $pages[$key] = theme('webform2pdf_content', array(
        'node' => $node,
        'submission' => $submission,
        'template' => $template,
      ));
    }
    $template['pages'] = implode('%pagebreak', $pages);
    $template['pages'] = explode('%pagebreak', $template['pages']);
    $pdf = theme('webform2pdf_pdf_content', array(
      'pdf' => $pdf,
      'node' => $node,
      'template' => $template,
    ));

    // reset pointer to the last page
    $pdf
      ->lastPage();
    $filename = theme('webform2pdf_filename', array(
      'node' => $node,
      'submission' => time(),
    ));

    // http header
    drupal_add_http_header('Content-Type', 'application/pdf');
    drupal_add_http_header('Cache-Control', 'public, must-revalidate, max-age=0');

    // HTTP/1.1
    drupal_add_http_header('Pragma', 'public');
    drupal_add_http_header('Content-Disposition', 'inline; filename="' . $filename . '";');

    // Close and output PDF document
    die($pdf
      ->Output($filename, 'S'));
  }
}

// function webform2pdf_download_pdf_form_submit()

/*
 * webform2pdf_url_encode: pdf download anonymous url generation.
 */
function webform2pdf_url_decode($url) {
  $url = webform2pdf_hash('decrypt', $url);
  if (FALSE !== $url) {
    list(, $nid, , $sid) = explode('/', $url);
    if (is_numeric($nid) && is_numeric($sid)) {
      $node = webform_menu_load($nid);
      $submission = webform_menu_submission_load($sid, $nid);
      if (!empty($node) && !empty($submission)) {
        return webform2pdf_submission_download_pdf($node, $submission);
      }
    }
  }
  return MENU_NOT_FOUND;
}

// function webform2pdf_url_encode()