public function loadConfiguration() { $container = $this->getContainerBuilder(); $config = $this->getConfig($this->defaults); // Application $container->getDefinition('nette.presenterFactory')->setClass('Venne\\Application\\PresenterFactory', array(isset($container->parameters['appDir']) ? $container->parameters['appDir'] : NULL)); $container->addDefinition($this->prefix('controlVerifier'))->setClass('Venne\\Security\\ControlVerifiers\\ControlVerifier'); $container->addDefinition($this->prefix('controlVerifierReader'))->setClass('Venne\\Security\\ControlVerifierReaders\\AnnotationReader'); $container->getDefinition('user')->setClass('Venne\\Security\\User'); // cache $container->addDefinition($this->prefix('cacheManager'))->setClass('Venne\\Caching\\CacheManager', array('@cacheStorage', '%tempDir%/cache', '%tempDir%/sessions')); // http $container->getDefinition('httpResponse')->addSetup('setHeader', array('X-Powered-By', 'Nette Framework && Venne:Framework')); // session $session = $container->getDefinition('session'); foreach ($config['session'] as $key => $val) { if ($val) { $session->addSetup('set' . ucfirst($key), $val); } } // template $container->getDefinition('nette.latte')->setClass('Venne\\Latte\\Engine')->addSetup('$m = Venne\\Latte\\Macros\\UIMacros::install(?->compiler); $m->injectHelper(?)', array('@self', '@venne.moduleHelpers'))->setShared(FALSE); $container->addDefinition($this->prefix("templateConfigurator"))->setClass("Venne\\Templating\\TemplateConfigurator", array('@container', '@nette.latteFactory')); // helpers $container->addDefinition($this->prefix("helpers"))->setClass("Venne\\Templating\\Helpers"); // modules $container->addDefinition($this->prefix('moduleManager'))->setClass('Venne\\Module\\ModuleManager', array('@container', '@venne.cacheManager', '%libsDir%', '%configDir%', '%modulesDir%')); $container->addDefinition($this->prefix('templateManager'))->setClass('Venne\\Module\\TemplateManager', array('%modules%')); // widgets $container->addDefinition($this->prefix('widgetManager'))->setClass('Venne\\Widget\\WidgetManager'); // CLI $cliRoute = $container->addDefinition($this->prefix("CliRoute"))->setClass("Venne\\Application\\Routers\\CliRouter")->setAutowired(FALSE); $container->getDefinition('router')->addSetup('offsetSet', array(NULL, $cliRoute)); // Commands $commands = array('cache' => 'Venne\\Caching\\Commands\\Cache', 'moduleUpdate' => 'Venne\\Module\\Commands\\Update', 'moduleInstall' => 'Venne\\Module\\Commands\\Install', 'moduleUninstall' => 'Venne\\Module\\Commands\\Uninstall', 'moduleUpgrade' => 'Venne\\Module\\Commands\\Upgrade', 'moduleRegister' => 'Venne\\Module\\Commands\\Register', 'moduleUnregister' => 'Venne\\Module\\Commands\\Unregister', 'moduleList' => 'Venne\\Module\\Commands\\List', 'moduleCreate' => 'Venne\\Module\\Commands\\Create', 'moduleDelete' => 'Venne\\Module\\Commands\\Delete'); foreach ($commands as $name => $cmd) { $container->addDefinition($this->prefix(lcfirst($name) . 'Command'))->setClass("{$cmd}Command")->addTag('command'); } // helpers $container->addDefinition($this->prefix('moduleHelpers'))->setClass('Venne\\Module\\Helpers', array('%modules%')); // symlink to client-side $clientSidePath = realpath($container->parameters['libsDir'] . '/nette/nette/client-side'); $netteModulePath = $container->parameters['resourcesDir'] . '/netteModule'; if (!file_exists($netteModulePath) && file_exists($clientSidePath)) { umask(00); @mkdir(dirname($netteModulePath), 0777, TRUE); if (!@symlink(File::getRelativePath(dirname($netteModulePath), $clientSidePath), $netteModulePath) && !file_exists($netteModulePath)) { File::copy($clientSidePath, $netteModulePath); } } }
/** * @param \Venne\Module\IModule $module */ public function install(IModule $module) { try { $name = $module->getName(); $configuration = $module->getConfiguration(); // create resources dir $resourcesDir = $this->resourcesDir; $moduleDir = $resourcesDir . "/{$name}Module"; $targetDir = new \SplFileInfo($module->getPath() . $module->getRelativePublicPath()); $targetDir = $targetDir->getRealPath(); if (!file_exists($moduleDir) && file_exists($targetDir)) { umask(00); @mkdir(dirname($moduleDir), 0777, TRUE); if (!@symlink(File::getRelativePath(dirname($moduleDir), $targetDir), $moduleDir) && !file_exists($moduleDir)) { File::copy($targetDir, $moduleDir); } $this->actions[] = function () use($resourcesDir) { if (is_link($resourcesDir)) { unlink($resourcesDir); } else { File::rmdir($resourcesDir, TRUE); } }; } // update main config.neon if (count($configuration) > 0) { $orig = $data = $this->loadConfig(); $data = array_merge_recursive($data, $configuration); $this->saveConfig($data); $this->actions[] = function ($self) use($orig) { $self->saveConfig($orig); }; } } catch (\Exception $e) { $actions = array_reverse($this->actions); try { foreach ($actions as $action) { $action($this); } } catch (\Exception $ex) { echo $ex->getMessage(); } throw $e; } }