Rolled back invalid update of stock_move costs on cost update.
[fa-stable.git] / reporting / includes / tcpdf.php
index 46ac9184477abd6f405f1224491c81b9deeef32a..803416a89396111855d865e50df1725f1a8b1dfd 100644 (file)
@@ -2,9 +2,9 @@
 //============================================================+
 // File name   : tcpdf.php
 // Begin       : 2002-08-03
-// Last Update : 2008-09-17
+// Last Update : 2008-09-19
 // Author      : Nicola Asuni - info@tecnick.com - http://www.tcpdf.org
-// Version     : 4.0.026_PHP4
+// Version     : 4.0.027_PHP4
 // License     : GNU LGPL (http://www.gnu.org/copyleft/lesser.html)
 //     ----------------------------------------------------------------------------
 //  Copyright (C) 2002-2008  Nicola Asuni - Tecnick.com S.r.l.
  * @copyright 2004-2008 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
  * @link http://www.tcpdf.org
  * @license http://www.gnu.org/copyleft/lesser.html LGPL
- * @version 4.0.026_PHP4
+ * @version 4.0.027_PHP4
  */
 
 /**
   *    and
   *    if (!defined("K_RE_PATTERN_ARABIC"))
   * 4. Parameter $unicode in constructor renamed to $uni.
-  * 4. Header function renamed to Header1 (due to conflict with FrontReport Header)
+  * 5. Header function renamed to Header1 (due to conflict with FrontReport Header)
+  * 6. Line 6190, SetLineWidth (cast of values to avoid problem in PHP 5.2.6
+  * 7. Line 6261. ereg replaced by preg_match (with start and end delimiter)
+  * 8. Lines 8642,9256 and 9348. split replaced by preg_split.
   * -------------------------------------------------------------------------------
   */
 if (!defined("K_PATH_FONTS"))
-       define ("K_PATH_FONTS", '../reporting/fonts/');
-define ("K_PATH_CACHE", '../reporting/fonts/');
+       define ("K_PATH_FONTS", dirname(__FILE__)."/../fonts/");
+define ("K_PATH_CACHE", dirname(__FILE__)."/../fonts/");
 define("K_CELL_HEIGHT_RATIO", 1.25);
 
 //require_once(dirname(__FILE__).'/config/tcpdf_config.php');
@@ -178,14 +181,14 @@ if (!class_exists('TCPDF')) {
        /**
         * define default PDF document producer
         */
-       define('PDF_PRODUCER','TCPDF 4.0.026_PHP4 (http://www.tcpdf.org)');
+       define('PDF_PRODUCER','TCPDF 4.0.027_PHP4 (http://www.tcpdf.org)');
 
        /**
        * This is a PHP class for generating PDF documents without requiring external extensions.<br>
        * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br>
        * @name TCPDF
        * @package com.tecnick.tcpdf
-       * @version 4.0.026_PHP4
+       * @version 4.0.027_PHP4
        * @author Nicola Asuni - info@tecnick.com
        * @link http://www.tcpdf.org
        * @license http://www.gnu.org/copyleft/lesser.html LGPL
@@ -1109,7 +1112,7 @@ if (!class_exists('TCPDF')) {
                 * @param boolean $unicode TRUE means that the input text is unicode (default = true)
                 * @param String $encoding charset encoding; default is UTF-8
                 */
-               function TCPDF($orientation='P', $unit='mm', $format='A4', $uni=true, $encoding="UTF-8") {
+               function __construct($orientation='P', $unit='mm', $format='A4', $uni=true, $encoding="UTF-8") {
                        if ($uni) // Fix for FrontAccounting
                        {
                                global $unicode, $unicode_mirror, $unicode_arlet, $laa_array, $diacritics;
@@ -1756,7 +1759,8 @@ if (!class_exists('TCPDF')) {
                */
                function Error($msg) {
                        //Fatal error
-                       die('<strong>TCPDF error: </strong>'.$msg);
+                       display_error('<strong>TCPDF error: </strong>'.$msg);
+                       exit;
                }
 
                /**
@@ -2602,9 +2606,9 @@ if (!class_exists('TCPDF')) {
                        if (isset($cw)) {
                                unset($cw);
                        }
-                       include($this->_getfontpath().$file);
+                       @include($this->_getfontpath().$file);
                        if ((!isset($type)) OR (!isset($cw))) {
-                               $this->Error('Could not include font definition file');
+                               $this->Error("Could not include font definition file: ".$file);
                        }
                        $i = count($this->fonts) + 1;
                        // register CID font (all styles at once)
@@ -3593,8 +3597,8 @@ if (!class_exists('TCPDF')) {
                                if ($type == "jpg") {
                                        $type = "jpeg";
                                }
-                               $mqr = get_magic_quotes_runtime();
-                               set_magic_quotes_runtime(0);
+                               $mqr = ini_get('magic_quotes_runtime');
+                               ini_set('magic_quotes_runtime', 0);
                                // Specific image handlers
                                $mtd = '_parse'.$type;
                                // GD image handler function
@@ -3621,7 +3625,7 @@ if (!class_exists('TCPDF')) {
                                        //If false, we cannot process image
                                        return;
                                }
-                               set_magic_quotes_runtime($mqr);
+                               ini_set('magic_quotes_runtime', $mqr);
                                $info['i'] = count($this->images) + 1;
                                // add image to document
                                $this->images[$file] = $info;
@@ -4501,8 +4505,8 @@ if (!class_exists('TCPDF')) {
                                $this->_out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.']>>');
                                $this->_out('endobj');
                        }
-                       $mqr = get_magic_quotes_runtime();
-                       set_magic_quotes_runtime(0);
+                       $mqr = ini_get('magic_quotes_runtime');
+                       ini_set('magic_quotes_runtime', 0);
                        foreach($this->FontFiles as $file => $info) {
                                //Font file embedding
                                $this->_newobj();
@@ -4532,7 +4536,7 @@ if (!class_exists('TCPDF')) {
                                $this->_putstream($font);
                                $this->_out('endobj');
                        }
-                       set_magic_quotes_runtime($mqr);
+                       ini_set('magic_quotes_runtime', $mqr);
                        foreach($this->fonts as $k => $font) {
                                //Font objects
                                $this->fonts[$k]['n'] = $this->n + 1;
@@ -4686,7 +4690,7 @@ if (!class_exists('TCPDF')) {
                function _putimages() {
                        $filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
                        reset($this->images);
-                       while (list($file, $info) = each($this->images)) {
+                       foreach ($this->images as $file => $info) {
                                $this->_newobj();
                                $this->images[$file]['n'] = $this->n;
                                $this->_out('<</Type /XObject');
@@ -5005,7 +5009,8 @@ if (!class_exists('TCPDF')) {
                * @access protected
                */
                function _putheader() {
-                       $this->_out('%PDF-'.$this->PDFVersion);
+                       $this->buffer = '%PDF-'.$this->PDFVersion."\n".$this->buffer;
+//                     $this->_out('%PDF-'.$this->PDFVersion);
                }
 
                /**
@@ -5726,10 +5731,7 @@ if (!class_exists('TCPDF')) {
                 * @return string converted
                 */
                function unhtmlentities($text_to_convert) {
-                       if (!$this->isunicode) {
-                               return html_entity_decode($text_to_convert);
-                       }
-                       return html_entity_decode_php4($text_to_convert);
+                       return html_entity_decode($text_to_convert, ENT_QUOTES, $this->encoding);
                }
 
                // ENCRYPTION METHODS ----------------------------------
@@ -6188,7 +6190,15 @@ if (!class_exists('TCPDF')) {
                function SetLineWidth($width) {
                        //Set line width
                        $this->LineWidth = $width;
-                       $this->linestyleWidth = sprintf('%.2f w', ($width * $this->k));
+                       //$this->linestyleWidth = sprintf('%.2f w', ($width * $this->k));
+                       // FrontAccounting fix
+                       // My PHP 5.2.6 environment gave an "Unsupported operand types"
+                       // error for the multiplication on the next line some of the
+                       // time when this method is called - I debugged and sometimes
+                       // the $width parameter is some sort of weird array.  I don't
+                       // understand what's going on, but casting it to a (float) seems
+                       // to "fix" the problem.  -Jason Maas, 2009/09/25
+                       $this->linestyleWidth = sprintf('%.2f w', ((float) $width * (float) $this->k));
                        $this->_out($this->linestyleWidth);
                }
 
@@ -6247,7 +6257,7 @@ if (!class_exists('TCPDF')) {
                        if (isset($dash)) {
                                $dash_string = "";
                                if ($dash) {
-                                       if (ereg("^.+,", $dash)) {
+                                       if (preg_match("/^.+,/", $dash)) {
                                                $tab = explode(",", $dash);
                                        } else {
                                                $tab = array($dash);
@@ -7698,6 +7708,9 @@ if (!class_exists('TCPDF')) {
                        if (empty($this->javascript)) {
                                return;
                        }
+                       // the following two lines are uded to avoid form fields duplication after saving
+                       $js1 = sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d,[%.2f,%.2f,%.2f,%.2f]);", 'tcpdfdocsaved', 'text', 0, 0, 1, 0, 1);
+                       $js2 = "getField('tcpdfdocsaved').value = 'saved';";
                        $this->_newobj();
                        $this->n_js = $this->n;
                        $this->_out('<<');
@@ -7707,7 +7720,7 @@ if (!class_exists('TCPDF')) {
                        $this->_newobj();
                        $this->_out('<<');
                        $this->_out('/S /JavaScript');
-                       $this->_out('/JS '.$this->_textstring($this->javascript));
+                       $this->_out('/JS '.$this->_textstring($js1."\n".$this->javascript."\n".$js2));
                        $this->_out('>>');
                        $this->_out('endobj');
                }
@@ -7744,10 +7757,12 @@ if (!class_exists('TCPDF')) {
                * @since 2.1.002 (2008-02-12)
                */
                function _addfield($type, $name, $x, $y, $w, $h, $prop) {
+                       // the followind avoid fields duplication after saving the document
+                       $this->javascript .= "if(getField('tcpdfdocsaved').value != 'saved') {";
                        $k = $this->k;
                        $this->javascript .= sprintf("f".$name."=this.addField('%s','%s',%d,[%.2f,%.2f,%.2f,%.2f]);", $name, $type, $this->PageNo()-1, $x*$k, ($this->h-$y)*$k+1, ($x+$w)*$k, ($this->h-$y-$h)*$k+1)."\n";
                        $this->javascript .= "f".$name.".textSize=".$this->FontSizePt.";\n";
-                       while (list($key, $val) = each($prop)) {
+                       foreach ($prop as $key => $val) {
                                if (strcmp(substr($key,-5),"Color") == 0) {
                                        $val = $this->_JScolor($val);
                                } else {
@@ -7756,6 +7771,7 @@ if (!class_exists('TCPDF')) {
                                $this->javascript .= "f".$name.".".$key."=".$val.";\n";
                        }
                        $this->x += $w;
+                       $this->javascript .= "}";
                }
 
                /*
@@ -8621,7 +8637,7 @@ if (!class_exists('TCPDF')) {
                                $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $scale_x, 0, 0, $scale_y, $x1*(1-$scale_x), $y2*(1-$scale_y)));
                        }
                        // handle pc/unix/mac line endings
-                       $lines = split("\r\n|[\r\n]", $data);
+                       $lines = preg_split("/\r\n|[\r\n]/", $data);
                        $u=0;
                        $cnt = count($lines);
                        for ($i=0; $i < $cnt; $i++) {
@@ -9220,7 +9236,7 @@ if (!class_exists('TCPDF')) {
                                                // get attributes
                                                preg_match_all('/([^=\s]*)=["\']?([^"\']*)["\']?/', $element, $attr_array, PREG_PATTERN_ORDER);
                                                $dom[$key]['attribute'] = array(); // reset attribute array
-                                               while (list($id, $name) = each($attr_array[1])) {
+                                               foreach ($attr_array[1] as $id => $name) {
                                                        $dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id];
                                                }
                                                // split style attributes
@@ -9228,14 +9244,14 @@ if (!class_exists('TCPDF')) {
                                                        // get style attributes
                                                        preg_match_all('/([^:\s]*):([^;]*)/', $dom[$key]['attribute']['style'], $style_array, PREG_PATTERN_ORDER);
                                                        $dom[$key]['style'] = array(); // reset style attribute array
-                                                       while (list($id, $name) = each($style_array[1])) {
+                                                       foreach ($style_array[1] as $id => $name) {
                                                                $dom[$key]['style'][strtolower($name)] = trim($style_array[2][$id]);
                                                        }
                                                        // --- get some style attributes ---
                                                        if (isset($dom[$key]['style']['font-family'])) {
                                                                // font family
                                                                if (isset($dom[$key]['style']['font-family'])) {
-                                                                       $fontslist = split(",", strtolower($dom[$key]['style']['font-family']));
+                                                                       $fontslist = preg_split("/,/", strtolower($dom[$key]['style']['font-family']));
                                                                        foreach($fontslist as $font) {
                                                                                $font = trim(strtolower($font));
                                                                                if (in_array($font, $this->fontlist)){
@@ -9327,7 +9343,7 @@ if (!class_exists('TCPDF')) {
                                                if ($dom[$key]['value'] == "font") {
                                                        // font family
                                                        if (isset($dom[$key]['attribute']['face'])) {
-                                                               $fontslist = split(",", strtolower($dom[$key]['attribute']['face']));
+                                                               $fontslist = preg_split("/,/", strtolower($dom[$key]['attribute']['face']));
                                                                foreach($fontslist as $font) {
                                                                        $font = trim(strtolower($font));
                                                                        if (in_array($font, $this->fontlist)){
@@ -9456,12 +9472,12 @@ if (!class_exists('TCPDF')) {
                        $yshift = 0;
                        $startlinepage = $this->page;
                        $newline = true;
-                       if (isset($this->footerpos[$this->page])) {
+                       if (isset($this->footerlen[$this->page])) {
                                $this->footerpos[$this->page] = strlen($this->pages[$this->page]) - $this->footerlen[$this->page];
-                               $startlinepos = $this->footerpos[$this->page];
                        } else {
-                               $startlinepos = strlen($this->pages[$this->page]);
+                               $this->footerpos[$this->page] = strlen($this->pages[$this->page]);
                        }
+                       $startlinepos = $this->footerpos[$this->page];
                        $lalign = $align;
                        $plalign = $align;
                        if ($this->rtl) {
@@ -9547,12 +9563,12 @@ if (!class_exists('TCPDF')) {
                                                        // the last line must be shifted to be aligned as requested
                                                        $linew = abs($this->endlinex - $startlinex);
                                                        $pstart = substr($this->pages[$startlinepage], 0, $startlinepos);
-                                                       if (isset($opentagpos) AND isset($this->footerpos[$startlinepage])) {
+                                                       if (isset($opentagpos) AND isset($this->footerlen[$startlinepage])) {
                                                                $this->footerpos[$startlinepage] = strlen($this->pages[$startlinepage]) - $this->footerlen[$startlinepage];
                                                                $midpos = min($opentagpos, $this->footerpos[$startlinepage]);
                                                        } elseif (isset($opentagpos)) {
                                                                $midpos = $opentagpos;
-                                                       } elseif (isset($this->footerpos[$startlinepage])) {
+                                                       } elseif (isset($this->footerlen[$startlinepage])) {
                                                                $this->footerpos[$startlinepage] = strlen($this->pages[$startlinepage]) - $this->footerlen[$startlinepage];
                                                                $midpos = $this->footerpos[$startlinepage];
                                                        } else {
@@ -9613,12 +9629,12 @@ if (!class_exists('TCPDF')) {
                                                $startlinepos = $endlinepos;
                                                unset($endlinepos);
                                        } else {
-                                               if (isset($this->footerpos[$this->page])) {
+                                               if (isset($this->footerlen[$this->page])) {
                                                        $this->footerpos[$this->page] = strlen($this->pages[$this->page]) - $this->footerlen[$this->page];
-                                                       $startlinepos = $this->footerpos[$this->page];
                                                } else {
-                                                       $startlinepos = strlen($this->pages[$this->page]);
+                                                       $this->footerpos[$this->page] = strlen($this->pages[$this->page]);
                                                }
+                                               $startlinepos = $this->footerpos[$this->page];
                                        }
                                        $plalign = $lalign;
                                        $this->newline = false;
@@ -9704,12 +9720,12 @@ if (!class_exists('TCPDF')) {
                                                        }
                                                        // add rowspan information to table element
                                                        if ($rowspan > 1) {
-                                                               if (isset($this->footerpos[$this->page])) {
+                                                               if (isset($this->footerlen[$this->page])) {
                                                                        $this->footerpos[$this->page] = strlen($this->pages[$this->page]) - $this->footerlen[$this->page];
-                                                                       $trintmrkpos = $this->footerpos[$this->page];
                                                                } else {
-                                                                       $trintmrkpos = strlen($this->pages[$this->page]);
+                                                                       $this->footerpos[$this->page] = strlen($this->pages[$this->page]);
                                                                }
+                                                               $trintmrkpos = $this->footerpos[$this->page];
                                                                $trsid = array_push($dom[$table_el]['rowspans'], array('rowspan' => $rowspan, 'colspan' => $colspan, 'startpage' => $this->page, 'startx' => $this->x, 'starty' => $this->y, 'intmrkpos' => $trintmrkpos));
                                                        }
                                                        $cellid = array_push($dom[$trid]['cellpos'], array('startx' => $this->x));
@@ -9769,12 +9785,12 @@ if (!class_exists('TCPDF')) {
                                                } else {
                                                        // opening tag (or self-closing tag)
                                                        if (!isset($opentagpos)) {
-                                                               if (isset($this->footerpos[$this->page])) {
+                                                               if (isset($this->footerlen[$this->page])) {
                                                                        $this->footerpos[$this->page] = strlen($this->pages[$this->page]) - $this->footerlen[$this->page];
-                                                                       $opentagpos = $this->footerpos[$this->page];
                                                                } else {
-                                                                       $opentagpos = strlen($this->pages[$this->page]);
+                                                                       $this->footerpos[$this->page] = strlen($this->pages[$this->page]);
                                                                }
+                                                               $opentagpos = $this->footerpos[$this->page];
                                                        }
                                                        $this->openHTMLTagHandler($dom, $key, $cell);
                                                }
@@ -9851,12 +9867,12 @@ if (!class_exists('TCPDF')) {
                                        // the last line must be shifted to be aligned as requested
                                        $linew = abs($this->endlinex - $startlinex);
                                        $pstart = substr($this->pages[$startlinepage], 0, $startlinepos);
-                                       if (isset($opentagpos) AND isset($this->footerpos[$startlinepage])) {
+                                       if (isset($opentagpos) AND isset($this->footerlen[$startlinepage])) {
                                                $this->footerpos[$startlinepage] = strlen($this->pages[$startlinepage]) - $this->footerlen[$startlinepage];
                                                $midpos = min($opentagpos, $this->footerpos[$startlinepage]);
                                        } elseif (isset($opentagpos)) {
                                                $midpos = $opentagpos;
-                                       } elseif (isset($this->footerpos[$startlinepage])) {
+                                       } elseif (isset($this->footerlen[$startlinepage])) {
                                                $this->footerpos[$startlinepage] = strlen($this->pages[$startlinepage]) - $this->footerlen[$startlinepage];
                                                $midpos = $this->footerpos[$startlinepage];
                                        } else {
@@ -10411,4 +10427,3 @@ if (!class_exists('TCPDF')) {
 //============================================================+
 // END OF FILE
 //============================================================+
-?>