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