diff -r 5b37998e522e -r 162c1de6545a web/lib/Zend/Application/Resource/Modules.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Application/Resource/Modules.php Fri Mar 11 15:05:35 2011 +0100 @@ -0,0 +1,138 @@ +_bootstraps = new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS); + parent::__construct($options); + } + + /** + * Initialize modules + * + * @return array + * @throws Zend_Application_Resource_Exception When bootstrap class was not found + */ + public function init() + { + $bootstrap = $this->getBootstrap(); + $bootstrap->bootstrap('FrontController'); + $front = $bootstrap->getResource('FrontController'); + + $modules = $front->getControllerDirectory(); + $default = $front->getDefaultModule(); + $curBootstrapClass = get_class($bootstrap); + foreach ($modules as $module => $moduleDirectory) { + $bootstrapClass = $this->_formatModuleName($module) . '_Bootstrap'; + if (!class_exists($bootstrapClass, false)) { + $bootstrapPath = dirname($moduleDirectory) . '/Bootstrap.php'; + if (file_exists($bootstrapPath)) { + $eMsgTpl = 'Bootstrap file found for module "%s" but bootstrap class "%s" not found'; + include_once $bootstrapPath; + if (($default != $module) + && !class_exists($bootstrapClass, false) + ) { + throw new Zend_Application_Resource_Exception(sprintf( + $eMsgTpl, $module, $bootstrapClass + )); + } elseif ($default == $module) { + if (!class_exists($bootstrapClass, false)) { + $bootstrapClass = 'Bootstrap'; + if (!class_exists($bootstrapClass, false)) { + throw new Zend_Application_Resource_Exception(sprintf( + $eMsgTpl, $module, $bootstrapClass + )); + } + } + } + } else { + continue; + } + } + + if ($bootstrapClass == $curBootstrapClass) { + // If the found bootstrap class matches the one calling this + // resource, don't re-execute. + continue; + } + + $moduleBootstrap = new $bootstrapClass($bootstrap); + $moduleBootstrap->bootstrap(); + $this->_bootstraps[$module] = $moduleBootstrap; + } + + return $this->_bootstraps; + } + + /** + * Get bootstraps that have been run + * + * @return ArrayObject + */ + public function getExecutedBootstraps() + { + return $this->_bootstraps; + } + + /** + * Format a module name to the module class prefix + * + * @param string $name + * @return string + */ + protected function _formatModuleName($name) + { + $name = strtolower($name); + $name = str_replace(array('-', '.'), ' ', $name); + $name = ucwords($name); + $name = str_replace(' ', '', $name); + return $name; + } +}