Esempio n. 1
0
 public static function loadConfig($path, $environment, $recursivelyLoadModuleConfig = false)
 {
     self::$_environment = $environment;
     if (is_string($path) && is_dir($path)) {
         $iterator = new Centurion_Iterator_Directory($path);
         $tabFile = array();
         foreach ($iterator as $file) {
             if ($file->isDot()) {
                 continue;
             }
             $tabFile[] = $file->getPathName();
         }
         if (0 == count($tabFile)) {
             return array();
         }
         sort($tabFile);
         $backendOptions = array('cache_dir' => APPLICATION_PATH . '/../data/cache/config/');
         $frontendOptions = array('master_files' => array_values($tabFile), 'automatic_serialization' => true, 'cache_id_prefix' => str_replace('-', '_', $environment));
         try {
             $cacheConfig = Zend_Cache::factory('File', 'File', $frontendOptions, $backendOptions);
         } catch (Exception $e) {
             self::$_noCache = true;
         }
         if (self::$_noCache || !($config = $cacheConfig->load(md5(implode('|', $tabFile))))) {
             $config = array();
             foreach ($tabFile as $file) {
                 $suffix = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                 switch ($suffix) {
                     case 'ini':
                     case 'xml':
                     case 'php':
                     case 'inc':
                         $result = self::_loadConfig($file);
                         $config = self::mergeArrays($config, $result);
                 }
             }
             if (!self::$_noCache) {
                 $cacheConfig->save($config);
             }
         }
         if ($recursivelyLoadModuleConfig && isset($config['resources']) && isset($config['resources']['modules'])) {
             foreach ($config['resources']['modules'] as $module) {
                 $dir = null;
                 if (file_exists(APPLICATION_PATH . '/../library/Centurion/Contrib/' . $module . '/configs')) {
                     $dir = APPLICATION_PATH . '/../library/Centurion/Contrib/' . $module . '/configs';
                 } else {
                     if (file_exists(APPLICATION_PATH . '/modules/' . $module . '/configs')) {
                         $dir = APPLICATION_PATH . '/modules/' . $module . '/configs';
                     }
                 }
                 if (null !== $dir) {
                     $result = self::loadConfig($dir, $environment);
                     $config = self::mergeArrays($result, $config);
                 }
             }
         }
         return $config;
     }
     throw new Centurion_Exception('Path must be a directory', 500);
 }