xref: /plugin/siteexport/inc/patchCSSmgr.php (revision a8c17ab5b37308343f86651acb8c4a1b3f36f0ae)
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');
24*a8c17ab5Si-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
33*a8c17ab5Si-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);
43d10fa28aSGerry Weißbach
44d10fa28aSGerry Weißbach            $this->setCode($new_code);
45d10fa28aSGerry Weißbach
46d10fa28aSGerry Weißbach            return true;
47d10fa28aSGerry Weißbach
48d10fa28aSGerry Weißbach        } else {
49d10fa28aSGerry Weißbach
50d10fa28aSGerry Weißbach            return false;
51d10fa28aSGerry Weißbach
52d10fa28aSGerry Weißbach        }
53d10fa28aSGerry Weißbach    }
54d10fa28aSGerry Weißbach
55*a8c17ab5Si-net /// software    public function getCode() {
56d10fa28aSGerry Weißbach        return $this->_code;
57d10fa28aSGerry Weißbach    }
58d10fa28aSGerry Weißbach}
59