/** * Import a Json file (.rzt) containing Roles. * * @param Symfony\Component\HttpFoundation\Request $request * * @return Symfony\Component\HttpFoundation\Response */ public function importJsonFileAction(Request $request) { $this->validateAccessForRole('ROLE_ACCESS_ROLES'); $form = $this->buildImportJsonFileForm(); $form->handleRequest($request); if ($form->isValid() && !empty($form['role_file'])) { $file = $form['role_file']->getData(); if ($file->isValid()) { $serializedData = file_get_contents($file->getPathname()); if (null !== json_decode($serializedData)) { if (RolesImporter::importJsonFile($serializedData, $this->getService('em'))) { $msg = $this->getTranslator()->trans('role.imported'); $this->publishConfirmMessage($request, $msg); $this->getService('em')->flush(); // Clear result cache $cacheDriver = $this->getService('em')->getConfiguration()->getResultCacheImpl(); if ($cacheDriver !== null) { $cacheDriver->deleteAll(); } // redirect even if its null return $this->redirect($this->generateUrl('rolesHomePage')); } else { $msg = $this->getTranslator()->trans('file.format.not_valid'); $request->getSession()->getFlashBag()->add('error', $msg); $this->getService('logger')->error($msg); // redirect even if its null return $this->redirect($this->generateUrl('rolesImportPage')); } } else { $msg = $this->getTranslator()->trans('file.format.not_valid'); $request->getSession()->getFlashBag()->add('error', $msg); $this->getService('logger')->error($msg); // redirect even if its null return $this->redirect($this->generateUrl('rolesImportPage')); } } else { $msg = $this->getTranslator()->trans('file.not_uploaded'); $request->getSession()->getFlashBag()->add('error', $msg); $this->getService('logger')->error($msg); } } $this->assignation['form'] = $form->createView(); return $this->render('roles/import.html.twig', $this->assignation); }
protected function importTheme($classname, &$text) { $themeFile = $classname; $themeFile = str_replace('\\', '/', $themeFile); $themeFile = str_replace('Themes', 'themes', $themeFile); $themeFile .= ".php"; if (file_exists($themeFile)) { $fixtures = new Fixtures($this->entityManager); $fixtures->installFrontendTheme($classname); $text .= '<info>Theme class “' . $themeFile . '” has been installed…</info>' . PHP_EOL; // install fixtures $array = explode('\\', $classname); $themeRoot = ROADIZ_ROOT . "/themes/" . $array[count($array) - 2]; $yaml = new YamlConfiguration($themeRoot . "/config.yml"); $yaml->load(); $data = $yaml->getConfiguration(); if (false !== $data && isset($data["importFiles"])) { if (isset($data["importFiles"]['roles'])) { foreach ($data["importFiles"]['roles'] as $filename) { \RZ\Roadiz\CMS\Importers\RolesImporter::importJsonFile(file_get_contents($themeRoot . "/" . $filename), $this->entityManager); $text .= ' — <info>Theme file “' . $themeRoot . "/" . $filename . '” has been imported.</info>' . PHP_EOL; } } if (isset($data["importFiles"]['groups'])) { foreach ($data["importFiles"]['groups'] as $filename) { \RZ\Roadiz\CMS\Importers\GroupsImporter::importJsonFile(file_get_contents($themeRoot . "/" . $filename), $this->entityManager); $text .= ' — <info>Theme file “' . $themeRoot . "/" . $filename . '” has been imported..</info>' . PHP_EOL; } } if (isset($data["importFiles"]['settings'])) { foreach ($data["importFiles"]['settings'] as $filename) { \RZ\Roadiz\CMS\Importers\SettingsImporter::importJsonFile(file_get_contents($themeRoot . "/" . $filename), $this->entityManager); $text .= ' — <info>Theme files “' . $themeRoot . "/" . $filename . '” has been imported.</info>' . PHP_EOL; } } if (isset($data["importFiles"]['nodetypes'])) { foreach ($data["importFiles"]['nodetypes'] as $filename) { \RZ\Roadiz\CMS\Importers\NodeTypesImporter::importJsonFile(file_get_contents($themeRoot . "/" . $filename), $this->entityManager); $text .= ' — <info>Theme file “' . $themeRoot . "/" . $filename . '” has been imported.</info>' . PHP_EOL; } } $text .= 'You should do a <info>bin/roadiz orm:schema-tool:update --force</info> to apply your themes into database.' . PHP_EOL; } else { $text .= '<info>Theme class “' . $themeFile . '” has no data to import.</info>' . PHP_EOL; } } else { $text .= '<error>Theme class “' . $themeFile . '” does not exist.</error>' . PHP_EOL; } }
protected function execute(InputInterface $input, OutputInterface $output) { $helper = $this->getHelper('question'); $this->entityManager = $this->getHelperSet()->get('em')->getEntityManager(); $text = ""; $question = new ConfirmationQuestion('Before installing Roadiz, did you create database schema? ' . PHP_EOL . 'If not execute: <info>bin/roadiz orm:schema-tool:create</info>' . PHP_EOL . '<question>Are you sure to perform installation?</question> : ', false); if ($input->getOption('no-interaction') || $helper->ask($input, $output, $question)) { /* * Create backend theme */ if (!$this->hasDefaultBackend()) { $theme = new Theme(); $theme->setAvailable(true)->setBackendTheme(true)->setClassName("Themes\\Rozier\\RozierApp"); $this->entityManager->persist($theme); $this->entityManager->flush(); $text .= '<info>Rozier back-end theme installed…</info>' . PHP_EOL; } else { $text .= '<error>A back-end theme is already installed.</error>' . PHP_EOL; } /** * Import default data */ $installRoot = ROADIZ_ROOT . "/themes/Install"; $yaml = new YamlConfiguration($installRoot . "/config.yml"); $yaml->load(); $data = $yaml->getConfiguration(); if (isset($data["importFiles"]['roles'])) { foreach ($data["importFiles"]['roles'] as $filename) { \RZ\Roadiz\CMS\Importers\RolesImporter::importJsonFile(file_get_contents($installRoot . "/" . $filename), $this->entityManager); $text .= ' — <info>Theme file “' . $installRoot . "/" . $filename . '” has been imported.</info>' . PHP_EOL; } } if (isset($data["importFiles"]['groups'])) { foreach ($data["importFiles"]['groups'] as $filename) { \RZ\Roadiz\CMS\Importers\GroupsImporter::importJsonFile(file_get_contents($installRoot . "/" . $filename), $this->entityManager); $text .= ' — <info>Theme file “' . $installRoot . "/" . $filename . '” has been imported..</info>' . PHP_EOL; } } if (isset($data["importFiles"]['settings'])) { foreach ($data["importFiles"]['settings'] as $filename) { \RZ\Roadiz\CMS\Importers\SettingsImporter::importJsonFile(file_get_contents($installRoot . "/" . $filename), $this->entityManager); $text .= ' — <info>Theme files “' . $installRoot . "/" . $filename . '” has been imported.</info>' . PHP_EOL; } } /* * Create default translation */ if (!$this->hasDefaultTranslation()) { $defaultTrans = new Translation(); $defaultTrans->setDefaultTranslation(true)->setLocale("en")->setName("Default translation"); $this->entityManager->persist($defaultTrans); $this->entityManager->flush(); $text .= '<info>Default translation installed…</info>' . PHP_EOL; } else { $text .= '<error>A default translation is already installed.</error>' . PHP_EOL; } /* * Disable install mode */ $configuration = new YamlConfiguration(); if (false === $configuration->load()) { $configuration->setConfiguration($configuration->getDefaultConfiguration()); } $configuration->setInstall(false); $configuration->writeConfiguration(); // Clear result cache $cacheDriver = $this->entityManager->getConfiguration()->getResultCacheImpl(); if ($cacheDriver !== null) { $cacheDriver->deleteAll(); } $text .= 'Install mode has been changed to false.' . PHP_EOL; } $output->writeln($text); }