<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Cambria;
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Courier New";
        mso-fareast-language:EN-US;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-AU link=blue vlink=purple><div class=WordSection1><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>This is the hackiest hack I have ever done... and I have done a few<o:p></o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>The problem: <b>Replace a core class with my own custom class at runtime<o:p></o:p></b></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>The Solution (not overly tested) …<o:p></o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>Change /index.php and add the following after the last include statement<o:p></o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText>// do this as late as possible<o:p></o:p></p><p class=MsoPlainText>require_once ('modules/yourmod/__autoload.php');<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>Create modules/yourmod/__autoload.php :-<o:p></o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><?php<o:p></o:p></p><p class=MsoPlainText>define('MODULESPATH', realpath(dirname(__FILE__) . '/../') . '/');<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>// create our own autoloader<o:p></o:p></p><p class=MsoPlainText>function my_autoloader($class) {<o:p></o:p></p><p class=MsoPlainText>    if ($class === "Users_Record_Model"){<o:p></o:p></p><p class=MsoPlainText>        return require_once MODULESPATH . "mymod/modules/Users/models/Record.php";<o:p></o:p></p><p class=MsoPlainText>    }<o:p></o:p></p><p class=MsoPlainText>    return false;<o:p></o:p></p><p class=MsoPlainText>}<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>spl_autoload_register('my_autoloader',true,true);<o:p></o:p></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>?><o:p></o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>Create  mymod/modules/Users/models/Record.php :-<o:p></o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><?php<o:p></o:p></p><p class=MsoPlainText>// replace the users record model with our own<o:p></o:p></p><p class=MsoPlainText>$path = MODULESPATH . 'Users/models/Record.php';<o:p></o:p></p><p class=MsoPlainText>$stuff = file_get_contents($path);<o:p></o:p></p><p class=MsoPlainText>$newstuff = str_replace('Users_Record_Model','orig_Users_Record_Model' , $stuff);<o:p></o:p></p><p class=MsoPlainText>eval(' ?>' . $newstuff);<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>class Users_Record_Model extends orig_Users_Record_Model {<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>…<o:p></o:p></p><p class=MsoPlainText>classy stuff<o:p></o:p></p><p class=MsoPlainText>…<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>}<o:p></o:p></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>?><o:p></o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>Voila<o:p></o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>I would strongly recommend against using this hack. It was just an experiment...<o:p></o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'>Chris<o:p></o:p></span></p><p class=MsoPlainText><span style='font-family:"Cambria","serif"'><o:p> </o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>On 14/07/15 06:45, Prasad wrote:<o:p></o:p></p><p class=MsoPlainText>> Would prepending<o:p></o:p></p><p class=MsoPlainText>> <<a href="http://php.net/manual/en/function.spl-autoload-register.php"><span style='color:windowtext;text-decoration:none'>http://php.net/manual/en/function.spl-autoload-register.php</span></a>> the <o:p></o:p></p><p class=MsoPlainText>> custom loader help?<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>That's really quite interesting... Worth a test certainly.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Thanks.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Alan<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>_______________________________________________<o:p></o:p></p><p class=MsoPlainText><a href="http://www.vtiger.com/"><span style='color:windowtext;text-decoration:none'>http://www.vtiger.com/</span></a><o:p></o:p></p></div></body></html>