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