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}