Changeset 981

Show
Ignore:
Timestamp:
08/13/10 19:40:21 (18 months ago)
Author:
ort
Message:

fix Engine and Entity

Location:
trunk/engine/classes
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/engine/classes/Engine.class.php

    r979 r981  
    122122                                $iTimeId=$oProfiler->Start('InitModule',get_class($oModule)); 
    123123 
    124                                 $oModule->Init(); 
    125                                 $oModule->SetInit(); 
     124                                $this->InitModule($oModule); 
    126125 
    127126                                $oProfiler->Stop($iTimeId); 
    128127                        } 
    129128                } 
     129        } 
     130         
     131        /** 
     132         * Инициализирует модуль 
     133         * 
     134         * @param unknown_type $oModule 
     135         */ 
     136        protected function InitModule($oModule){ 
     137                $sOrigClassName = $sClassName = get_class($oModule);             
     138                $bRunHooks = false; 
     139                                 
     140                if($this->isInitModule('ModuleHook')){ 
     141                        $bRunHooks = true; 
     142                        while(preg_match('#^Plugin#i', $sClassName)){ 
     143                                $sParentClassName = get_parent_class($sClassName); 
     144                                if($sParentClassName == 'Module'){ 
     145                                        break; 
     146                                } 
     147                                $sClassName = $sParentClassName; 
     148                        } 
     149                } 
     150                 
     151                if($bRunHooks || $sClassName == 'ModuleHook'){ 
     152                        $sHookPrefix = 'module_'; 
     153                        if($sPluginName = $this->GetPluginName($sClassName)){ 
     154                                $sHookPrefix .= "plugin{$sPluginName}_"; 
     155                        } 
     156                        $sHookPrefix .= $this->GetModuleName($sClassName).'_init_'; 
     157                } 
     158                 
     159                if($bRunHooks){ 
     160                        $this->Hook_Run($sHookPrefix.'before'); 
     161                } 
     162                $oModule->Init(); 
     163                $oModule->SetInit();             
     164                if($bRunHooks || $sClassName == 'ModuleHook'){ 
     165                        $this->Hook_Run($sHookPrefix.'after'); 
     166                }                
     167        } 
     168         
     169        /** 
     170         * Проверяет модуль на инициализацию 
     171         * 
     172         * @param unknown_type $sModuleClass 
     173         * @return unknown 
     174         */ 
     175        public function isInitModule($sModuleClass) { 
     176                if(!in_array($sModuleClass,array('ModulePlugin','ModuleHook'))) { 
     177                        $sModuleClass=$this->Plugin_GetDelegate('module',$sModuleClass); 
     178                } 
     179                if(isset($this->aModules[$sModuleClass]) and $this->aModules[$sModuleClass]->isInit()){ 
     180                        return true; 
     181                } 
     182                return false; 
    130183        } 
    131184         
     
    150203         * Выполняет загрузку модуля по его названию 
    151204         * 
    152          * @param  string $sModuleName 
     205         * @param  string $sModuleClass 
    153206         * @param  bool $bInit - инициализировать модуль или нет 
    154207         * @return Module 
    155208         */ 
    156         public function LoadModule($sModuleName,$bInit=false) { 
     209        public function LoadModule($sModuleClass,$bInit=false) { 
    157210                $tm1=microtime(true); 
    158211                 
     
    160213                 * Создаем объект модуля 
    161214                 */              
    162                 $oModule=new $sModuleName($this); 
    163                 if ($bInit or $sModuleName=='Cache') { 
    164                         $oModule->Init(); 
    165                         $oModule->SetInit(); 
    166                 } 
    167                 $this->aModules[$sModuleName]=$oModule; 
     215                $oModule=new $sModuleClass($this); 
     216                $this->aModules[$sModuleClass]=$oModule; 
     217                if ($bInit or $sModuleClass=='ModuleCache') { 
     218                        $this->InitModule($oModule); 
     219                }                
    168220                $tm2=microtime(true); 
    169221                $this->iTimeLoadModule+=$tm2-$tm1; 
    170                 dump("load $sModuleName - \t\t".($tm2-$tm1).""); 
     222                dump("load $sModuleClass - \t\t".($tm2-$tm1).""); 
    171223                return $oModule; 
    172224        } 
     
    327379                 
    328380                if (!method_exists($oModule,$sMethod)) { 
    329                         throw new Exception("The module has no required method: ".$sModuleName.'->'.$sMethod.'()'); 
     381                        // comment for ORM testing 
     382                        //throw new Exception("The module has no required method: ".$sModuleName.'->'.$sMethod.'()'); 
    330383                } 
    331384                                 
     
    546599         
    547600        public static function GetEntityName($oEntity) { 
    548                 if (preg_match('/Entity([^_]+)/',is_string($oModule) ? $oModule : get_class($oModule),$aMatches)) { 
     601                if (preg_match('/Entity([^_]+)/',is_string($oEntity) ? $oEntity : get_class($oEntity),$aMatches)) { 
    549602                        if(isset($aMatches[1])) { 
    550603                                return $aMatches[1]; 
  • trunk/engine/classes/Entity.class.php

    r980 r981  
    6969                $sType=strtolower(substr($sName,0,3)); 
    7070                if (!strpos($sName,'_') and in_array($sType,array('get','set'))) { 
    71                         $sKey=strtolower(preg_replace('/([^A-Z])([A-Z])/',"$1_$2",substr($sName,3))); 
     71                        $sKey=func_underscore(substr($sName,3)); 
    7272                        if ($sType=='get') { 
    7373                                if (isset($this->_aData[$sKey])) { 
     
    7575                                } else { 
    7676                                        if (preg_match('/Entity([^_]+)/',get_class($this),$sModulePrefix)) { 
    77                                                 $sModulePrefix=strtolower($sModulePrefix[1]).'_'; 
     77                                                $sModulePrefix=func_underscore($sModulePrefix[1]).'_'; 
    7878                                                if (isset($this->_aData[$sModulePrefix.$sKey])) { 
    7979                                                        return $this->_aData[$sModulePrefix.$sKey];