xref: /plugin/siteexport/inc/mpdf.php (revision 569232624e458180ad19e2514de3411c88df6fe8)
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
237d101cc1SGerry Weißbach        var $debugObj = true;
247d101cc1SGerry Weißbach
25a4a5b91dSGerry Weißbach		function __construct($encoding, $debug=false) {
26a4a5b91dSGerry Weißbach
27a4a5b91dSGerry Weißbach            parent::__construct($encoding);
287d101cc1SGerry Weißbach            $this->debugObj = $debug;
297d101cc1SGerry Weißbach            $this->debug = true;
307d101cc1SGerry Weißbach            $this->shrink_tables_to_fit = 1; // Does not shrink tables by default, only in emergency
317d101cc1SGerry Weißbach            $this->use_kwt = true; // avoids page-breaking in H1-H6 if a table follows directly
327d101cc1SGerry Weißbach        }
337d101cc1SGerry Weißbach
347d101cc1SGerry Weißbach        function message($msg, $vars=null, $lvl=1)
357d101cc1SGerry Weißbach        {
367d101cc1SGerry Weißbach            if ( $this->debugObj !== false ) {
37a4a5b91dSGerry Weißbach                $this->debugObj->message($msg, $vars, $lvl);
387d101cc1SGerry Weißbach            }
397d101cc1SGerry Weißbach        }
407d101cc1SGerry Weißbach
417d101cc1SGerry Weißbach        function Error($msg)
427d101cc1SGerry Weißbach        {
437d101cc1SGerry Weißbach            if ( $this->debug !== false && $lvl == null && method_exists($this->debug, 'runtimeException') ) {
447d101cc1SGerry Weißbach                $this->debug->runtimeException($msg);
457d101cc1SGerry Weißbach            } else {
467d101cc1SGerry Weißbach                parent::Error($msg);
477d101cc1SGerry Weißbach            }
487d101cc1SGerry Weißbach        }
497d101cc1SGerry Weißbach
50a4a5b91dSGerry Weißbach        function GetFullPath(&$path,$basepath='') {
51a4a5b91dSGerry Weißbach
52a4a5b91dSGerry Weißbach        	// Full Path might return a doubled path like /~gamma/documentation/lib//~gamma/documentation/lib/tpl/clearreports/./_print-images/background-bottom.jpg
53a4a5b91dSGerry Weißbach
54a4a5b91dSGerry Weißbach			$path = str_replace("\\","/",$path); //If on Windows
55a4a5b91dSGerry Weißbach			$path = preg_replace('/^\/\//','http://',$path);	// mPDF 5.6.27
56a4a5b91dSGerry Weißbach			$regexp = '|^./|';	// Inadvertently corrects "./path/etc" and "//www.domain.com/etc"
57a4a5b91dSGerry Weißbach			$path = preg_replace($regexp,'',$path);
58a4a5b91dSGerry Weißbach
59a4a5b91dSGerry Weißbach        	if ( preg_match("/^.+\/\.\.\//", $path) ) {
60a4a5b91dSGerry Weißbach        		// ../ not at the beginning
61a4a5b91dSGerry Weißbach	        	$newpath = array();
62a4a5b91dSGerry Weißbach	        	$oldpath = explode('/', $path);
63a4a5b91dSGerry Weißbach
64a4a5b91dSGerry Weißbach	        	foreach( $oldpath as $slice ) {
65a4a5b91dSGerry Weißbach		        	if ( $slice == ".." && count($newpath) > 0 ) {
66a4a5b91dSGerry Weißbach			        	array_pop($newpath);
67a4a5b91dSGerry Weißbach			        	continue;
68a4a5b91dSGerry Weißbach		        	}
69a4a5b91dSGerry Weißbach
70a4a5b91dSGerry Weißbach		        	$newpath[] = $slice;
71a4a5b91dSGerry Weißbach	        	}
72a4a5b91dSGerry Weißbach
73a4a5b91dSGerry Weißbach	        	$path = implode('/', $newpath);
74a4a5b91dSGerry Weißbach        	}
75a4a5b91dSGerry Weißbach
76a4a5b91dSGerry Weißbach        	parent::GetFullPath($path, $basepath);
77a4a5b91dSGerry Weißbach
78*56923262SGerry Weißbach        	$regex = "/^(". preg_quote(DOKU_BASE, '/') .".+)\\1/";
79a4a5b91dSGerry Weißbach        	if ( preg_match($regex, $path, $matches) ) {
80a4a5b91dSGerry Weißbach        		$path = preg_replace($regex, "\\1", $path);
81a4a5b91dSGerry Weißbach        	}
82*56923262SGerry Weißbach
83a4a5b91dSGerry Weißbach        }
84a4a5b91dSGerry Weißbach
857d101cc1SGerry Weißbach        function OpenTag($tag, $attr) {
867d101cc1SGerry Weißbach            switch($tag) {
877d101cc1SGerry Weißbach                case 'BOOKMARK':
887d101cc1SGerry Weißbach                case 'TOCENTRY':
897d101cc1SGerry Weißbach                    if ( $attr['CONTENT'] ) {
907d101cc1SGerry Weißbach                        // resolve double encoding
917d101cc1SGerry Weißbach                        $attr['CONTENT'] = htmlspecialchars_decode($attr['CONTENT'], ENT_QUOTES);
927d101cc1SGerry Weißbach                    }
937d101cc1SGerry Weißbach                    break;
947d101cc1SGerry Weißbach            }
957d101cc1SGerry Weißbach            return parent::OpenTag($tag, $attr);
967d101cc1SGerry Weißbach        }
977d101cc1SGerry Weißbach    }
987d101cc1SGerry Weißbach}