예제 #1
0
 /**
  * @param ModuleEvent $event
  * @throws Exception
  */
 public function onMergeConfig(ModuleEvent $event)
 {
     // do not parse annotations if config cache is enabled.
     $config = $event->getConfigListener()->getMergedConfig(false);
     $annotationReader = AnnotationReaderFactory::factory($config['zf_annotation']);
     $parser = ClassParserFactory::factory($config, $event->getTarget()->getEventManager(), $annotationReader);
     $scanner = new DirectoryScanner();
     $classesToParse = [];
     $modules = $event->getTarget()->getLoadedModules();
     $modulesAllowedToScan = $config['zf_annotation']['scan_modules'];
     foreach ($modules as $module) {
         $parts = explode('\\', get_class($module));
         $modName = array_shift($parts);
         if (!empty($modulesAllowedToScan) && !in_array($modName, $modulesAllowedToScan)) {
             continue;
         }
         $ref = new ReflectionClass($module);
         $dir = dirname($ref->getFileName());
         foreach ($scanner->scan($dir) as $class) {
             $classesToParse[] = $class;
         }
     }
     $parsedConfig = $parser->parse($classesToParse);
     $event->getConfigListener()->setMergedConfig(array_replace_recursive($parsedConfig, $config));
 }
예제 #2
0
파일: InitTrigger.php 프로젝트: raZ3l/zf2
 /**
  * @param ModuleEvent $e
  * @eturn void
  */
 public function __invoke(ModuleEvent $e)
 {
     $module = $e->getModule();
     if (!$module instanceof InitProviderInterface && !method_exists($module, 'init')) {
         return;
     }
     $module->init($e->getTarget());
 }
예제 #3
0
 /**
  * @param  ModuleEvent $e
  * @return void
  */
 public function __invoke(ModuleEvent $e)
 {
     $module = $e->getModule();
     if (!$module instanceof BootstrapListenerInterface && !method_exists($module, 'onBootstrap')) {
         return;
     }
     $moduleManager = $e->getTarget();
     $events = $moduleManager->getEventManager();
     $sharedEvents = $events->getSharedManager();
     $sharedEvents->attach('Zend\\Mvc\\Application', MvcEvent::EVENT_BOOTSTRAP, array($module, 'onBootstrap'));
 }
 /**
  * Pass self to the ModuleEvent object early so everyone has access. 
  * 
  * @param ModuleEvent $e 
  * @return ConfigListener
  */
 public function loadModulesPre(ModuleEvent $e)
 {
     if ($this->getOptions()->getConfigCacheEnabled()) {
         $this->getOptions()->setConfigCacheKey(implode('.', $e->getTarget()->getModules()) . '.' . $this->getOptions()->getConfigCacheKey());
         if ($this->hasCachedConfig()) {
             $this->skipConfig = true;
             $this->setMergedConfig($this->getCachedConfig());
         }
     }
     return parent::loadModulesPre($e);
 }
예제 #5
0
    /**
     * @param  ModuleEvent $e
     * @return void
     */
    public function __invoke(ModuleEvent $e)
    {
        $module = $e->getModule();
        if (!$module instanceof BootstrapListenerInterface
            && !method_exists($module, 'onBootstrap')
        ) {
            return;
        }

        $moduleManager = $e->getTarget();
        $events        = $moduleManager->events();
        $sharedEvents  = $events->getSharedManager();
        $sharedEvents->attach('application', 'bootstrap', array($module, 'onBootstrap'));
    }
 /**
  * 
  * @param ModuleEvent $event
  */
 public function onMergeConfig(ModuleEvent $event)
 {
     $config = $event->getConfigListener()->getMergedConfig(false);
     $modules = $event->getTarget()->getLoadedModules();
     foreach ($modules as $module) {
         $ref = new ReflectionClass($module);
         $dir = dirname($ref->getFileName()) . '/view';
         if (!is_dir($dir)) {
             continue;
         }
         if (!isset($config['view_manager']['template_path_stack'])) {
             $config['view_manager']['template_path_stack'] = array();
         }
         $config['view_manager']['template_path_stack'][] = $dir;
     }
     $event->getConfigListener()->setMergedConfig($config);
 }
예제 #7
0
 /**
  * @param ModuleEvent $event
  * @return ConfigListener
  */
 public function onMergeConfig(ModuleEvent $event)
 {
     $configListener = $event->getConfigListener();
     $config = $configListener->getMergedConfig(false);
     $loadedModules = $event->getTarget()->getLoadedModules();
     $loadUthandoConfigs = isset($config['load_uthando_configs']) ? $config['load_uthando_configs'] : false;
     $uthandoConfig = [];
     if (false === $loadUthandoConfigs) {
         return $this;
     }
     // get the configurations from each module
     // must return an array to merge
     foreach ($loadedModules as $module) {
         if ($module instanceof ConfigInterface) {
             $moduleConfig = $module->getUthandoConfig();
             $uthandoConfig = ArrayUtils::merge($uthandoConfig, $moduleConfig);
         }
     }
     $config = ArrayUtils::merge($config, $uthandoConfig);
     // Pass the changed configuration back to the listener:
     $configListener->setMergedConfig($config);
     return $this;
 }
 /**
  * 
  * @param ModuleEvent $event
  */
 public function onMergeConfig(ModuleEvent $event)
 {
     $config = $event->getConfigListener()->getMergedConfig(false);
     $modules = $event->getTarget()->getLoadedModules();
     foreach ($modules as $module) {
         $ref = new ReflectionClass($module);
         $dir = dirname($ref->getFileName()) . '/language';
         if (!is_dir($dir)) {
             continue;
         }
         $iterator = new \DirectoryIterator($dir);
         foreach ($iterator as $file) {
             if ($file->isFile()) {
                 list($domain, $locale, $type) = explode('.', $file->getFilename());
                 if ($type === 'php') {
                     $type = 'phparray';
                 }
                 $config['translator']['translation_files'][] = array('type' => $type, 'filename' => $file->getPathname(), 'text_domain' => $domain, 'locale' => $locale);
             }
         }
     }
     $event->getConfigListener()->setMergedConfig($config);
 }
 /**
  * loadModules
  *
  * Once all the modules are loaded, loop
  *
  * @param  ModuleEvent $e
  * @return void
  */
 public function onLoadModules(ModuleEvent $e)
 {
     $moduleManager = $e->getTarget();
     $events = $moduleManager->getEventManager()->getSharedManager();
     if (!$events) {
         return;
     }
     // Shared instance for module manager
     $events->attach('Zend\\Mvc\\Application', ModuleManager::EVENT_BOOTSTRAP, function (MvcEvent $e) use($moduleManager) {
         $moduleClassName = get_class($moduleManager);
         $moduleClassNameArray = explode('\\', $moduleClassName);
         $moduleClassNameAlias = end($moduleClassNameArray);
         $application = $e->getApplication();
         $services = $application->getServiceManager();
         if (!$services->has($moduleClassName)) {
             $services->setAlias($moduleClassName, $moduleClassNameAlias);
         }
     }, 1000);
     if (0 === count($this->modules)) {
         return;
     }
     // Attach to the bootstrap event if there are modules we need to process
     $events->attach('Zend\\Mvc\\Application', ModuleManager::EVENT_BOOTSTRAP, [$this, 'onBootstrap'], 1000);
 }
예제 #10
0
 /**
  * @param  ModuleEvent $e
  * @return void
  */
 public function __invoke(ModuleEvent $e)
 {
     // The modules have been loaded
     $target = $e->getTarget();
     if (!$target instanceof ModuleManagerInterface) {
         return;
     }
     $configListener = $e->getConfigListener();
     $config = $configListener->getMergedConfig(false);
     $modules = $target->getModules();
     $adapter = new Adapter($config['db']);
     $sql = new Sql($adapter);
     $select = $sql->select('modules');
     $select->columns(['name']);
     $select->where(['active' => true]);
     $select->order('order DESC');
     $statement = $sql->prepareStatementForSqlObject($select);
     $result = $statement->execute();
     if ($result instanceof ResultInterface && $result->isQueryResult() && $result->getAffectedRows()) {
         while ($current = $result->current()) {
             if (!in_array($current['name'], $modules)) {
                 $target->loadModule($current['name']);
                 $modules[] = $current['name'];
                 $module = $target->getModule($current['name']);
                 if ($module instanceof ConfigProviderInterface || is_callable([$module, 'getConfig'])) {
                     // Merge the config
                     $moduleConfig = $module->getConfig();
                     $config = ArrayUtils::merge($config, $moduleConfig);
                 }
             }
             $result->next();
         }
         $target->setModules($modules);
         $configListener->setMergedConfig($config);
     }
 }
예제 #11
0
 /**
  * 
  * @param ModuleEvent $event
  */
 public function onMergeConfig(ModuleEvent $event)
 {
     $config = $event->getConfigListener()->getMergedConfig(false);
     $modules = $event->getTarget()->getLoadedModules();
     foreach ($modules as $module) {
         $ref = new ReflectionClass($module);
         $dir1 = dirname($ref->getFileName()) . '/Entity';
         $dir2 = dirname($ref->getFileName()) . '/src/Entity';
         $dirs = array_filter([$dir1, $dir2], 'is_dir');
         if (count($dirs) == 0) {
             continue;
         }
         $dir = current($dirs);
         $parts = explode('\\', get_class($module));
         $moduleName = array_shift($parts);
         if (in_array($moduleName, $this->ignoreModules)) {
             continue;
         }
         $driverName = strtolower($moduleName) . '_entities';
         $config['doctrine']['driver']['orm_default']['drivers'][sprintf('%s\\Entity', $moduleName)] = $driverName;
         $config['doctrine']['driver'][$driverName] = array('class' => 'Doctrine\\ORM\\Mapping\\Driver\\AnnotationDriver', 'cache' => 'array', 'paths' => array($dir));
     }
     $event->getConfigListener()->setMergedConfig($config);
 }
예제 #12
0
 /**
  * @param ModuleEvent $e
  * @return void
  */
 public function __invoke(ModuleEvent $e)
 {
     $module = $e->getModule();
     if (!$module instanceof ThemeProviderInterface && !method_exists($module, 'initTheme')) {
         return;
     }
     $moduleManager = $e->getTarget();
     $events = $moduleManager->getEventManager();
     $sharedEvents = $events->getSharedManager();
     $module_directory = $module->getDir();
     $sharedEvents->attach('Zend\\Mvc\\Application', MvcEvent::EVENT_BOOTSTRAP, function ($e) use($module_directory) {
         $application = $e->getApplication();
         $eventManager = $application->getEventManager();
         $serviceManager = $application->getServiceManager();
         $themeManager = $serviceManager->get('ThemeManager');
         $theme = $themeManager->getTheme();
         $theme_folder = $theme->getFolder();
         $theme_path = $module_directory . '/themes/' . $theme_folder;
         if (!is_dir($theme_path)) {
             $theme = $themeManager->getDefaultTheme();
             $theme_folder = $theme->getFolder();
             if (!is_dir($theme_path)) {
                 throw new MissingDefaultThemeException();
             }
         }
         $theme_path = $module_directory . '/themes/' . $theme->getFolder();
         // Views
         // Add the folder to the template resolver.
         $templatePathResolver = $serviceManager->get('Zend\\View\\Resolver\\TemplatePathStack');
         $templatePathResolver->addPath($theme_path);
         // Layout
         if (file_exists($theme_path . '/layout.phtml')) {
             $templateMapResolver = $serviceManager->get('Zend\\View\\Resolver\\TemplateMapResolver');
             $layout_name = $theme->getLayoutName();
             if (!$templateMapResolver->has($layout_name)) {
                 $templateMapResolver->add($layout_name, $theme_path . '/layout.phtml');
             }
         }
     });
     $sharedEvents->attach($module->getNamespace(), MvcEvent::EVENT_DISPATCH, function ($e) use($module_directory) {
         // Set the layout for this module if available
         $serviceManager = $e->getApplication()->getServiceManager();
         $themeManager = $serviceManager->get('ThemeManager');
         $theme = $themeManager->getTheme();
         $theme_folder = $theme->getFolder();
         $theme_path = $module_directory . '/themes/' . $theme_folder;
         if (!is_dir($theme_path)) {
             $theme = $themeManager->getDefaultTheme();
             $theme_folder = $theme->getFolder();
             if (!is_dir($theme_path)) {
                 throw new MissingDefaultThemeException();
             }
         }
         $layout_name = $theme->getLayoutName();
         $templateMapResolver = $serviceManager->get('Zend\\View\\Resolver\\TemplateMapResolver');
         if ($templateMapResolver->has($layout_name)) {
             $viewModel = $e->getViewModel();
             $viewModel->setTemplate($layout_name);
         }
     }, 100);
 }