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 28bca58ac1SGerry 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 } 105*d10fa28aSGerry Weißbach 106*d10fa28aSGerry Weißbach if ( file_exists(DOKU_PLUGIN . 'dw2pdf/mpdf/classes/cssmgr.php') && !class_exists('cssmgr', false)) { 107*d10fa28aSGerry Weißbach 108*d10fa28aSGerry Weißbach require_once(DOKU_PLUGIN . 'siteexport/inc/patchCSSmgr.php'); 109*d10fa28aSGerry Weißbach $objPatch = new CSSMgrPatch(DOKU_PLUGIN . 'dw2pdf/mpdf/classes/cssmgr.php'); 110*d10fa28aSGerry Weißbach $objPatch->redefineFunction(file_get_contents(DOKU_PLUGIN . 'siteexport/inc/readCSS.patch')); 111*d10fa28aSGerry Weißbach eval($objPatch->getCode()); 112*d10fa28aSGerry Weißbach } 113*d10fa28aSGerry Weißbach 1147d101cc1SGerry Weißbach} 115