public function boot() { $parameterBag = $this->container->getParameterBag(); $settingsService = $this->container->get('settingsService'); $rootDir = $parameterBag->get('zenmagick.root_dir'); $context = \ZenMagick\Base\Runtime::getContext(); $settingsFiles = array(); $settingsFiles[] = $rootDir . '/src/ZenMagick/StoreBundle/config/config.yaml'; $settingsFiles[] = sprintf('%s/src/ZenMagick/%sBundle/config/config.yaml', $rootDir, ucfirst($context)); foreach ($settingsFiles as $config) { if (file_exists($config)) { $settingsService->load($config); } } // @todo never do this \Zenmagick\Base\Runtime::setContainer($this->container); if ('install' == $parameterBag->get('kernel.environment')) { return; } // @todo don't just exit if no plugins $pluginsEnabled = $parameterBag->get('zenmagick.plugins.enabled'); if (!$this->container->has('pluginService') && $pluginsEnabled) { return; } if ($this->container->has('configService')) { foreach ($this->container->get('configService')->loadAll() as $key => $value) { if (!defined($key)) { define($key, $value); } } $defaults = $rootDir . '/src/ZenMagick/StoreBundle/config/defaults.php'; if (file_exists($defaults)) { include $defaults; } } // @todo switch to using tagged services for events. $settingsService = $this->container->get('settingsService'); $listeners = array(sprintf('ZenMagick\\%sBundle\\EventListener\\%sListener', ucfirst($context), ucfirst($context))); if ($this->container->has('pluginService') && $pluginsEnabled) { $plugins = $this->container->get('pluginService')->getPluginsForContext($context, true); foreach ($plugins as $plugin) { // @todo the plugin list will continue disabled plugins on the requests that build the cache. if (!$plugin->isEnabled()) { continue; } $listeners[] = $plugin; } } if ('storefront' == $context) { $listeners[] = sprintf('ZenMagick\\themes\\%s\\EventListener', $this->container->get('themeService')->getActiveThemeId()); } // @todo switch to using tagged services for events. $dispatcher = $this->container->get('event_dispatcher'); foreach ($listeners as $eventListener) { if (is_string($eventListener)) { if (!class_exists($eventListener)) { continue; } if (null != ($eventListener = new $eventListener())) { $eventListener->setContainer($this->container); } } if (is_object($eventListener)) { $events = array(); foreach (get_class_methods($eventListener) as $method) { if (0 === strpos($method, 'on')) { $eventName = Container::underscore(substr($method, 2)); $dispatcher->addListener($eventName, array($eventListener, $method)); } } } } }