/** * Import language translations. * * @return void|ResponseInterface * * @Route("/import", methods={"POST"}, name="admin-languages-import") */ public function importAction() { $form = new Upload(); if (!$this->request->isPost() || !$form->isValid()) { $messages = []; foreach ($form->getErrors() as $error) { if ($error instanceof Message) { $error = $error->getMessage(); } $messages[] = $this->i18n->_($error); } $this->flashSession->error($this->i18n->_('There are errors:') . '<br/>' . implode('<br/>', $messages)); return $this->response->redirect(['for' => "admin-languages"]); } $file = $this->request->getUploadedFiles(); try { /** * Parse file. */ $data = json_decode(file_get_contents($file[0]->getTempName()), true); list($language, $totals) = Language::parseImportData($this->getDI(), $data); $message = sprintf($this->i18n->_('<br/>Language "%s" (%s). Imported totals (scope: count): <br/>'), $language->language, $language->locale); foreach ($totals as $scope => $count) { $message .= ' - ' . $scope . ': ' . $count . '<br/>'; } $this->flashSession->success($this->i18n->_('Language translations has been imported!') . $message); } catch (Exception $e) { $this->flashSession->error($this->i18n->_($e->getMessage())); } return $this->response->redirect(['for' => "admin-languages"]); }
/** * 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...'); } }