Esempio n. 1
0
 /**
  * Database installation step.
  *
  * @return mixed
  *
  * @Route("/database", methods={"GET", "POST"}, name="install-database")
  */
 public function databaseAction()
 {
     if (!$this->_isPassed('requirementsAction') || $this->_isPassed('databaseAction')) {
         return $this->_selectAction();
     }
     $form = new DatabaseForm();
     if ($this->request->isPost() && $form->isValid($this->request->getPost())) {
         $data = $form->getValues();
         try {
             $connectionSettings = ["adapter" => $data['adapter'], "host" => $data['host'], "port" => $data['port'], "username" => $data['username'], "password" => $data['password'], "dbname" => $data['dbname']];
             $this->_setupDatabase($connectionSettings);
             // Install schema.
             $schema = new Schema($this->di);
             $schema->updateDatabase();
             // Run modules installation scripts.
             $packageManager = new PackageManager([], $this->di);
             foreach ($this->di->get('registry')->modules as $moduleName) {
                 $packageManager->runInstallScript(new Config(['name' => $moduleName, 'type' => PackageManager::PACKAGE_TYPE_MODULE, 'currentVersion' => '0', 'isUpdate' => false]));
             }
             $this->config->save('database');
             $this->_setPassed(__FUNCTION__, true);
         } catch (\Exception $ex) {
             $form->addError($ex->getMessage());
         }
         if ($this->_isPassed(__FUNCTION__)) {
             return $this->_selectAction();
         }
     }
     $this->view->form = $form;
 }
Esempio n. 2
0
 /**
  * Upload package action.
  *
  * @return void
  *
  * @Route("/upload", methods={"GET", "POST"}, name="admin-packages-upload")
  */
 public function uploadAction()
 {
     $this->view->form = $form = new UploadForm();
     if (!$this->request->isPost() || !$form->isValid()) {
         return;
     }
     $packageManager = new Manager(Package::find());
     $packageManager->clearTempDirectory();
     $packageFile = $this->request->getUploadedFiles();
     if (count($packageFile) == 1 && $packageFile[0]->getSize() != 0) {
         $filename = $packageManager->getTempDirectory() . 'uploaded.zip';
         $packageFile[0]->moveTo($filename);
         try {
             // Install package - check dep, copy files, get manifest, etc.
             $manifest = $packageManager->installPackage($filename);
             // Create package database object.
             if (!$manifest->isUpdate) {
                 $package = new Package();
                 $package->assign($manifest->toArray());
                 $package->save();
                 $this->_enablePackageConfig($package);
                 $this->_updateMetadata();
                 // install package dependencies
                 if ($manifest->get('dependencies')) {
                     $dependencies = $manifest->get('dependencies');
                     foreach ($dependencies as $dependency) {
                         $needPackage = $this->_getPackage($dependency['type'], $dependency['name']);
                         if ($needPackage) {
                             $packageDependency = new PackageDependency();
                             $packageDependency->package_id = $package->id;
                             $packageDependency->dependency_id = $needPackage->id;
                             $packageDependency->save();
                         }
                     }
                 }
             }
             if ($manifest->type == Manager::PACKAGE_TYPE_MODULE) {
                 // Run module install script.
                 $newPackageVersion = $packageManager->runInstallScript($manifest);
                 $this->_clearCache();
                 // Install translations if possible.
                 if (!empty($manifest->i18n)) {
                     foreach ($manifest->i18n as $languageData) {
                         Language::parseImportData($this->getDI(), $languageData->toArray());
                     }
                 }
                 // Register module in system to perform database update.
                 $modules = $this->getDI()->get('registry')->modules;
                 $loader = $this->getDI()->get('loader');
                 $modules[] = $manifest->name;
                 $moduleName = ucfirst($manifest->name);
                 // Register namespaces.
                 $loader->registerNamespaces([$moduleName => $this->getDI()->get('registry')->directories->modules . $moduleName], true);
                 $loader->register();
                 // Register module in app
                 $this->getDI()->get('app')->registerModules([$manifest->name => $moduleName . '\\Bootstrap']);
                 $this->getDI()->get('registry')->modules = $modules;
                 // Update database.
                 $schema = new Schema($this->getDI());
                 $schema->updateDatabase();
             }
             if ($manifest->isUpdate) {
                 $this->flash->success('Package updated to version ' . $newPackageVersion . '!');
             } else {
                 $this->flash->success('Package installed!');
             }
         } catch (Exception $e) {
             $this->flash->error($e->getMessage());
         }
     } else {
         $this->flash->notice('Please, select zip file...');
     }
 }