xref: /plugin/siteexport/inc/mpdf.php (revision bca58ac1185730d76db22ec12c8278d85d9ffdf8)
17d101cc1SGerry Weißbach<?php
27d101cc1SGerry Weißbach/**
37d101cc1SGerry Weißbach * Site Export Plugin - mPDF Extension
47d101cc1SGerry Weißbach *
57d101cc1SGerry Weißbach * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
67d101cc1SGerry Weißbach * @author     i-net software <tools@inetsoftware.de>
77d101cc1SGerry Weißbach * @author     Gerry Weissbach <gweissbach@inetsoftware.de>
87d101cc1SGerry Weißbach */
97d101cc1SGerry Weißbach
107d101cc1SGerry Weißbach// must be run within Dokuwiki
117d101cc1SGerry Weißbachif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
127d101cc1SGerry Weißbachif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
137d101cc1SGerry Weißbach
14a4a5b91dSGerry Weißbachif ( file_exists(DOKU_PLUGIN . 'dw2pdf/DokuPDF.class.php') ) {
157d101cc1SGerry Weißbach
167d101cc1SGerry Weißbach	global $conf;
17a4a5b91dSGerry Weißbach	// if(!defined('_MPDF_TEMP_PATH')) define('_MPDF_TEMP_PATH', $conf['tmpdir'].'/dwpdf/'.rand(1,1000).'/');
187d101cc1SGerry Weißbach
19a4a5b91dSGerry Weißbach    require_once(DOKU_PLUGIN . 'dw2pdf/DokuPDF.class.php');
207d101cc1SGerry Weißbach
21a4a5b91dSGerry Weißbach    class siteexportPDF extends DokuPDF {
227d101cc1SGerry Weißbach
237f6f0f99SGerry Weißbach        private $debugObj = false;
247d101cc1SGerry Weißbach
257f6f0f99SGerry Weißbach		function __construct($debug) {
267f6f0f99SGerry Weißbach            global $INPUT;
27a4a5b91dSGerry Weißbach
28*bca58ac1SGerry Weißbach            $dw2pdf = plugin_load('action', 'dw2pdf');
297f6f0f99SGerry Weißbach
307f6f0f99SGerry Weißbach		    // decide on the paper setup from param or config
317f6f0f99SGerry Weißbach            $pagesize    = $INPUT->str('pagesize', $dw2pdf->getConf('pagesize'), true);
327f6f0f99SGerry Weißbach            $orientation = $INPUT->str('orientation', $dw2pdf->getConf('orientation'), true);
337f6f0f99SGerry Weißbach
347f6f0f99SGerry Weißbach            parent::__construct($pagesize, $orientation);
357d101cc1SGerry Weißbach            $this->debugObj = $debug;
367f6f0f99SGerry Weißbach            $this->debug = $debug !== false;
377d101cc1SGerry Weißbach            $this->shrink_tables_to_fit = 1; // Does not shrink tables by default, only in emergency
387d101cc1SGerry Weißbach            $this->use_kwt = true; // avoids page-breaking in H1-H6 if a table follows directly
397d101cc1SGerry Weißbach        }
407d101cc1SGerry Weißbach
417d101cc1SGerry Weißbach        function message($msg, $vars=null, $lvl=1)
427d101cc1SGerry Weißbach        {
437d101cc1SGerry Weißbach            if ( $this->debugObj !== false ) {
44a4a5b91dSGerry Weißbach                $this->debugObj->message($msg, $vars, $lvl);
457d101cc1SGerry Weißbach            }
467d101cc1SGerry Weißbach        }
477d101cc1SGerry Weißbach
487d101cc1SGerry Weißbach        function Error($msg)
497d101cc1SGerry Weißbach        {
507f6f0f99SGerry Weißbach            if ( $this->debugObj !== false && method_exists($this->debugObj, 'runtimeException') ) {
517f6f0f99SGerry Weißbach                $this->debugObj->runtimeException($msg);
527d101cc1SGerry Weißbach            } else {
537d101cc1SGerry Weißbach                parent::Error($msg);
547d101cc1SGerry Weißbach            }
557d101cc1SGerry Weißbach        }
567d101cc1SGerry Weißbach
57a4a5b91dSGerry Weißbach        function GetFullPath(&$path,$basepath='') {
58a4a5b91dSGerry Weißbach
59a4a5b91dSGerry Weißbach        	// Full Path might return a doubled path like /~gamma/documentation/lib//~gamma/documentation/lib/tpl/clearreports/./_print-images/background-bottom.jpg
60a4a5b91dSGerry Weißbach
61a4a5b91dSGerry Weißbach			$path = str_replace("\\","/",$path); //If on Windows
62a4a5b91dSGerry Weißbach			$path = preg_replace('/^\/\//','http://',$path);	// mPDF 5.6.27
63a4a5b91dSGerry Weißbach			$regexp = '|^./|';	// Inadvertently corrects "./path/etc" and "//www.domain.com/etc"
64a4a5b91dSGerry Weißbach			$path = preg_replace($regexp,'',$path);
65a4a5b91dSGerry Weißbach
66a4a5b91dSGerry Weißbach        	if ( preg_match("/^.+\/\.\.\//", $path) ) {
67a4a5b91dSGerry Weißbach        		// ../ not at the beginning
68a4a5b91dSGerry Weißbach	        	$newpath = array();
69a4a5b91dSGerry Weißbach	        	$oldpath = explode('/', $path);
70a4a5b91dSGerry Weißbach
71a4a5b91dSGerry Weißbach	        	foreach( $oldpath as $slice ) {
72a4a5b91dSGerry Weißbach		        	if ( $slice == ".." && count($newpath) > 0 ) {
73a4a5b91dSGerry Weißbach			        	array_pop($newpath);
74a4a5b91dSGerry Weißbach			        	continue;
75a4a5b91dSGerry Weißbach		        	}
76a4a5b91dSGerry Weißbach
77a4a5b91dSGerry Weißbach		        	$newpath[] = $slice;
78a4a5b91dSGerry Weißbach	        	}
79a4a5b91dSGerry Weißbach
80a4a5b91dSGerry Weißbach	        	$path = implode('/', $newpath);
81a4a5b91dSGerry Weißbach        	}
82a4a5b91dSGerry Weißbach
83a4a5b91dSGerry Weißbach        	parent::GetFullPath($path, $basepath);
84a4a5b91dSGerry Weißbach
8556923262SGerry Weißbach        	$regex = "/^(". preg_quote(DOKU_BASE, '/') .".+)\\1/";
86a4a5b91dSGerry Weißbach        	if ( preg_match($regex, $path, $matches) ) {
87a4a5b91dSGerry Weißbach        		$path = preg_replace($regex, "\\1", $path);
88a4a5b91dSGerry Weißbach        	}
8956923262SGerry Weißbach
90a4a5b91dSGerry Weißbach        }
91a4a5b91dSGerry Weißbach
927d101cc1SGerry Weißbach        function OpenTag($tag, $attr) {
937d101cc1SGerry Weißbach            switch($tag) {
947d101cc1SGerry Weißbach                case 'BOOKMARK':
957d101cc1SGerry Weißbach                case 'TOCENTRY':
967d101cc1SGerry Weißbach                    if ( $attr['CONTENT'] ) {
977d101cc1SGerry Weißbach                        // resolve double encoding
987d101cc1SGerry Weißbach                        $attr['CONTENT'] = htmlspecialchars_decode($attr['CONTENT'], ENT_QUOTES);
997d101cc1SGerry Weißbach                    }
1007d101cc1SGerry Weißbach                    break;
1017d101cc1SGerry Weißbach            }
1027d101cc1SGerry Weißbach            return parent::OpenTag($tag, $attr);
1037d101cc1SGerry Weißbach        }
1047d101cc1SGerry Weißbach    }
1057d101cc1SGerry Weißbach}