Current file: htdocs/app/code/core/Mage/Core/Model/Config.php
Legend: executed not executed dead code

  Coverage
  Classes Functions / Methods Lines
Total
0.00%0.00%
0.00% 0 / 1
8.06%8.06%
8.06% 5 / 62 CRAP
11.84%11.84%
11.84% 67 / 566
 
Mage_Core_Model_Config
0.00%0.00%
0.00% 0 / 1
8.06%8.06%
8.06% 5 / 62
11.84%11.84%
11.84% 67 / 566
 __construct($sourceData=null)
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 6
 getResourceModel()
0.00%0.00%
0.00% 0 / 1 2.50
50.00%50.00%
50.00% 2 / 4
 getOptions()
100.00%100.00%
100.00% 1 / 1 1
100.00%100.00%
100.00% 1 / 1
 setOptions($options)
0.00%0.00%
0.00% 0 / 1 6
0.00%0.00%
0.00% 0 / 4
 init($options=array()
0.00%0.00%
0.00% 0 / 1 6
0.00%0.00%
0.00% 0 / 11
 loadBase()
0.00%0.00%
0.00% 0 / 1 12
0.00%0.00%
0.00% 0 / 12
 loadModulesCache()
0.00%0.00%
0.00% 0 / 1 20
0.00%0.00%
0.00% 0 / 11
 loadModules()
0.00%0.00%
0.00% 0 / 1 6
0.00%0.00%
0.00% 0 / 11
 isLocalConfigLoaded()
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 loadDb()
100.00%100.00%
100.00% 1 / 1 3
100.00%100.00%
100.00% 7 / 7
 reinit($options = array()
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 3
 _canUseLocalModules()
0.00%0.00%
0.00% 0 / 1 42
0.00%0.00%
0.00% 0 / 17
 _canUseCacheForInit()
0.00%0.00%
0.00% 0 / 1 12
0.00%0.00%
0.00% 0 / 2
 getCache()
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 _getCacheLockId()
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 saveCache($tags=array()
0.00%0.00%
0.00% 0 / 1 56
0.00%0.00%
0.00% 0 / 25
 _saveSectionCache($idPrefix, $sectionName, $source, $recursionLevel=0, $tags=array()
0.00%0.00%
0.00% 0 / 1 30
0.00%0.00%
0.00% 0 / 10
 _loadSectionCache($sectionName)
0.00%0.00%
0.00% 0 / 1 6
0.00%0.00%
0.00% 0 / 8
 _loadCache($id)
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 _saveCache($data, $id, $tags=array()
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 _removeCache($id)
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 removeCache()
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 2
 cleanCache()
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 getSectionNode($path)
0.00%0.00%
0.00% 0 / 1 12
0.00%0.00%
0.00% 0 / 13
 getNode($path=null, $scope='', $scopeCode=null)
0.00%0.00%
0.00% 0 / 1 145.30
12.50%12.50%
12.50% 3 / 24
 _getDeclaredModuleFiles()
0.00%0.00%
0.00% 0 / 1 30
0.00%0.00%
0.00% 0 / 24
 addAllowedModules($module)
0.00%0.00%
0.00% 0 / 1 20
0.00%0.00%
0.00% 0 / 8
 _isAllowedModule($moduleName)
0.00%0.00%
0.00% 0 / 1 6
0.00%0.00%
0.00% 0 / 3
 _loadDeclaredModules($mergeConfig = null)
0.00%0.00%
0.00% 0 / 1 132
0.00%0.00%
0.00% 0 / 41
 _sortModuleDepends($modules)
0.00%0.00%
0.00% 0 / 1 156
0.00%0.00%
0.00% 0 / 33
 determineOmittedNamespace($name, $asFullModuleName = false)
0.00%0.00%
0.00% 0 / 1 156
0.00%0.00%
0.00% 0 / 27
 loadModulesConfiguration($fileName, $mergeToObject = null, $mergeModel=null)
0.00%0.00%
0.00% 0 / 1 72
0.00%0.00%
0.00% 0 / 20
 getTempVarDir()
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 getDistroServerVars()
0.00%0.00%
0.00% 0 / 1 182
0.00%0.00%
0.00% 0 / 22
 substDistroServerVars($data)
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 5
 getModuleConfig($moduleName='')
0.00%0.00%
0.00% 0 / 1 6
0.00%0.00%
0.00% 0 / 4
 getModuleSetup($module='')
0.00%0.00%
0.00% 0 / 1 30
0.00%0.00%
0.00% 0 / 13
 getBaseDir($type='base')
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 getVarDir($path=null, $type='var')
0.00%0.00%
0.00% 0 / 1 12
0.00%0.00%
0.00% 0 / 4
 createDirIfNotExists($dir)
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 getModuleDir($type, $moduleName)
0.00%0.00%
0.00% 0 / 1 30
0.00%0.00%
0.00% 0 / 16
 loadEventObservers($area)
0.00%0.00%
0.00% 0 / 1 72
0.00%0.00%
0.00% 0 / 31
 getPathVars($args=null)
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 4
 getGroupedClassName($groupType, $classId, $groupRootNode=null)
0.00%0.00%
0.00% 0 / 1 8.04
91.67%91.67%
91.67% 22 / 24
 getBlockClassName($blockType)
0.00%0.00%
0.00% 0 / 1 6
0.00%0.00%
0.00% 0 / 3
 getHelperClassName($helperName)
0.00%0.00%
0.00% 0 / 1 2.50
50.00%50.00%
50.00% 2 / 4
 getModelClassName($modelClass)
100.00%100.00%
100.00% 1 / 1 2
100.00%100.00%
100.00% 4 / 4
 getModelInstance($modelClass='', $constructArguments=array()
0.00%0.00%
0.00% 0 / 1 2.01
85.71%85.71%
85.71% 6 / 7
 getNodeClassInstance($path)
0.00%0.00%
0.00% 0 / 1 6
0.00%0.00%
0.00% 0 / 5
 getResourceModelInstance($modelClass='', $constructArguments=array()
0.00%0.00%
0.00% 0 / 1 2.06
75.00%75.00%
75.00% 3 / 4
 getResourceConfig($name)
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 getResourceConnectionConfig($name)
0.00%0.00%
0.00% 0 / 1 20
0.00%0.00%
0.00% 0 / 9
 getResourceTypeConfig($type)
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 1
 getStoresConfigByPath($path, $allowValues = array()
0.00%0.00%
0.00% 0 / 1 72
0.00%0.00%
0.00% 0 / 23
 shouldUrlBeSecure($url)
0.00%0.00%
0.00% 0 / 1 20
0.00%0.00%
0.00% 0 / 10
 getTablePrefix()
100.00%100.00%
100.00% 1 / 1 1
100.00%100.00%
100.00% 1 / 1
 getEventConfig($area, $eventName)
100.00%100.00%
100.00% 1 / 1 2
100.00%100.00%
100.00% 4 / 4
 saveConfig($path, $value, $scope = 'default', $scopeId = 0)
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 3
 deleteConfig($path, $scope = 'default', $scopeId = 0)
0.00%0.00%
0.00% 0 / 1 2
0.00%0.00%
0.00% 0 / 3
 getFieldset($name, $root = 'global')
0.00%0.00%
0.00% 0 / 1 12
0.00%0.00%
0.00% 0 / 4
 _getResourceModelFactoryClassName($modelClass)
0.00%0.00%
0.00% 0 / 1 9.00
75.00%75.00%
75.00% 12 / 16
 getResourceModelClassName($modelClass)
0.00%0.00%
0.00% 0 / 1 6
0.00%0.00%
0.00% 0 / 4


       1                 : <?php                                                                                                                             
       2                 : /**                                                                                                                               
       3                 :  * Magento                                                                                                                        
       4                 :  *                                                                                                                                
       5                 :  * NOTICE OF LICENSE                                                                                                              
       6                 :  *                                                                                                                                
       7                 :  * This source file is subject to the Open Software License (OSL 3.0)                                                             
       8                 :  * that is bundled with this package in the file LICENSE.txt.                                                                     
       9                 :  * It is also available through the world-wide-web at this URL:                                                                   
      10                 :  * http://opensource.org/licenses/osl-3.0.php                                                                                     
      11                 :  * If you did not receive a copy of the license and are unable to                                                                 
      12                 :  * obtain it through the world-wide-web, please send an email                                                                     
      13                 :  * to license@magentocommerce.com so we can send you a copy immediately.                                                          
      14                 :  *                                                                                                                                
      15                 :  * DISCLAIMER                                                                                                                     
      16                 :  *                                                                                                                                
      17                 :  * Do not edit or add to this file if you wish to upgrade Magento to newer                                                        
      18                 :  * versions in the future. If you wish to customize Magento for your                                                              
      19                 :  * needs please refer to http://www.magentocommerce.com for more information.                                                     
      20                 :  *                                                                                                                                
      21                 :  * @category    Mage                                                                                                              
      22                 :  * @package     Mage_Core                                                                                                         
      23                 :  * @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)                                                  
      24                 :  * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)                                       
      25                 :  */                                                                                                                               
      26                 :                                                                                                                                   
      27                 :                                                                                                                                   
      28                 : /**                                                                                                                               
      29                 :  * Core configuration class                                                                                                       
      30                 :  *                                                                                                                                
      31                 :  * @category    Mage                                                                                                              
      32                 :  * @package     Mage_Core                                                                                                         
      33                 :  * @author      Magento Core Team <core@magentocommerce.com>                                                                      
      34                 :  */                                                                                                                               
      35                 : class Mage_Core_Model_Config extends Mage_Core_Model_Config_Base                                                                  
      36                 : {                                                                                                                                 
      37                 :     const CACHE_TAG         = 'CONFIG';                                                                                           
      38                 :                                                                                                                                   
      39                 :     /**                                                                                                                           
      40                 :      * Flag which allow use cache logic                                                                                           
      41                 :      *                                                                                                                            
      42                 :      * @var bool                                                                                                                  
      43                 :      */                                                                                                                           
      44                 :     protected $_useCache = false;                                                                                                 
      45                 :                                                                                                                                   
      46                 :     /**                                                                                                                           
      47                 :      * Instructions for spitting config cache                                                                                     
      48                 :      * array(                                                                                                                     
      49                 :      *      $sectionName => $recursionLevel                                                                                       
      50                 :      * )                                                                                                                          
      51                 :      * Recursion level provide availability cache subnodes separatly                                                              
      52                 :      *                                                                                                                            
      53                 :      * @var array                                                                                                                 
      54                 :      */                                                                                                                           
      55                 :     protected $_cacheSections = array(                                                                                            
      56                 :         'admin'     => 0,                                                                                                         
      57                 :         'adminhtml' => 0,                                                                                                         
      58                 :         'crontab'   => 0,                                                                                                         
      59                 :         'install'   => 0,                                                                                                         
      60                 :         'stores'    => 1,                                                                                                         
      61                 :         'websites'  => 0                                                                                                          
      62                 :     );                                                                                                                            
      63                 :                                                                                                                                   
      64                 :     /**                                                                                                                           
      65                 :      * Loaded Configuration by cached sections                                                                                    
      66                 :      *                                                                                                                            
      67                 :      * @var array                                                                                                                 
      68                 :      */                                                                                                                           
      69                 :     protected $_cacheLoadedSections = array();                                                                                    
      70                 :                                                                                                                                   
      71                 :     /**                                                                                                                           
      72                 :      * Configuration options                                                                                                      
      73                 :      *                                                                                                                            
      74                 :      * @var Mage_Core_Model_Config_Options                                                                                        
      75                 :      */                                                                                                                           
      76                 :     protected $_options;                                                                                                          
      77                 :                                                                                                                                   
      78                 :     /**                                                                                                                           
      79                 :      * Storage for generated class names                                                                                          
      80                 :      *                                                                                                                            
      81                 :      * @var array                                                                                                                 
      82                 :      */                                                                                                                           
      83                 :     protected $_classNameCache = array();                                                                                         
      84                 :                                                                                                                                   
      85                 :     /**                                                                                                                           
      86                 :      * Storage for generated block class names                                                                                    
      87                 :      *                                                                                                                            
      88                 :      * @var unknown_type                                                                                                          
      89                 :      */                                                                                                                           
      90                 :     protected $_blockClassNameCache = array();                                                                                    
      91                 :                                                                                                                                   
      92                 :     /**                                                                                                                           
      93                 :      * Storage of validated secure urls                                                                                           
      94                 :      *                                                                                                                            
      95                 :      * @var array                                                                                                                 
      96                 :      */                                                                                                                           
      97                 :     protected $_secureUrlCache = array();                                                                                         
      98                 :                                                                                                                                   
      99                 :     /**                                                                                                                           
     100                 :      * System environment server variables                                                                                        
     101                 :      *                                                                                                                            
     102                 :      * @var array                                                                                                                 
     103                 :      */                                                                                                                           
     104                 :     protected $_distroServerVars;                                                                                                 
     105                 :                                                                                                                                   
     106                 :     /**                                                                                                                           
     107                 :      * Array which is using for replace placeholders of server variables                                                          
     108                 :      *                                                                                                                            
     109                 :      * @var array                                                                                                                 
     110                 :      */                                                                                                                           
     111                 :     protected $_substServerVars;                                                                                                  
     112                 :                                                                                                                                   
     113                 :     /**                                                                                                                           
     114                 :      * Resource model                                                                                                             
     115                 :      * Used for operations with DB                                                                                                
     116                 :      *                                                                                                                            
     117                 :      * @var Mage_Core_Model_Mysql4_Config                                                                                         
     118                 :      */                                                                                                                           
     119                 :     protected $_resourceModel;                                                                                                    
     120                 :                                                                                                                                   
     121                 :     /**                                                                                                                           
     122                 :      * Configuration for events by area                                                                                           
     123                 :      *                                                                                                                            
     124                 :      * @var array                                                                                                                 
     125                 :      */                                                                                                                           
     126                 :     protected $_eventAreas;                                                                                                       
     127                 :                                                                                                                                   
     128                 :     /**                                                                                                                           
     129                 :      * Flag cache for existing or already created directories                                                                     
     130                 :      *                                                                                                                            
     131                 :      * @var array                                                                                                                 
     132                 :      */                                                                                                                           
     133                 :     protected $_dirExists = array();                                                                                              
     134                 :                                                                                                                                   
     135                 :     /**                                                                                                                           
     136                 :      * Flach which allow using cache for config initialization                                                                    
     137                 :      *                                                                                                                            
     138                 :      * @var bool                                                                                                                  
     139                 :      */                                                                                                                           
     140                 :     protected $_allowCacheForInit = true;                                                                                         
     141                 :                                                                                                                                   
     142                 :     /**                                                                                                                           
     143                 :      * Property used during cache save process                                                                                    
     144                 :      *                                                                                                                            
     145                 :      * @var array                                                                                                                 
     146                 :      */                                                                                                                           
     147                 :     protected $_cachePartsForSave = array();                                                                                      
     148                 :                                                                                                                                   
     149                 :     /**                                                                                                                           
     150                 :      * Empty configuration object for loading and megring configuration parts                                                     
     151                 :      *                                                                                                                            
     152                 :      * @var Mage_Core_Model_Config_Base                                                                                           
     153                 :      */                                                                                                                           
     154                 :     protected $_prototype;                                                                                                        
     155                 :                                                                                                                                   
     156                 :     /**                                                                                                                           
     157                 :      * Flag which identify what local configuration is loaded                                                                     
     158                 :      *                                                                                                                            
     159                 :      * @var bool                                                                                                                  
     160                 :      */                                                                                                                           
     161                 :     protected $_isLocalConfigLoaded = false;                                                                                      
     162                 :                                                                                                                                   
     163                 :     /**                                                                                                                           
     164                 :      * Depricated properties                                                                                                      
     165                 :      *                                                                                                                            
     166                 :      * @deprecated                                                                                                                
     167                 :      */                                                                                                                           
     168                 :     protected $_baseDirCache = array();                                                                                           
     169                 :     protected $_customEtcDir = null;                                                                                              
     170                 :                                                                                                                                   
     171                 :     /**                                                                                                                           
     172                 :      * Flag which allow to use modules from local code pool                                                                       
     173                 :      *                                                                                                                            
     174                 :      * @var bool                                                                                                                  
     175                 :      */                                                                                                                           
     176                 :     protected $_canUseLocalModules = null;                                                                                        
     177                 :                                                                                                                                   
     178                 :     /**                                                                                                                           
     179                 :      * Active modules array per namespace                                                                                         
     180                 :      * @var array                                                                                                                 
     181                 :      */                                                                                                                           
     182                 :     private $_moduleNamespaces = null;                                                                                            
     183                 :                                                                                                                                   
     184                 :     /**                                                                                                                           
     185                 :      * Modules allowed to load                                                                                                    
     186                 :      * If empty - all modules are allowed                                                                                         
     187                 :      *                                                                                                                            
     188                 :      * @var array                                                                                                                 
     189                 :      */                                                                                                                           
     190                 :     protected $_allowedModules = array();                                                                                         
     191                 :                                                                                                                                   
     192                 :     /**                                                                                                                           
     193                 :      * Class construct                                                                                                            
     194                 :      *                                                                                                                            
     195                 :      * @param mixed $sourceData                                                                                                   
     196                 :      */                                                                                                                           
     197                 :     public function __construct($sourceData=null)                                                                                 
     198                 :     {                                                                                                                             
     199               0 :         $this->setCacheId('config_global');                                                                                       
     200               0 :         $this->_options         = new Mage_Core_Model_Config_Options();                                                           
     201               0 :         $this->_prototype       = new Mage_Core_Model_Config_Base();                                                              
     202               0 :         $this->_cacheChecksum   = null;                                                                                           
     203               0 :         parent::__construct($sourceData);                                                                                         
     204               0 :     }                                                                                                                             
     205                 :                                                                                                                                   
     206                 :     /**                                                                                                                           
     207                 :      * Get config resource model                                                                                                  
     208                 :      *                                                                                                                            
     209                 :      * @return Mage_Core_Store_Mysql4_Config                                                                                      
     210                 :      */                                                                                                                           
     211                 :     public function getResourceModel()                                                                                            
     212                 :     {                                                                                                                             
     213              15 :         if (is_null($this->_resourceModel)) {                                                                                     
     214               0 :             $this->_resourceModel = Mage::getResourceModel('core/config');                                                        
     215               0 :         }                                                                                                                         
     216              15 :         return $this->_resourceModel;                                                                                             
     217                 :     }                                                                                                                             
     218                 :                                                                                                                                   
     219                 :     /**                                                                                                                           
     220                 :      * Get configuration options object                                                                                           
     221                 :      *                                                                                                                            
     222                 :      * @return Mage_Core_Model_Config_Options                                                                                     
     223                 :      */                                                                                                                           
     224                 :     public function getOptions()                                                                                                  
     225                 :     {                                                                                                                             
     226               4 :         return $this->_options;                                                                                                   
     227                 :     }                                                                                                                             
     228                 :                                                                                                                                   
     229                 :     /**                                                                                                                           
     230                 :      * Set configuration options                                                                                                  
     231                 :      *                                                                                                                            
     232                 :      * @param array $options                                                                                                      
     233                 :      * @return Mage_Core_Model_Config                                                                                             
     234                 :      */                                                                                                                           
     235                 :     public function setOptions($options)                                                                                          
     236                 :     {                                                                                                                             
     237               0 :         if (is_array($options)) {                                                                                                 
     238               0 :             $this->getOptions()->addData($options);                                                                               
     239               0 :         }                                                                                                                         
     240               0 :         return $this;                                                                                                             
     241                 :     }                                                                                                                             
     242                 :                                                                                                                                   
     243                 :     /**                                                                                                                           
     244                 :      * Initialization of core configuration                                                                                       
     245                 :      *                                                                                                                            
     246                 :      * @return Mage_Core_Model_Config                                                                                             
     247                 :      */                                                                                                                           
     248                 :     public function init($options=array())                                                                                        
     249                 :     {                                                                                                                             
     250               0 :         $this->setCacheChecksum(null);                                                                                            
     251               0 :         $this->_cacheLoadedSections = array();                                                                                    
     252               0 :         $this->setOptions($options);                                                                                              
     253               0 :         $this->loadBase();                                                                                                        
     254                 :                                                                                                                                   
     255               0 :         $cacheLoad = $this->loadModulesCache();                                                                                   
     256               0 :         if ($cacheLoad) {                                                                                                         
     257               0 :             return $this;                                                                                                         
     258                 :         }                                                                                                                         
     259               0 :         $this->loadModules();                                                                                                     
     260               0 :         $this->loadDb();                                                                                                          
     261               0 :         $this->saveCache();                                                                                                       
     262               0 :         return $this;                                                                                                             
     263                 :     }                                                                                                                             
     264                 :                                                                                                                                   
     265                 :     /**                                                                                                                           
     266                 :      * Load base system configuration (config.xml and local.xml files)                                                            
     267                 :      *                                                                                                                            
     268                 :      * @return Mage_Core_Model_Config                                                                                             
     269                 :      */                                                                                                                           
     270                 :     public function loadBase()                                                                                                    
     271                 :     {                                                                                                                             
     272               0 :         $etcDir = $this->getOptions()->getEtcDir();                                                                               
     273               0 :         $files = glob($etcDir.DS.'*.xml');                                                                                        
     274               0 :         $this->loadFile(current($files));                                                                                         
     275               0 :         while ($file = next($files)) {                                                                                            
     276               0 :             $merge = clone $this->_prototype;                                                                                     
     277               0 :             $merge->loadFile($file);                                                                                              
     278               0 :             $this->extend($merge);                                                                                                
     279               0 :         }                                                                                                                         
     280               0 :         if (in_array($etcDir.DS.'local.xml', $files)) {                                                                           
     281               0 :             $this->_isLocalConfigLoaded = true;                                                                                   
     282               0 :         }                                                                                                                         
     283               0 :         return $this;                                                                                                             
     284                 :     }                                                                                                                             
     285                 :                                                                                                                                   
     286                 :     /**                                                                                                                           
     287                 :      * Load cached modules configuration                                                                                          
     288                 :      *                                                                                                                            
     289                 :      * @return bool                                                                                                               
     290                 :      */                                                                                                                           
     291                 :     public function loadModulesCache()                                                                                            
     292                 :     {                                                                                                                             
     293               0 :         if (Mage::isInstalled()) {                                                                                                
     294               0 :             if ($this->_canUseCacheForInit()) {                                                                                   
     295               0 :                 Varien_Profiler::start('mage::app::init::config::load_cache');                                                    
     296               0 :                 $loaded = $this->loadCache();                                                                                     
     297               0 :                 Varien_Profiler::stop('mage::app::init::config::load_cache');                                                     
     298               0 :                 if ($loaded) {                                                                                                    
     299               0 :                     $this->_useCache = true;                                                                                      
     300               0 :                     return true;                                                                                                  
     301                 :                 }                                                                                                                 
     302               0 :             }                                                                                                                     
     303               0 :         }                                                                                                                         
     304               0 :         return false;                                                                                                             
     305                 :     }                                                                                                                             
     306                 :                                                                                                                                   
     307                 :     /**                                                                                                                           
     308                 :      * Load modules configuration                                                                                                 
     309                 :      *                                                                                                                            
     310                 :      * @return Mage_Core_Model_Config                                                                                             
     311                 :      */                                                                                                                           
     312                 :     public function loadModules()                                                                                                 
     313                 :     {                                                                                                                             
     314               0 :         Varien_Profiler::start('config/load-modules');                                                                            
     315               0 :         $this->_loadDeclaredModules();                                                                                            
     316               0 :         $this->loadModulesConfiguration('config.xml', $this);                                                                     
     317                 :                                                                                                                                   
     318                 :         /**                                                                                                                       
     319                 :          * Prevent local.xml directives overwriting                                                                               
     320                 :          */                                                                                                                       
     321               0 :         $mergeConfig = clone $this->_prototype;                                                                                   
     322               0 :         $this->_isLocalConfigLoaded = $mergeConfig->loadFile($this->getOptions()->getEtcDir().DS.'local.xml');                    
     323               0 :         if ($this->_isLocalConfigLoaded) {                                                                                        
     324               0 :             $this->extend($mergeConfig);                                                                                          
     325               0 :         }                                                                                                                         
     326                 :                                                                                                                                   
     327               0 :         $this->applyExtends();                                                                                                    
     328               0 :         Varien_Profiler::stop('config/load-modules');                                                                             
     329               0 :         return $this;                                                                                                             
     330                 :     }                                                                                                                             
     331                 :                                                                                                                                   
     332                 :     /**                                                                                                                           
     333                 :      * Check if local configuration (DB connection, etc) is loaded                                                                
     334                 :      *                                                                                                                            
     335                 :      * @return bool                                                                                                               
     336                 :      */                                                                                                                           
     337                 :     public function isLocalConfigLoaded()                                                                                         
     338                 :     {                                                                                                                             
     339               0 :         return $this->_isLocalConfigLoaded;                                                                                       
     340                 :     }                                                                                                                             
     341                 :                                                                                                                                   
     342                 :     /**                                                                                                                           
     343                 :      * Load config data from DB                                                                                                   
     344                 :      *                                                                                                                            
     345                 :      * @return Mage_Core_Model_Config                                                                                             
     346                 :      */                                                                                                                           
     347                 :     public function loadDb()                                                                                                      
     348                 :     {                                                                                                                             
     349              15 :         if ($this->_isLocalConfigLoaded && Mage::isInstalled()) {                                                                 
     350              15 :             Varien_Profiler::start('config/load-db');                                                                             
     351              15 :             $dbConf = $this->getResourceModel();                                                                                  
     352              15 :             $dbConf->loadToXml($this);                                                                                            
     353              15 :             Varien_Profiler::stop('config/load-db');                                                                              
     354              15 :         }                                                                                                                         
     355              15 :         return $this;                                                                                                             
     356                 :     }                                                                                                                             
     357                 :                                                                                                                                   
     358                 :     /**                                                                                                                           
     359                 :      * Reinitialize configuration                                                                                                 
     360                 :      *                                                                                                                            
     361                 :      * @param   array $options                                                                                                    
     362                 :      * @return  Mage_Core_Model_Config                                                                                            
     363                 :      */                                                                                                                           
     364                 :     public function reinit($options = array())                                                                                    
     365                 :     {                                                                                                                             
     366               0 :         $this->_allowCacheForInit = false;                                                                                        
     367               0 :         $this->_useCache = false;                                                                                                 
     368               0 :         return $this->init($options);                                                                                             
     369                 :     }                                                                                                                             
     370                 :                                                                                                                                   
     371                 :     /**                                                                                                                           
     372                 :      * Check local modules enable/disable flag                                                                                    
     373                 :      * If local modules are disbled remove local modules path from include dirs                                                   
     374                 :      *                                                                                                                            
     375                 :      * return true if local modules enabled and false if disabled                                                                 
     376                 :      *                                                                                                                            
     377                 :      * @return bool                                                                                                               
     378                 :      */                                                                                                                           
     379                 :     protected function _canUseLocalModules()                                                                                      
     380                 :     {                                                                                                                             
     381               0 :         if ($this->_canUseLocalModules !== null) {                                                                                
     382               0 :             return $this->_canUseLocalModules;                                                                                    
     383                 :         }                                                                                                                         
     384                 :                                                                                                                                   
     385               0 :         $disableLocalModules = (string)$this->getNode('global/disable_local_modules');                                            
     386               0 :         if (!empty($disableLocalModules)) {                                                                                       
     387               0 :             $disableLocalModules = (('true' === $disableLocalModules) || ('1' === $disableLocalModules));                         
     388               0 :         } else {                                                                                                                  
     389               0 :             $disableLocalModules = false;                                                                                         
     390                 :         }                                                                                                                         
     391                 :                                                                                                                                   
     392               0 :         if ($disableLocalModules && !defined('COMPILER_INCLUDE_PATH')) {                                                          
     393               0 :             set_include_path(                                                                                                     
     394                 :                 // excluded '/app/code/local'                                                                                     
     395               0 :                 BP . DS . 'app' . DS . 'code' . DS . 'community' . PS .                                                           
     396               0 :                 BP . DS . 'app' . DS . 'code' . DS . 'core' . PS .                                                                
     397               0 :                 BP . DS . 'lib' . PS .                                                                                            
     398               0 :                 Mage::registry('original_include_path')                                                                           
     399               0 :             );                                                                                                                    
     400               0 :         }                                                                                                                         
     401               0 :         $this->_canUseLocalModules = !$disableLocalModules;                                                                       
     402               0 :         return $this->_canUseLocalModules;                                                                                        
     403                 :     }                                                                                                                             
     404                 :                                                                                                                                   
     405                 :     /**                                                                                                                           
     406                 :      * Check if cache can be used for config initialization                                                                       
     407                 :      *                                                                                                                            
     408                 :      * @return bool                                                                                                               
     409                 :      */                                                                                                                           
     410                 :     protected function _canUseCacheForInit()                                                                                      
     411                 :     {                                                                                                                             
     412               0 :         return Mage::app()->useCache('config') && $this->_allowCacheForInit                                                       
     413               0 :             && !$this->_loadCache($this->_getCacheLockId());                                                                      
     414                 :     }                                                                                                                             
     415                 :                                                                                                                                   
     416                 :     /**                                                                                                                           
     417                 :      * Retrieve cache object                                                                                                      
     418                 :      *                                                                                                                            
     419                 :      * @return Zend_Cache_Frontend_File                                                                                           
     420                 :      */                                                                                                                           
     421                 :     public function getCache()                                                                                                    
     422                 :     {                                                                                                                             
     423               0 :         return Mage::app()->getCache();                                                                                           
     424                 :     }                                                                                                                             
     425                 :                                                                                                                                   
     426                 :     /**                                                                                                                           
     427                 :      * Get lock flag cache identifier                                                                                             
     428                 :      *                                                                                                                            
     429                 :      * @return string                                                                                                             
     430                 :      */                                                                                                                           
     431                 :     protected function _getCacheLockId()                                                                                          
     432                 :     {                                                                                                                             
     433               0 :         return $this->getCacheId().'.lock';                                                                                       
     434                 :     }                                                                                                                             
     435                 :                                                                                                                                   
     436                 :     /**                                                                                                                           
     437                 :      * Save configuration cache                                                                                                   
     438                 :      *                                                                                                                            
     439                 :      * @param   array $tags cache tags                                                                                            
     440                 :      * @return  Mage_Core_Model_Config                                                                                            
     441                 :      */                                                                                                                           
     442                 :     public function saveCache($tags=array())                                                                                      
     443                 :     {                                                                                                                             
     444               0 :         if (!Mage::app()->useCache('config')) {                                                                                   
     445               0 :             return $this;                                                                                                         
     446                 :         }                                                                                                                         
     447               0 :         if (!in_array(self::CACHE_TAG, $tags)) {                                                                                  
     448               0 :             $tags[] = self::CACHE_TAG;                                                                                            
     449               0 :         }                                                                                                                         
     450               0 :         $cacheLockId = $this->_getCacheLockId();                                                                                  
     451               0 :         if ($this->_loadCache($cacheLockId)) {                                                                                    
     452               0 :             return $this;                                                                                                         
     453                 :         }                                                                                                                         
     454                 :                                                                                                                                   
     455               0 :         if (!empty($this->_cacheSections)) {                                                                                      
     456               0 :             $xml = clone $this->_xml;                                                                                             
     457               0 :             foreach ($this->_cacheSections as $sectionName => $level) {                                                           
     458               0 :                 $this->_saveSectionCache($this->getCacheId(), $sectionName, $xml, $level, $tags);                                 
     459               0 :                 unset($xml->$sectionName);                                                                                        
     460               0 :             }                                                                                                                     
     461               0 :             $this->_cachePartsForSave[$this->getCacheId()] = $xml->asNiceXml('', false);                                          
     462               0 :         } else {                                                                                                                  
     463               0 :             return parent::saveCache($tags);                                                                                      
     464                 :         }                                                                                                                         
     465                 :                                                                                                                                   
     466               0 :         $this->_saveCache(time(), $cacheLockId, array(), 60);                                                                     
     467               0 :         $this->removeCache();                                                                                                     
     468               0 :         foreach ($this->_cachePartsForSave as $cacheId => $cacheData) {                                                           
     469               0 :             $this->_saveCache($cacheData, $cacheId, $tags, $this->getCacheLifetime());                                            
     470               0 :         }                                                                                                                         
     471               0 :         unset($this->_cachePartsForSave);                                                                                         
     472               0 :         $this->_removeCache($cacheLockId);                                                                                        
     473               0 :         return $this;                                                                                                             
     474                 :     }                                                                                                                             
     475                 :                                                                                                                                   
     476                 :     /**                                                                                                                           
     477                 :      * Save cache of specified                                                                                                    
     478                 :      *                                                                                                                            
     479                 :      * @param   string $idPrefix cache id prefix                                                                                  
     480                 :      * @param   string $sectionName                                                                                               
     481                 :      * @param   Varien_Simplexml_Element $source                                                                                  
     482                 :      * @param   int $recursionLevel                                                                                               
     483                 :      * @return  Mage_Core_Model_Config                                                                                            
     484                 :      */                                                                                                                           
     485                 :     protected function _saveSectionCache($idPrefix, $sectionName, $source, $recursionLevel=0, $tags=array())                      
     486                 :     {                                                                                                                             
     487               0 :         if ($source && $source->$sectionName) {                                                                                   
     488               0 :             $cacheId = $idPrefix . '_' . $sectionName;                                                                            
     489               0 :             if ($recursionLevel > 0) {                                                                                            
     490               0 :                 foreach ($source->$sectionName->children() as $subSectionName => $node) {                                         
     491               0 :                     $this->_saveSectionCache($cacheId, $subSectionName, $source->$sectionName, $recursionLevel-1, $tags);         
     492               0 :                 }                                                                                                                 
     493               0 :             }                                                                                                                     
     494               0 :             $this->_cachePartsForSave[$cacheId] = $source->$sectionName->asNiceXml('', false);                                    
     495               0 :         }                                                                                                                         
     496               0 :         return $this;                                                                                                             
     497                 :     }                                                                                                                             
     498                 :                                                                                                                                   
     499                 :     /**                                                                                                                           
     500                 :      * Load config section cached data                                                                                            
     501                 :      *                                                                                                                            
     502                 :      * @param   string $sectionName                                                                                               
     503                 :      * @return  Varien_Simplexml_Element                                                                                          
     504                 :      */                                                                                                                           
     505                 :     protected function _loadSectionCache($sectionName)                                                                            
     506                 :     {                                                                                                                             
     507               0 :         $cacheId = $this->getCacheId() . '_' . $sectionName;                                                                      
     508               0 :         $xmlString = $this->_loadCache($cacheId);                                                                                 
     509                 :                                                                                                                                   
     510                 :         /**                                                                                                                       
     511                 :          * If we can't load section cache (problems with cache storage)                                                           
     512                 :          */                                                                                                                       
     513               0 :         if (!$xmlString) {                                                                                                        
     514               0 :             $this->_useCache = false;                                                                                             
     515               0 :             $this->reinit($this->_options);                                                                                       
     516               0 :             return false;                                                                                                         
     517                 :         } else {                                                                                                                  
     518               0 :             $xml = simplexml_load_string($xmlString, $this->_elementClass);                                                       
     519               0 :             return $xml;                                                                                                          
     520                 :         }                                                                                                                         
     521                 :     }                                                                                                                             
     522                 :                                                                                                                                   
     523                 :     /**                                                                                                                           
     524                 :      * Load cached data by identifier                                                                                             
     525                 :      *                                                                                                                            
     526                 :      * @param   string $id                                                                                                        
     527                 :      * @return  string                                                                                                            
     528                 :      */                                                                                                                           
     529                 :     protected function _loadCache($id)                                                                                            
     530                 :     {                                                                                                                             
     531               0 :         return Mage::app()->loadCache($id);                                                                                       
     532                 :     }                                                                                                                             
     533                 :                                                                                                                                   
     534                 :     /**                                                                                                                           
     535                 :      * Save cache data                                                                                                            
     536                 :      *                                                                                                                            
     537                 :      * @param   string $data                                                                                                      
     538                 :      * @param   string $id                                                                                                        
     539                 :      * @param   array $tags                                                                                                       
     540                 :      * @param   false|int $lifetime                                                                                               
     541                 :      * @return  Mage_Core_Model_Config                                                                                            
     542                 :      */                                                                                                                           
     543                 :     protected function _saveCache($data, $id, $tags=array(), $lifetime=false)                                                     
     544                 :     {                                                                                                                             
     545               0 :         return Mage::app()->saveCache($data, $id, $tags, $lifetime);                                                              
     546                 :     }                                                                                                                             
     547                 :                                                                                                                                   
     548                 :     /**                                                                                                                           
     549                 :      * Clear cache data by id                                                                                                     
     550                 :      *                                                                                                                            
     551                 :      * @param   string $id                                                                                                        
     552                 :      * @return  Mage_Core_Model_Config                                                                                            
     553                 :      */                                                                                                                           
     554                 :     protected function _removeCache($id)                                                                                          
     555                 :     {                                                                                                                             
     556               0 :         return Mage::app()->removeCache($id);                                                                                     
     557                 :     }                                                                                                                             
     558                 :                                                                                                                                   
     559                 :     /**                                                                                                                           
     560                 :      * Remove configuration cache                                                                                                 
     561                 :      *                                                                                                                            
     562                 :      * @return Mage_Core_Model_Config                                                                                             
     563                 :      */                                                                                                                           
     564                 :     public function removeCache()                                                                                                 
     565                 :     {                                                                                                                             
     566               0 :         Mage::app()->cleanCache(array(self::CACHE_TAG));                                                                          
     567               0 :         return parent::removeCache();                                                                                             
     568                 :     }                                                                                                                             
     569                 :                                                                                                                                   
     570                 :     /**                                                                                                                           
     571                 :      * Configuration cache clean process                                                                                          
     572                 :      *                                                                                                                            
     573                 :      * @return Mage_Core_Model_Config                                                                                             
     574                 :      */                                                                                                                           
     575                 :     public function cleanCache()                                                                                                  
     576                 :     {                                                                                                                             
     577               0 :         return $this->reinit();                                                                                                   
     578                 :     }                                                                                                                             
     579                 :                                                                                                                                   
     580                 :     /**                                                                                                                           
     581                 :      * Get node value from cached section data                                                                                    
     582                 :      *                                                                                                                            
     583                 :      * @param   array $path                                                                                                       
     584                 :      * @return  Mage_Core_Model_Config                                                                                            
     585                 :      */                                                                                                                           
     586                 :     public function getSectionNode($path)                                                                                         
     587                 :     {                                                                                                                             
     588               0 :         $section    = $path[0];                                                                                                   
     589               0 :         $recursion  = $this->_cacheSections[$section];                                                                            
     590               0 :         $sectioPath = array_slice($path, 0, $recursion+1);                                                                        
     591               0 :         $path       = array_slice($path, $recursion+1);                                                                           
     592               0 :         $sectionKey = implode('_', $sectioPath);                                                                                  
     593                 :                                                                                                                                   
     594               0 :         if (!isset($this->_cacheLoadedSections[$sectionKey])) {                                                                   
     595               0 :             Varien_Profiler::start('mage::app::init::config::section::'.$sectionKey);                                             
     596               0 :             $this->_cacheLoadedSections[$sectionKey] = $this->_loadSectionCache($sectionKey);                                     
     597               0 :             Varien_Profiler::stop('mage::app::init::config::section::'.$sectionKey);                                              
     598               0 :         }                                                                                                                         
     599                 :                                                                                                                                   
     600               0 :         if ($this->_cacheLoadedSections[$sectionKey] === false) {                                                                 
     601               0 :             return false;                                                                                                         
     602                 :         }                                                                                                                         
     603               0 :         return $this->_cacheLoadedSections[$sectionKey]->descend($path);                                                          
     604                 :     }                                                                                                                             
     605                 :                                                                                                                                   
     606                 :     /**                                                                                                                           
     607                 :      * Returns node found by the $path and scope info                                                                             
     608                 :      *                                                                                                                            
     609                 :      * @param   string $path                                                                                                      
     610                 :      * @param   string $scope                                                                                                     
     611                 :      * @param   string $scopeCode                                                                                                 
     612                 :      * @return Mage_Core_Model_Config_Element                                                                                     
     613                 :      */                                                                                                                           
     614                 :     public function getNode($path=null, $scope='', $scopeCode=null)                                                               
     615                 :     {                                                                                                                             
     616              19 :         if ($scope !== '') {                                                                                                      
     617               0 :             if (('store' === $scope) || ('website' === $scope)) {                                                                 
     618               0 :                 $scope .= 's';                                                                                                    
     619               0 :             }                                                                                                                     
     620               0 :             if (('default' !== $scope) && is_int($scopeCode)) {                                                                   
     621               0 :                 if ('stores' == $scope) {                                                                                         
     622               0 :                     $scopeCode = Mage::app()->getStore($scopeCode)->getCode();                                                    
     623               0 :                 } elseif ('websites' == $scope) {                                                                                 
     624               0 :                     $scopeCode = Mage::app()->getWebsite($scopeCode)->getCode();                                                  
     625               0 :                 } else {                                                                                                          
     626               0 :                     Mage::throwException(Mage::helper('core')->__('Unknown scope "%s".', $scope));                                
     627                 :                 }                                                                                                                 
     628               0 :             }                                                                                                                     
     629               0 :             $path = $scope . ($scopeCode ? '/' . $scopeCode : '' ) . (empty($path) ? '' : '/' . $path);                           
     630               0 :         }                                                                                                                         
     631                 :                                                                                                                                   
     632                 :         /**                                                                                                                       
     633                 :          * Check path cache loading                                                                                               
     634                 :          */                                                                                                                       
     635              19 :         if ($this->_useCache && ($path !== null)) {                                                                               
     636               0 :             $path   = explode('/', $path);                                                                                        
     637               0 :             $section= $path[0];                                                                                                   
     638               0 :             if (isset($this->_cacheSections[$section])) {                                                                         
     639               0 :                 $res = $this->getSectionNode($path);                                                                              
     640               0 :                 if ($res !== false) {                                                                                             
     641               0 :                     return $res;                                                                                                  
     642                 :                 }                                                                                                                 
     643               0 :             }                                                                                                                     
     644               0 :         }                                                                                                                         
     645              19 :         return parent::getNode($path);                                                                                            
     646                 :     }                                                                                                                             
     647                 :                                                                                                                                   
     648                 :     /**                                                                                                                           
     649                 :      * Retrive Declared Module file list                                                                                          
     650                 :      *                                                                                                                            
     651                 :      * @return array                                                                                                              
     652                 :      */                                                                                                                           
     653                 :     protected function _getDeclaredModuleFiles()                                                                                  
     654                 :     {                                                                                                                             
     655               0 :         $etcDir = $this->getOptions()->getEtcDir();                                                                               
     656               0 :         $moduleFiles = glob($etcDir . DS . 'modules' . DS . '*.xml');                                                             
     657                 :                                                                                                                                   
     658               0 :         if (!$moduleFiles) {                                                                                                      
     659               0 :             return false;                                                                                                         
     660                 :         }                                                                                                                         
     661                 :                                                                                                                                   
     662                 :         $collectModuleFiles = array(                                                                                              
     663               0 :             'base'   => array(),                                                                                                  
     664               0 :             'mage'   => array(),                                                                                                  
     665               0 :             'custom' => array()                                                                                                   
     666               0 :         );                                                                                                                        
     667                 :                                                                                                                                   
     668               0 :         foreach ($moduleFiles as $v) {                                                                                            
     669               0 :             $name = explode(DIRECTORY_SEPARATOR, $v);                                                                             
     670               0 :             $name = substr($name[count($name) - 1], 0, -4);                                                                       
     671                 :                                                                                                                                   
     672               0 :             if ($name == 'Mage_All') {                                                                                            
     673               0 :                 $collectModuleFiles['base'][] = $v;                                                                               
     674               0 :             }                                                                                                                     
     675               0 :             elseif (substr($name, 0, 5) == 'Mage_') {                                                                             
     676               0 :                 $collectModuleFiles['mage'][] = $v;                                                                               
     677               0 :             }                                                                                                                     
     678                 :             else {                                                                                                                
     679               0 :                 $collectModuleFiles['custom'][] = $v;                                                                             
     680                 :             }                                                                                                                     
     681               0 :         }                                                                                                                         
     682                 :                                                                                                                                   
     683               0 :         return array_merge(                                                                                                       
     684               0 :             $collectModuleFiles['base'],                                                                                          
     685               0 :             $collectModuleFiles['mage'],                                                                                          
     686               0 :             $collectModuleFiles['custom']                                                                                         
     687               0 :         );                                                                                                                        
     688                 :     }                                                                                                                             
     689                 :                                                                                                                                   
     690                 :     /**                                                                                                                           
     691                 :      * Add module(s) to allowed list                                                                                              
     692                 :      *                                                                                                                            
     693                 :      * @param  strung|array $module                                                                                               
     694                 :      * @return Mage_Core_Model_Config                                                                                             
     695                 :      */                                                                                                                           
     696                 :     public function addAllowedModules($module)                                                                                    
     697                 :     {                                                                                                                             
     698               0 :         if (is_array($module)) {                                                                                                  
     699               0 :             foreach ($module as $moduleName) {                                                                                    
     700               0 :                 $this->addAllowedModules($moduleName);                                                                            
     701               0 :             }                                                                                                                     
     702               0 :         } elseif (!in_array($module, $this->_allowedModules)) {                                                                   
     703               0 :             $this->_allowedModules[] = $module;                                                                                   
     704               0 :         }                                                                                                                         
     705                 :                                                                                                                                   
     706               0 :         return $this;                                                                                                             
     707                 :     }                                                                                                                             
     708                 :                                                                                                                                   
     709                 :     /**                                                                                                                           
     710                 :      * Define if module is allowed                                                                                                
     711                 :      *                                                                                                                            
     712                 :      * @param  string $moduleName                                                                                                 
     713                 :      * @return bool                                                                                                               
     714                 :      */                                                                                                                           
     715                 :     protected function _isAllowedModule($moduleName)                                                                              
     716                 :     {                                                                                                                             
     717               0 :         if (empty($this->_allowedModules)) {                                                                                      
     718               0 :             return true;                                                                                                          
     719                 :         } else {                                                                                                                  
     720               0 :             return in_array($moduleName, $this->_allowedModules);                                                                 
     721                 :         }                                                                                                                         
     722                 :     }                                                                                                                             
     723                 :                                                                                                                                   
     724                 :     /**                                                                                                                           
     725                 :      * Load declared modules configuration                                                                                        
     726                 :      *                                                                                                                            
     727                 :      * @param   null $mergeConfig depricated                                                                                      
     728                 :      * @return  Mage_Core_Model_Config                                                                                            
     729                 :      */                                                                                                                           
     730                 :     protected function _loadDeclaredModules($mergeConfig = null)                                                                  
     731                 :     {                                                                                                                             
     732               0 :         $moduleFiles = $this->_getDeclaredModuleFiles();                                                                          
     733               0 :         if (!$moduleFiles) {                                                                                                      
     734               0 :             return ;                                                                                                              
     735                 :         }                                                                                                                         
     736                 :                                                                                                                                   
     737               0 :         Varien_Profiler::start('config/load-modules-declaration');                                                                
     738                 :                                                                                                                                   
     739               0 :         $unsortedConfig = new Mage_Core_Model_Config_Base();                                                                      
     740               0 :         $unsortedConfig->loadString('<config/>');                                                                                 
     741               0 :         $fileConfig = new Mage_Core_Model_Config_Base();                                                                          
     742                 :                                                                                                                                   
     743                 :         // load modules declarations                                                                                              
     744               0 :         foreach ($moduleFiles as $file) {                                                                                         
     745               0 :             $fileConfig->loadFile($file);                                                                                         
     746               0 :             $unsortedConfig->extend($fileConfig);                                                                                 
     747               0 :         }                                                                                                                         
     748                 :                                                                                                                                   
     749               0 :         $moduleDepends = array();                                                                                                 
     750               0 :         foreach ($unsortedConfig->getNode('modules')->children() as $moduleName => $moduleNode) {                                 
     751               0 :             if (!$this->_isAllowedModule($moduleName)) {                                                                          
     752               0 :                 continue;                                                                                                         
     753                 :             }                                                                                                                     
     754                 :                                                                                                                                   
     755               0 :             $depends = array();                                                                                                   
     756               0 :             if ($moduleNode->depends) {                                                                                           
     757               0 :                 foreach ($moduleNode->depends->children() as $depend) {                                                           
     758               0 :                     $depends[$depend->getName()] = true;                                                                          
     759               0 :                 }                                                                                                                 
     760               0 :             }                                                                                                                     
     761               0 :             $moduleDepends[$moduleName] = array(                                                                                  
     762               0 :                 'module'    => $moduleName,                                                                                       
     763               0 :                 'depends'   => $depends,                                                                                          
     764               0 :                 'active'    => ('true' === (string)$moduleNode->active ? true : false),                                           
     765                 :             );                                                                                                                    
     766               0 :         }                                                                                                                         
     767                 :                                                                                                                                   
     768                 :         // check and sort module dependence                                                                                       
     769               0 :         $moduleDepends = $this->_sortModuleDepends($moduleDepends);                                                               
     770                 :                                                                                                                                   
     771                 :         // create sorted config                                                                                                   
     772               0 :         $sortedConfig = new Mage_Core_Model_Config_Base();                                                                        
     773               0 :         $sortedConfig->loadString('<config><modules/></config>');                                                                 
     774                 :                                                                                                                                   
     775               0 :         foreach ($unsortedConfig->getNode()->children() as $nodeName => $node) {                                                  
     776               0 :             if ($nodeName != 'modules') {                                                                                         
     777               0 :                 $sortedConfig->getNode()->appendChild($node);                                                                     
     778               0 :             }                                                                                                                     
     779               0 :         }                                                                                                                         
     780                 :                                                                                                                                   
     781               0 :         foreach ($moduleDepends as $moduleProp) {                                                                                 
     782               0 :             $node = $unsortedConfig->getNode('modules/'.$moduleProp['module']);                                                   
     783               0 :             $sortedConfig->getNode('modules')->appendChild($node);                                                                
     784               0 :         }                                                                                                                         
     785                 :                                                                                                                                   
     786               0 :         $this->extend($sortedConfig);                                                                                             
     787                 :                                                                                                                                   
     788               0 :         Varien_Profiler::stop('config/load-modules-declaration');                                                                 
     789               0 :         return $this;                                                                                                             
     790                 :     }                                                                                                                             
     791                 :                                                                                                                                   
     792                 :     /**                                                                                                                           
     793                 :      * Sort modules and check depends                                                                                             
     794                 :      *                                                                                                                            
     795                 :      * @param array $modules                                                                                                      
     796                 :      * @return array                                                                                                              
     797                 :      */                                                                                                                           
     798                 :     protected function _sortModuleDepends($modules)                                                                               
     799                 :     {                                                                                                                             
     800               0 :         foreach ($modules as $moduleName => $moduleProps) {                                                                       
     801               0 :             $depends = $moduleProps['depends'];                                                                                   
     802               0 :             foreach ($moduleProps['depends'] as $depend => $true) {                                                               
     803               0 :                 if ($moduleProps['active'] && ((!isset($modules[$depend])) || empty($modules[$depend]['active']))) {              
     804               0 :                     Mage::throwException(Mage::helper('core')->__('Module "%1$s" requires module "%2$s".', $moduleName, $depend));
     805               0 :                 }                                                                                                                 
     806               0 :                 $depends = array_merge($depends, $modules[$depend]['depends']);                                                   
     807               0 :             }                                                                                                                     
     808               0 :             $modules[$moduleName]['depends'] = $depends;                                                                          
     809               0 :         }                                                                                                                         
     810               0 :         $modules = array_values($modules);                                                                                        
     811                 :                                                                                                                                   
     812               0 :         $size = count($modules) - 1;                                                                                              
     813               0 :         for ($i = $size; $i >= 0; $i--) {                                                                                         
     814               0 :             for ($j = $size; $i < $j; $j--) {                                                                                     
     815               0 :                 if (isset($modules[$i]['depends'][$modules[$j]['module']])) {                                                     
     816               0 :                     $value       = $modules[$i];                                                                                  
     817               0 :                     $modules[$i] = $modules[$j];                                                                                  
     818               0 :                     $modules[$j] = $value;                                                                                        
     819               0 :                 }                                                                                                                 
     820               0 :             }                                                                                                                     
     821               0 :         }                                                                                                                         
     822                 :                                                                                                                                   
     823               0 :         $definedModules = array();                                                                                                
     824               0 :         foreach ($modules as $moduleProp) {                                                                                       
     825               0 :             foreach ($moduleProp['depends'] as $dependModule => $true) {                                                          
     826               0 :                 if (!isset($definedModules[$dependModule])) {                                                                     
     827               0 :                     Mage::throwException(                                                                                         
     828               0 :                         Mage::helper('core')->__('Module "%1$s" cannot depend on "%2$s".', $moduleProp['module'], $dependModule)  
     829               0 :                     );                                                                                                            
     830               0 :                 }                                                                                                                 
     831               0 :             }                                                                                                                     
     832               0 :             $definedModules[$moduleProp['module']] = true;                                                                        
     833               0 :         }                                                                                                                         
     834                 :                                                                                                                                   
     835               0 :         return $modules;                                                                                                          
     836                 :     }                                                                                                                             
     837                 :                                                                                                                                   
     838                 :     /**                                                                                                                           
     839                 :      * Determine whether provided name begins from any available modules, according to namespaces priority                        
     840                 :      * If matched, returns as the matched module "factory" name or a fully qualified module name                                  
     841                 :      *                                                                                                                            
     842                 :      * @param string $name                                                                                                        
     843                 :      * @param bool $asFullModuleName                                                                                              
     844                 :      * @return string                                                                                                             
     845                 :      */                                                                                                                           
     846                 :     public function determineOmittedNamespace($name, $asFullModuleName = false)                                                   
     847                 :     {                                                                                                                             
     848               0 :         if (null === $this->_moduleNamespaces) {                                                                                  
     849               0 :             $this->_moduleNamespaces = array();                                                                                   
     850               0 :             foreach ($this->_xml->xpath('modules/*') as $m) {                                                                     
     851               0 :                 if ((string)$m->active == 'true') {                                                                               
     852               0 :                     $moduleName = $m->getName();                                                                                  
     853               0 :                     $module = strtolower($moduleName);                                                                            
     854               0 :                     $this->_moduleNamespaces[substr($module, 0, strpos($module, '_'))][$module] = $moduleName;                    
     855               0 :                 }                                                                                                                 
     856               0 :             }                                                                                                                     
     857               0 :         }                                                                                                                         
     858                 :                                                                                                                                   
     859               0 :         $name = explode('_', strtolower($name));                                                                                  
     860               0 :         $partsNum = count($name);                                                                                                 
     861               0 :         $defaultNamespaceFlag = false;                                                                                            
     862               0 :         foreach ($this->_moduleNamespaces as $namespaceName => $namespace) {                                                      
     863                 :             // assume the namespace is omitted (default namespace only, which comes first)                                        
     864               0 :             if ($defaultNamespaceFlag === false) {                                                                                
     865               0 :                 $defaultNamespaceFlag = true;                                                                                     
     866               0 :                 $defaultNS = $namespaceName . '_' . $name[0];                                                                     
     867               0 :                 if (isset($namespace[$defaultNS])) {                                                                              
     868               0 :                     return $asFullModuleName ? $namespace[$defaultNS] : $name[0]; // return omitted as well                       
     869                 :                 }                                                                                                                 
     870               0 :             }                                                                                                                     
     871                 :             // assume namespace is qualified                                                                                      
     872               0 :             if(isset($name[1])) {                                                                                                 
     873               0 :                 $fullNS = $name[0] . '_' . $name[1];                                                                              
     874               0 :                 if (2 <= $partsNum && isset($namespace[$fullNS])) {                                                               
     875               0 :                     return $asFullModuleName ? $namespace[$fullNS] : $fullNS;                                                     
     876                 :                 }                                                                                                                 
     877               0 :             }                                                                                                                     
     878               0 :         }                                                                                                                         
     879               0 :         return '';                                                                                                                
     880                 :     }                                                                                                                             
     881                 :                                                                                                                                   
     882                 :     /**                                                                                                                           
     883                 :      * Iterate all active modules "etc" folders and combine data from                                                             
     884                 :      * specidied xml file name to one object                                                                                      
     885                 :      *                                                                                                                            
     886                 :      * @param   string $fileName                                                                                                  
     887                 :      * @param   null|Mage_Core_Model_Config_Base $mergeToObject                                                                   
     888                 :      * @return  Mage_Core_Model_Config_Base                                                                                       
     889                 :      */                                                                                                                           
     890                 :     public function loadModulesConfiguration($fileName, $mergeToObject = null, $mergeModel=null)                                  
     891                 :     {                                                                                                                             
     892               0 :         $disableLocalModules = !$this->_canUseLocalModules();                                                                     
     893                 :                                                                                                                                   
     894               0 :         if ($mergeToObject === null) {                                                                                            
     895               0 :             $mergeToObject = clone $this->_prototype;                                                                             
     896               0 :             $mergeToObject->loadString('<config/>');                                                                              
     897               0 :         }                                                                                                                         
     898               0 :         if ($mergeModel === null) {                                                                                               
     899               0 :             $mergeModel = clone $this->_prototype;                                                                                
     900               0 :         }                                                                                                                         
     901               0 :         $modules = $this->getNode('modules')->children();                                                                         
     902               0 :         foreach ($modules as $modName=>$module) {                                                                                 
     903               0 :             if ($module->is('active')) {                                                                                          
     904               0 :                 if ($disableLocalModules && ('local' === (string)$module->codePool)) {                                            
     905               0 :                     continue;                                                                                                     
     906                 :                 }                                                                                                                 
     907               0 :                 $configFile = $this->getModuleDir('etc', $modName).DS.$fileName;                                                  
     908               0 :                 if ($mergeModel->loadFile($configFile)) {                                                                         
     909               0 :                     $mergeToObject->extend($mergeModel, true);                                                                    
     910               0 :                 }                                                                                                                 
     911               0 :             }                                                                                                                     
     912               0 :         }                                                                                                                         
     913               0 :         return $mergeToObject;                                                                                                    
     914                 :     }                                                                                                                             
     915                 :                                                                                                                                   
     916                 :     /**                                                                                                                           
     917                 :      * Retrieve temporary directory path                                                                                          
     918                 :      *                                                                                                                            
     919                 :      * @return string                                                                                                             
     920                 :      */                                                                                                                           
     921                 :     public function getTempVarDir()                                                                                               
     922                 :     {                                                                                                                             
     923               0 :         return $this->getOptions()->getVarDir();                                                                                  
     924                 :     }                                                                                                                             
     925                 :                                                                                                                                   
     926                 :     /**                                                                                                                           
     927                 :      * Get default server variables values                                                                                        
     928                 :      *                                                                                                                            
     929                 :      * @return array                                                                                                              
     930                 :      */                                                                                                                           
     931                 :     public function getDistroServerVars()                                                                                         
     932                 :     {                                                                                                                             
     933               0 :         if (!$this->_distroServerVars) {                                                                                          
     934                 :                                                                                                                                   
     935               0 :             if (isset($_SERVER['SCRIPT_NAME']) && isset($_SERVER['HTTP_HOST'])) {                                                 
     936               0 :                 $secure = (!empty($_SERVER['HTTPS']) && ($_SERVER['HTTPS']!='off')) || $_SERVER['SERVER_PORT']=='443';            
     937               0 :                 $scheme = ($secure ? 'https' : 'http') . '://' ;                                                                  
     938                 :                                                                                                                                   
     939               0 :                 $hostArr = explode(':', $_SERVER['HTTP_HOST']);                                                                   
     940               0 :                 $host = $hostArr[0];                                                                                              
     941               0 :                 $port = isset($hostArr[1]) && (!$secure && $hostArr[1]!=80 || $secure && $hostArr[1]!=443) ? ':'.$hostArr[1] : '';
     942               0 :                 $path = Mage::app()->getRequest()->getBasePath();                                                                 
     943                 :                                                                                                                                   
     944               0 :                 $baseUrl = $scheme.$host.$port.rtrim($path, '/').'/';                                                             
     945               0 :             } else {                                                                                                              
     946               0 :                 $baseUrl = 'http://localhost/';                                                                                   
     947                 :             }                                                                                                                     
     948                 :                                                                                                                                   
     949               0 :             $options = $this->getOptions();                                                                                       
     950               0 :             $this->_distroServerVars = array(                                                                                     
     951               0 :                 'root_dir'  => $options->getBaseDir(),                                                                            
     952               0 :                 'app_dir'   => $options->getAppDir(),                                                                             
     953               0 :                 'var_dir'   => $options->getVarDir(),                                                                             
     954               0 :                 'base_url'  => $baseUrl,                                                                                          
     955                 :             );                                                                                                                    
     956                 :                                                                                                                                   
     957               0 :             foreach ($this->_distroServerVars as $k=>$v) {                                                                        
     958               0 :                 $this->_substServerVars['{{'.$k.'}}'] = $v;                                                                       
     959               0 :             }                                                                                                                     
     960               0 :         }                                                                                                                         
     961               0 :         return $this->_distroServerVars;                                                                                          
     962                 :     }                                                                                                                             
     963                 :                                                                                                                                   
     964                 :     public function substDistroServerVars($data)                                                                                  
     965                 :     {                                                                                                                             
     966               0 :         $this->getDistroServerVars();                                                                                             
     967               0 :         return str_replace(                                                                                                       
     968               0 :             array_keys($this->_substServerVars),                                                                                  
     969               0 :             array_values($this->_substServerVars),                                                                                
     970                 :             $data                                                                                                                 
     971               0 :         );                                                                                                                        
     972                 :     }                                                                                                                             
     973                 :                                                                                                                                   
     974                 :     /**                                                                                                                           
     975                 :      * Get module config node                                                                                                     
     976                 :      *                                                                                                                            
     977                 :      * @param string $moduleName                                                                                                  
     978                 :      * @return Varien_Simplexml_Object                                                                                            
     979                 :      */                                                                                                                           
     980                 :     function getModuleConfig($moduleName='')                                                                                      
     981                 :     {                                                                                                                             
     982               0 :         $modules = $this->getNode('modules');                                                                                     
     983               0 :         if (''===$moduleName) {                                                                                                   
     984               0 :             return $modules;                                                                                                      
     985                 :         } else {                                                                                                                  
     986               0 :             return $modules->$moduleName;                                                                                         
     987                 :         }                                                                                                                         
     988                 :     }                                                                                                                             
     989                 :                                                                                                                                   
     990                 :     /**                                                                                                                           
     991                 :      * Get module setup class instance.                                                                                           
     992                 :      *                                                                                                                            
     993                 :      * Defaults to Mage_Core_Setup                                                                                                
     994                 :      *                                                                                                                            
     995                 :      * @param string|Varien_Simplexml_Object $module                                                                              
     996                 :      * @return object                                                                                                             
     997                 :      */                                                                                                                           
     998                 :     function getModuleSetup($module='')                                                                                           
     999                 :     {                                                                                                                             
    1000               0 :         $className = 'Mage_Core_Setup';                                                                                           
    1001               0 :         if (''!==$module) {                                                                                                       
    1002               0 :             if (is_string($module)) {                                                                                             
    1003               0 :                 $module = $this->getModuleConfig($module);                                                                        
    1004               0 :             }                                                                                                                     
    1005               0 :             if (isset($module->setup)) {                                                                                          
    1006               0 :                 $moduleClassName = $module->setup->getClassName();                                                                
    1007               0 :                 if (!empty($moduleClassName)) {                                                                                   
    1008               0 :                     $className = $moduleClassName;                                                                                
    1009               0 :                 }                                                                                                                 
    1010               0 :             }                                                                                                                     
    1011               0 :         }                                                                                                                         
    1012               0 :         return new $className($module);                                                                                           
    1013                 :     }                                                                                                                             
    1014                 :                                                                                                                                   
    1015                 :     /**                                                                                                                           
    1016                 :      * Get base filesystem directory. depends on $type                                                                            
    1017                 :      *                                                                                                                            
    1018                 :      * If $moduleName is specified retrieves specific value for the module.                                                       
    1019                 :      *                                                                                                                            
    1020                 :      * @deprecated in favor of Mage_Core_Model_Config_Options                                                                     
    1021                 :      * @todo get global dir config                                                                                                
    1022                 :      * @param string $type                                                                                                        
    1023                 :      * @return string                                                                                                             
    1024                 :      */                                                                                                                           
    1025                 :     public function getBaseDir($type='base')                                                                                      
    1026                 :     {                                                                                                                             
    1027               0 :         return $this->getOptions()->getDir($type);                                                                                
    1028                 :     }                                                                                                                             
    1029                 :                                                                                                                                   
    1030                 :     /**                                                                                                                           
    1031                 :      * Get temporary data directory name                                                                                          
    1032                 :      *                                                                                                                            
    1033                 :      * @param   string $path                                                                                                      
    1034                 :      * @param   string $type                                                                                                      
    1035                 :      * @return  string                                                                                                            
    1036                 :      */                                                                                                                           
    1037                 :     public function getVarDir($path=null, $type='var')                                                                            
    1038                 :     {                                                                                                                             
    1039               0 :         $dir = Mage::getBaseDir($type).($path!==null ? DS.$path : '');                                                            
    1040               0 :         if (!$this->createDirIfNotExists($dir)) {                                                                                 
    1041               0 :             return false;                                                                                                         
    1042                 :         }                                                                                                                         
    1043               0 :         return $dir;                                                                                                              
    1044                 :     }                                                                                                                             
    1045                 :                                                                                                                                   
    1046                 :     public function createDirIfNotExists($dir)                                                                                    
    1047                 :     {                                                                                                                             
    1048               0 :         return $this->getOptions()->createDirIfNotExists($dir);                                                                   
    1049                 :     }                                                                                                                             
    1050                 :                                                                                                                                   
    1051                 :     /**                                                                                                                           
    1052                 :      * Get module directory by directory type                                                                                     
    1053                 :      *                                                                                                                            
    1054                 :      * @param   string $type                                                                                                      
    1055                 :      * @param   string $moduleName                                                                                                
    1056                 :      * @return  string                                                                                                            
    1057                 :      */                                                                                                                           
    1058                 :     public function getModuleDir($type, $moduleName)                                                                              
    1059                 :     {                                                                                                                             
    1060               0 :         $codePool = (string)$this->getModuleConfig($moduleName)->codePool;                                                        
    1061               0 :         $dir = $this->getOptions()->getCodeDir().DS.$codePool.DS.uc_words($moduleName, DS);                                       
    1062                 :                                                                                                                                   
    1063                 :         switch ($type) {                                                                                                          
    1064               0 :             case 'etc':                                                                                                           
    1065               0 :                 $dir .= DS.'etc';                                                                                                 
    1066               0 :                 break;                                                                                                            
    1067                 :                                                                                                                                   
    1068               0 :             case 'controllers':                                                                                                   
    1069               0 :                 $dir .= DS.'controllers';                                                                                         
    1070               0 :                 break;                                                                                                            
    1071                 :                                                                                                                                   
    1072               0 :             case 'sql':                                                                                                           
    1073               0 :                 $dir .= DS.'sql';                                                                                                 
    1074               0 :                 break;                                                                                                            
    1075                 :                                                                                                                                   
    1076               0 :             case 'locale':                                                                                                        
    1077               0 :                 $dir .= DS.'locale';                                                                                              
    1078               0 :                 break;                                                                                                            
    1079                 :         }                                                                                                                         
    1080                 :                                                                                                                                   
    1081               0 :         $dir = str_replace('/', DS, $dir);                                                                                        
    1082               0 :         return $dir;                                                                                                              
    1083                 :     }                                                                                                                             
    1084                 :                                                                                                                                   
    1085                 :     /**                                                                                                                           
    1086                 :      * Load event observers for an area (front, admin)                                                                            
    1087                 :      *                                                                                                                            
    1088                 :      * @param   string $area                                                                                                      
    1089                 :      * @return  boolean                                                                                                           
    1090                 :      */                                                                                                                           
    1091                 :     public function loadEventObservers($area)                                                                                     
    1092                 :     {                                                                                                                             
    1093               0 :         $events = $this->getNode("$area/events");                                                                                 
    1094               0 :         if ($events) {                                                                                                            
    1095               0 :             $events = $events->children();                                                                                        
    1096               0 :         }                                                                                                                         
    1097                 :         else {                                                                                                                    
    1098               0 :             return false;                                                                                                         
    1099                 :         }                                                                                                                         
    1100                 :                                                                                                                                   
    1101               0 :         foreach ($events as $event) {                                                                                             
    1102               0 :             $eventName = $event->getName();                                                                                       
    1103               0 :             $observers = $event->observers->children();                                                                           
    1104               0 :             foreach ($observers as $observer) {                                                                                   
    1105               0 :                 switch ((string)$observer->type) {                                                                                
    1106               0 :                     case 'singleton':                                                                                             
    1107                 :                         $callback = array(                                                                                        
    1108               0 :                             Mage::getSingleton((string)$observer->class),                                                         
    1109               0 :                             (string)$observer->method                                                                             
    1110               0 :                         );                                                                                                        
    1111               0 :                         break;                                                                                                    
    1112               0 :                     case 'object':                                                                                                
    1113               0 :                     case 'model':                                                                                                 
    1114                 :                         $callback = array(                                                                                        
    1115               0 :                             Mage::getModel((string)$observer->class),                                                             
    1116               0 :                             (string)$observer->method                                                                             
    1117               0 :                         );                                                                                                        
    1118               0 :                         break;                                                                                                    
    1119               0 :                     default:                                                                                                      
    1120               0 :                         $callback = array($observer->getClassName(), (string)$observer->method);                                  
    1121               0 :                         break;                                                                                                    
    1122               0 :                 }                                                                                                                 
    1123                 :                                                                                                                                   
    1124               0 :                 $args = (array)$observer->args;                                                                                   
    1125               0 :                 $observerClass = $observer->observer_class ? (string)$observer->observer_class : '';                              
    1126               0 :                 Mage::addObserver($eventName, $callback, $args, $observer->getName(), $observerClass);                            
    1127               0 :             }                                                                                                                     
    1128               0 :         }                                                                                                                         
    1129               0 :         return true;                                                                                                              
    1130                 :     }                                                                                                                             
    1131                 :                                                                                                                                   
    1132                 :     /**                                                                                                                           
    1133                 :      * Get standard path variables.                                                                                               
    1134                 :      *                                                                                                                            
    1135                 :      * To be used in blocks, templates, etc.                                                                                      
    1136                 :      *                                                                                                                            
    1137                 :      * @param array|string $args Module name if string                                                                            
    1138                 :      * @return array                                                                                                              
    1139                 :      */                                                                                                                           
    1140                 :     public function getPathVars($args=null)                                                                                       
    1141                 :     {                                                                                                                             
    1142               0 :         $path = array();                                                                                                          
    1143                 :                                                                                                                                   
    1144               0 :         $path['baseUrl'] = Mage::getBaseUrl();                                                                                    
    1145               0 :         $path['baseSecureUrl'] = Mage::getBaseUrl('link', true);                                                                  
    1146                 :                                                                                                                                   
    1147               0 :         return $path;                                                                                                             
    1148                 :     }                                                                                                                             
    1149                 :                                                                                                                                   
    1150                 :     /**                                                                                                                           
    1151                 :      * Retrieve class name by class group                                                                                         
    1152                 :      *                                                                                                                            
    1153                 :      * @param   string $groupType currently supported model, block, helper                                                        
    1154                 :      * @param   string $classId slash separated class identifier, ex. group/class                                                 
    1155                 :      * @param   string $groupRootNode optional config path for group config                                                       
    1156                 :      * @return  string                                                                                                            
    1157                 :      */                                                                                                                           
    1158                 :     public function getGroupedClassName($groupType, $classId, $groupRootNode=null)                                                
    1159                 :     {                                                                                                                             
    1160              18 :         if (empty($groupRootNode)) {                                                                                              
    1161              18 :             $groupRootNode = 'global/'.$groupType.'s';                                                                            
    1162              18 :         }                                                                                                                         
    1163                 :                                                                                                                                   
    1164              18 :         $classArr = explode('/', trim($classId));                                                                                 
    1165              18 :         $group = $classArr[0];                                                                                                    
    1166              18 :         $class = !empty($classArr[1]) ? $classArr[1] : null;                                                                      
    1167                 :                                                                                                                                   
    1168              18 :         if (isset($this->_classNameCache[$groupRootNode][$group][$class])) {                                                      
    1169              17 :             return $this->_classNameCache[$groupRootNode][$group][$class];                                                        
    1170                 :         }                                                                                                                         
    1171                 :                                                                                                                                   
    1172                 :         //$config = $this->getNode($groupRootNode.'/'.$group);                                                                    
    1173               4 :         $config = $this->_xml->global->{$groupType.'s'}->{$group};                                                                
    1174                 :                                                                                                                                   
    1175               4 :         if (isset($config->rewrite->$class)) {                                                                                    
    1176               3 :             $className = (string)$config->rewrite->$class;                                                                        
    1177               3 :         } else {                                                                                                                  
    1178               3 :             if (!empty($config)) {                                                                                                
    1179               3 :                 $className = $config->getClassName();                                                                             
    1180               3 :             }                                                                                                                     
    1181               3 :             if (empty($className)) {                                                                                              
    1182               0 :                 $className = 'mage_'.$group.'_'.$groupType;                                                                       
    1183               0 :             }                                                                                                                     
    1184               3 :             if (!empty($class)) {                                                                                                 
    1185               3 :                 $className .= '_'.$class;                                                                                         
    1186               3 :             }                                                                                                                     
    1187               3 :             $className = uc_words($className);                                                                                    
    1188                 :         }                                                                                                                         
    1189                 :                                                                                                                                   
    1190               4 :         $this->_classNameCache[$groupRootNode][$group][$class] = $className;                                                      
    1191               4 :         return $className;                                                                                                        
    1192                 :     }                                                                                                                             
    1193                 :                                                                                                                                   
    1194                 :     /**                                                                                                                           
    1195                 :      * Retrieve block class name                                                                                                  
    1196                 :      *                                                                                                                            
    1197                 :      * @param   string $blockType                                                                                                 
    1198                 :      * @return  string                                                                                                            
    1199                 :      */                                                                                                                           
    1200                 :     public function getBlockClassName($blockType)                                                                                 
    1201                 :     {                                                                                                                             
    1202               0 :         if (strpos($blockType, '/')===false) {                                                                                    
    1203               0 :             return $blockType;                                                                                                    
    1204                 :         }                                                                                                                         
    1205               0 :         return $this->getGroupedClassName('block', $blockType);                                                                   
    1206                 :     }                                                                                                                             
    1207                 :                                                                                                                                   
    1208                 :     /**                                                                                                                           
    1209                 :      * Retrieve helper class name                                                                                                 
    1210                 :      *                                                                                                                            
    1211                 :      * @param   string $name                                                                                                      
    1212                 :      * @return  string                                                                                                            
    1213                 :      */                                                                                                                           
    1214                 :     public function getHelperClassName($helperName)                                                                               
    1215                 :     {                                                                                                                             
    1216               1 :         if (strpos($helperName, '/')===false) {                                                                                   
    1217               0 :             $helperName .= '/data';                                                                                               
    1218               0 :         }                                                                                                                         
    1219               1 :         return $this->getGroupedClassName('helper', $helperName);                                                                 
    1220                 :     }                                                                                                                             
    1221                 :                                                                                                                                   
    1222                 :     /**                                                                                                                           
    1223                 :      * Retrieve modele class name                                                                                                 
    1224                 :      *                                                                                                                            
    1225                 :      * @param   sting $modelClass                                                                                                 
    1226                 :      * @return  string                                                                                                            
    1227                 :      */                                                                                                                           
    1228                 :     public function getModelClassName($modelClass)                                                                                
    1229                 :     {                                                                                                                             
    1230              18 :         $modelClass = trim($modelClass);                                                                                          
    1231              18 :         if (strpos($modelClass, '/')===false) {                                                                                   
    1232              16 :             return $modelClass;                                                                                                   
    1233                 :         }                                                                                                                         
    1234              18 :         return $this->getGroupedClassName('model', $modelClass);                                                                  
    1235                 :     }                                                                                                                             
    1236                 :                                                                                                                                   
    1237                 :     /**                                                                                                                           
    1238                 :      * Get model class instance.                                                                                                  
    1239                 :      *                                                                                                                            
    1240                 :      * Example:                                                                                                                   
    1241                 :      * $config->getModelInstance('catalog/product')                                                                               
    1242                 :      *                                                                                                                            
    1243                 :      * Will instantiate Mage_Catalog_Model_Mysql4_Product                                                                         
    1244                 :      *                                                                                                                            
    1245                 :      * @param string $modelClass                                                                                                  
    1246                 :      * @param array|object $constructArguments                                                                                    
    1247                 :      * @return Mage_Core_Model_Abstract                                                                                           
    1248                 :      */                                                                                                                           
    1249                 :     public function getModelInstance($modelClass='', $constructArguments=array())                                                 
    1250                 :     {                                                                                                                             
    1251              18 :         $className = $this->getModelClassName($modelClass);                                                                       
    1252              18 :         if (class_exists($className)) {                                                                                           
    1253              18 :             Varien_Profiler::start('CORE::create_object_of::'.$className);                                                        
    1254              18 :             $obj = new $className($constructArguments);                                                                           
    1255              18 :             Varien_Profiler::stop('CORE::create_object_of::'.$className);                                                         
    1256              18 :             return $obj;                                                                                                          
    1257                 :         } else {                                                                                                                  
    1258                 :             #throw Mage::exception('Mage_Core', Mage::helper('core')->__('Model class does not exist: %s.', $modelClass));        
    1259               0 :             return false;                                                                                                         
    1260                 :         }                                                                                                                         
    1261                 :     }                                                                                                                             
    1262                 :                                                                                                                                   
    1263                 :     public function getNodeClassInstance($path)                                                                                   
    1264                 :     {                                                                                                                             
    1265               0 :         $config = Mage::getConfig()->getNode($path);                                                                              
    1266               0 :         if (!$config) {                                                                                                           
    1267               0 :             return false;                                                                                                         
    1268                 :         } else {                                                                                                                  
    1269               0 :             $className = $config->getClassName();                                                                                 
    1270               0 :             return new $className();                                                                                              
    1271                 :         }                                                                                                                         
    1272                 :     }                                                                                                                             
    1273                 :                                                                                                                                   
    1274                 :     /**                                                                                                                           
    1275                 :      * Get resource model object by alias                                                                                         
    1276                 :      *                                                                                                                            
    1277                 :      * @param   string $modelClass                                                                                                
    1278                 :      * @param   array $constructArguments                                                                                         
    1279                 :      * @return  object                                                                                                            
    1280                 :      */                                                                                                                           
    1281                 :     public function getResourceModelInstance($modelClass='', $constructArguments=array())                                         
    1282                 :     {                                                                                                                             
    1283              15 :         $factoryName = $this->_getResourceModelFactoryClassName($modelClass);                                                     
    1284              15 :         if (!$factoryName) {                                                                                                      
    1285               0 :             return false;                                                                                                         
    1286                 :         }                                                                                                                         
    1287              15 :         return $this->getModelInstance($factoryName, $constructArguments);                                                        
    1288                 :     }                                                                                                                             
    1289                 :                                                                                                                                   
    1290                 :     /**                                                                                                                           
    1291                 :      * Get resource configuration for resource name                                                                               
    1292                 :      *                                                                                                                            
    1293                 :      * @param string $name                                                                                                        
    1294                 :      * @return Varien_Simplexml_Object                                                                                            
    1295                 :      */                                                                                                                           
    1296                 :     public function getResourceConfig($name)                                                                                      
    1297                 :     {                                                                                                                             
    1298               0 :         return $this->_xml->global->resources->{$name};                                                                           
    1299                 :     }                                                                                                                             
    1300                 :                                                                                                                                   
    1301                 :     /**                                                                                                                           
    1302                 :      * Get connection configuration                                                                                               
    1303                 :      *                                                                                                                            
    1304                 :      * @param   string $name                                                                                                      
    1305                 :      * @return  Varien_Simplexml_Element                                                                                          
    1306                 :      */                                                                                                                           
    1307                 :     public function getResourceConnectionConfig($name)                                                                            
    1308                 :     {                                                                                                                             
    1309               0 :         $config = $this->getResourceConfig($name);                                                                                
    1310               0 :         if ($config) {                                                                                                            
    1311               0 :             $conn = $config->connection;                                                                                          
    1312               0 :             if ($conn) {                                                                                                          
    1313               0 :                 if (!empty($conn->use)) {                                                                                         
    1314               0 :                     return $this->getResourceConnectionConfig((string)$conn->use);                                                
    1315                 :                 } else {                                                                                                          
    1316               0 :                     return $conn;                                                                                                 
    1317                 :                 }                                                                                                                 
    1318                 :             }                                                                                                                     
    1319               0 :         }                                                                                                                         
    1320               0 :         return false;                                                                                                             
    1321                 :     }                                                                                                                             
    1322                 :                                                                                                                                   
    1323                 :     /**                                                                                                                           
    1324                 :      * Retrieve resource type configuration for resource name                                                                     
    1325                 :      *                                                                                                                            
    1326                 :      * @param string $type                                                                                                        
    1327                 :      * @return Varien_Simplexml_Object                                                                                            
    1328                 :      */                                                                                                                           
    1329                 :     public function getResourceTypeConfig($type)                                                                                  
    1330                 :     {                                                                                                                             
    1331               0 :         return $this->_xml->global->resource->connection->types->{$type};                                                         
    1332                 :     }                                                                                                                             
    1333                 :                                                                                                                                   
    1334                 :     /**                                                                                                                           
    1335                 :      * Retrieve store Ids for $path with checking                                                                                 
    1336                 :      *                                                                                                                            
    1337                 :      * if empty $allowValues then retrieve all stores values                                                                      
    1338                 :      *                                                                                                                            
    1339                 :      * return array($storeId=>$pathValue)                                                                                         
    1340                 :      *                                                                                                                            
    1341                 :      * @param   string $path                                                                                                      
    1342                 :      * @param   array  $allowValues                                                                                               
    1343                 :      * @return  array                                                                                                             
    1344                 :      */                                                                                                                           
    1345                 :     public function getStoresConfigByPath($path, $allowValues = array(), $useAsKey = 'id')                                        
    1346                 :     {                                                                                                                             
    1347               0 :         $storeValues = array();                                                                                                   
    1348               0 :         $stores = $this->getNode('stores');                                                                                       
    1349               0 :         foreach ($stores->children() as $code => $store) {                                                                        
    1350                 :             switch ($useAsKey) {                                                                                                  
    1351               0 :                 case 'id':                                                                                                        
    1352               0 :                     $key = (int) $store->descend('system/store/id');                                                              
    1353               0 :                     break;                                                                                                        
    1354                 :                                                                                                                                   
    1355               0 :                 case 'code':                                                                                                      
    1356               0 :                     $key = $code;                                                                                                 
    1357               0 :                     break;                                                                                                        
    1358                 :                                                                                                                                   
    1359               0 :                 case 'name':                                                                                                      
    1360               0 :                     $key = (string) $store->descend('system/store/name');                                                         
    1361               0 :             }                                                                                                                     
    1362               0 :             if ($key === false) {                                                                                                 
    1363               0 :                 continue;                                                                                                         
    1364                 :             }                                                                                                                     
    1365                 :                                                                                                                                   
    1366               0 :             $pathValue = (string) $store->descend($path);                                                                         
    1367                 :                                                                                                                                   
    1368               0 :             if (empty($allowValues)) {                                                                                            
    1369               0 :                 $storeValues[$key] = $pathValue;                                                                                  
    1370               0 :             }                                                                                                                     
    1371               0 :             elseif(in_array($pathValue, $allowValues)) {                                                                          
    1372               0 :                 $storeValues[$key] = $pathValue;                                                                                  
    1373               0 :             }                                                                                                                     
    1374               0 :         }                                                                                                                         
    1375               0 :         return $storeValues;                                                                                                      
    1376                 :     }                                                                                                                             
    1377                 :                                                                                                                                   
    1378                 :     /**                                                                                                                           
    1379                 :      * Check security requirements for url                                                                                        
    1380                 :      *                                                                                                                            
    1381                 :      * @param   string $url                                                                                                       
    1382                 :      * @return  bool                                                                                                              
    1383                 :      */                                                                                                                           
    1384                 :     public function shouldUrlBeSecure($url)                                                                                       
    1385                 :     {                                                                                                                             
    1386               0 :         if (!isset($this->_secureUrlCache[$url])) {                                                                               
    1387               0 :             $this->_secureUrlCache[$url] = false;                                                                                 
    1388               0 :             $secureUrls = $this->getNode('frontend/secure_url');                                                                  
    1389               0 :             foreach ($secureUrls->children() as $match) {                                                                         
    1390               0 :                 if (strpos($url, (string)$match)===0) {                                                                           
    1391               0 :                     $this->_secureUrlCache[$url] = true;                                                                          
    1392               0 :                     break;                                                                                                        
    1393                 :                 }                                                                                                                 
    1394               0 :             }                                                                                                                     
    1395               0 :         }                                                                                                                         
    1396                 :                                                                                                                                   
    1397               0 :         return $this->_secureUrlCache[$url];                                                                                      
    1398                 :     }                                                                                                                             
    1399                 :                                                                                                                                   
    1400                 :     /**                                                                                                                           
    1401                 :      * Get DB table names prefix                                                                                                  
    1402                 :      *                                                                                                                            
    1403                 :      * @return string                                                                                                             
    1404                 :      */                                                                                                                           
    1405                 :     public function getTablePrefix()                                                                                              
    1406                 :     {                                                                                                                             
    1407               1 :         return $this->_xml->global->resources->db->table_prefix;                                                                  
    1408                 :     }                                                                                                                             
    1409                 :                                                                                                                                   
    1410                 :     /**                                                                                                                           
    1411                 :      * Get events configuration                                                                                                   
    1412                 :      *                                                                                                                            
    1413                 :      * @param   string $area event area                                                                                           
    1414                 :      * @param   string $eventName event name                                                                                      
    1415                 :      * @return  Mage_Core_Model_Config_Element                                                                                    
    1416                 :      */                                                                                                                           
    1417                 :     public function getEventConfig($area, $eventName)                                                                             
    1418                 :     {                                                                                                                             
    1419                 :         //return $this->getNode($area)->events->{$eventName};                                                                     
    1420               2 :         if (!isset($this->_eventAreas[$area])) {                                                                                  
    1421               1 :             $this->_eventAreas[$area] = $this->getNode($area)->events;                                                            
    1422               1 :         }                                                                                                                         
    1423               2 :         return $this->_eventAreas[$area]->{$eventName};                                                                           
    1424                 :     }                                                                                                                             
    1425                 :                                                                                                                                   
    1426                 :     /**                                                                                                                           
    1427                 :      * Save config value to DB                                                                                                    
    1428                 :      *                                                                                                                            
    1429                 :      * @param string $path                                                                                                        
    1430                 :      * @param string $value                                                                                                       
    1431                 :      * @param string $scope                                                                                                       
    1432                 :      * @param int $scopeId                                                                                                        
    1433                 :      * @return Mage_Core_Store_Config                                                                                             
    1434                 :      */                                                                                                                           
    1435                 :     public function saveConfig($path, $value, $scope = 'default', $scopeId = 0)                                                   
    1436                 :     {                                                                                                                             
    1437               0 :         $resource = $this->getResourceModel();                                                                                    
    1438               0 :         $resource->saveConfig(rtrim($path, '/'), $value, $scope, $scopeId);                                                       
    1439                 :                                                                                                                                   
    1440               0 :         return $this;                                                                                                             
    1441                 :     }                                                                                                                             
    1442                 :                                                                                                                                   
    1443                 :     /**                                                                                                                           
    1444                 :      * Delete config value from DB                                                                                                
    1445                 :      *                                                                                                                            
    1446                 :      * @param   string $path                                                                                                      
    1447                 :      * @param   string $scope                                                                                                     
    1448                 :      * @param   int $scopeId                                                                                                      
    1449                 :      * @return  Mage_Core_Model_Config                                                                                            
    1450                 :      */                                                                                                                           
    1451                 :     public function deleteConfig($path, $scope = 'default', $scopeId = 0)                                                         
    1452                 :     {                                                                                                                             
    1453               0 :         $resource = $this->getResourceModel();                                                                                    
    1454               0 :         $resource->deleteConfig(rtrim($path, '/'), $scope, $scopeId);                                                             
    1455                 :                                                                                                                                   
    1456               0 :         return $this;                                                                                                             
    1457                 :     }                                                                                                                             
    1458                 :                                                                                                                                   
    1459                 :     /**                                                                                                                           
    1460                 :      * Get fieldset from configuration                                                                                            
    1461                 :      *                                                                                                                            
    1462                 :      * @param string $name fieldset name                                                                                          
    1463                 :      * @param string $root fieldset area, could be 'admin'                                                                        
    1464                 :      * @return null|array                                                                                                         
    1465                 :      */                                                                                                                           
    1466                 :     public function getFieldset($name, $root = 'global')                                                                          
    1467                 :     {                                                                                                                             
    1468               0 :         $rootNode = $this->getNode($root.'/fieldsets');                                                                           
    1469               0 :         if (!$rootNode) {                                                                                                         
    1470               0 :             return null;                                                                                                          
    1471                 :         }                                                                                                                         
    1472               0 :         return $rootNode->$name ? $rootNode->$name->children() : null;                                                            
    1473                 :     }                                                                                                                             
    1474                 :                                                                                                                                   
    1475                 :     /**                                                                                                                           
    1476                 :      * Get factory class name for for a resource                                                                                  
    1477                 :      *                                                                                                                            
    1478                 :      * @param string $modelClass                                                                                                  
    1479                 :      * @return string|false                                                                                                       
    1480                 :      */                                                                                                                           
    1481                 :     protected function _getResourceModelFactoryClassName($modelClass)                                                             
    1482                 :     {                                                                                                                             
    1483              15 :         $classArr = explode('/', $modelClass);                                                                                    
    1484                 :                                                                                                                                   
    1485              15 :         $resourceModel = false;                                                                                                   
    1486                 :                                                                                                                                   
    1487              15 :         if (!isset($this->_xml->global->models->{$classArr[0]})) {                                                                
    1488               0 :             return false;                                                                                                         
    1489                 :         }                                                                                                                         
    1490                 :                                                                                                                                   
    1491              15 :         $module = $this->_xml->global->models->{$classArr[0]};                                                                    
    1492                 :                                                                                                                                   
    1493              15 :         if ((count($classArr)==2)                                                                                                 
    1494              15 :             && isset($module->{$classArr[1]}->resourceModel)                                                                      
    1495              15 :             && $resourceInfo = $module->{$classArr[1]}->resourceModel) {                                                          
    1496               0 :             $resourceModel = (string) $resourceInfo;                                                                              
    1497               0 :         }                                                                                                                         
    1498              15 :         elseif (isset($module->resourceModel) && $resourceInfo = $module->resourceModel) {                                        
    1499              15 :             $resourceModel = (string) $resourceInfo;                                                                              
    1500              15 :         }                                                                                                                         
    1501                 :                                                                                                                                   
    1502              15 :         if (!$resourceModel) {                                                                                                    
    1503               0 :             return false;                                                                                                         
    1504                 :         }                                                                                                                         
    1505              15 :         return $resourceModel . '/' . $classArr[1];                                                                               
    1506                 :     }                                                                                                                             
    1507                 :                                                                                                                                   
    1508                 :     /**                                                                                                                           
    1509                 :      * Get a resource model class name                                                                                            
    1510                 :      *                                                                                                                            
    1511                 :      * @param string $modelClass                                                                                                  
    1512                 :      * @return string|false                                                                                                       
    1513                 :      */                                                                                                                           
    1514                 :     public function getResourceModelClassName($modelClass)                                                                        
    1515                 :     {                                                                                                                             
    1516               0 :         $factoryName = $this->_getResourceModelFactoryClassName($modelClass);                                                     
    1517               0 :         if ($factoryName) {                                                                                                       
    1518               0 :             return $this->getModelClassName($factoryName);                                                                        
    1519                 :         }                                                                                                                         
    1520               0 :         return false;                                                                                                             
    1521                 :     }                                                                                                                             
    1522                 : }                                                                                                                                 

Generated by PHP_CodeCoverage 1.0.4 using PHP 5.3.4 and PHPUnit 3.5.13 at Tue Jul 5 9:07:16 UTC 2011.