From 8924b9332897c2f65fecda078a22f3ec5b40ebd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D?= Date: Sat, 11 Jun 2022 21:28:03 +0200 Subject: [PATCH] refactor: [WIP] Migrate install controller. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rubén D --- .../Controllers/Install/IndexController.php | 68 ++++++++++++ .../{ => Install}/InstallController.php | 105 +++++------------- 2 files changed, 95 insertions(+), 78 deletions(-) create mode 100644 app/modules/web/Controllers/Install/IndexController.php rename app/modules/web/Controllers/{ => Install}/InstallController.php (53%) diff --git a/app/modules/web/Controllers/Install/IndexController.php b/app/modules/web/Controllers/Install/IndexController.php new file mode 100644 index 00000000..78995962 --- /dev/null +++ b/app/modules/web/Controllers/Install/IndexController.php @@ -0,0 +1,68 @@ +. + */ + +namespace SP\Modules\Web\Controllers\Install; + +use SP\Core\Exceptions\SPException; +use SP\Core\Language; +use SP\Modules\Web\Controllers\ControllerBase; +use SP\Mvc\View\Components\SelectItemAdapter; + +/** + * Class IndexController + * + * @package SP\Modules\Web\Controllers + */ +final class IndexController extends ControllerBase +{ + public function indexAction(): void + { + if ($this->configData->isInstalled()) { + $this->router->response()->redirect('index.php?r=login'); + + return; + } + + $this->layoutHelper->getPublicLayout('index', 'install'); + + $errors = []; + + foreach ($this->extensionChecker->getMissing() as $module) { + $errors[] = [ + 'type' => SPException::WARNING, + 'description' => sprintf('%s (%s)', __('Module unavailable'), $module), + 'hint' => __('Without this module the application could not run correctly'), + ]; + } + + $this->view->assign('errors', $errors); + $this->view->assign( + 'langs', + SelectItemAdapter::factory(Language::getAvailableLanguages()) + ->getItemsFromArraySelected([Language::$globalLang]) + ); + + $this->view(); + } +} \ No newline at end of file diff --git a/app/modules/web/Controllers/InstallController.php b/app/modules/web/Controllers/Install/InstallController.php similarity index 53% rename from app/modules/web/Controllers/InstallController.php rename to app/modules/web/Controllers/Install/InstallController.php index f147ed54..103c7c38 100644 --- a/app/modules/web/Controllers/InstallController.php +++ b/app/modules/web/Controllers/Install/InstallController.php @@ -4,7 +4,7 @@ * * @author nuxsmin * @link https://syspass.org - * @copyright 2012-2021, Rubén Domínguez nuxsmin@$syspass.org + * @copyright 2012-2022, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. * @@ -22,101 +22,61 @@ * along with sysPass. If not, see . */ -namespace SP\Modules\Web\Controllers; +namespace SP\Modules\Web\Controllers\Install; + use Exception; -use Klein\Klein; -use SP\Core\Acl\Acl; use SP\Core\Application; -use SP\Core\Exceptions\SPException; -use SP\Core\Language; -use SP\Core\PhpExtensionChecker; -use SP\Core\UI\ThemeInterface; use SP\Domain\Install\InstallerInterface; use SP\Domain\Install\Services\InstallData; use SP\Domain\Install\Services\Installer; use SP\Http\JsonResponse; -use SP\Http\RequestInterface; -use SP\Modules\Web\Controllers\Helpers\LayoutHelper; +use SP\Modules\Web\Controllers\ControllerBase; use SP\Modules\Web\Controllers\Traits\JsonTrait; -use SP\Mvc\View\Components\SelectItemAdapter; -use SP\Mvc\View\TemplateInterface; -use SP\Providers\Auth\Browser\BrowserAuthInterface; +use SP\Mvc\Controller\WebControllerHelper; /** * Class InstallController - * - * @package SP\Modules\Web\Controllers */ final class InstallController extends ControllerBase { use JsonTrait; - private Installer $installer; + private InstallerInterface $installer; public function __construct( Application $application, - ThemeInterface $theme, - Klein $router, - Acl $acl, - RequestInterface $request, - PhpExtensionChecker $extensionChecker, - TemplateInterface $template, - BrowserAuthInterface $browser, - LayoutHelper $layoutHelper, + WebControllerHelper $webControllerHelper, InstallerInterface $installer ) { - parent::__construct( - $application, - $theme, - $router, - $acl, - $request, - $extensionChecker, - $template, - $browser, - $layoutHelper - ); + parent::__construct($application, $webControllerHelper); $this->installer = $installer; } - public function indexAction(): void - { - if ($this->configData->isInstalled()) { - $this->router->response() - ->redirect('index.php?r=login'); - - return; - } - - $this->layoutHelper->getPublicLayout('index', 'install'); - - $errors = []; - - foreach ($this->extensionChecker->getMissing() as $module) { - $errors[] = [ - 'type' => SPException::WARNING, - 'description' => sprintf('%s (%s)', __('Module unavailable'), $module), - 'hint' => __('Without this module the application could not run correctly'), - ]; - } - - $this->view->assign('errors', $errors); - $this->view->assign( - 'langs', - SelectItemAdapter::factory(Language::getAvailableLanguages()) - ->getItemsFromArraySelected([Language::$globalLang]) - ); - - $this->view(); - } - /** * @return bool * @throws \JsonException */ public function installAction(): bool + { + $installData = $this->getInstallDataFromRequest(); + + try { + $this->installer->run(Installer::getDatabaseSetup($installData, $this->configData), $installData); + + return $this->returnJsonResponse(JsonResponse::JSON_SUCCESS, __u('Installation finished')); + } catch (Exception $e) { + processException($e); + + return $this->returnJsonResponseException($e); + } + } + + /** + * @return \SP\Domain\Install\Services\InstallData + */ + private function getInstallDataFromRequest(): InstallData { $installData = new InstallData(); $installData->setSiteLang($this->request->analyzeString('sitelang', 'en_US')); @@ -129,17 +89,6 @@ final class InstallController extends ControllerBase $installData->setDbHost($this->request->analyzeString('dbhost', 'localhost')); $installData->setHostingMode($this->request->analyzeBool('hostingmode', false)); - try { - $this->installer->run(Installer::getDatabaseSetup($installData, $this->configData), $installData); - - return $this->returnJsonResponse( - JsonResponse::JSON_SUCCESS, - __u('Installation finished') - ); - } catch (Exception $e) { - processException($e); - - return $this->returnJsonResponseException($e); - } + return $installData; } } \ No newline at end of file