Пример #1
0
 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);
         }
     }
 }
Пример #2
0
 /**
  * @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;
     }
 }