You are here

webform2pdf.module in Webform2PDF 7.3

Same filename and directory in other branches
  1. 6.2 webform2pdf.module
  2. 6 webform2pdf.module
  3. 7.4 webform2pdf.module

File

webform2pdf.module
View source
<?php

/**
 * This menu appears only if 'Generate PDF' option is enabled
 */
function webform2pdf_enabled_pdf_access() {
  $param = func_get_args();
  $node = array_shift($param);
  $call = array_shift($param);
  $row = db_select('webform2pdf', 'w2p')
    ->fields('w2p', array(
    'enabled',
  ))
    ->condition('nid', $node->nid, '=')
    ->condition('enabled', 1, '=')
    ->execute()
    ->fetchAssoc();
  return $row['enabled'] && call_user_func_array($call, $param);
}

// function webform2pdf_enabled_pdf_access()

/**
 * Implements hook_menu().
 */
function webform2pdf_menu() {
  $items = array();
  $items['node/%webform_menu/webform/webform2pdf'] = array(
    'title' => 'Generate PDF',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'webform2pdf_edit_form',
      1,
    ),
    'access callback' => 'node_access',
    'access arguments' => array(
      'update',
      1,
    ),
    'file' => 'includes/webform2pdf.settings.inc',
    'weight' => 4,
    'type' => MENU_LOCAL_TASK,
  );
  $items['node/%webform_menu/webform-results/downloadpdf'] = array(
    'title' => 'Download PDF',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'webform2pdf_download_pdf_form',
      1,
    ),
    'access callback' => 'webform2pdf_enabled_pdf_access',
    'access arguments' => array(
      1,
      'webform_results_access',
      1,
    ),
    'file' => 'includes/webform2pdf.download.inc',
    'weight' => 9,
    'type' => MENU_LOCAL_TASK,
  );
  $items['node/%webform_menu/submission/%webform_menu_submission/downloadpdf'] = array(
    'title' => 'Download PDF',
    'load arguments' => array(
      1,
    ),
    'page callback' => 'webform2pdf_submission_download_pdf',
    'page arguments' => array(
      1,
      3,
    ),
    'access callback' => 'webform2pdf_enabled_pdf_access',
    'access arguments' => array(
      1,
      'webform_submission_access',
      1,
      3,
      'view',
    ),
    'file' => 'includes/webform2pdf.download.inc',
    'weight' => 6,
    'type' => MENU_LOCAL_TASK,
  );
  $items['admin/config/content/webform2pdf'] = array(
    'title' => 'Webform to PDF',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'webform2pdf_admin_settings',
    ),
    'access callback' => 'user_access',
    'access arguments' => array(
      'administer site configuration',
    ),
    'description' => 'Global configuration of webform2pdf functionality.',
    'file' => 'includes/webform2pdf.settings.inc',
    'type' => MENU_NORMAL_ITEM,
  );

  /*  $items['webform2pdf/%'] = array(
      'title' => 'Download PDF',
      'access arguments' => TRUE,
      'page callback' => 'webform2pdf_url_decode',
      'page arguments' => array(1),
      'file' => 'includes/webform2pdf.download.inc',
      'weight' => 4,
      'type' => MENU_CALLBACK,
    );*/
  return $items;
}

// function webform2pdf_menu()

/**
 * Implements hook_theme().
 */
function webform2pdf_theme() {
  return array(
    // webform2pdf.module
    // webform2pdf.settings.inc
    'webform2pdf_token_help' => array(
      'variables' => array(
        'groups' => array(),
        'tokens' => array(),
      ),
      'file' => 'includes/webform2pdf.settings.inc',
    ),
    'webform2pdf_pdf_init' => array(
      'variables' => array(
        'node' => NULL,
        'template' => NULL,
      ),
    ),
    'webform2pdf_pdf_header' => array(
      'variables' => array(
        'pdf' => NULL,
        'node' => NULL,
        'template' => NULL,
      ),
    ),
    'webform2pdf_pdf_page' => array(
      'variables' => array(
        'pdf' => NULL,
        'node' => NULL,
        'template' => NULL,
      ),
    ),
    'webform2pdf_pdf_content' => array(
      'variables' => array(
        'pdf' => NULL,
        'node' => NULL,
        'template' => NULL,
      ),
    ),
    'webform2pdf_pdf_footer' => array(
      'variables' => array(
        'pdf' => NULL,
        'node' => NULL,
        'template' => NULL,
      ),
    ),
    'webform2pdf_mail2pdf' => array(
      'variables' => array(
        'nid' => NULL,
        'sid' => NULL,
      ),
    ),
    'webform2pdf_filename' => array(
      'variables' => array(
        'node' => NULL,
        'submission' => NULL,
      ),
    ),
    'webform2pdf_content' => array(
      'variables' => array(
        'node' => NULL,
        'submission' => NULL,
        'template' => NULL,
      ),
    ),
  );
}

// function webform2pdf_theme()

/**
 * Implements hook_help().
 */
function webform2pdf_help($path, $arg) {
  global $base_url;
  switch ($path) {
    case 'node/%/webform-results/downloadpdf':
      return $output = '<p>' . t('A PDF document will be generated from the marked results.') . '</p>';
      break;
  }
}

// function webform2pdf_help()
function webform2pdf_send2pdf($node, $submission) {
  $webform2pdf = _webform2pdf_get_template($node->nid);
  $nopdf = array();
  if (isset($webform2pdf['enabled']) && $webform2pdf['enabled'] && $webform2pdf['pdf_send_email']) {
    $no_mail = unserialize($webform2pdf['no_send_email_addr']);
    if (is_array($no_mail)) {
      $no_mail = array_diff($no_mail, array(
        0,
      ));
      if (!empty($no_mail)) {
        foreach ($no_mail as $eid) {
          $email_addresses = $node->webform['emails'][$eid]['email'];
          if (isset($node->webform['components'][$email_addresses])) {
            $email_addresses = $submission->data[$eid]['value'];
          }
          else {
            $email_addresses = array_filter(explode(',', check_plain($node->webform['emails'][$eid]['email'])));
          }
          $nopdf = array_merge($nopdf, $email_addresses);
          $nopdf = array_map("trim", $nopdf);
        }
      }
    }

    // Check for a multi-page form that is not yet complete.
    return array(
      'nid' => $node->nid,
      'sid' => $submission->sid,
      'nopdf' => $nopdf,
    );
  }
}

/**
 * Adds a pdf download link to the webform submission page.
 */
function webform2pdf_preprocess_webform_results_submissions(&$vars) {
  $rows =& $vars['table']['#rows'];
  $i = 0;
  $table_row_keys = array_keys($vars['table']['#rows']);
  foreach ($vars['submissions'] as $sid => $submission) {
    if (webform2pdf_enabled_pdf_access($vars['node'], 'webform_submission_access', $vars['node'], $submission, 'view')) {
      $rows[$table_row_keys[$i]][] = l(t('Download PDF'), 'node/' . $submission->nid . '/submission/' . $submission->sid . '/downloadpdf');
    }
    else {
      $rows[$table_row_keys[$i]][] = '';
    }
    $i++;
  }
  $header_keys = array_keys($vars['table']['#header']);
  $last_header_key = array_pop($header_keys);
  $vars['table']['#operation_total'] += 1;
  $vars['table']['#header'][$last_header_key]['colspan'] += 1;
}

/*
 * _webform2pdf_get_template: returns the PDF settings of the given webform
 */
function _webform2pdf_get_template($nid) {
  $row = db_select('webform2pdf', 'w2p')
    ->fields('w2p')
    ->condition('nid', $nid, '=')
    ->condition('enabled', 1, '=')
    ->execute()
    ->fetchAssoc();
  $row['p_body'] = check_markup($row['p_body'], $row['format'], FALSE);
  return $row;
}

// function _webform2pdf_get_template()

/**
 * Return all the submissions for a particular node.
 * Original function webform module: webform_get_submissions.
 *
 * @param $nid
 *   The node ID for which submissions are being fetched.
 * @param $header
 *   If the results of this fetch will be used in a sortable
 *   table, pass the array header of the table.
 * @param $sids
 *   Optional; the submissions ID to filter the submissions by.
 * @return $submissions
 *   An array of submissions matching your filters.
 */
function _webform2pdf_get_submissions($nid, $header = NULL, $sids = array()) {
  $query = db_select('webform_submissions', 's')
    ->condition('s.nid', $nid, '=');
  if (count($sids)) {
    $query
      ->condition('s.sid', $sids, 'IN');
  }
  $query
    ->leftJoin('webform_submitted_data', 'sd', 'sd.sid = s.sid');
  $query
    ->leftJoin('users', 'u', 'u.uid = s.uid');
  $query
    ->fields('s')
    ->fields('sd', array(
    'cid',
    'no',
    'data',
  ))
    ->fields('u', array(
    'name',
  ));
  if ($header) {
    $query = $query
      ->extend('TableSort');
    $query
      ->orderByHeader($header);
  }
  $result = $query
    ->execute();
  $previous = 0;
  foreach ($result as $row) {
    if ($row->sid != $previous) {
      $submissions[$row->sid] = new stdClass();
      $submissions[$row->sid]->sid = $row->sid;
      $submissions[$row->sid]->nid = $row->nid;
      $submissions[$row->sid]->submitted = $row->submitted;
      $submissions[$row->sid]->remote_addr = $row->remote_addr;
      $submissions[$row->sid]->uid = $row->uid;
      $submissions[$row->sid]->name = $row->name;
      $submissions[$row->sid]->is_draft = $row->is_draft;
    }
    $submissions[$row->sid]->data[$row->cid]['value'][$row->no] = $row->data;
    $previous = $row->sid;
  }
  return $submissions;
}

// function _webform2pdf_get_submissions()
function theme_webform2pdf_filename($vars) {
  $sid = is_object($vars['submission']) ? $vars['submission']->sid : $vars['submission'];
  $pdf_file_name = "webform_submission-" . $vars['node']->nid;
  $pdf_file_name .= !empty($sid) ? '-' . $sid : '';
  $pdf_file_name .= ".pdf";
  return $pdf_file_name;
}

/*
 * _webform2pdf_init_tcpdf: PDF initializing
 */
function _webform2pdf_init_tcpdf($node, $template) {
  global $base_url;
  $tcpdf_dir = libraries_get_path('tcpdf');
  if (defined('K_TCPDF_EXTERNAL_CONFIG')) {
    define('K_TCPDF_EXTERNAL_CONFIG', TRUE);
    define('K_PATH_MAIN', dirname($_SERVER['SCRIPT_FILENAME']));
    define('K_PATH_URL', $base_url);
    define('K_PATH_FONTS', $tcpdf_dir . '/fonts/');
    define('K_PATH_CACHE', $tcpdf_dir . '/cache/');
    define('K_PATH_IMAGES', '');
    define('K_BLANK_IMAGE', $tcpdf_dir . '/images/_blank.png');
    define('K_CELL_HEIGHT_RATIO', 1.25);
    define('K_SMALL_RATIO', 2 / 3);
  }
  if (is_file($tcpdf_dir . '/tcpdf.php')) {
    include_once drupal_get_path('module', 'webform2pdf') . '/webform2pdf.class.inc';
    $font = array(
      variable_get('p_font_family', 'dejavuserif'),
      '',
      variable_get('p_font_size', 12),
    );

    // create new PDF document
    $pdf = new W2PDF($template['page_orientation'], 'mm', $template['page_format'], TRUE);

    // set document information
    $pdf
      ->SetCreator(variable_get('site_name', 'Drupal'));
    $pdf
      ->SetAuthor($node->name);
    $pdf
      ->SetTitle($node->title);
    $pdf
      ->setPDFVersion('1.6');
    return $pdf;
  }
  else {
    return;
  }
}

// function _webform2pdf_init_tcpdf()

/*
 * theme_webform2pdf_pdf_init: pdf initializing, theme hook
 */
function theme_webform2pdf_pdf_init($vars) {
  return _webform2pdf_init_tcpdf($vars['node'], $vars['template']);
}

// function theme_webform2pdf_pdf_init()

/*
 * _webform2pdf_pdf_header: pdf header data
 */
function _webform2pdf_pdf_header($pdf, $node, $template) {
  if (!empty($template['h_left_logo'])) {
    $f = file_load($template['h_left_logo']);
    $s = image_get_info($f->uri);
    $logo['left'] = drupal_realpath($f->uri);

    // 75dpi image, image size convert millimeter
    $size['left']['w'] = $s['width'] / 75 * 25;
    $size['left']['h'] = $s['height'] / 75 * 25;
  }
  else {
    $logo['left'] = '';
    $size['left']['w'] = 0;
    $size['left']['h'] = 0;
  }
  if (!empty($template['h_right_logo'])) {
    $f = file_load($template['h_right_logo']);
    $s = image_get_info($f->uri);
    $logo['right'] = drupal_realpath($f->uri);

    // 75dpi image, image size convert millimeter
    $size['right']['w'] = $s['width'] / 75 * 25;
    $size['right']['h'] = $s['height'] / 75 * 25;
  }
  else {
    $logo['right'] = '';
    $size['right']['w'] = 0;
    $size['right']['h'] = 0;
  }
  if (!empty($template['p_background'])) {
    $f = file_load($template['p_background']);
    $background = drupal_realpath($f->uri);
  }
  else {
    $background = NULL;
  }

  // set header font
  $pdf
    ->setHeaderFont(array(
    $template['h_font_family'],
    '',
    $template['h_font_size'],
  ));

  // set header margin
  $pdf
    ->setHeaderMargin(5);

  // webform filter
  $header_msg = nl2br(_webform_filter_values($template['h_txt'], $node, NULL, NULL, FALSE));

  // set header data
  $pdf
    ->setHeaderData($logo, $size, $header_msg, $template['h_txt_align'], array(), array(), $background);
  return $pdf;
}

// function _webform2pdf_pdf_header()

/*
 * _webform2pdf_pdf_header: pdf header theme hook
 */
function theme_webform2pdf_pdf_header($vars) {
  return _webform2pdf_pdf_header($vars['pdf'], $vars['node'], $vars['template']);
}

// function theme_webform2pdf_pdf_header()

/*
 * _webform2pdf_pdf_footer: pdf footer data
 */
function _webform2pdf_pdf_footer($pdf, $node, $template) {
  if (!empty($template['f_left_logo'])) {
    $f = file_load($template['f_left_logo']);
    $s = image_get_info($f->uri);
    $logo['left'] = drupal_realpath($f->uri);

    // 75dpi image, image size convert millimeter
    $size['left']['w'] = $s['width'] / 75 * 25;
    $size['left']['h'] = $s['height'] / 75 * 25;
  }
  else {
    $logo['left'] = '';
    $size['left']['w'] = 0;
    $size['left']['h'] = 0;
  }
  if (!empty($template['f_right_logo'])) {
    $f = file_load($template['f_right_logo']);
    $s = image_get_info($f->uri);
    $logo['right'] = drupal_realpath($f->uri);

    // 75dpi image, image size convert millimeter
    $size['right']['w'] = $s['width'] / 75 * 25;
    $size['right']['h'] = $s['height'] / 75 * 25;
  }
  else {
    $logo['right'] = '';
    $size['right']['w'] = 0;
    $size['right']['h'] = 0;
  }

  // set footer font
  $pdf
    ->setFooterFont(array(
    $template['f_font_family'],
    '',
    $template['f_font_size'],
  ));

  // set footer margin
  $pdf
    ->setFooterMargin(5);

  // webform filter
  $footer_msg = nl2br(_webform_filter_values($template['f_txt'], $node, NULL, NULL, FALSE));

  // set footer data
  $pdf
    ->SetFooterData($logo, $size, $footer_msg, $template['f_txt_align']);
  return $pdf;
}

// function _webform2pdf_pdf_footer()

/*
 * theme_webform2pdf_pdf_footer: pdf footer theme hook
 */
function theme_webform2pdf_pdf_footer($vars) {
  return _webform2pdf_pdf_footer($vars['pdf'], $vars['node'], $vars['template']);
}

// function theme_webform2pdf_pdf_footer()

/*
 * _webform2pdf_pdf_page: pdf page init
 */
function _webform2pdf_pdf_page($pdf) {

  // set margins
  $pdf
    ->SetMargins(15, 20, 15);

  // set auto page breaks
  $pdf
    ->SetAutoPageBreak(TRUE, 25);

  // set image scale factor
  $pdf
    ->setImageScale(4);

  // set image compression quality
  $pdf
    ->setJPEGQuality(100);
  return $pdf;
}

// function _webform2pdf_pdf_page()

/*
 * theme_webform2pdf_pdf_page: pdf page theme hook
 */
function theme_webform2pdf_pdf_page($vars) {
  return _webform2pdf_pdf_page($vars['pdf']);
}

// function theme_webform2pdf_pdf_page()

/*
 * _webform2pdf_pdf_content: Fills PDF page with content
 */
function _webform2pdf_pdf_content($pdf, $node, $template) {
  $pdf
    ->SetFont($template['p_font_family'], '', $template['p_font_size']);
  foreach ($template['pages'] as $page) {

    // add a page
    $pdf
      ->AddPage();
    $pdf
      ->writeHTML($page, TRUE, FALSE, FALSE, FALSE, $template['p_txt_align']);
  }
  return $pdf;
}

// function _webform2pdf_pdf_content()

/*
 * theme_webform2pdf_pdf_content: pdf content theme hook
 */
function theme_webform2pdf_pdf_content($vars) {
  return _webform2pdf_pdf_content($vars['pdf'], $vars['node'], $vars['template']);
}

// function theme_webform2pdf_pdf_content()
function theme_webform2pdf_content($vars) {
  $email = array(
    'html' => 'text',
    'excluded_components' => array(),
  );
  $p_body = _webform_filter_values($vars['template']['p_body'], $vars['node'], $vars['submission'], $email, FALSE, TRUE);
  return _webform2pdf_filter_values($p_body, $vars['node'], $vars['submission']);
}

// function theme_webform2pdf_pdf_content()
function _webform2pdf_filter_values($string, $node, $submission) {
  $tokens = array();
  foreach ($node->webform['components'] as $component) {
    if (isset($component['type']) && $component['type'] == 'select') {
      $values = isset($submission->data[$component['cid']]['value']) ? $submission->data[$component['cid']]['value'] : '';
      if (is_array($values)) {
        $items = explode("<nl2br>", preg_replace("/(\r\n)+|(\n|\r)+/", "<nl2br>", $component['extra']['items']));
        $options = array();
        foreach ($items as $item) {
          if (strpos($item, '|') === FALSE) {
            $key = $option = $item;
          }
          else {
            $key = drupal_substr($item, 0, strpos($item, '|'));
            $option = drupal_substr($item, strpos($item, '|') + 1);
          }
          $options[$key] = $option;
        }
        $nl = $all = $nl_all = array();
        foreach ($options as $key => $option) {
          if (in_array($option, $values) || in_array($key, $values)) {
            if (!empty($option)) {
              $nl[] = ' - ' . $option . "<br />\n";
              $all[] = '<u><b><span class="selected">' . $option . '</span></b></u>';
              $nl_all[] = ' [X] ' . $option . "<br />\n";
            }
          }
          else {
            if (!empty($option)) {
              $all[] = $option;
              $nl_all[] = ' [  ] ' . $option . "<br />\n";
            }
          }
        }

        // select_or_other module support
        if (module_exists('select_or_other')) {
          $potential_values = array_merge(array_keys($options), array_values($options));
          $diff = array_diff($values, $potential_values);
          if (count($diff)) {
            foreach ($diff as $value) {
              if (!empty($value)) {
                $nl[] = ' - ' . check_plain($value) . "<br />\n";
                $all[] = '<u><b><span class="selected">' . check_plain($value) . '</span></b></u>';
                $nl_all[] = ' [X] ' . check_plain($value) . "<br />\n";
              }
            }
          }
        }
        $tokens['%label_nl[' . $component['form_key'] . ']'] = $component['name'] . ": <br />\n" . implode('', $nl);
        $tokens['%label_all[' . $component['form_key'] . ']'] = $component['name'] . ': ' . implode(', ', $all);
        $tokens['%label_all_nl[' . $component['form_key'] . ']'] = $component['name'] . ": <br />\n" . implode('', $nl_all);
        $tokens['%nl[' . $component['form_key'] . ']'] = implode('', $nl);
        $tokens['%all[' . $component['form_key'] . ']'] = implode(', ', $all);
        $tokens['%all_nl[' . $component['form_key'] . ']'] = implode('', $nl_all);
      }
      else {
        $tokens['%label_nl[' . $component['form_key'] . ']'] = $tokens['%label_all[' . $component['form_key'] . ']'] = $tokens['%label_all_nl[' . $component['form_key'] . ']'] = $tokens['%nl[' . $component['form_key'] . ']'] = $tokens['%all[' . $component['form_key'] . ']'] = $tokens['%all_nl[' . $component['form_key'] . ']'] = '';
      }
    }
  }
  drupal_alter('webform2pdf_tokens', $tokens, $node, $submission);
  return strtr($string, $tokens);
}

/*
 * webform2pdf_mail_alter: hook_mail_alter
 */
function webform2pdf_mail_alter(&$message) {
  if ($message['id'] == 'webform_submission' && isset($message['params']['node']) && isset($message['params']['submission'])) {
    $webform2pdf_send2pdf = webform2pdf_send2pdf($message['params']['node'], $message['params']['submission']);
    if (isset($webform2pdf_send2pdf['nid'])) {
      $attach_pdf = 1;
      if (!empty($webform2pdf_send2pdf['nopdf'])) {
        if (in_array($message['to'], $webform2pdf_send2pdf['nopdf'])) {
          $attach_pdf = 0;
        }
      }
      if ($attach_pdf) {
        $node = node_load($webform2pdf_send2pdf['nid']);
        $filename = theme('webform2pdf_filename', array(
          'node' => $node,
          'submission' => $webform2pdf_send2pdf['sid'],
        ));
        unset($node);
        if (webform_email_html_capable()) {
          if (module_exists('mimemail')) {
            $attachment = new stdClass();
            $attachment->filecontent = theme('webform2pdf_mail2pdf', array(
              'nid' => $webform2pdf_send2pdf['nid'],
              'sid' => $webform2pdf_send2pdf['sid'],
            ));
            $attachment->filename = $filename;
            $attachment->filemime = 'application/pdf';
            $message['params']['attachments'][] = $attachment;
          }
        }
        else {
          $trenner = '------------' . md5(uniqid(time()));
          $content_type = $message['headers']['Content-Type'];
          $message['headers']['Content-Type'] = 'multipart/mixed; boundary="' . $trenner . '"';
          unset($message['headers']['Content-Transfer-Encoding']);
          $body = "\n\n--" . $trenner . "\n" . "Content-Type: " . $content_type . "\n" . "Content-Transfer-Encoding: 8bit\n\n";
          $body .= is_array($message['body']) ? drupal_wrap_mail(implode("\n\n", $message['body'])) : drupal_wrap_mail($message['body']);
          unset($message['body']);
          $message['body'][0] = $body;
          unset($body);
          $message['body'][0] .= "\n\n--" . $trenner . "\n";
          $message['body'][0] .= "Content-Type: application/pdf; name=\"" . $filename . "\"\n";
          $message['body'][0] .= "Content-Transfer-Encoding: base64\n";
          $message['body'][0] .= "Content-Disposition: attachment; filename=\"" . $filename . "\"\n\n";
          $message['body'][0] .= chunk_split(base64_encode(theme('webform2pdf_mail2pdf', array(
            'nid' => $webform2pdf_send2pdf['nid'],
            'sid' => $webform2pdf_send2pdf['sid'],
          ))));
          $message['body'][0] .= "\n\n";
          $message['body'][0] .= "--" . $trenner . "--";
        }
      }
    }
  }
}

// function webform2pdf_mail_alter()

/*
 * theme_webform2pdf_mail2pdf(): mail attachment pdf
 */
function theme_webform2pdf_mail2pdf($vars) {
  $node = node_load($vars['nid']);
  $get_submissions = _webform2pdf_get_submissions($vars['nid'], NULL, array(
    $vars['sid'],
  ));
  $submission = array_shift($get_submissions);
  $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();

    // Return PDF document
    return $pdf
      ->Output('filename', 'S');
  }
}

// function theme_webform2pdf_mail2pdf()

/*
 * webform2pdf_url_encode: pdf download anonymous url generation.
 */
function webform2pdf_url_encode($nid, $sid, $encode = TRUE) {
  $url = 'node/' . $nid . '/submission/' . $sid . '/downloadpdf';
  if ($encode && function_exists('mcrypt_encrypt')) {
    $key = variable_get('webform2pdf_key', '');
    return 'webform2pdf/' . urlencode(trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $url, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))));
  }
  return $url;
}

// function webform2pdf_url_encode()