addLoader('po', new PoFileLoader());
$translator->addResource('po', "../../translations/installation.$installationLanguage.po", $installationLanguage);
Container::$translator = $translator;
// The function api_get_setting() might be called within the installation scripts.
// We need to provide some limited support for it through initialization of the
// global array-type variable $_setting.
$_setting = [
'platform_charset' => 'UTF-8',
'server_type' => 'production', // 'production' | 'test'
'permissions_for_new_directories' => '0770',
'permissions_for_new_files' => '0660',
'stylesheets' => 'chamilo',
];
$encryptPassForm = 'bcrypt';
$urlAppendPath = '';
$urlForm = '';
$pathForm = '';
$emailForm = '';
$dbHostForm = 'localhost';
$dbUsernameForm = 'root';
$dbPassForm = '';
$dbNameForm = 'chamilo';
$dbPortForm = 3306;
$allowSelfReg = 'approval';
$allowSelfRegProf = 1;
$adminLastName = get_lang('Doe');
$adminFirstName = get_lang('John');
$loginForm = 'admin';
$passForm = '';
$institutionUrlForm = 'http://www.chamilo.org';
$languageForm = '';
$campusForm = 'My campus';
$educationForm = 'Albert Einstein';
$adminPhoneForm = '(000) 001 02 03';
$institutionForm = 'My Organisation';
$session_lifetime = 360000;
//$installLanguage = isset($_SESSION['install_language']) ? $_SESSION['install_language'] : 'english';
$installLanguage = '';
$installationGuideLink = '../../documentation/installation_guide.html';
// Enables the portability layer and configures PHP for UTF-8
\Patchwork\Utf8\Bootup::initAll();
// Setting the error reporting levels.
error_reporting(E_ALL);
// Upgrading from any subversion of 1.9
$update_from_version_8 = [
'1.9.0',
'1.9.2',
'1.9.4',
'1.9.6',
'1.9.6.1',
'1.9.8',
'1.9.8.1',
'1.9.8.2',
'1.9.10',
'1.9.10.2',
'1.9.10.4',
'1.9.10.6',
'1.10.0',
'1.10.2',
'1.10.4',
'1.10.6',
'1.10.8',
'1.11.0',
'1.11.1',
'1.11.2',
'1.11.4',
'1.11.6',
'1.11.8',
'1.11.10',
'1.11.11',
'1.11.12',
'1.11.14',
];
$my_old_version = '';
if (empty($tmp_version)) {
$tmp_version = get_config_param('system_version');
}
if (!empty($_POST['old_version'])) {
$my_old_version = $_POST['old_version'];
} elseif (!empty($tmp_version)) {
$my_old_version = $tmp_version;
}
require_once __DIR__.'/version.php';
// A protection measure for already installed systems.
if (isAlreadyInstalledSystem()) {
// The system has already been installed, so block re-installation.
$global_error_code = 6;
require '../inc/global_error_message.inc.php';
exit;
}
/* STEP 1 : INITIALIZES FORM VARIABLES IF IT IS THE FIRST VISIT */
$badUpdatePath = false;
$emptyUpdatePath = true;
$proposedUpdatePath = '';
if (!empty($_POST['updatePath'])) {
$proposedUpdatePath = $_POST['updatePath'];
}
if (isset($_POST['step2_install']) || isset($_POST['step2_update_8']) || isset($_POST['step2_update_6'])) {
if (isset($_POST['step2_install'])) {
$installType = 'new';
$_POST['step2'] = 1;
} else {
$installType = 'update';
if (isset($_POST['step2_update_8'])) {
$emptyUpdatePath = false;
$proposedUpdatePath = api_add_trailing_slash(empty($_POST['updatePath']) ? api_get_path(SYS_PATH) : $_POST['updatePath']);
if (file_exists($proposedUpdatePath)) {
if (in_array($my_old_version, $update_from_version_8)) {
$_POST['step2'] = 1;
} else {
$badUpdatePath = true;
}
} else {
$badUpdatePath = true;
}
}
}
} elseif (isset($_POST['step1'])) {
$_POST['updatePath'] = '';
$installType = '';
$updateFromConfigFile = '';
unset($_GET['running']);
} else {
$installType = isset($_GET['installType']) ? $_GET['installType'] : '';
$updateFromConfigFile = isset($_GET['updateFromConfigFile']) ? $_GET['updateFromConfigFile'] : false;
}
if ($installType === 'update' && in_array($my_old_version, $update_from_version_8)) {
// This is the main configuration file of the system before the upgrade.
// Old configuration file.
// Don't change to include_once
$oldConfigPath = api_get_path(SYS_CODE_PATH).'inc/conf/configuration.php';
if (file_exists($oldConfigPath)) {
include $oldConfigPath;
}
}
$showEmailNotCheckedToStudent = 1;
if (!isset($_GET['running'])) {
// Extract the path to append to the url if Chamilo is not installed on the web root directory.
$urlAppendPath = api_remove_trailing_slash(api_get_path(REL_PATH));
$urlForm = api_get_path(WEB_PATH);
$pathForm = api_get_path(SYS_PATH);
$emailForm = 'webmaster@localhost';
if (!empty($_SERVER['SERVER_ADMIN'])) {
$emailForm = $_SERVER['SERVER_ADMIN'];
}
$email_parts = explode('@', $emailForm);
if (isset($email_parts[1]) && $email_parts[1] == 'localhost') {
$emailForm .= '.localdomain';
}
$loginForm = 'admin';
$passForm = api_generate_password();
$institutionUrlForm = 'http://www.chamilo.org';
$languageForm = api_get_interface_language();
$checkEmailByHashSent = 0;
$userMailCanBeEmpty = 1;
$allowSelfReg = 'approval';
$allowSelfRegProf = 1; //by default, a user can register as teacher (but moderation might be in place)
if (!empty($_GET['profile'])) {
$installationProfile = api_htmlentities($_GET['profile'], ENT_QUOTES);
}
} else {
foreach ($_POST as $key => $val) {
if (is_string($val)) {
$val = trim($val);
$_POST[$key] = $val;
} elseif (is_array($val)) {
foreach ($val as $key2 => $val2) {
$val2 = trim($val2);
$_POST[$key][$key2] = $val2;
}
}
$GLOBALS[$key] = $_POST[$key];
}
}
/* NEXT STEPS IMPLEMENTATION */
$total_steps = 7;
if (!$_POST) {
$current_step = 1;
} elseif (!empty($_POST['language_list']) or !empty($_POST['step1']) || ((!empty($_POST['step2_update_8']) or (!empty($_POST['step2_update_6']))) && ($emptyUpdatePath or $badUpdatePath))) {
$current_step = 2;
} elseif (!empty($_POST['step2']) or (!empty($_POST['step2_update_8']) or (!empty($_POST['step2_update_6'])))) {
$current_step = 3;
} elseif (!empty($_POST['step3'])) {
$current_step = 4;
} elseif (!empty($_POST['step4'])) {
$current_step = 5;
} elseif (!empty($_POST['step5'])) {
$current_step = 6;
} elseif (isset($_POST['step6'])) {
$current_step = 7;
}
// Managing the $encryptPassForm
if ($encryptPassForm == '1') {
$encryptPassForm = 'bcrypt';
} elseif ($encryptPassForm == '0') {
$encryptPassForm = 'none';
}
$form = '';
$instalation_type_label = '';
if ($installType == 'new') {
$instalation_type_label = get_lang('New installation');
} elseif ($installType == 'update') {
$update_from_version = isset($update_from_version) ? $update_from_version : null;
$instalation_type_label = get_lang('Update from Chamilo').(is_array($update_from_version) ? implode('|', $update_from_version) : '');
}
if (!empty($instalation_type_label) && empty($_POST['step6'])) {
$form .= '
';
}
if (empty($installationProfile)) {
$installationProfile = '';
if (!empty($_POST['installationProfile'])) {
$installationProfile = api_htmlentities($_POST['installationProfile']);
}
}
$institutionUrlFormResult = api_stristr($institutionUrlForm, 'http://', false) ? api_htmlentities($institutionUrlForm, ENT_QUOTES) : api_stristr($institutionUrlForm, 'https://', false) ? api_htmlentities($institutionUrlForm, ENT_QUOTES) : 'http://'.api_htmlentities($institutionUrlForm, ENT_QUOTES);
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
$form .= ' ';
if (isset($_POST['step2'])) {
// STEP 3 : LICENSE
ob_start();
display_license_agreement();
$form .= ob_get_contents();
ob_end_clean();
} elseif (isset($_POST['step3'])) {
// STEP 4 : MYSQL DATABASE SETTINGS
ob_start();
display_database_settings_form(
$installType,
$dbHostForm,
$dbUsernameForm,
$dbPassForm,
$dbNameForm,
$dbPortForm,
$installationProfile
);
$form .= ob_get_contents();
ob_end_clean();
} elseif (isset($_POST['step4'])) {
//STEP 5 : CONFIGURATION SETTINGS
//if update, try getting settings from the database...
if ($installType === 'update') {
$db_name = $dbNameForm;
$database = connectToDatabase(
$dbHostForm,
$dbUsernameForm,
$dbPassForm,
$dbNameForm,
$dbPortForm
);
$manager = $database->getManager();
$tmp = get_config_param_from_db('platformLanguage');
if (!empty($tmp)) {
$languageForm = $tmp;
}
$tmp = get_config_param_from_db('emailAdministrator');
if (!empty($tmp)) {
$emailForm = $tmp;
}
$tmp = get_config_param_from_db('administratorName');
if (!empty($tmp)) {
$adminFirstName = $tmp;
}
$tmp = get_config_param_from_db('administratorSurname');
if (!empty($tmp)) {
$adminLastName = $tmp;
}
$tmp = get_config_param_from_db('administratorTelephone');
if (!empty($tmp)) {
$adminPhoneForm = $tmp;
}
$tmp = get_config_param_from_db('siteName');
if (!empty($tmp)) {
$campusForm = $tmp;
}
$tmp = get_config_param_from_db('Institution');
if (!empty($tmp)) {
$institutionForm = $tmp;
}
$tmp = get_config_param_from_db('InstitutionUrl');
if (!empty($tmp)) {
$institutionUrlForm = $tmp;
}
// For version 1.9
$encryptPassForm = get_config_param('password_encryption');
// Managing the $encryptPassForm
if ($encryptPassForm == '1') {
$encryptPassForm = 'sha1';
} elseif ($encryptPassForm == '0') {
$encryptPassForm = 'none';
}
$allowSelfReg = 'approval';
$tmp = get_config_param_from_db('allow_registration');
if (!empty($tmp)) {
$allowSelfReg = $tmp;
}
$allowSelfRegProf = false;
$tmp = get_config_param_from_db('allow_registration_as_teacher');
if (!empty($tmp)) {
$allowSelfRegProf = $tmp;
}
}
ob_start();
display_configuration_settings_form(
$installType,
$urlForm,
$languageForm,
$emailForm,
$adminFirstName,
$adminLastName,
$adminPhoneForm,
$campusForm,
$institutionForm,
$institutionUrlForm,
$encryptPassForm,
$allowSelfReg,
$allowSelfRegProf,
$loginForm,
$passForm
);
$form .= ob_get_contents();
ob_end_clean();
} elseif (isset($_POST['step5'])) {
ob_start();
//STEP 6 : LAST CHECK BEFORE INSTALL?>
'.$loginForm.' ';
echo get_lang('Administrator password (you may want to change this )').' : '.$passForm.' '; /* TODO: Maybe this password should be hidden too? */
}
$allowSelfRegistrationLiteral = ($allowSelfReg == 'true') ? get_lang('Yes') : ($allowSelfReg == 'approval' ? get_lang('Approval') : get_lang('No'));
echo get_lang('Administrator first name').' : '.$adminFirstName, ' ', get_lang('Administrator last name').' : '.$adminLastName, ' ';
echo get_lang('Administrator e-mail').' : '.$emailForm; ?>
'.$dbNameForm; ?>
'.get_lang(
'Warning'
).''.get_lang('The install script will erase all tables of the selected database. We heavily recommend you do a full backup of them before confirming this last install step.'),
'warning',
false
);
} ?>
'.display_step_sequence().$msg.' ';
if (!empty($installationProfile)) {
$form .= ' ('.$installationProfile.') ';
}
$form .= ''.get_lang('Please wait. This could take a while...').'
';
if ($installType === 'update') {
$database = connectToDatabase(
$dbHostForm,
$dbUsernameForm,
$dbPassForm,
$dbNameForm,
$dbPortForm
);
$manager = $database->getManager();
$perm = api_get_permissions_for_new_directories();
$perm_file = api_get_permissions_for_new_files();
migrateSwitch($my_old_version, $manager);
// Create .env.local file
$envFile = api_get_path(SYS_PATH).'.env.local';
$distFile = api_get_path(SYS_PATH).'.env';
$params = [
'{{DATABASE_HOST}}' => $dbHostForm,
'{{DATABASE_PORT}}' => $dbPortForm,
'{{DATABASE_NAME}}' => $dbNameForm,
'{{DATABASE_USER}}' => $dbUsernameForm,
'{{DATABASE_PASSWORD}}' => $dbPassForm,
'{{APP_INSTALLED}}' => 1,
'{{APP_ENCRYPT_METHOD}}' => $encryptPassForm,
'{{APP_URL_APPEND}}' => $urlAppendPath,
];
error_log('Update env file');
updateEnvFile($distFile, $envFile, $params);
(new Dotenv())->load($envFile);
// Load Symfony Kernel
$kernel = new Kernel('dev', true);
$application = new Application($kernel);
error_log('Set Kernel');
session_unset();
$_SESSION = [];
session_destroy();
// No errors
//if ($result == 0) {
// Boot kernel and get the doctrine from Symfony container
$kernel->boot();
error_log('Boot');
$containerDatabase = $kernel->getContainer();
upgradeWithContainer($containerDatabase);
error_log('Set upgradeWithContainer');
} else {
set_file_folder_permissions();
$database = connectToDatabase(
$dbHostForm,
$dbUsernameForm,
$dbPassForm,
null,
$dbPortForm
);
$manager = $database->getManager();
$dbNameForm = preg_replace('/[^a-zA-Z0-9_\-]/', '', $dbNameForm);
// Drop and create the database anyways
$manager->getConnection()->getSchemaManager()->dropAndCreateDatabase($dbNameForm);
$database = connectToDatabase(
$dbHostForm,
$dbUsernameForm,
$dbPassForm,
$dbNameForm,
$dbPortForm
);
$manager = $database->getManager();
// Create .env.local file
$envFile = api_get_path(SYS_PATH).'.env.local';
$distFile = api_get_path(SYS_PATH).'.env';
$params = [
'{{DATABASE_HOST}}' => $dbHostForm,
'{{DATABASE_PORT}}' => $dbPortForm,
'{{DATABASE_NAME}}' => $dbNameForm,
'{{DATABASE_USER}}' => $dbUsernameForm,
'{{DATABASE_PASSWORD}}' => $dbPassForm,
'{{APP_INSTALLED}}' => 1,
'{{APP_ENCRYPT_METHOD}}' => $encryptPassForm,
'{{APP_URL_APPEND}}' => $urlAppendPath,
];
updateEnvFile($distFile, $envFile, $params);
(new Dotenv())->load($envFile);
// Load Symfony Kernel
$kernel = new Kernel('dev', true);
$application = new Application($kernel);
// Create database
$input = new ArrayInput([]);
$command = $application->find('doctrine:schema:create');
$result = $command->run($input, new ConsoleOutput());
// No errors
if ($result == 0) {
session_unset();
$_SESSION = [];
session_destroy();
// Boot kernel and get the doctrine from Symfony container
$kernel->boot();
$containerDatabase = $kernel->getContainer();
$sysPath = api_get_path(SYS_PATH);
finishInstallationWithContainer(
$containerDatabase,
$sysPath,
$encryptPassForm,
$passForm,
$adminLastName,
$adminFirstName,
$loginForm,
$emailForm,
$adminPhoneForm,
$languageForm,
$institutionForm,
$institutionUrlForm,
$campusForm,
$allowSelfReg,
$allowSelfRegProf,
$installationProfile
);
include 'install_files.inc.php';
}
}
$form .= display_after_install_message();
// Hide the "please wait" message sent previously
$form .= '';
$form .= ob_get_contents();
ob_end_clean();
} elseif (isset($_POST['step1']) || $badUpdatePath) {
//STEP 1 : REQUIREMENTS
//make sure that proposed path is set, shouldn't be necessary but...
if (empty($proposedUpdatePath)) {
$proposedUpdatePath = $_POST['updatePath'];
}
ob_start();
display_requirements($installType, $badUpdatePath, $proposedUpdatePath, $update_from_version_8);
$form .= ob_get_contents();
ob_end_clean();
} else {
ob_start();
// This is the start screen.
display_language_selection();
if (!empty($_GET['profile'])) {
$installationProfile = api_htmlentities($_GET['profile'], ENT_QUOTES);
}
echo ' ';
$form .= ob_get_contents();
ob_end_clean();
}
$poweredBy = 'Powered by Chamilo © '.date('Y');
?>
— trans('Chamilo installation').' — '.$translator->trans('Version').' '.$new_version; ?>
1
trans('Installation language'); ?>
2
trans('Requirements'); ?>
3
trans('Licence'); ?>
4
trans('MySQL database settings'); ?>
5
trans('Config settings'); ?>
6
trans('Show Overview'); ?>
7
trans('Install'); ?>