Issues (2128)

main/install/index.php (1 issue)

1
<?php
2
/* For licensing terms, see /license.txt */
3
4
use ChamiloSession as Session;
5
6
/**
7
 * Chamilo installation.
8
 *
9
 * As seen from the user, the installation proceeds in 6 steps.
10
 * The user is presented with several web pages where he/she has to make
11
 * choices and/or fill in data.
12
 *
13
 * The aim is, as always, to have good default settings and suggestions.
14
 *
15
 * @todo reduce high level of duplication in this code
16
 * @todo (busy) organise code into functions
17
 *
18
 * @package chamilo.install
19
 */
20
$originalDisplayErrors = ini_get('display_errors');
21
$originalMemoryLimit = ini_get('memory_limit');
22
23
ini_set('display_errors', '1');
24
ini_set('log_errors', '1');
25
ini_set('memory_limit', -1);
26
ini_set('max_execution_time', 0);
27
error_reporting(-1);
28
29
require_once __DIR__.'/../../vendor/autoload.php';
30
31
define('SYSTEM_INSTALLATION', 1);
32
define('INSTALL_TYPE_UPDATE', 'update');
33
define('FORM_FIELD_DISPLAY_LENGTH', 40);
34
define('DATABASE_FORM_FIELD_DISPLAY_LENGTH', 25);
35
define('MAX_FORM_FIELD_LENGTH', 80);
36
37
// Including necessary libraries.
38
require_once '../inc/lib/api.lib.php';
39
require_once '../inc/lib/text.lib.php';
40
41
api_check_php_version('../inc/');
42
ob_implicit_flush(true);
43
session_start();
44
require_once api_get_path(LIBRARY_PATH).'database.constants.inc.php';
45
require_once api_get_path(LIBRARY_PATH).'fileManage.lib.php';
46
require_once api_get_path(LIBRARY_PATH).'text.lib.php';
47
require_once api_get_path(LIBRARY_PATH).'banner.lib.php';
48
require_once 'install.lib.php';
49
50
// The function api_get_setting() might be called within the installation scripts.
51
// We need to provide some limited support for it through initialization of the
52
// global array-type variable $_setting.
53
$_setting = [
54
    'platform_charset' => 'UTF-8',
55
    'server_type' => 'production', // 'production' | 'test'
56
    'permissions_for_new_directories' => '0770',
57
    'permissions_for_new_files' => '0660',
58
    'stylesheets' => 'chamilo',
59
];
60
61
// Determination of the language during the installation procedure.
62
if (!empty($_POST['language_list'])) {
63
    $search = ['../', '\\0'];
64
    $install_language = str_replace($search, '', urldecode($_POST['language_list']));
65
    Session::write('install_language', $install_language);
66
} elseif (isset($_SESSION['install_language']) && $_SESSION['install_language']) {
67
    $install_language = $_SESSION['install_language'];
68
} else {
69
    // Trying to switch to the browser's language, it is covenient for most of the cases.
70
    $install_language = detect_browser_language();
71
}
72
73
// Language validation.
74
if (!array_key_exists($install_language, get_language_folder_list())) {
75
    $install_language = 'english';
76
}
77
78
$installationGuideLink = '../../documentation/installation_guide.html';
79
80
// Loading language files.
81
require api_get_path(SYS_LANG_PATH).'english/trad4all.inc.php';
82
if ($install_language != 'english') {
83
    include_once api_get_path(SYS_LANG_PATH).$install_language.'/trad4all.inc.php';
84
    switch ($install_language) {
85
        case 'french':
86
            $installationGuideLink = '../../documentation/installation_guide_fr_FR.html';
87
            break;
88
        case 'spanish':
89
            $installationGuideLink = '../../documentation/installation_guide_es_ES.html';
90
            break;
91
        case 'italian':
92
            $installationGuideLink = '../../documentation/installation_guide_it_IT.html';
93
            break;
94
        default:
95
            break;
96
    }
97
}
98
99
// These global variables must be set for proper working of the function get_lang(...) during the installation.
100
$language_interface = $install_language;
101
$language_interface_initial_value = $install_language;
102
103
// Character set during the installation, it is always to be 'UTF-8'.
104
$charset = 'UTF-8';
105
106
// Enables the portability layer and configures PHP for UTF-8
107
\Patchwork\Utf8\Bootup::initAll();
108
109
// Page encoding initialization.
110
header('Content-Type: text/html; charset='.$charset);
111
112
// Setting the error reporting levels.
113
error_reporting(E_ALL);
114
115
// Overriding the timelimit (for large campusses that have to be migrated).
116
@set_time_limit(0);
117
118
// Upgrading from any subversion of 1.9
119
$update_from_version_8 = [
120
    '1.9.0',
121
    '1.9.2',
122
    '1.9.4',
123
    '1.9.6',
124
    '1.9.6.1',
125
    '1.9.8',
126
    '1.9.8.1',
127
    '1.9.8.2',
128
    '1.9.10',
129
    '1.9.10.2',
130
    '1.9.10.4',
131
    '1.9.10.6',
132
    '1.10.0',
133
    '1.10.2',
134
    '1.10.4',
135
    '1.10.6',
136
    '1.10.8',
137
];
138
139
$my_old_version = '';
140
if (empty($tmp_version)) {
141
    $tmp_version = get_config_param('system_version');
142
}
143
144
if (!empty($_POST['old_version'])) {
145
    $my_old_version = $_POST['old_version'];
146
} elseif (!empty($tmp_version)) {
147
    $my_old_version = $tmp_version;
148
}
149
150
require_once __DIR__.'/version.php';
151
152
// Try to delete old symfony folder (generates conflicts with composer)
153
$oldSymfonyFolder = '../inc/lib/symfony';
154
if (is_dir($oldSymfonyFolder)) {
155
    @rmdir($oldSymfonyFolder);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition for rmdir(). This can introduce security issues, and is generally not recommended. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unhandled  annotation

155
    /** @scrutinizer ignore-unhandled */ @rmdir($oldSymfonyFolder);

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
156
}
157
158
// A protection measure for already installed systems.
159
if (isAlreadyInstalledSystem()) {
160
    // The system has already been installed, so block re-installation.
161
    $global_error_code = 6;
162
    require '../inc/global_error_message.inc.php';
163
    exit;
164
}
165
166
/* STEP 1 : INITIALIZES FORM VARIABLES IF IT IS THE FIRST VISIT */
167
168
// Is valid request
169
$is_valid_request = isset($_REQUEST['is_executable']) ? $_REQUEST['is_executable'] : null;
170
$badUpdatePath = false;
171
$emptyUpdatePath = true;
172
$proposedUpdatePath = '';
173
$updateFromConfigFile = '';
174
175
if (!empty($_POST['updatePath'])) {
176
    $proposedUpdatePath = $_POST['updatePath'];
177
}
178
179
if (@$_POST['step2_install'] || @$_POST['step2_update_8'] || @$_POST['step2_update_6']) {
180
    if (@$_POST['step2_install']) {
181
        $installType = 'new';
182
        $_POST['step2'] = 1;
183
    } else {
184
        $installType = 'update';
185
        if (@$_POST['step2_update_8']) {
186
            $emptyUpdatePath = false;
187
            $proposedUpdatePath = api_add_trailing_slash(empty($_POST['updatePath']) ? api_get_path(SYS_PATH) : $_POST['updatePath']);
188
            if (file_exists($proposedUpdatePath)) {
189
                if (in_array($my_old_version, $update_from_version_8)) {
190
                    $_POST['step2'] = 1;
191
                } else {
192
                    $badUpdatePath = true;
193
                }
194
            } else {
195
                $badUpdatePath = true;
196
            }
197
        }
198
    }
199
} elseif (@$_POST['step1']) {
200
    $_POST['updatePath'] = '';
201
    $installType = '';
202
    unset($_GET['running']);
203
} else {
204
    $installType = isset($_GET['installType']) ? $_GET['installType'] : null;
205
    $updateFromConfigFile = isset($_GET['updateFromConfigFile']) ? $_GET['updateFromConfigFile'] : '';
206
}
207
208
if ($installType == 'update' && in_array($my_old_version, $update_from_version_8)) {
209
    // This is the main configuration file of the system before the upgrade.
210
    // Old configuration file.
211
    // Don't change to include_once
212
    $oldConfigPath = api_get_path(SYS_CODE_PATH).'inc/conf/configuration.php';
213
    if (file_exists($oldConfigPath)) {
214
        include $oldConfigPath;
215
    }
216
}
217
218
$session_lifetime = 360000;
219
$institutionUrlForm = 'http://www.chamilo.org';
220
221
if (!isset($_GET['running'])) {
222
    $dbHostForm = 'localhost';
223
    $dbUsernameForm = 'root';
224
    $dbPassForm = '';
225
    $dbNameForm = 'chamilo';
226
    $dbPortForm = 3306;
227
228
    // Extract the path to append to the url if Chamilo is not installed on the web root directory.
229
    $urlAppendPath = api_remove_trailing_slash(api_get_path(REL_PATH));
230
    $urlForm = api_get_path(WEB_PATH);
231
    $pathForm = api_get_path(SYS_PATH);
232
    $emailForm = 'webmaster@localhost';
233
    if (!empty($_SERVER['SERVER_ADMIN'])) {
234
        $emailForm = $_SERVER['SERVER_ADMIN'];
235
    }
236
    $email_parts = explode('@', $emailForm);
237
    if (isset($email_parts[1]) && $email_parts[1] == 'localhost') {
238
        $emailForm .= '.localdomain';
239
    }
240
    $adminLastName = get_lang('DefaultInstallAdminLastname');
241
    $adminFirstName = get_lang('DefaultInstallAdminFirstname');
242
    $loginForm = 'admin';
243
    $passForm = api_generate_password();
244
245
    $campusForm = 'My campus';
246
    $educationForm = 'Albert Einstein';
247
    $adminPhoneForm = '(000) 001 02 03';
248
    $institutionForm = 'My Organisation';
249
    $institutionUrlForm = 'https://chamilo.org';
250
    $languageForm = api_get_interface_language();
251
252
    $checkEmailByHashSent = 0;
253
    $ShowEmailNotCheckedToStudent = 1;
254
    $userMailCanBeEmpty = 1;
255
    $allowSelfReg = 'approval';
256
    $allowSelfRegProf = 1; //by default, a user can register as teacher (but moderation might be in place)
257
    $encryptPassForm = 'bcrypt';
258
    if (!empty($_GET['profile'])) {
259
        $installationProfile = api_htmlentities($_GET['profile'], ENT_QUOTES);
260
    }
261
} else {
262
    foreach ($_POST as $key => $val) {
263
        $magic_quotes_gpc = ini_get('magic_quotes_gpc');
264
        if (is_string($val)) {
265
            if ($magic_quotes_gpc) {
266
                $val = stripslashes($val);
267
            }
268
            $val = trim($val);
269
            $_POST[$key] = $val;
270
        } elseif (is_array($val)) {
271
            foreach ($val as $key2 => $val2) {
272
                if ($magic_quotes_gpc) {
273
                    $val2 = stripslashes($val2);
274
                }
275
                $val2 = trim($val2);
276
                $_POST[$key][$key2] = $val2;
277
            }
278
        }
279
        $GLOBALS[$key] = $_POST[$key];
280
    }
281
}
282
$dbPortForm = (int) $dbPortForm;
283
284
/* NEXT STEPS IMPLEMENTATION */
285
286
$total_steps = 7;
287
if (!$_POST) {
288
    $current_step = 1;
289
} elseif (!empty($_POST['language_list']) or !empty($_POST['step1']) or ((!empty($_POST['step2_update_8']) or (!empty($_POST['step2_update_6']))) && ($emptyUpdatePath or $badUpdatePath))) {
290
    $current_step = 2;
291
} elseif (!empty($_POST['step2']) or (!empty($_POST['step2_update_8']) or (!empty($_POST['step2_update_6'])))) {
292
    $current_step = 3;
293
} elseif (!empty($_POST['step3'])) {
294
    $current_step = 4;
295
} elseif (!empty($_POST['step4'])) {
296
    $current_step = 5;
297
} elseif (!empty($_POST['step5'])) {
298
    $current_step = 6;
299
} elseif (@$_POST['step6']) {
300
    $current_step = 7;
301
}
302
303
// Managing the $encryptPassForm
304
if ($encryptPassForm == '1') {
305
    $encryptPassForm = 'bcrypt';
306
} elseif ($encryptPassForm == '0') {
307
    $encryptPassForm = 'none';
308
}
309
310
?>
311
<!DOCTYPE html>
312
<head>
313
    <title>&mdash; <?php echo get_lang('ChamiloInstallation').' &mdash; '.get_lang('Version_').' '.$new_version; ?></title>
314
    <style type="text/css" media="screen, projection">
315
        @import "../../web/assets/bootstrap/dist/css/bootstrap.min.css";
316
        @import "../../web/assets/bootstrap-select/dist/css/bootstrap-select.min.css";
317
        @import "../../web/assets/fontawesome/css/font-awesome.min.css";
318
        @import "../../web/css/base.css";
319
        @import "../../web/css/themes/chamilo/default.css";
320
        .inputShowPwd > input
321
        {
322
            width: 90%;
323
            display: initial;
324
        }
325
326
    </style>
327
    <script type="text/javascript" src="../../web/assets/jquery/dist/jquery.min.js"></script>
328
    <script type="text/javascript" src="../../web/assets/bootstrap/dist/js/bootstrap.min.js"></script>
329
    <script src="../../web/assets/bootstrap-select/dist/js/bootstrap-select.min.js"></script>
330
    <script type="text/javascript">
331
        $(function() {
332
            $("#details_button").click(function() {
333
                $( "#details" ).toggle("slow", function() {
334
                });
335
            });
336
337
            $("#button_please_wait").hide();
338
            $("button").addClass('btn btn-default');
339
340
            // Allow Chamilo install in IE
341
            $("button").click(function() {
342
                $("#is_executable").attr("value",$(this).attr("name"));
343
            });
344
345
            //Blocking step6 button
346
            $("#button_step6").click(function() {
347
                $("#button_step6").hide();
348
                $("#button_please_wait").html('<?php echo addslashes(get_lang('PleaseWait')); ?>');
349
                $("#button_please_wait").show();
350
                $("#button_please_wait").attr('disabled', true);
351
                $("#is_executable").attr("value",'step6');
352
            });
353
        });
354
355
        init_visibility=0;
356
        $(function() {
357
            $(".advanced_parameters").click(function() {
358
                if ($("#id_contact_form").css("display") == "none") {
359
                    $("#id_contact_form").css("display","block");
360
                    $("#img_plus_and_minus").html('&nbsp;<img src="<?php echo Display::returnIconPath('div_hide.gif'); ?>" alt="<?php echo get_lang('Hide'); ?>" title="<?php echo get_lang('Hide'); ?>" style ="vertical-align:middle" >&nbsp;<?php echo get_lang('ContactInformation'); ?>');
361
                } else {
362
                    $("#id_contact_form").css("display","none");
363
                    $("#img_plus_and_minus").html('&nbsp;<img src="<?php echo Display::returnIconPath('div_show.gif'); ?>" alt="<?php echo get_lang('Show'); ?>" title="<?php echo get_lang('Show'); ?>" style ="vertical-align:middle" >&nbsp;<?php echo get_lang('ContactInformation'); ?>');
364
                }
365
            });
366
        });
367
368
        function send_contact_information() {
369
            if (!document.getElementById('accept_licence').checked) {
370
                alert('<?php echo get_lang('YouMustAcceptLicence'); ?>')
371
                ;return false;
372
            } else {
373
                var data_post = "";
374
                data_post += "person_name="+$("#person_name").val()+"&";
375
                data_post += "person_email="+$("#person_email").val()+"&";
376
                data_post += "company_name="+$("#company_name").val()+"&";
377
                data_post += "company_activity="+$("#company_activity option:selected").val()+"&";
378
                data_post += "person_role="+$("#person_role option:selected").val()+"&";
379
                data_post += "company_country="+$("#country option:selected").val()+"&";
380
                data_post += "company_city="+$("#company_city").val()+"&";
381
                data_post += "language="+$("#language option:selected").val()+"&";
382
                data_post += "financial_decision="+$("input[name='financial_decision']:checked").val();
383
384
                $.ajax({
385
                    contentType: "application/x-www-form-urlencoded",
386
                    beforeSend: function(myObject) {},
387
                    type: "POST",
388
                    url: "<?php echo api_get_path(WEB_AJAX_PATH); ?>install.ajax.php?a=send_contact_information",
389
                    beforeSend : function() {
390
                        $('#loader-button').append('  <em class="fa fa-spinner fa-pulse fa-fw"></em>');
391
                    },
392
                    data: data_post,
393
                    success: function(datos) {
394
                        if (datos == 'required_field_error') {
395
                            message = "<?php echo get_lang('FormHasErrorsPleaseComplete'); ?>";
396
                        } else if (datos == '1') {
397
                            message = "<?php echo get_lang('ContactInformationHasBeenSent'); ?>";
398
                        } else {
399
                            message = "<?php echo get_lang('Error').': '.get_lang('ContactInformationHasNotBeenSent'); ?>";
400
                        }
401
                        alert(message);
402
                        $('#license-next').trigger('click');
403
                        $('#loader-button').html('');
404
                    }
405
                });
406
            }
407
        }
408
    </script>
409
    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo api_get_system_encoding(); ?>" />
410
</head>
411
<body dir="<?php echo api_get_text_direction(); ?>">
412
413
<div id="page-install">
414
<div id="main" class="container">
415
    <div class="row">
416
        <div class="panel panel-default">
417
        <div class="panel-body">
418
419
        <div class="col-md-8">
420
        <form class="form-horizontal" id="install_form" method="post" action="<?php echo api_get_self(); ?>?running=1&amp;installType=<?php echo $installType; ?>&amp;updateFromConfigFile=<?php echo urlencode($updateFromConfigFile); ?>">
421
<?php
422
423
$instalation_type_label = '';
424
if ($installType == 'new') {
425
    $instalation_type_label = get_lang('NewInstallation');
426
} elseif ($installType == 'update') {
427
    $update_from_version = isset($update_from_version) ? $update_from_version : null;
428
    $instalation_type_label = get_lang('UpdateFromLMSVersion').(is_array($update_from_version) ? implode('|', $update_from_version) : '');
429
}
430
431
if (!empty($instalation_type_label) && empty($_POST['step6'])) {
432
    echo '<div class="page-header"><h2>'.$instalation_type_label.'</h2></div>';
433
}
434
if (empty($installationProfile)) {
435
    $installationProfile = '';
436
    if (!empty($_POST['installationProfile'])) {
437
        $installationProfile = api_htmlentities($_POST['installationProfile']);
438
    }
439
}
440
441
$institutionUrlFormResult = '';
442
if (api_stristr($institutionUrlForm, 'http://') || api_stristr($institutionUrlForm, 'https://')) {
443
    $institutionUrlFormResult = api_htmlentities($institutionUrlForm, ENT_QUOTES);
444
} else {
445
    $institutionUrlFormResult = api_htmlentities($institutionUrlForm, ENT_QUOTES);
446
}
447
448
    ?>
449
    <input type="hidden" name="updatePath"         value="<?php if (!$badUpdatePath) {
450
        echo api_htmlentities($proposedUpdatePath, ENT_QUOTES);
451
    } ?>" />
452
    <input type="hidden" name="urlAppendPath"      value="<?php echo api_htmlentities($urlAppendPath, ENT_QUOTES); ?>" />
453
    <input type="hidden" name="pathForm"           value="<?php echo api_htmlentities($pathForm, ENT_QUOTES); ?>" />
454
    <input type="hidden" name="urlForm"            value="<?php echo api_htmlentities($urlForm, ENT_QUOTES); ?>" />
455
    <input type="hidden" name="dbHostForm"         value="<?php echo api_htmlentities($dbHostForm, ENT_QUOTES); ?>" />
456
    <input type="hidden" name="dbPortForm"         value="<?php echo api_htmlentities($dbPortForm, ENT_QUOTES); ?>" />
457
    <input type="hidden" name="dbUsernameForm"     value="<?php echo api_htmlentities($dbUsernameForm, ENT_QUOTES); ?>" />
458
    <input type="hidden" name="dbPassForm"         value="<?php echo api_htmlentities($dbPassForm, ENT_QUOTES); ?>" />
459
    <input type="hidden" name="dbNameForm"         value="<?php echo api_htmlentities($dbNameForm, ENT_QUOTES); ?>" />
460
    <input type="hidden" name="allowSelfReg"       value="<?php echo api_htmlentities($allowSelfReg, ENT_QUOTES); ?>" />
461
    <input type="hidden" name="allowSelfRegProf"   value="<?php echo api_htmlentities($allowSelfRegProf, ENT_QUOTES); ?>" />
462
    <input type="hidden" name="emailForm"          value="<?php echo api_htmlentities($emailForm, ENT_QUOTES); ?>" />
463
    <input type="hidden" name="adminLastName"      value="<?php echo api_htmlentities($adminLastName, ENT_QUOTES); ?>" />
464
    <input type="hidden" name="adminFirstName"     value="<?php echo api_htmlentities($adminFirstName, ENT_QUOTES); ?>" />
465
    <input type="hidden" name="adminPhoneForm"     value="<?php echo api_htmlentities($adminPhoneForm, ENT_QUOTES); ?>" />
466
    <input type="hidden" name="loginForm"          value="<?php echo api_htmlentities($loginForm, ENT_QUOTES); ?>" />
467
    <input type="hidden" name="passForm"           value="<?php echo api_htmlentities($passForm, ENT_QUOTES); ?>" />
468
    <input type="hidden" name="languageForm"       value="<?php echo api_htmlentities($languageForm, ENT_QUOTES); ?>" />
469
    <input type="hidden" name="campusForm"         value="<?php echo api_htmlentities($campusForm, ENT_QUOTES); ?>" />
470
    <input type="hidden" name="educationForm"      value="<?php echo api_htmlentities($educationForm, ENT_QUOTES); ?>" />
471
    <input type="hidden" name="institutionForm"    value="<?php echo api_htmlentities($institutionForm, ENT_QUOTES); ?>" />
472
    <input type="hidden" name="institutionUrlForm" value="<?php echo $institutionUrlFormResult; ?>" />
473
    <input type="hidden" name="checkEmailByHashSent" value="<?php echo api_htmlentities($checkEmailByHashSent, ENT_QUOTES); ?>" />
474
    <input type="hidden" name="ShowEmailNotCheckedToStudent" value="<?php echo api_htmlentities($ShowEmailNotCheckedToStudent, ENT_QUOTES); ?>" />
475
    <input type="hidden" name="userMailCanBeEmpty" value="<?php echo api_htmlentities($userMailCanBeEmpty, ENT_QUOTES); ?>" />
476
    <input type="hidden" name="encryptPassForm"    value="<?php echo api_htmlentities($encryptPassForm, ENT_QUOTES); ?>" />
477
    <input type="hidden" name="session_lifetime"   value="<?php echo api_htmlentities($session_lifetime, ENT_QUOTES); ?>" />
478
    <input type="hidden" name="old_version"        value="<?php echo api_htmlentities($my_old_version, ENT_QUOTES); ?>" />
479
    <input type="hidden" name="new_version"        value="<?php echo api_htmlentities($new_version, ENT_QUOTES); ?>" />
480
    <input type="hidden" name="installationProfile" value="<?php echo api_htmlentities($installationProfile, ENT_QUOTES); ?>" />
481
<?php
482
483
if (@$_POST['step2']) {
484
    //STEP 3 : LICENSE
485
    display_license_agreement();
486
} elseif (@$_POST['step3']) {
487
    //STEP 4 : MYSQL DATABASE SETTINGS
488
    display_database_settings_form(
489
        $installType,
490
        $dbHostForm,
491
        $dbUsernameForm,
492
        $dbPassForm,
493
        $dbNameForm,
494
        $dbPortForm,
495
        $installationProfile
496
    );
497
} elseif (@$_POST['step4']) {
498
    //STEP 5 : CONFIGURATION SETTINGS
499
500
    //if update, try getting settings from the database...
501
    if ($installType == 'update') {
502
        $db_name = $dbNameForm;
503
504
        $manager = connectToDatabase(
505
            $dbHostForm,
506
            $dbUsernameForm,
507
            $dbPassForm,
508
            $dbNameForm,
509
            $dbPortForm
510
        );
511
512
        $tmp = get_config_param_from_db('platformLanguage');
513
        if (!empty($tmp)) {
514
            $languageForm = $tmp;
515
        }
516
517
        $tmp = get_config_param_from_db('emailAdministrator');
518
        if (!empty($tmp)) {
519
            $emailForm = $tmp;
520
        }
521
522
        $tmp = get_config_param_from_db('administratorName');
523
        if (!empty($tmp)) {
524
            $adminFirstName = $tmp;
525
        }
526
527
        $tmp = get_config_param_from_db('administratorSurname');
528
        if (!empty($tmp)) {
529
            $adminLastName = $tmp;
530
        }
531
532
        $tmp = get_config_param_from_db('administratorTelephone');
533
        if (!empty($tmp)) {
534
            $adminPhoneForm = $tmp;
535
        }
536
537
        $tmp = get_config_param_from_db('siteName');
538
        if (!empty($tmp)) {
539
            $campusForm = $tmp;
540
        }
541
542
        $tmp = get_config_param_from_db('Institution');
543
        if (!empty($tmp)) {
544
            $institutionForm = $tmp;
545
        }
546
547
        $tmp = get_config_param_from_db('InstitutionUrl');
548
        if (!empty($tmp)) {
549
            $institutionUrlForm = $tmp;
550
        }
551
552
        // For version 1.9
553
        $urlForm = $_configuration['root_web'];
554
        $encryptPassForm = get_config_param('password_encryption');
555
        // Managing the $encryptPassForm
556
        if ($encryptPassForm == '1') {
557
            $encryptPassForm = 'sha1';
558
        } elseif ($encryptPassForm == '0') {
559
            $encryptPassForm = 'none';
560
        }
561
562
        $allowSelfReg = 'approval';
563
        $tmp = get_config_param_from_db('allow_registration');
564
        if (!empty($tmp)) {
565
            $allowSelfReg = $tmp;
566
        }
567
568
        $allowSelfRegProf = false;
569
        $tmp = get_config_param_from_db('allow_registration_as_teacher');
570
        if (!empty($tmp)) {
571
            $allowSelfRegProf = $tmp;
572
        }
573
    }
574
575
    display_configuration_settings_form(
576
        $installType,
577
        $urlForm,
578
        $languageForm,
579
        $emailForm,
580
        $adminFirstName,
581
        $adminLastName,
582
        $adminPhoneForm,
583
        $campusForm,
584
        $institutionForm,
585
        $institutionUrlForm,
586
        $encryptPassForm,
587
        $allowSelfReg,
588
        $allowSelfRegProf,
589
        $loginForm,
590
        $passForm
591
    );
592
} elseif (@$_POST['step5']) {
593
    //STEP 6 : LAST CHECK BEFORE INSTALL?>
594
    <div class="RequirementHeading">
595
       <h3><?php echo display_step_sequence().get_lang('LastCheck'); ?></h3>
596
    </div>
597
    <div class="RequirementContent">
598
       <?php echo get_lang('HereAreTheValuesYouEntered'); ?>
599
    </div>
600
601
    <?php
602
    if ($installType == 'new') {
603
        echo get_lang('AdminLogin').' : <strong>'.$loginForm.'</strong><br />';
604
        echo get_lang('AdminPass').' : <strong>'.$passForm.'</strong><br /><br />'; /* TODO: Maybe this password should be hidden too? */
605
    }
606
    $allowSelfRegistrationLiteral = ($allowSelfReg == 'true') ? get_lang('Yes') : ($allowSelfReg == 'approval' ? get_lang('Approval') : get_lang('No'));
607
    echo get_lang('AdminFirstName').' : '.$adminFirstName, '<br />', get_lang('AdminLastName').' : '.$adminLastName, '<br />';
608
    echo get_lang('AdminEmail').' : '.$emailForm; ?><br />
609
    <?php echo get_lang('AdminPhone').' : '.$adminPhoneForm; ?><br />
610
    <?php echo get_lang('MainLang').' : '.$languageForm; ?><br /><br />
611
    <?php echo get_lang('DBHost').' : '.$dbHostForm; ?><br />
612
    <?php echo get_lang('DBPort').' : '.$dbPortForm; ?><br />
613
    <?php echo get_lang('DBLogin').' : '.$dbUsernameForm; ?><br />
614
    <?php echo get_lang('DBPassword').' : '.str_repeat('*', api_strlen($dbPassForm)); ?><br />
615
    <?php echo get_lang('MainDB').' : <strong>'.$dbNameForm; ?></strong><br />
616
    <?php echo get_lang('AllowSelfReg').' : '.$allowSelfRegistrationLiteral; ?><br />
617
    <?php echo get_lang('EncryptMethodUserPass').' : ';
618
    echo $encryptPassForm; ?>
619
    <br /><br />
620
621
    <?php echo get_lang('CampusName').' : '.$campusForm; ?><br />
622
    <?php echo get_lang('InstituteShortName').' : '.$institutionForm; ?><br />
623
    <?php echo get_lang('InstituteURL').' : '.$institutionUrlForm; ?><br />
624
    <?php echo get_lang('ChamiloURL').' : '.$urlForm; ?><br /><br />
625
    <?php
626
    if ($installType == 'new') {
627
        echo Display::return_message(
628
            '<h4 style="text-align: center">'.get_lang(
629
                'Warning'
630
            ).'</h4>'.get_lang('TheInstallScriptWillEraseAllTables'),
631
            'warning',
632
            false
633
        );
634
    } ?>
635
636
    <div id="pnl-check-crs-tables" class="alert alert-warning hide">
637
        <p><?php echo get_lang('CRSTablesIntro'); ?></p>
638
        <p>
639
            <button type="button" class="btn btn-warning btn-xs" id="btn-remove-crs-table" data-removing-text="<?php echo get_lang('Removing'); ?>" autocomplete="off">
640
                    <span class="fa-stack" aria-hidden="true">
641
                        <span class="fa fa-circle-thin fa-stack-2x"></span>
642
                        <span class="fa fa-trash-o fa-stack-1x"></span>
643
                    </span>
644
                <?php echo get_lang('CheckForCRSTables'); ?>
645
            </button>
646
        </p>
647
    </div>
648
    <script>
649
        $(function() {
650
            $.post('<?php echo api_get_path(WEB_CODE_PATH); ?>install/ajax.php', {
651
                a: 'check_crs_tables',
652
                db_host: '<?php echo $dbHostForm; ?>',
653
                db_username: '<?php echo $dbUsernameForm; ?>',
654
                db_pass: '<?php echo $dbPassForm; ?>',
655
                db_name: '<?php echo $dbNameForm; ?>',
656
                db_port: '<?php echo $dbPortForm; ?>',
657
                install_type: '<?php echo $installType; ?>'
658
            }, function (response) {
659
                if (!parseInt(response)) {
660
                    return;
661
                }
662
663
                $('#pnl-check-crs-tables').removeClass('hide');
664
665
                $('#btn-remove-crs-table').on('click', function (e) {
666
                    e.preventDefault();
667
668
                    var sure = confirm('<?php echo get_lang('AreYouSureToDelete'); ?>');
669
670
                    if (!sure) {
671
                        return;
672
                    }
673
674
                    var $btnNext = $('button.btn-success:submit'),
675
                        $btnRemove = $(this).button('removing');
676
677
                    $btnNext.prop('disabled', true);
678
679
                    $.post('<?php echo api_get_path(WEB_CODE_PATH); ?>install/ajax.php', {
680
                        a: 'remove_crs_tables',
681
                        db_host: '<?php echo $dbHostForm; ?>',
682
                        db_username: '<?php echo $dbUsernameForm; ?>',
683
                        db_pass: '<?php echo $dbPassForm; ?>',
684
                        db_name: '<?php echo $dbNameForm; ?>',
685
                        db_port: '<?php echo $dbPortForm; ?>'
686
                    }, function () {
687
                        $btnRemove.remove();
688
689
                        $btnNext.prop('disabled', false);
690
                    });
691
                });
692
            });
693
        });
694
    </script>
695
696
    <table width="100%">
697
        <tr>
698
            <td>
699
                <button type="submit" class="btn btn-default" name="step4" value="&lt; <?php echo get_lang('Previous'); ?>" >
700
                    <em class="fa fa-backward"> </em> <?php echo get_lang('Previous'); ?>
701
                </button>
702
            </td>
703
            <td align="right">
704
                <input type="hidden" name="is_executable" id="is_executable" value="-" />
705
                <input type="hidden" name="step6" value="1" />
706
                <button id="button_step6" class="btn btn-success" type="submit" name="button_step6" value="<?php echo get_lang('InstallChamilo'); ?>">
707
                    <em class="fa fa-floppy-o"> </em>
708
                    <?php echo get_lang('InstallChamilo'); ?>
709
                </button>
710
                <button class="btn btn-save" id="button_please_wait"></button>
711
            </td>
712
        </tr>
713
    </table>
714
715
    <?php
716
} elseif (@$_POST['step6']) {
717
        //STEP 6 : INSTALLATION PROCESS
718
        $current_step = 7;
719
        $msg = get_lang('InstallExecution');
720
        if ($installType == 'update') {
721
            $msg = get_lang('UpdateExecution');
722
        }
723
        echo '<div class="RequirementHeading">
724
          <h3>'.display_step_sequence().$msg.'</h3>';
725
        if (!empty($installationProfile)) {
726
            echo '    <h3>('.$installationProfile.')</h3>';
727
        }
728
        echo '    <div id="pleasewait" class="alert alert-success">'.get_lang('PleaseWaitThisCouldTakeAWhile').'
729
730
          <div class="progress">
731
          <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%">
732
            <span class="sr-only">100% Complete</span>
733
          </div>
734
        </div>
735
          </div>
736
          </div>';
737
738
        // Push the web server to send these strings before we start the real
739
        // installation process
740
        flush();
741
        $f = ob_get_contents();
742
        if (!empty($f)) {
743
            ob_flush(); //#5565
744
        }
745
746
        if ($installType == 'update') {
747
            $manager = connectToDatabase(
748
            $dbHostForm,
749
            $dbUsernameForm,
750
            $dbPassForm,
751
            $dbNameForm,
752
            $dbPortForm
753
        );
754
755
            $perm = api_get_permissions_for_new_directories();
756
            $perm_file = api_get_permissions_for_new_files();
757
758
            migrateSwitch($my_old_version, $manager);
759
        } else {
760
            set_file_folder_permissions();
761
762
            $manager = connectToDatabase(
763
                $dbHostForm,
764
                $dbUsernameForm,
765
                $dbPassForm,
766
                null,
767
                $dbPortForm
768
            );
769
770
            $dbNameForm = Database::clearDatabaseName($dbNameForm);
771
772
            // Drop and create the database anyways
773
            $manager->getConnection()->getSchemaManager()->dropAndCreateDatabase($dbNameForm);
774
775
            $manager = connectToDatabase(
776
                $dbHostForm,
777
                $dbUsernameForm,
778
                $dbPassForm,
779
                $dbNameForm,
780
                $dbPortForm
781
            );
782
783
            $sql = getVersionTable();
784
            $manager->getConnection()->executeQuery($sql);
785
786
            $metadataList = $manager->getMetadataFactory()->getAllMetadata();
787
            $schema = $manager->getConnection()->getSchemaManager()->createSchema();
788
789
            // Create database schema
790
            $tool = new \Doctrine\ORM\Tools\SchemaTool($manager);
791
            $tool->createSchema($metadataList);
792
793
            $connection = $manager->getConnection();
794
            /*
795
            $connection->executeQuery(
796
                'CREATE TABLE page__site (id INT AUTO_INCREMENT NOT NULL, enabled TINYINT(1) NOT NULL, name VARCHAR(255) NOT NULL, relative_path VARCHAR(255) DEFAULT NULL, host VARCHAR(255) NOT NULL, enabled_from DATETIME DEFAULT NULL, enabled_to DATETIME DEFAULT NULL, is_default TINYINT(1) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, locale VARCHAR(6) DEFAULT NULL, title VARCHAR(64) DEFAULT NULL, meta_keywords VARCHAR(255) DEFAULT NULL, meta_description VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
797
            );
798
            $connection->executeQuery(
799
                'CREATE TABLE page__page (id INT AUTO_INCREMENT NOT NULL, site_id INT DEFAULT NULL, parent_id INT DEFAULT NULL, target_id INT DEFAULT NULL, route_name VARCHAR(255) NOT NULL, page_alias VARCHAR(255) DEFAULT NULL, type VARCHAR(255) DEFAULT NULL, position INT NOT NULL, enabled TINYINT(1) NOT NULL, decorate TINYINT(1) NOT NULL, edited TINYINT(1) NOT NULL, name VARCHAR(255) NOT NULL, slug LONGTEXT DEFAULT NULL, url LONGTEXT DEFAULT NULL, custom_url LONGTEXT DEFAULT NULL, request_method VARCHAR(255) DEFAULT NULL, title VARCHAR(255) DEFAULT NULL, meta_keyword VARCHAR(255) DEFAULT NULL, meta_description VARCHAR(255) DEFAULT NULL, javascript LONGTEXT DEFAULT NULL, stylesheet LONGTEXT DEFAULT NULL, raw_headers LONGTEXT DEFAULT NULL, template VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_2FAE39EDF6BD1646 (site_id), INDEX IDX_2FAE39ED727ACA70 (parent_id), INDEX IDX_2FAE39ED158E0B66 (target_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
800
            );
801
            $connection->executeQuery(
802
                'CREATE TABLE page__snapshot (id INT AUTO_INCREMENT NOT NULL, site_id INT DEFAULT NULL, page_id INT DEFAULT NULL, route_name VARCHAR(255) NOT NULL, page_alias VARCHAR(255) DEFAULT NULL, type VARCHAR(255) DEFAULT NULL, position INT NOT NULL, enabled TINYINT(1) NOT NULL, decorate TINYINT(1) NOT NULL, name VARCHAR(255) NOT NULL, url LONGTEXT DEFAULT NULL, parent_id INT DEFAULT NULL, target_id INT DEFAULT NULL, content LONGTEXT DEFAULT NULL COMMENT \'(DC2Type:json)\', publication_date_start DATETIME DEFAULT NULL, publication_date_end DATETIME DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_3963EF9AF6BD1646 (site_id), INDEX IDX_3963EF9AC4663E4 (page_id), INDEX idx_snapshot_dates_enabled (publication_date_start, publication_date_end, enabled), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
803
            );
804
            $connection->executeQuery(
805
                'CREATE TABLE page__bloc (id INT AUTO_INCREMENT NOT NULL, parent_id INT DEFAULT NULL, page_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(64) NOT NULL, settings LONGTEXT NOT NULL COMMENT \'(DC2Type:json)\', enabled TINYINT(1) DEFAULT NULL, position INT DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_FCDC1A97727ACA70 (parent_id), INDEX IDX_FCDC1A97C4663E4 (page_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
806
            );
807
            $connection->executeQuery(
808
                'CREATE TABLE classification__category (id INT AUTO_INCREMENT NOT NULL, parent_id INT DEFAULT NULL, context VARCHAR(255) DEFAULT NULL, media_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, enabled TINYINT(1) NOT NULL, slug VARCHAR(255) NOT NULL, description VARCHAR(255) DEFAULT NULL, position INT DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_43629B36727ACA70 (parent_id), INDEX IDX_43629B36E25D857E (context), INDEX IDX_43629B36EA9FDD75 (media_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
809
            );
810
            $connection->executeQuery(
811
                'CREATE TABLE classification__context (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, enabled TINYINT(1) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
812
            );
813
            $connection->executeQuery(
814
                'CREATE TABLE classification__tag (id INT AUTO_INCREMENT NOT NULL, context VARCHAR(255) DEFAULT NULL, name VARCHAR(255) NOT NULL, enabled TINYINT(1) NOT NULL, slug VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_CA57A1C7E25D857E (context), UNIQUE INDEX tag_context (slug, context), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
815
            );
816
            $connection->executeQuery(
817
                'CREATE TABLE classification__collection (id INT AUTO_INCREMENT NOT NULL, context VARCHAR(255) DEFAULT NULL, media_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, enabled TINYINT(1) NOT NULL, slug VARCHAR(255) NOT NULL, description VARCHAR(255) DEFAULT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_A406B56AE25D857E (context), INDEX IDX_A406B56AEA9FDD75 (media_id), UNIQUE INDEX tag_collection (slug, context), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
818
            );
819
            $connection->executeQuery(
820
                'CREATE TABLE media__gallery (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, context VARCHAR(64) NOT NULL, default_format VARCHAR(255) NOT NULL, enabled TINYINT(1) NOT NULL, updated_at DATETIME NOT NULL, created_at DATETIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
821
            );
822
            $connection->executeQuery(
823
                'CREATE TABLE media__media (id INT AUTO_INCREMENT NOT NULL, category_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, description TEXT DEFAULT NULL, enabled TINYINT(1) NOT NULL, provider_name VARCHAR(255) NOT NULL, provider_status INT NOT NULL, provider_reference VARCHAR(255) NOT NULL, provider_metadata LONGTEXT DEFAULT NULL COMMENT \'(DC2Type:json)\', width INT DEFAULT NULL, height INT DEFAULT NULL, length NUMERIC(10, 0) DEFAULT NULL, content_type VARCHAR(255) DEFAULT NULL, content_size INT DEFAULT NULL, copyright VARCHAR(255) DEFAULT NULL, author_name VARCHAR(255) DEFAULT NULL, context VARCHAR(64) DEFAULT NULL, cdn_is_flushable TINYINT(1) DEFAULT NULL, cdn_flush_identifier VARCHAR(64) DEFAULT NULL, cdn_flush_at DATETIME DEFAULT NULL, cdn_status INT DEFAULT NULL, updated_at DATETIME NOT NULL, created_at DATETIME NOT NULL, INDEX IDX_5C6DD74E12469DE2 (category_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
824
            );
825
            $connection->executeQuery(
826
                'CREATE TABLE media__gallery_media (id INT AUTO_INCREMENT NOT NULL, gallery_id INT DEFAULT NULL, media_id INT DEFAULT NULL, position INT NOT NULL, enabled TINYINT(1) NOT NULL, updated_at DATETIME NOT NULL, created_at DATETIME NOT NULL, INDEX IDX_80D4C5414E7AF8F (gallery_id), INDEX IDX_80D4C541EA9FDD75 (media_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'
827
            );
828
            $connection->executeQuery(
829
                'ALTER TABLE page__page ADD CONSTRAINT FK_2FAE39EDF6BD1646 FOREIGN KEY (site_id) REFERENCES page__site (id) ON DELETE CASCADE'
830
            );
831
            $connection->executeQuery(
832
                'ALTER TABLE page__page ADD CONSTRAINT FK_2FAE39ED727ACA70 FOREIGN KEY (parent_id) REFERENCES page__page (id) ON DELETE CASCADE'
833
            );
834
            $connection->executeQuery(
835
                'ALTER TABLE page__page ADD CONSTRAINT FK_2FAE39ED158E0B66 FOREIGN KEY (target_id) REFERENCES page__page (id) ON DELETE CASCADE'
836
            );
837
            $connection->executeQuery(
838
                'ALTER TABLE page__snapshot ADD CONSTRAINT FK_3963EF9AF6BD1646 FOREIGN KEY (site_id) REFERENCES page__site (id) ON DELETE CASCADE'
839
            );
840
            $connection->executeQuery(
841
                'ALTER TABLE page__snapshot ADD CONSTRAINT FK_3963EF9AC4663E4 FOREIGN KEY (page_id) REFERENCES page__page (id) ON DELETE CASCADE'
842
            );
843
            $connection->executeQuery(
844
                'ALTER TABLE page__bloc ADD CONSTRAINT FK_FCDC1A97727ACA70 FOREIGN KEY (parent_id) REFERENCES page__bloc (id) ON DELETE CASCADE'
845
            );
846
            $connection->executeQuery(
847
                'ALTER TABLE page__bloc ADD CONSTRAINT FK_FCDC1A97C4663E4 FOREIGN KEY (page_id) REFERENCES page__page (id) ON DELETE CASCADE'
848
            );
849
            $connection->executeQuery(
850
                'ALTER TABLE classification__category ADD CONSTRAINT FK_43629B36727ACA70 FOREIGN KEY (parent_id) REFERENCES classification__category (id) ON DELETE CASCADE'
851
            );
852
            $connection->executeQuery(
853
                'ALTER TABLE classification__category ADD CONSTRAINT FK_43629B36E25D857E FOREIGN KEY (context) REFERENCES classification__context (id)'
854
            );
855
            $connection->executeQuery(
856
                'ALTER TABLE classification__category ADD CONSTRAINT FK_43629B36EA9FDD75 FOREIGN KEY (media_id) REFERENCES media__media (id) ON DELETE SET NULL'
857
            );
858
            $connection->executeQuery(
859
                'ALTER TABLE classification__tag ADD CONSTRAINT FK_CA57A1C7E25D857E FOREIGN KEY (context) REFERENCES classification__context (id)'
860
            );
861
            $connection->executeQuery(
862
                'ALTER TABLE classification__collection ADD CONSTRAINT FK_A406B56AE25D857E FOREIGN KEY (context) REFERENCES classification__context (id)'
863
            );
864
            $connection->executeQuery(
865
                'ALTER TABLE classification__collection ADD CONSTRAINT FK_A406B56AEA9FDD75 FOREIGN KEY (media_id) REFERENCES media__media (id) ON DELETE SET NULL'
866
            );
867
            $connection->executeQuery(
868
                'ALTER TABLE media__media ADD CONSTRAINT FK_5C6DD74E12469DE2 FOREIGN KEY (category_id) REFERENCES classification__category (id) ON DELETE SET NULL'
869
            );
870
            $connection->executeQuery(
871
                'ALTER TABLE media__gallery_media ADD CONSTRAINT FK_80D4C5414E7AF8F FOREIGN KEY (gallery_id) REFERENCES media__gallery (id)'
872
            );
873
            $connection->executeQuery(
874
                'ALTER TABLE media__gallery_media ADD CONSTRAINT FK_80D4C541EA9FDD75 FOREIGN KEY (media_id) REFERENCES media__media (id)'
875
            );
876
877
            $connection->executeQuery("CREATE TABLE timeline__timeline (id INT AUTO_INCREMENT NOT NULL, action_id INT DEFAULT NULL, subject_id INT DEFAULT NULL, context VARCHAR(255) NOT NULL, type VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, INDEX IDX_FFBC6AD59D32F035 (action_id), INDEX IDX_FFBC6AD523EDC87 (subject_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;");
878
            $connection->executeQuery("CREATE TABLE timeline__component (id INT AUTO_INCREMENT NOT NULL, model VARCHAR(255) NOT NULL, identifier LONGTEXT NOT NULL COMMENT '(DC2Type:array)', hash VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_1B2F01CDD1B862B8 (hash), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;");
879
            $connection->executeQuery("CREATE TABLE timeline__action (id INT AUTO_INCREMENT NOT NULL, verb VARCHAR(255) NOT NULL, status_current VARCHAR(255) NOT NULL, status_wanted VARCHAR(255) NOT NULL, duplicate_key VARCHAR(255) DEFAULT NULL, duplicate_priority INT DEFAULT NULL, created_at DATETIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;");
880
            $connection->executeQuery("CREATE TABLE timeline__action_component (id INT AUTO_INCREMENT NOT NULL, action_id INT DEFAULT NULL, component_id INT DEFAULT NULL, type VARCHAR(255) NOT NULL, text VARCHAR(255) DEFAULT NULL, INDEX IDX_6ACD1B169D32F035 (action_id), INDEX IDX_6ACD1B16E2ABAFFF (component_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;");
881
            $connection->executeQuery("ALTER TABLE timeline__timeline ADD CONSTRAINT FK_FFBC6AD59D32F035 FOREIGN KEY (action_id) REFERENCES timeline__action (id);");
882
            $connection->executeQuery("ALTER TABLE timeline__timeline ADD CONSTRAINT FK_FFBC6AD523EDC87 FOREIGN KEY (subject_id) REFERENCES timeline__component (id) ON DELETE CASCADE;");
883
            $connection->executeQuery("ALTER TABLE timeline__action_component ADD CONSTRAINT FK_6ACD1B169D32F035 FOREIGN KEY (action_id) REFERENCES timeline__action (id) ON DELETE CASCADE;");
884
            $connection->executeQuery("ALTER TABLE timeline__action_component ADD CONSTRAINT FK_6ACD1B16E2ABAFFF FOREIGN KEY (component_id) REFERENCES timeline__component (id) ON DELETE CASCADE;");
885
            //$connection->executeQuery("CREATE UNIQUE INDEX UNIQ_8D93D649A0D96FBF ON user (email_canonical);");
886
            $connection->executeQuery("ALTER TABLE fos_group ADD name VARCHAR(255) NOT NULL;");
887
            $connection->executeQuery("ALTER TABLE fos_group ADD roles LONGTEXT NOT NULL COMMENT '(DC2Type:array)'");
888
889
            $connection->executeQuery("CREATE TABLE faq_question_translation (id INT AUTO_INCREMENT NOT NULL, translatable_id INT DEFAULT NULL, headline VARCHAR(255) NOT NULL, body LONGTEXT DEFAULT NULL, slug VARCHAR(50) NOT NULL, locale VARCHAR(255) NOT NULL, INDEX IDX_C2D1A2C2AC5D3 (translatable_id), UNIQUE INDEX faq_question_translation_unique_translation (translatable_id, locale), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;");
890
            $connection->executeQuery("CREATE TABLE faq_category_translation (id INT AUTO_INCREMENT NOT NULL, translatable_id INT DEFAULT NULL, headline VARCHAR(255) NOT NULL, body LONGTEXT DEFAULT NULL, slug VARCHAR(50) NOT NULL, locale VARCHAR(255) NOT NULL, INDEX IDX_5493B0FC2C2AC5D3 (translatable_id), UNIQUE INDEX faq_category_translation_unique_translation (translatable_id, locale), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;");
891
            $connection->executeQuery("CREATE TABLE faq_category (id INT AUTO_INCREMENT NOT NULL, rank INT NOT NULL, is_active TINYINT(1) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX is_active_idx (is_active), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;");
892
            $connection->executeQuery("CREATE TABLE faq_question (id INT AUTO_INCREMENT NOT NULL, category_id INT DEFAULT NULL, is_active TINYINT(1) NOT NULL, rank INT NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, only_auth_users TINYINT(1) NOT NULL, INDEX IDX_4A55B05912469DE2 (category_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;");
893
            $connection->executeQuery("ALTER TABLE faq_question_translation ADD CONSTRAINT FK_C2D1A2C2AC5D3 FOREIGN KEY (translatable_id) REFERENCES faq_question (id) ON DELETE CASCADE;");
894
            $connection->executeQuery("ALTER TABLE faq_category_translation ADD CONSTRAINT FK_5493B0FC2C2AC5D3 FOREIGN KEY (translatable_id) REFERENCES faq_category (id) ON DELETE CASCADE;");
895
            $connection->executeQuery("ALTER TABLE faq_question ADD CONSTRAINT FK_4A55B05912469DE2 FOREIGN KEY (category_id) REFERENCES faq_category (id);");
896
            */
897
898
            $sysPath = api_get_path(SYS_PATH);
899
900
            finishInstallation(
901
                $manager,
902
                $sysPath,
903
                $encryptPassForm,
904
                $passForm,
905
                $adminLastName,
906
                $adminFirstName,
907
                $loginForm,
908
                $emailForm,
909
                $adminPhoneForm,
910
                $languageForm,
911
                $institutionForm,
912
                $institutionUrlForm,
913
                $campusForm,
914
                $allowSelfReg,
915
                $allowSelfRegProf,
916
                $installationProfile
917
            );
918
919
            include 'install_files.inc.php';
920
        }
921
922
        display_after_install_message($installType);
923
924
        // Hide the "please wait" message sent previously
925
        echo '<script>$(\'#pleasewait\').hide(\'fast\');</script>';
926
    } elseif (@$_POST['step1'] || $badUpdatePath) {
927
        //STEP 1 : REQUIREMENTS
928
        //make sure that proposed path is set, shouldn't be necessary but...
929
        if (empty($proposedUpdatePath)) {
930
            $proposedUpdatePath = $_POST['updatePath'];
931
        }
932
        display_requirements($installType, $badUpdatePath, $proposedUpdatePath, $update_from_version_8);
933
    } else {
934
        // This is the start screen.
935
        display_language_selection();
936
        if (!empty($_GET['profile'])) {
937
            $installationProfile = api_htmlentities($_GET['profile'], ENT_QUOTES);
938
        }
939
        echo '<input type="hidden" name="installationProfile" value="'.api_htmlentities($installationProfile, ENT_QUOTES).'" />';
940
    }
941
942
$poweredBy = 'Powered by <a href="http://www.chamilo.org" target="_blank"> Chamilo </a> &copy; '.date('Y');
943
?>
944
          </form>
945
        </div>
946
        <div class="col-md-4">
947
            <div class="logo-install">
948
                <img src="<?php echo api_get_path(WEB_CSS_PATH); ?>themes/chamilo/images/header-logo.png" hspace="10" vspace="10" alt="Chamilo" />
949
            </div>
950
            <div class="well install-steps-menu">
951
                <ol>
952
                    <li <?php step_active('1'); ?>><?php echo get_lang('InstallationLanguage'); ?></li>
953
                    <li <?php step_active('2'); ?>><?php echo get_lang('Requirements'); ?></li>
954
                    <li <?php step_active('3'); ?>><?php echo get_lang('Licence'); ?></li>
955
                    <li <?php step_active('4'); ?>><?php echo get_lang('DBSetting'); ?></li>
956
                    <li <?php step_active('5'); ?>><?php echo get_lang('CfgSetting'); ?></li>
957
                    <li <?php step_active('6'); ?>><?php echo get_lang('PrintOverview'); ?></li>
958
                    <li <?php step_active('7'); ?>><?php echo get_lang('Installing'); ?></li>
959
                </ol>
960
            </div>
961
            <div id="note">
962
                <a class="btn btn-primary btn-block" href="<?php echo $installationGuideLink; ?>" target="_blank">
963
                    <em class="fa fa-file-text-o"></em> <?php echo get_lang('ReadTheInstallationGuide'); ?>
964
                </a>
965
            </div>
966
        </div>
967
        </div>
968
        </div>
969
970
        <div class="panel panel-default">
971
        <div class="panel-body">
972
            <div class="col-md-12">
973
                <div style="text-align: center;">
974
                    <?php echo $poweredBy; ?>
975
                </div>
976
            </div>
977
        </div>
978
        </div>
979
    </div>
980
  </div>
981
    <script type="text/javascript">
982
        $('#showPassword').on('change',function(){
983
            if($(this).prop('checked')){
984
                $('.form-control[name="passForm"]').attr('type','text');
985
                $('.showPasswordEye').removeClass('fa-eye').addClass('fa-eye-slash');
986
987
            }else{
988
                $('.form-control[name="passForm"]').attr('type','password');
989
                $('.showPasswordEye').addClass('fa-eye').removeClass('fa-eye-slash');
990
            }
991
        });
992
    </script>
993
</body>
994
</html>
995