Workforce/installer/Controller/AbstractInstallerVueController.php
rajesh.n 8e294d7c5b
Some checks failed
Upgrade Test (4.x) / upgrade_test (map[file:V4_0.sql version:4.0]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_1.sql version:4.1]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_10.sql version:4.10]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_10_1.sql version:4.10.1]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_1_1.sql version:4.1.1]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_1_2.sql version:4.1.2]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_1_2_1.sql version:4.1.2.1]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_2_0_1.sql version:4.2.0.1]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_3.sql version:4.3]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_3_1.sql version:4.3.1]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_3_2.sql version:4.3.2]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_3_3.sql version:4.3.3]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_3_4.sql version:4.3.4]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_3_5.sql version:4.3.5]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_4.sql version:4.4]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_5.sql version:4.5]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_6.sql version:4.6]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_6_0_1.sql version:4.6.0.1]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_7.sql version:4.7]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_8.sql version:4.8]) (push) Has been cancelled
Upgrade Test (4.x) / upgrade_test (map[file:V4_9.sql version:4.9]) (push) Has been cancelled
Build / build (push) Has been cancelled
Cypress / cypress (push) Has been cancelled
Docker Build Test / build (push) Has been cancelled
Lint / lint (push) Has been cancelled
Scheduled Test / db_test (map[admin:mariadb-admin image:mariadb:11.0]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mariadb-admin image:mariadb:11.1]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mariadb-admin image:mariadb:11.2]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mariadb-admin image:mariadb:11.3]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mariadb-admin image:mariadb:11.4]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.0]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.10]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.11]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.1]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.2]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.3]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.4]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.5]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.6]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.7]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.8]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:10.9]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mariadb:5.5]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mysql:5.5]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mysql:5.6]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mysql:5.7]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mysql:8.0]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mysql:8.1]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mysql:8.2]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mysql:8.3]) (push) Has been cancelled
Scheduled Test / db_test (map[admin:mysqladmin image:mysql:8.4]) (push) Has been cancelled
Scheduled Test / php_test (php7.4) (push) Has been cancelled
Scheduled Test / php_test (php8.0) (push) Has been cancelled
Scheduled Test / php_test (php8.1) (push) Has been cancelled
Scheduled Test / php_test (php8.2) (push) Has been cancelled
Scheduled Test / php_test (php8.3) (push) Has been cancelled
Test / test (map[image:mariadb:10.3 name:mariadb103]) (push) Has been cancelled
Test / test (map[image:mysql:5.7 name:mysql57]) (push) Has been cancelled
Test / composer_check (push) Has been cancelled
Test / installation (push) Has been cancelled
first commit
2025-10-10 15:31:35 +05:30

265 lines
7.4 KiB
PHP
Executable File

<?php
/**
* OrangeHRM is a comprehensive Human Resource Management (HRM) System that captures
* all the essential functionalities required for any enterprise.
* Copyright (C) 2006 OrangeHRM Inc., http://www.orangehrm.com
*
* OrangeHRM is free software: you can redistribute it and/or modify it under the terms of
* the GNU General Public License as published by the Free Software Foundation, either
* version 3 of the License, or (at your option) any later version.
*
* OrangeHRM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with OrangeHRM.
* If not, see <https://www.gnu.org/licenses/>.
*/
namespace OrangeHRM\Installer\Controller;
use DateTime;
use OrangeHRM\Config\Config;
use OrangeHRM\Core\Dto\AttributeBag;
use OrangeHRM\Core\Helper\VueControllerHelper;
use OrangeHRM\Core\Vue\Component;
use OrangeHRM\Framework\Http\RedirectResponse;
use OrangeHRM\Framework\Http\Request;
use OrangeHRM\Framework\Http\Response;
use OrangeHRM\Installer\Util\StateContainer;
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;
use Twig\Loader\FilesystemLoader;
abstract class AbstractInstallerVueController extends AbstractInstallerController
{
public const WELCOME_SCREEN = "Welcome";
public const DATABASE_INFO_SCREEN = "Database Information";
public const SYSTEM_CHECK_SCREEN = "System Check";
public const VERSION_DETAILS_SCREEN = "Version Details";
public const UPGRADE_SCREEN = "Upgrade";
public const UPGRADER_COMPLETE_SCREEN = "Completion";
public const LICENCE_ACCEPTANCE_SCREEN = "License Acceptance";
public const DATABASE_CONFIG_SCREEN = "Database Configuration";
public const INSTANCE_CREATION_SCREEN = "Instance Creation";
public const ADMIN_USER_CREATION_SCREEN = "Admin User Creation";
public const CONFIRMATION_SCREEN = "Confirmation";
public const INSTALLATION_SCREEN = "Installation";
public const INSTALLATION_COMPLETE_SCREEN = "Installation Complete";
public const INSTALLER_SCREENS = [
self::WELCOME_SCREEN,
self::LICENCE_ACCEPTANCE_SCREEN,
self::DATABASE_CONFIG_SCREEN,
self::SYSTEM_CHECK_SCREEN,
self::INSTANCE_CREATION_SCREEN,
self::ADMIN_USER_CREATION_SCREEN,
self::CONFIRMATION_SCREEN,
self::INSTALLATION_SCREEN,
self::INSTALLATION_COMPLETE_SCREEN
];
public const UPGRADER_SCREENS = [
self::WELCOME_SCREEN,
self::DATABASE_INFO_SCREEN,
self::SYSTEM_CHECK_SCREEN,
self::VERSION_DETAILS_SCREEN,
self::UPGRADE_SCREEN,
self::UPGRADER_COMPLETE_SCREEN,
];
/**
* @var Environment|null
*/
private ?Environment $twig;
/**
* @var string
*/
private string $template = 'installer.html.twig';
/**
* @var null|Component
*/
private ?Component $component = null;
/**
* @var AttributeBag
*/
private AttributeBag $context;
public function __construct()
{
$loader = new FilesystemLoader(
[
Config::get(Config::APP_TEMPLATE_DIR),
realpath(__DIR__ . '/../config/templates')
]
);
$this->twig = new Environment($loader, ['cache' => false]);
$this->context = new AttributeBag();
$this->init();
}
/**
* @return Environment
*/
public function getTwig(): Environment
{
return $this->twig;
}
/**
* @param string $template
*/
public function setTemplate(string $template): void
{
$this->template = $template;
}
/**
* @return string
*/
public function getTemplate(): string
{
return $this->template;
}
/**
* @param Component $component
*/
public function setComponent(Component $component): void
{
$this->component = $component;
}
/**
* @return Component
*/
public function getComponent(): Component
{
return $this->component;
}
/**
* @return AttributeBag
*/
public function getContext(): AttributeBag
{
return $this->context;
}
public function init(): void
{
}
/**
* @param Request $request
*/
public function preRender(Request $request): void
{
}
/**
* @param Request $request
* @return string
* @throws LoaderError
* @throws RuntimeError
* @throws SyntaxError
*/
public function render(Request $request): string
{
$this->getContext()->add($this->getContextParams($request));
return $this->getTwig()->render(
$this->getTemplate(),
$this->getContext()->all(),
);
}
/**
* @param Request $request
*/
public function postRender(Request $request): void
{
}
/**
* @param Request $request
* @return Response|RedirectResponse
* @throws LoaderError
* @throws RuntimeError
* @throws SyntaxError
*/
protected function execute(Request $request)
{
$this->preRender($request);
$content = $this->render($request);
$this->postRender($request);
$response = $this->getResponse();
if (isset($content)) {
$response->setContent($content);
}
return $response;
}
/**
* @param Request $request
* @return array
*/
private function getContextParams(Request $request): array
{
return [
VueControllerHelper::COMPONENT_NAME => $this->getComponent()->getName(),
VueControllerHelper::COMPONENT_PROPS => $this->getComponent()->getProps(),
VueControllerHelper::PUBLIC_PATH => $request->getBasePath(),
VueControllerHelper::BASE_URL => $request->getBaseUrl(),
VueControllerHelper::ASSETS_VERSION => $this->getAssetsVersion(),
VueControllerHelper::COPYRIGHT_YEAR => date('Y'),
VueControllerHelper::PRODUCT_VERSION => Config::PRODUCT_VERSION,
VueControllerHelper::PRODUCT_NAME => Config::PRODUCT_NAME,
'steps' => $this->getSteps(),
'currentStep' => $this->getCurrentStep(),
];
}
/**
* @return string
*/
protected function getAssetsVersion(): string
{
$pathToBuildFile = realpath(__DIR__ . '/../client/dist/build');
if (!$pathToBuildFile) {
return (new DateTime())->getTimestamp();
}
return file_get_contents($pathToBuildFile);
}
/**
* @return string[]
*/
protected function getSteps(): array
{
if (is_null(StateContainer::getInstance()->isUpgrader())) {
return [self::WELCOME_SCREEN];
} elseif (StateContainer::getInstance()->isUpgrader()) {
return self::UPGRADER_SCREENS;
} else {
return self::INSTALLER_SCREENS;
}
}
/**
* @return int
*/
protected function getCurrentStep(): int
{
$currentScreen = StateContainer::getInstance()->getCurrentScreen();
$screens = self::INSTALLER_SCREENS;
if (StateContainer::getInstance()->isUpgrader()) {
$screens = self::UPGRADER_SCREENS;
}
return array_flip($screens)[$currentScreen] ?? 0;
}
}