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
265 lines
7.4 KiB
PHP
Executable File
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;
|
|
}
|
|
}
|