/** * Creates the global entity manager. * * @return \Doctrine\ORM\EntityManager */ private function createEntityManager() { // find all modules and plugins that should be handled by the entity manager $managedModules = Application::getModuleManager()->getModules(); $managedPlugins = Application::getPluginManager()->getPlugins(); // initialize Doctrine configuration //TODO: Implement caching correctly (APC, memcached, XCache, ...); see \Doctrine\ORM\Tools\Setup::createConfiguration() $config = Setup::createAnnotationMetadataConfiguration($this->getEntityDirectories($managedModules, $managedPlugins), false, ABLERON_DOCTRINE_PROXY_DIR, null); // register namespace aliases for managed modules foreach ($managedModules as $managedModule) { $config->addEntityNamespace($managedModule->getNamespace(), sprintf('Ableron\\Modules\\%s\\Model\\Entities', $managedModule->getNamespace())); } // register namespace aliases for managed plugins foreach ($managedPlugins as $managedPlugin) { $config->addEntityNamespace($managedPlugin->getNamespace(), sprintf('Ableron\\Plugins\\%s\\Model\\Entities', $managedPlugin->getNamespace())); } // configure event manager $eventManager = new EventManager(); // handle table prefix if (Application::getContext()->getSetting('doctrine.tablePrefix') !== '') { $eventManager->addEventListener(Events::loadClassMetadata, new TablePrefixDoctrineExtension(Application::getContext()->getSetting('doctrine.tablePrefix'))); } // set up Doctrine's EntityManager return EntityManager::create(Application::getContext()->getSetting('doctrine.dbConnectionParameters'), $config, $eventManager); }
/** * Installs extensions (modules and plugins). * * @throws \Ableron\Core\Exception\SystemException * @return void */ private function installExtensions() { // install all available modules (except core module which has already been installed) foreach (Application::getModuleManager()->getModules() as $module) { if ($module::getNamespace() !== CoreModule::getNamespace()) { try { Application::getModuleManager()->install(ClassUtil::getInstance(sprintf('Ableron\\Modules\\%s\\Module', $module::getNamespace()))); } catch (SystemException $e) { $this->getInstaller()->addException(new SystemException(sprintf('Unable to install module "%s"', $module::getNamespace()), 0, E_USER_WARNING, __FILE__, __LINE__, $e)); } } } // install all available plugins foreach (Application::getPluginManager()->getPlugins() as $plugin) { try { Application::getPluginManager()->install(ClassUtil::getInstance(sprintf('Ableron\\Plugins\\%s\\Plugin', $plugin::getNamespace()))); } catch (SystemException $e) { $this->getInstaller()->addException(new SystemException(sprintf('Unable to install plugin "%s"', $plugin::getNamespace()), 0, E_USER_WARNING, __FILE__, __LINE__, $e)); } } }