From 216fca468f905bf733b0f8020a45de6f363e37b8 Mon Sep 17 00:00:00 2001
From: fedik <getthesite{at}gmail.com>
Date: Sun, 19 Feb 2012 17:13:33 +0200
Subject: [PATCH] add page background

---
 includes/webform2pdf.download.inc |    8 --
 includes/webform2pdf.settings.inc |  135 +++++++++++++++++++++++++++++++++++--
 webform2pdf.class.inc             |   27 +++++++-
 webform2pdf.install               |    9 +++
 webform2pdf.module                |   30 ++++----
 5 files changed, 179 insertions(+), 30 deletions(-)

diff --git a/includes/webform2pdf.download.inc b/includes/webform2pdf.download.inc
index 763e846..3eadd0e 100644
--- a/includes/webform2pdf.download.inc
+++ b/includes/webform2pdf.download.inc
@@ -166,14 +166,6 @@ function webform2pdf_download_pdf_form_submit($form, &$form_state) {
   }
 } // function webform2pdf_download_pdf_form_submit()
 
-/**
- * callback for user download link
-
-function webform2pdf_submission_download_pdf_site($node, $submission) {
-  //krumo($node, $submission);
-  return webform2pdf_submission_download_pdf($node, $submission, 'I');
-}
- */
 /*
  * webform2pdf_url_encode: pdf download anonymous url generation.
  */
diff --git a/includes/webform2pdf.settings.inc b/includes/webform2pdf.settings.inc
index 569399c..b47f907 100644
--- a/includes/webform2pdf.settings.inc
+++ b/includes/webform2pdf.settings.inc
@@ -34,6 +34,41 @@ function webform2pdf_admin_settings($form, &$form_state) {
     '#maxlength' => 255,
   );
 
+  //background image
+  $form['base']['p_background'] = array(
+    '#type' => 'value',
+    '#value' => $default['p_background'],
+  );
+
+  if ($default['p_background']) {
+    $file = file_load($default['p_background']);
+
+    $picture = array(
+      'path' => $file->uri,
+      'alt' => 'Page background',
+      'title' => $file->filename,
+      'style_name' =>'square_thumbnail',
+    );
+
+    $form['base']['p_background_img'] = array(
+      '#type' => 'item',
+      '#title' => t('Background image for page'),
+      '#markup' => theme('image_style', $picture),
+    );
+    $form['base']['p_background_del'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Delete this image.'),
+    );
+  }
+  else {
+    $form['base']['p_background_file'] = array(
+      '#type' => 'file',
+      '#title' => t('Background image for page.'),
+      '#size' => 60,
+      '#description' => t('Upload background image for page. Image will be scaled by page size.'),
+    );
+  }
+
   $form['base']['page_format'] = array(
     '#type' => 'select',
     '#title' => t('Paper size'),
@@ -464,6 +499,18 @@ function webform2pdf_admin_settings_submit($form, &$form_state) {
     }
   }
 
+  //delete page bg
+  if ( isset($form_state['values'][ 'p_background_del'] )) {
+    $bg_file = file_load($form_state['values']['p_background']);
+    file_usage_delete($bg_file, 'webform2pdf', 'p_background', 0);
+    file_delete($bg_file);
+    $form_state['values']['p_background'] = 0;
+  }
+  //save page bg
+  if(isset($form_state['values']['p_background_file'])){
+    $form_state['values']['p_background'] = _webform2pdf_save_page_bg();
+  }
+
   // Header and footer image file save.
   foreach (array('h_left_logo', 'h_right_logo', 'f_left_logo', 'f_right_logo') as $logo) {
     if ( isset($form_state['values'][$logo . '_file']) ) {
@@ -492,7 +539,7 @@ function webform2pdf_admin_settings_submit($form, &$form_state) {
   foreach (array('h_left_logo_del', 'h_right_logo_del', 'f_left_logo_del', 'f_right_logo_del',
     'h_left_logo_img', 'h_right_logo_img', 'f_left_logo_img', 'f_right_logo_img',
     'h_left_logo_file', 'h_right_logo_file', 'f_left_logo_file', 'f_right_logo_file',
-    'op', 'submit', 'form_build_id', 'form_token', 'form_id') as $del) {
+    'op', 'submit', 'form_build_id', 'form_token', 'form_id','p_background_del','p_background_file') as $del) {
     unset($save[$del]);
   }
   $save['p_body'] = $form_state['values']['p_body']['value'];
@@ -583,6 +630,8 @@ function webform2pdf_edit_form($form, &$form_state, $node) {
     ),
   );
 
+
+
   $form['base']['page_format'] = array(
     '#type' => 'select',
     '#title' => t('Paper size'),
@@ -628,6 +677,39 @@ function webform2pdf_edit_form($form, &$form_state, $node) {
     ),
   );
 
+  //background image
+  $form['base']['p_background'] = array(
+    '#type' => 'value',
+    '#value' => $default['p_background'],
+  );
+  if ($default['p_background']) {
+    $file = file_load($default['p_background']);
+
+    $picture = array(
+      'path' => $file->uri,
+      'alt' => 'Page background',
+      'title' => $file->filename,
+      'style_name' =>'square_thumbnail',
+    );
+    $form['base']['p_background_img'] = array(
+      '#type' => 'item',
+      '#title' => t('Background image for page'),
+      '#markup' => theme('image_style', $picture),
+    );
+    $form['base']['p_background_del'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Delete this image.'),
+    );
+  }
+  else {
+    $form['base']['p_background_file'] = array(
+      '#type' => 'file',
+      '#title' => t('Background image for page.'),
+      '#size' => 60,
+      '#description' => t('Upload background image for page. Image will be scaled by page size.'),
+    );
+  }
+
   // download settings
   $form['download'] = array(
     '#type' => 'fieldset',
@@ -636,7 +718,7 @@ function webform2pdf_edit_form($form, &$form_state, $node) {
     '#collapsed' => TRUE,
     '#states' => array(
       'visible' => array(
-      	'input[name="enabled"]' => array('checked' => TRUE),
+        'input[name="enabled"]' => array('checked' => TRUE),
       ),
     ),
   );
@@ -1109,6 +1191,7 @@ function webform2pdf_edit_form_submit($form, &$form_state) {
     $save['format'] = $form_state['values']['p_body']['format'];
     $save['pdf_download_title'] = $form_state['values']['pdf_download_title'];
     $save['pdf_download_roles'] = $form_state['values']['pdf_download_roles'];
+    $save['p_background'] = $form_state['values']['p_background'];
 
     // First enabled
     if (isset($form_state['values']['new'])) {
@@ -1122,13 +1205,17 @@ function webform2pdf_edit_form_submit($form, &$form_state) {
             elseif (!empty($form_state['values'][$logo])) {
               $save[$logo] = $form_state['values'][$logo];
               $file = file_load($save[$logo]);
-              file_usage_add($file, 'webform2pdf', $logo, 1);
+              file_usage_add($file, 'webform2pdf', $logo, $form_state['values']['nid']);
             }
           }
           if ( isset($form_state['values'][$logo . '_file']) ) {
             $save[$logo] = _webform2pdf_save_logo($logo, $form_state['values']['nid']);
           }
         }
+        //background image
+        if ( isset($form_state['values']['p_background_file']) ) {
+          $save['p_background'] = _webform2pdf_save_page_bg($form_state['values']['nid']);
+        }
 
         db_insert('webform2pdf')
           ->fields(array(
@@ -1157,6 +1244,7 @@ function webform2pdf_edit_form_submit($form, &$form_state) {
             'format' => $save['format'],
             'pdf_download_title' => $save['pdf_download_title'],
             'pdf_download_roles' => serialize($save['pdf_download_roles']),
+            'p_background' =>$save['p_background'],
           ))
           ->execute();
       }
@@ -1167,13 +1255,25 @@ function webform2pdf_edit_form_submit($form, &$form_state) {
         if ( isset($form_state['values'][$logo . '_del']) ) {
           if ( $form_state['values'][$logo . '_del'] ) {
             $logo_file = file_load($form_state['values'][$logo]);
-            file_usage_delete($logo_file, 'webform2pdf', $logo, 1);
+            file_usage_delete($logo_file, 'webform2pdf', $logo, $form_state['values']['nid']);
             file_delete($logo_file);
             $save[$logo] = 0;
           }
         }
       }
 
+      //background image
+      if ( !empty($form_state['values']['p_background_del'] )) {
+        $bg_file = file_load($form_state['values']['p_background']);
+        file_usage_delete($bg_file, 'webform2pdf', 'p_background', $form_state['values']['nid']);
+        file_delete($bg_file);
+        $save['p_background'] = 0;
+      }
+      //save
+      if(isset($form_state['values']['p_background_file'])){
+        $save['p_background'] = _webform2pdf_save_page_bg($form_state['values']['nid']);
+      }
+
       // Header and footer image file save.
       foreach (array('h_left_logo', 'h_right_logo', 'f_left_logo', 'f_right_logo') as $logo) {
         if ( isset($form_state['values'][$logo . '_file']) ) {
@@ -1208,12 +1308,20 @@ function webform2pdf_edit_form_submit($form, &$form_state) {
     $save['format'] = $webform2pdf_default['format'];
     $save['pdf_download_title'] = $webform2pdf_default['pdf_download_title'];
     $save['pdf_download_roles'] = $webform2pdf_default['pdf_download_roles'];
+    $save['p_background'] = $webform2pdf_default['p_background'];
+
+    //delete bg
+    $bg_file = file_load($form_state['values']['p_background']);
+    if ($bg_file) {
+      file_usage_delete($bg_file, 'webform2pdf', 'p_background', $form_state['values']['nid']);
+      file_delete($bg_file);
+    }
 
     // Image file deleted.
     foreach (array('h_left_logo', 'h_right_logo', 'f_left_logo', 'f_right_logo') as $logo) {
       $logo_file = file_load($form_state['values'][$logo]);
       if ($logo_file) {
-        file_usage_delete($logo_file, 'webform2pdf', $logo, 1);
+        file_usage_delete($logo_file, 'webform2pdf', $logo, $form_state['values']['nid']);
         file_delete($logo_file);
       }
     }
@@ -1247,6 +1355,7 @@ function webform2pdf_edit_form_submit($form, &$form_state) {
         'format' => $save['format'],
         'pdf_download_title' => $save['pdf_download_title'],
         'pdf_download_roles' => serialize($save['pdf_download_roles']),
+        'p_background' => $save['p_background'],
       ))
       ->condition('nid', $form_state['values']['nid'], '=')
       ->execute();
@@ -1275,3 +1384,19 @@ function _webform2pdf_save_logo($logo, $nid) {
   }
   return 0;
 }
+
+function _webform2pdf_save_page_bg($nid = 0) {
+  if ( $file = file_save_upload('p_background_file', array('file_validate_is_image' => array()) ) ) {
+    $webform2pdf_directory =  file_default_scheme() . '://' . 'webform2pdf';
+    // Prepare the pictures directory.
+    file_prepare_directory($webform2pdf_directory, FILE_CREATE_DIRECTORY);
+    $destination = file_stream_wrapper_uri_normalize($webform2pdf_directory);
+    if ($file = file_move($file, $destination, FILE_EXISTS_RENAME)) {
+      $file->status |= FILE_STATUS_PERMANENT;
+      $file = file_save($file);
+      file_usage_add($file, 'webform2pdf', 'p_background', $nid);
+      return $file->fid;
+    }
+  }
+  return 0;
+}
diff --git a/webform2pdf.class.inc b/webform2pdf.class.inc
index 8e0fc90..1a720df 100644
--- a/webform2pdf.class.inc
+++ b/webform2pdf.class.inc
@@ -45,17 +45,24 @@ class W2PDF extends TCPDF {
   protected $footer_string_align = array();
 
   /**
+   * path to background image
+   * @var string
+   */
+  protected $background = NULL;
+
+  /**
    * Set header data.
    * @param array $ln header left, right image logo
    * @param array $lw header left, right image logo width in mm
    * @param string $hs string to print on document header
    * @param string $hsa align string to print on document header
    */
-  public function setHeaderData($ln=array(), $ls=array(), $hs='', $hsa='') {
+  public function setHeaderData($ln=array(), $ls=array(), $hs='', $hsa='', $background = NULL) {
     $this->header_logo = $ln;
     $this->header_logo_size = $ls;
     $this->header_string = $hs;
     $this->header_string_align = $hsa;
+    $this->background = $background;
   }
 
   /**
@@ -69,6 +76,7 @@ class W2PDF extends TCPDF {
     $ret['logo_size'] = $this->header_logo_size;
     $ret['string'] = $this->header_string;
     $ret['align'] = $this->header_string_align;
+    $ret['background'] = $this->background;
     return $ret;
   }
 
@@ -114,6 +122,21 @@ class W2PDF extends TCPDF {
 
     $empty_header = 1;
 
+    if($headerdata['background']){
+      // get the current page break margin
+      $bMargin = $this->getBreakMargin();
+      // get current auto-page-break mode
+      $auto_page_break = $this->AutoPageBreak;
+      // disable auto-page-break
+      $this->SetAutoPageBreak(false, 0);
+      //Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false, $alt=false, $altimgs=array())
+      $this->Image($headerdata['background'], 0, 0, $this->w, $this->h, '', '', '', false, 300, '', false, false, 0);
+      // restore auto-page-break status
+      $this->SetAutoPageBreak($auto_page_break, $bMargin);
+      // set the starting point for the page content
+      $this->setPageMark();
+    }
+
     if ( (!empty($headerdata['logo']['left'])) && (!empty($headerdata['logo_size']['left']['w'])) ) {
       if (($headerdata['logo']['left']) AND ($headerdata['logo']['left'] != K_BLANK_IMAGE)) {
         $this->Image($headerdata['logo']['left'], $this->GetX(), $this->getHeaderMargin(), $headerdata['logo_size']['left']['w']);
@@ -251,4 +274,4 @@ class W2PDF extends TCPDF {
       $this->Cell(0, 0, '', 'T', 0, 'C');
     }
   }
-}
\ No newline at end of file
+}
diff --git a/webform2pdf.install b/webform2pdf.install
index 040d971..4678d23 100644
--- a/webform2pdf.install
+++ b/webform2pdf.install
@@ -20,6 +20,7 @@ function webform2pdf_install() {
     'h_left_logo_size' => '270x205', 'h_right_logo_size' => '270x205',
     'f_left_logo_size' => '270x56', 'f_right_logo_size' => '270x56',
     'pdf_download_roles' => array('2', '3'), 'pdf_download_title' => 'Download PDF',
+    'p_background' => 0,
   ));
 }
 
@@ -239,6 +240,14 @@ function webform2pdf_schema() {
         'description' => 'Text input format type.',
       ),
 
+      'p_background' => array(
+        'description' => 'Page background image.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+
       'pdf_download_roles' => array(
         'description' => 'Who have the accsess to the download link.',
         'type' => 'blob',
diff --git a/webform2pdf.module b/webform2pdf.module
index 3246e29..c100406 100644
--- a/webform2pdf.module
+++ b/webform2pdf.module
@@ -39,14 +39,6 @@ function webform2pdf_user_download_access($node, $submission) {
   }
 
   //check access for other
-
-//   $result = db_select('webform2pdf', 'w2p')
-//   ->fields('w2p', array('pdf_download_roles'))
-//   ->condition('nid', $node->nid, '=')
-//   ->execute()
-//   ->fetchAssoc();
-//   $allowed_roles = ($result) ? unserialize($result['pdf_download_roles']) : array();
-
   $settings = _webform2pdf_get_template($node->nid);
   $allowed_roles = ($settings) ? $settings['pdf_download_roles'] : array();
 
@@ -326,10 +318,10 @@ function webform2pdf_client_form_submit(&$form, &$form_state){
   $allowed_roles = ($settings) ? $settings['pdf_download_roles'] : array();
 
   foreach ($allowed_roles as $role) {
-  	if ($role && !empty($user->roles[$role])) {
-  		$allowed = TRUE;
-  		break;
-  	}
+    if ($role && !empty($user->roles[$role])) {
+      $allowed = TRUE;
+      break;
+    }
   }
 
   if ($allowed && $form_state['webform_completed']){
@@ -419,7 +411,7 @@ function webform2pdf_preprocess_webform_results_submissions(&$vars) {
 function _webform2pdf_get_template($nid) {
   static $row;
 
-  if (!$row || empty($row[$nid])){
+  if (!$row || empty($row[$nid])) {
 
     $row[$nid] = db_select('webform2pdf', 'w2p')
       ->fields('w2p')
@@ -504,7 +496,7 @@ function _webform2pdf_init_tcpdf($node, $template) {
 
   $tcpdf_dir = libraries_get_path('tcpdf');
 
-  if (defined('K_TCPDF_EXTERNAL_CONFIG')) {
+  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);
@@ -580,6 +572,14 @@ function _webform2pdf_pdf_header($pdf, $node, $template) {
     $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
@@ -589,7 +589,7 @@ function _webform2pdf_pdf_header($pdf, $node, $template) {
   $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']);
+  $pdf->setHeaderData($logo, $size, $header_msg, $template['h_txt_align'], $background);
 
   return $pdf;
 } // function _webform2pdf_pdf_header()
-- 
1.7.5.4

