From fe8529f8f21bd0c457e71426928354e36be3687d Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Thu, 18 Nov 2010 17:09:22 +0000 Subject: [PATCH] Inheritance + ORM fixes --- engine/classes/Engine.class.php | 14 ++++++++++++-- engine/classes/EntityORM.class.php | 9 ++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/engine/classes/Engine.class.php b/engine/classes/Engine.class.php index 086bc189..4c0008a1 100644 --- a/engine/classes/Engine.class.php +++ b/engine/classes/Engine.class.php @@ -676,10 +676,20 @@ class Engine extends Object { : 'Module'.$sModule.'_Entity'.$sEntity; /** - * If plugin Entity doesn't exist, maybe the default one does? + * If Plugin Entity doesn't exist, search among it's Module delegates */ if(isset($sPlugin) && !self::GetClassPath($sClass)) { - $sClass = 'Module'.$sModule.'_Entity'.$sEntity; + $aModulesChain = Engine::GetInstance()->Plugin_GetDelegationChain('module','Plugin'.$sPlugin.'_Module'.$sModule); + foreach($aModulesChain as $sModuleName) { + $sClassTest=$sModuleName.'_Entity'.$sEntity; + if(self::GetClassPath($sClassTest)) { + $sClass=$sClassTest; + break; + } + } + if(!self::GetClassPath($sClass)) { + $sClass='Module'.$sModule.'_Entity'.$sEntity; + } } /** diff --git a/engine/classes/EntityORM.class.php b/engine/classes/EntityORM.class.php index a93453be..ec8cb27f 100644 --- a/engine/classes/EntityORM.class.php +++ b/engine/classes/EntityORM.class.php @@ -154,9 +154,12 @@ abstract class EntityORM extends Entity { $sModuleName=Engine::GetModuleName($this); $sEntityName=Engine::GetEntityName($this); $sPluginPrefix=Engine::GetPluginPrefix($this); - if(!class_exists($sPluginPrefix.$sModuleName) && $oRootDelegater=$this->Plugin_GetRootDelegater('entity',get_class($this))) { - $sModuleName=Engine::GetModuleName($oRootDelegater); - $sPluginPrefix=Engine::GetPluginPrefix($oRootDelegater); + /** + * If Module not exists, try to find its root Delegater + */ + if(!Engine::GetClassPath($sPluginPrefix.$sModuleName) && $oModuleRootDelegater=$this->Plugin_GetRootDelegater('module',$sPluginPrefix.$sModuleName)) { + $sModuleName=Engine::GetModuleName($oModuleRootDelegater); + $sPluginPrefix=Engine::GetPluginPrefix($oModuleRootDelegater); } return Engine::GetInstance()->_CallModule("{$sPluginPrefix}{$sModuleName}_{$sName}{$sEntityName}",array($this)); }