1
0
mirror of synced 2024-12-05 03:36:05 +03:00
bitrix-module/helpers/installation/Installer.php

346 lines
8.5 KiB
PHP

<?php
ob_start();
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/install/wizard/wizard.php';
ob_clean();
/**
* Class Installer
*/
class Installer
{
private $dbName;
private $dbHost;
private $dbUser;
private $dbPass;
/**
* Installer constructor.
*/
public function __construct()
{
$this->deleteDefaultInstallation();
$this->dbHost = getenv('DB_BITRIX_HOST') ? getenv('DB_BITRIX_HOST') : 'localhost';
$this->dbName = getenv('DB_BITRIX_NAME') ? getenv('DB_BITRIX_NAME') : 'bitrix';
$this->dbUser = getenv('DB_BITRIX_LOGIN') ? getenv('DB_BITRIX_LOGIN') : 'bitrix';
$this->dbPass = getenv('DB_BITRIX_PASS') ? getenv('DB_BITRIX_PASS') : 'bitrix';
}
/**
* @param string $value
*/
private function setCurrentStepID($value)
{
$this->setRequestParam('CurrentStepID', $value);
}
/**
* @param string $value
*/
private function setNextStepID($value)
{
$this->setRequestParam('NextStepID', $value);
}
/**
* @param string $value
*/
private function setPreviousStepID($value)
{
$this->setRequestParam('PreviousStepID', $value);
}
/**
* @param string $key
* @param mixed $value
* @return self
*/
private function setRequestParam($key, $value)
{
$_REQUEST[$key] = $value;
$_POST[$key] = $value;
return $this;
}
/**
* Execute installation step
* @return void
*/
protected function request()
{
$this->setParams();
$steps = array(
CheckLicenseKey::class,
DBTypeStep::class,
RequirementStep::class,
CreateDBStep::class,
ExtendedCreateModulesStep::class,
CreateAdminStep::class,
SelectWizardStep::class,
LoadModuleStep::class,
LoadModuleActionStep::class,
SelectWizard1Step::class
);
$wizard = new CWizardBase(
str_replace("#VERS#", SM_VERSION, InstallGetMessage("INS_TITLE")),
$package = null
);
$wizard->AddSteps($steps);
$wizard->SetReturnOutput(true);
$wizard->Display();
foreach ($wizard->GetWizardSteps() as $step) {
if ($step->GetErrors()) {
foreach ($step->GetErrors() as $error) {
$this->println(sprintf('error: %s', mb_convert_encoding($error[0], 'UTF-8', 'windows-1251')));
}
}
}
}
/**
* Set request params for installation steps
* @return void
*/
private function setParams()
{
$params = array(
'__wiz_agree_license' => 'Y',
'__wiz_dbType' => 'mysql',
'__wiz_lic_key_variant' => '',
'__wiz_utf8' => 'Y',
'__wiz_create_user' => 'N',
'__wiz_host' => $this->dbHost,
'__wiz_user' => $this->dbUser,
'__wiz_password' => $this->dbPass,
'__wiz_database' => $this->dbName,
'__wiz_create_database' => 'N',
'__wiz_create_database_type' => 'innodb',
'__wiz_root_user' => '',
'__wiz_root_password' => '',
'__wiz_file_access_perms' => '0644',
'__wiz_folder_access_perms' => '0755',
'__wiz_login' => 'admin',
'__wiz_admin_password' => 'admin123',
'__wiz_admin_password_confirm' => 'admin123',
'__wiz_email' => 'admin@mail.com',
'__wiz_user_name' => 'FirstName',
'__wiz_user_surname' => 'LastName',
'__wiz_selected_wizard' => 'bitrix.eshop:bitrix:eshop',
);
foreach ($params as $code => $param) {
$this->setRequestParam($code, $param);
}
}
/**
* Step of select database type
* @return self
*/
public function dbTypeStep()
{
$this->setCurrentStepID('select_database');
$this->setNextStepID('requirements');
ob_start();
$this->request();
ob_clean();
$this->println('Selected database type');
return $this;
}
/**
* Requirements step
* @return self
*/
public function requirementStep()
{
$this->setCurrentStepID('requirements');
$this->setNextStepID('create_database');
$this->request();
$this->println('Requirements step');
return $this;
}
/**
* Create database step
* @return self
*/
public function createDBStep()
{
$this->setCurrentStepID('create_database');
$this->setNextStepID('create_modules');
$this->request();
$this->println('Database setup');
return $this;
}
/**
* Installation modules step
* @param bool $isMain
* @return self
*/
public function createModulesStep($isMain = false)
{
$threeSteps = array(
'utf8',
'database',
'files'
);
if ($isMain) {
$modules = array(
'main' => $threeSteps
);
} else {
$modules = array(
'abtest' => $threeSteps,
'bitrix.eshop' => $threeSteps,
'catalog' => $threeSteps,
'compression' => $threeSteps,
'conversion' => $threeSteps,
'currency' => $threeSteps,
'fileman' => $threeSteps,
'form' => $threeSteps,
'highloadblock' => $threeSteps,
'iblock' => $threeSteps,
'pull' => $threeSteps,
'rest' => $threeSteps,
'sale' => $threeSteps,
'scale' => $threeSteps,
'search' => $threeSteps,
'security' => $threeSteps,
'sender' => $threeSteps,
'storeassist' => $threeSteps,
'translate' => $threeSteps,
'ui' => $threeSteps,
'remove_mysql' => array(
array('single')
),
'remove_mssql' => array(
array('single')
),
'remove_oracle' => array(
array('single')
),
'remove_misc' => array(
array('single')
),
'__finish' => array(
array('single')
)
);
}
$this->setCurrentStepID('create_modules');
foreach ($modules as $module => $steps) {
foreach ($steps as $step) {
$this->setRequestParam('__wiz_nextStep', $module);
$this->setRequestParam('__wiz_nextStepStage', $step);
$this->request();
$this->println(sprintf('%s module install, step %s', $module, $step));
}
}
return $this;
}
/**
* Create admin interface step
* @return self
*/
public function createAdminStep()
{
$this->setCurrentStepID('create_admin');
$this->request();
$this->println('Setup admin');
return $this;
}
/**
* Load modules step
* @return self
*/
public function createLoadModuleStep()
{
$this->setCurrentStepID('load_module');
$this->request();
$this->println('Load modules');
return $this;
}
/**
* Load modules action step
* @return self
*/
public function createLoadModuleActionStep()
{
$this->setCurrentStepID('load_module_action');
$this->request();
$this->println('Load modules action');
return $this;
}
/**
* Finish install step
* @return self
*/
public function createFinishStep()
{
$this->setCurrentStepID('finish');
$this->request();
$this->println('Installation finish');
return $this;
}
/**
* Remove code for web install
* @return void
*/
private function deleteDefaultInstallation()
{
$data = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/install/wizard/wizard.php');
$newData = preg_replace('/\$wizard= new CWizardBase.+$/', '', $data);
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/install/wizard/wizard.php', $newData);
}
/**
* @param string $string
* @return void
*/
private function println($string)
{
print($string);
print(PHP_EOL);
}
}