xref: /plugin/siteexport/inc/patchCSSmgr.php (revision d10fa28aa7b665746f51c9b1c344cf1d87d22889)
1*d10fa28aSGerry Weißbach<?php
2*d10fa28aSGerry Weißbach
3*d10fa28aSGerry Weißbach/**
4*d10fa28aSGerry Weißbach Honestly: this is evil code to come by a problem in the cssmgr.php class of mpdf that breaks generating PDFs with large CSS files
5*d10fa28aSGerry Weißbach It comes from: http://stackoverflow.com/questions/137006/redefine-class-methods-or-class
6*d10fa28aSGerry Weißbach*/
7*d10fa28aSGerry Weißbachclass CSSMgrPatch {
8*d10fa28aSGerry Weißbach
9*d10fa28aSGerry Weißbach    private $_code;
10*d10fa28aSGerry Weißbach
11*d10fa28aSGerry Weißbach    public function __construct($include_file = null) {
12*d10fa28aSGerry Weißbach        if ( $include_file ) {
13*d10fa28aSGerry Weißbach            $this->includeCode($include_file);
14*d10fa28aSGerry Weißbach        }
15*d10fa28aSGerry Weißbach    }
16*d10fa28aSGerry Weißbach
17*d10fa28aSGerry Weißbach    public function setCode($code) {
18*d10fa28aSGerry Weißbach        $this->_code = $code;
19*d10fa28aSGerry Weißbach    }
20*d10fa28aSGerry Weißbach
21*d10fa28aSGerry Weißbach    public function includeCode($path) {
22*d10fa28aSGerry Weißbach
23*d10fa28aSGerry Weißbach        $fp = fopen($path,'r');
24*d10fa28aSGerry Weißbach        $contents = fread($fp, filesize($path));
25*d10fa28aSGerry Weißbach        $contents = str_replace('<?php','',$contents);
26*d10fa28aSGerry Weißbach        $contents = str_replace('?>','',$contents);
27*d10fa28aSGerry Weißbach        fclose($fp);
28*d10fa28aSGerry Weißbach
29*d10fa28aSGerry Weißbach        $this->setCode($contents);
30*d10fa28aSGerry Weißbach    }
31*d10fa28aSGerry Weißbach
32*d10fa28aSGerry Weißbach    function redefineFunction($new_function) {
33*d10fa28aSGerry Weißbach
34*d10fa28aSGerry Weißbach        preg_match('/function (.+)\(/', $new_function, $aryMatches);
35*d10fa28aSGerry Weißbach        $func_name = trim($aryMatches[1]);
36*d10fa28aSGerry Weißbach
37*d10fa28aSGerry Weißbach        if ( preg_match('/(function '.$func_name.'[\w\W\n]+?)(function)/s', $this->_code, $aryMatches) ) {
38*d10fa28aSGerry Weißbach
39*d10fa28aSGerry Weißbach            $search_code = $aryMatches[1];
40*d10fa28aSGerry Weißbach
41*d10fa28aSGerry Weißbach            $new_code = str_replace($search_code, $new_function."\n\n", $this->_code);
42*d10fa28aSGerry Weißbach
43*d10fa28aSGerry Weißbach            $this->setCode($new_code);
44*d10fa28aSGerry Weißbach
45*d10fa28aSGerry Weißbach            return true;
46*d10fa28aSGerry Weißbach
47*d10fa28aSGerry Weißbach        } else {
48*d10fa28aSGerry Weißbach
49*d10fa28aSGerry Weißbach            return false;
50*d10fa28aSGerry Weißbach
51*d10fa28aSGerry Weißbach        }
52*d10fa28aSGerry Weißbach    }
53*d10fa28aSGerry Weißbach
54*d10fa28aSGerry Weißbach    function getCode() {
55*d10fa28aSGerry Weißbach        return $this->_code;
56*d10fa28aSGerry Weißbach    }
57*d10fa28aSGerry Weißbach}
58*d10fa28aSGerry Weißbach?>