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?>