Subversion Repositories oidplus

Rev

Rev 1031 | Rev 1055 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1031 Rev 1050
1
<?php
1
<?php
2
 
2
 
3
/*
3
/*
4
 * OIDplus 2.0
4
 * OIDplus 2.0
5
 * Copyright 2019 - 2022 Daniel Marschall, ViaThinkSoft
5
 * Copyright 2019 - 2022 Daniel Marschall, ViaThinkSoft
6
 *
6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
9
 * You may obtain a copy of the License at
10
 *
10
 *
11
 *     http://www.apache.org/licenses/LICENSE-2.0
11
 *     http://www.apache.org/licenses/LICENSE-2.0
12
 *
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
17
 * limitations under the License.
18
 */
18
 */
19
 
19
 
-
 
20
use ViaThinkSoft\OIDplus\OIDplus;
-
 
21
use ViaThinkSoft\OIDplus\OIDplusDatabasePlugin;
-
 
22
use ViaThinkSoft\OIDplus\OIDplusSqlSlangPlugin;
-
 
23
use ViaThinkSoft\OIDplus\OIDplusCaptchaPlugin;
-
 
24
 
20
require_once __DIR__ . '/../includes/oidplus.inc.php';
25
require_once __DIR__ . '/../includes/oidplus.inc.php';
21
 
26
 
22
define('BASECONFIG_FILE', 'userdata/baseconfig/config.inc.php');
27
define('BASECONFIG_FILE', 'userdata/baseconfig/config.inc.php');
23
$already_setup = file_exists(__DIR__.'/../'.BASECONFIG_FILE);
28
$already_setup = file_exists(__DIR__.'/../'.BASECONFIG_FILE);
24
 
29
 
25
OIDplus::handleLangArgument();
30
OIDplus::handleLangArgument();
26
 
31
 
27
echo '<!DOCTYPE html>';
32
echo '<!DOCTYPE html>';
28
echo '<html lang="'.substr(OIDplus::getCurrentLang(),0,2).'">';
33
echo '<html lang="'.substr(OIDplus::getCurrentLang(),0,2).'">';
29
 
34
 
30
echo '<head>';
35
echo '<head>';
31
echo '  <title>'._L('OIDplus Setup').'</title>';
36
echo '  <title>'._L('OIDplus Setup').'</title>';
32
echo '  <meta name="robots" content="noindex">';
37
echo '  <meta name="robots" content="noindex">';
33
echo '  <meta name="viewport" content="width=device-width, initial-scale=1.0">';
38
echo '  <meta name="viewport" content="width=device-width, initial-scale=1.0">';
34
echo '  <link rel="stylesheet" href="setup.min.css.php">';
39
echo '  <link rel="stylesheet" href="setup.min.css.php">';
35
echo '  <link rel="shortcut icon" type="image/x-icon" href="../favicon.ico.php">';
40
echo '  <link rel="shortcut icon" type="image/x-icon" href="../favicon.ico.php">';
36
echo '  <script src="setup.min.js.php" type="text/javascript"></script>';
41
echo '  <script src="setup.min.js.php" type="text/javascript"></script>';
37
echo '</head>';
42
echo '</head>';
38
 
43
 
39
echo '<body>';
44
echo '<body>';
40
 
45
 
41
echo '<h1>'._L('OIDplus Setup - Configuration File Generator').'</h1>';
46
echo '<h1>'._L('OIDplus Setup - Configuration File Generator').'</h1>';
42
 
47
 
43
echo '<noscript>';
48
echo '<noscript>';
44
echo '<h2>'._L('Please enable JavaScript in order to use setup!').'</h2>';
49
echo '<h2>'._L('Please enable JavaScript in order to use setup!').'</h2>';
45
echo '</noscript>';
50
echo '</noscript>';
46
 
51
 
47
echo '<span id="setupPageContent" style="display:None">';
52
echo '<span id="setupPageContent" style="display:None">';
48
 
53
 
49
echo OIDplus::gui()->getLanguageBox(null, false);
54
echo OIDplus::gui()->getLanguageBox(null, false);
50
 
55
 
51
echo '<p>';
56
echo '<p>';
52
if ($already_setup) {
57
if ($already_setup) {
53
        echo _L('This assistant will help you updating the file <b>%1</b>.',BASECONFIG_FILE);
58
        echo _L('This assistant will help you updating the file <b>%1</b>.',BASECONFIG_FILE);
54
} else {
59
} else {
55
        echo _L('Thank you very much for choosing OIDplus!');
60
        echo _L('Thank you very much for choosing OIDplus!');
56
        echo ' ';
61
        echo ' ';
57
        echo _L('This setup assistant will help you creating the file <b>%1</b>.',BASECONFIG_FILE);
62
        echo _L('This setup assistant will help you creating the file <b>%1</b>.',BASECONFIG_FILE);
58
}
63
}
59
echo ' ';
64
echo ' ';
60
echo _L('This assistant does not automatically write to this file. Instead, you need to copy-paste the contents into the file.');
65
echo _L('This assistant does not automatically write to this file. Instead, you need to copy-paste the contents into the file.');
61
echo ' ';
66
echo ' ';
62
if ($already_setup) {
67
if ($already_setup) {
63
        echo _L('Later, you can change the config file by hand, or run this assistant again.');
68
        echo _L('Later, you can change the config file by hand, or run this assistant again.');
64
} else {
69
} else {
65
        echo _L('Once OIDplus setup is finished, you can change the config file by hand, or run this setup assistant again.');
70
        echo _L('Once OIDplus setup is finished, you can change the config file by hand, or run this setup assistant again.');
66
}
71
}
67
echo '</p>';
72
echo '</p>';
68
 
73
 
69
echo '<h2 id="systemCheckCaption" style="display:none">'._L('System check').'</h2>';
74
echo '<h2 id="systemCheckCaption" style="display:none">'._L('System check').'</h2>';
70
echo '<div id="dirAccessWarning"></div>';
75
echo '<div id="dirAccessWarning"></div>';
71
 
76
 
72
echo '<div id="step1">';
77
echo '<div id="step1">';
73
echo '<h2>'._L('Step %1: Enter setup information',1).'</h2>';
78
echo '<h2>'._L('Step %1: Enter setup information',1).'</h2>';
74
 
79
 
75
// ----------------------------------------
80
// ----------------------------------------
76
 
81
 
77
echo '<h3>'._L('Administrator password').'</h3>';
82
echo '<h3>'._L('Administrator password').'</h3>';
78
 
83
 
79
echo '<form id="step1_form">';
84
echo '<form id="step1_form">';
80
echo '<p>'._L('Which admin password do you want?').'<br><input id="admin_password" type="password" autocomplete="new-password" onkeypress="rebuild()" onkeyup="rebuild()"> <span id="password_warn"></span></p>';
85
echo '<p>'._L('Which admin password do you want?').'<br><input id="admin_password" type="password" autocomplete="new-password" onkeypress="rebuild()" onkeyup="rebuild()"> <span id="password_warn"></span></p>';
81
echo '<p>'._L('Please repeat the password input:').'<br><input id="admin_password2" type="password" autocomplete="new-password" onkeypress="rebuild()" onkeyup="rebuild()"> <span id="password_warn2"></span></p>';
86
echo '<p>'._L('Please repeat the password input:').'<br><input id="admin_password2" type="password" autocomplete="new-password" onkeypress="rebuild()" onkeyup="rebuild()"> <span id="password_warn2"></span></p>';
82
 
87
 
83
// ----------------------------------------
88
// ----------------------------------------
84
 
89
 
85
echo '<h3>'._L('Database connectivity').'</h3>';
90
echo '<h3>'._L('Database connectivity').'</h3>';
86
 
91
 
87
if (file_exists(__DIR__ . '/../doc/database_connectivity_diagram.png')) {
92
if (file_exists(__DIR__ . '/../doc/database_connectivity_diagram.png')) {
88
        echo '<p><a href="../doc/database_connectivity_diagram.png" target="_blank"><img src="../doc/database_connectivity_diagram.png" width="20%" alt="'._L('Database connectivity diagram').'" title="'._L('Database connectivity diagram').'"></a></p>';
93
        echo '<p><a href="../doc/database_connectivity_diagram.png" target="_blank"><img src="../doc/database_connectivity_diagram.png" width="20%" alt="'._L('Database connectivity diagram').'" title="'._L('Database connectivity diagram').'"></a></p>';
89
}
94
}
90
 
95
 
91
echo _L('Database plugin').': <select name="db_plugin" onChange="dbplugin_changed()" id="db_plugin">';
96
echo _L('Database plugin').': <select name="db_plugin" onChange="dbplugin_changed()" id="db_plugin">';
92
 
97
 
93
OIDplus::registerAllPlugins('database', 'OIDplusDatabasePlugin', array('OIDplus','registerDatabasePlugin'));
98
OIDplus::registerAllPlugins('database', OIDplusDatabasePlugin::class, array(OIDplus::class,'registerDatabasePlugin'));
94
foreach (OIDplus::getDatabasePlugins() as $plugin) {
99
foreach (OIDplus::getDatabasePlugins() as $plugin) {
95
        $selected = $plugin::id() == 'MySQL' ? ' selected="true"' : '';
100
        $selected = $plugin::id() == 'MySQL' ? ' selected="true"' : '';
96
        echo '<option value="'.htmlentities($plugin::id()).'"'.$selected.'>'.htmlentities($plugin::id()).'</option>';
101
        echo '<option value="'.htmlentities($plugin::id()).'"'.$selected.'>'.htmlentities($plugin::id()).'</option>';
97
}
102
}
98
 
103
 
99
echo '</select>';
104
echo '</select>';
100
 
105
 
101
echo '<div style="margin-left:50px">';
106
echo '<div style="margin-left:50px">';
102
 
107
 
103
OIDplus::registerAllPlugins('sqlSlang', 'OIDplusSqlSlangPlugin', array('OIDplus','registerSqlSlangPlugin'));
108
OIDplus::registerAllPlugins('sqlSlang', OIDplusSqlSlangPlugin::class, array(OIDplus::class,'registerSqlSlangPlugin'));
104
$sql_slang_selection = array();
109
$sql_slang_selection = array();
105
foreach (OIDplus::getSqlSlangPlugins() as $plugin) {
110
foreach (OIDplus::getSqlSlangPlugins() as $plugin) {
106
        $slang_id = $plugin::id();
111
        $slang_id = $plugin::id();
107
        $pluginManifest = $plugin->getManifest();
112
        $pluginManifest = $plugin->getManifest();
108
        $human_friendly_name = empty($pluginManifest->getName()) ? get_class($plugin) : $pluginManifest->getName();
113
        $human_friendly_name = empty($pluginManifest->getName()) ? get_class($plugin) : $pluginManifest->getName();
109
        $sql_slang_selection[] = '<option value="'.$slang_id.'">'.$human_friendly_name.'</option>';
114
        $sql_slang_selection[] = '<option value="'.$slang_id.'">'.$human_friendly_name.'</option>';
110
}
115
}
111
$sql_slang_selection = implode("\n", $sql_slang_selection);
116
$sql_slang_selection = implode("\n", $sql_slang_selection);
112
 
117
 
113
$found_db_plugins = 0;
118
$found_db_plugins = 0;
114
//OIDplus::registerAllPlugins('database', 'OIDplusDatabasePlugin', array('OIDplus','registerDatabasePlugin'));
119
//OIDplus::registerAllPlugins('database', OIDplusDatabasePlugin::class, array(OIDplus::class,'registerDatabasePlugin'));
115
foreach (OIDplus::getDatabasePlugins() as $plugin) {
120
foreach (OIDplus::getDatabasePlugins() as $plugin) {
116
        $found_db_plugins++;
121
        $found_db_plugins++;
117
        $cont = $plugin->setupHTML();
122
        $cont = $plugin->setupHTML();
118
        $cont = str_replace('<!-- %SQL_SLANG_SELECTION% -->', $sql_slang_selection, $cont);
123
        $cont = str_replace('<!-- %SQL_SLANG_SELECTION% -->', $sql_slang_selection, $cont);
119
        echo $cont;
124
        echo $cont;
120
}
125
}
121
 
126
 
122
if ($found_db_plugins == 0) {
127
if ($found_db_plugins == 0) {
123
        echo '<p><font color="red">'._L('ERROR: No database plugins were found! You CANNOT use OIDplus without database connection.').'</font></p>';
128
        echo '<p><font color="red">'._L('ERROR: No database plugins were found! You CANNOT use OIDplus without database connection.').'</font></p>';
124
}
129
}
125
 
130
 
126
echo '</div>';
131
echo '</div>';
127
 
132
 
128
echo '<p>'._L('Table name prefix (e.g. <b>oidplus_</b>)').':<br><input id="tablename_prefix" type="text" value="oidplus_" onkeypress="rebuild()" onkeyup="rebuild()"></p>';
133
echo '<p>'._L('Table name prefix (e.g. <b>oidplus_</b>)').':<br><input id="tablename_prefix" type="text" value="oidplus_" onkeypress="rebuild()" onkeyup="rebuild()"></p>';
129
 
134
 
130
// ----------------------------------------
135
// ----------------------------------------
131
 
136
 
132
echo '<h3>'._L('CAPTCHA').'</h3>';
137
echo '<h3>'._L('CAPTCHA').'</h3>';
133
 
138
 
134
// TODO: Add a small explanation here, in case somebody does not know what CAPTCHA is
139
// TODO: Add a small explanation here, in case somebody does not know what CAPTCHA is
135
 
140
 
136
echo _L('CAPTCHA plugin').': <select name="captcha_plugin" onChange="captchaplugin_changed()" id="captcha_plugin">';
141
echo _L('CAPTCHA plugin').': <select name="captcha_plugin" onChange="captchaplugin_changed()" id="captcha_plugin">';
137
 
142
 
138
OIDplus::registerAllPlugins('captcha', 'OIDplusCaptchaPlugin', array('OIDplus','registerCaptchaPlugin'));
143
OIDplus::registerAllPlugins('captcha', OIDplusCaptchaPlugin::class, array(OIDplus::class,'registerCaptchaPlugin'));
139
foreach (OIDplus::getCaptchaPlugins() as $plugin) {
144
foreach (OIDplus::getCaptchaPlugins() as $plugin) {
140
        $selected = strtolower($plugin::id()) === strtolower('None') ? ' selected="true"' : ''; // select "None" by default
145
        $selected = strtolower($plugin::id()) === strtolower('None') ? ' selected="true"' : ''; // select "None" by default
141
        echo '<option value="'.htmlentities($plugin::id()).'"'.$selected.'>'.htmlentities($plugin::id()).'</option>';
146
        echo '<option value="'.htmlentities($plugin::id()).'"'.$selected.'>'.htmlentities($plugin::id()).'</option>';
142
}
147
}
143
 
148
 
144
echo '</select>';
149
echo '</select>';
145
 
150
 
146
echo '<div style="margin-left:50px">';
151
echo '<div style="margin-left:50px">';
147
 
152
 
148
$found_captcha_plugins = 0;
153
$found_captcha_plugins = 0;
149
foreach (OIDplus::getCaptchaPlugins() as $plugin) {
154
foreach (OIDplus::getCaptchaPlugins() as $plugin) {
150
        $found_captcha_plugins++;
155
        $found_captcha_plugins++;
151
        $cont = $plugin->setupHTML();
156
        $cont = $plugin->setupHTML();
152
        echo $cont;
157
        echo $cont;
153
}
158
}
154
 
159
 
155
if ($found_captcha_plugins == 0) {
160
if ($found_captcha_plugins == 0) {
156
        echo '<p><font color="red">'._L('ERROR: No CAPTCHA plugins were found! You CANNOT use OIDplus without the "%1" CAPTCHA plugin.','None').'</font></p>';
161
        echo '<p><font color="red">'._L('ERROR: No CAPTCHA plugins were found! You CANNOT use OIDplus without the "%1" CAPTCHA plugin.','None').'</font></p>';
157
}
162
}
158
 
163
 
159
echo '</div>';
164
echo '</div>';
160
 
165
 
161
// ----------------------------------------
166
// ----------------------------------------
162
 
167
 
163
$is_ssl = OIDplus::isSSL();
168
$is_ssl = OIDplus::isSSL();
164
echo '<h3>'._L('Secure connection (HTTPS)').'</h3>';
169
echo '<h3>'._L('Secure connection (HTTPS)').'</h3>';
165
echo '<p>'._L('Enforcement of a secure connection:').'<br><select name="enforce_ssl" id="enforce_ssl" onchange="rebuild()">';
170
echo '<p>'._L('Enforcement of a secure connection:').'<br><select name="enforce_ssl" id="enforce_ssl" onchange="rebuild()">';
166
echo '<option value="OIDplus::ENFORCE_SSL_NO">'._L('No SSL available (don\'t redirect)').'</option>';
171
echo '<option value="OIDplus::ENFORCE_SSL_NO">'._L('No SSL available (don\'t redirect)').'</option>';
167
echo '<option value="OIDplus::ENFORCE_SSL_YES"'.($is_ssl ? ' selected' : '').'>'._L('Enforce SSL (always redirect)').'</option>';
172
echo '<option value="OIDplus::ENFORCE_SSL_YES"'.($is_ssl ? ' selected' : '').'>'._L('Enforce SSL (always redirect)').'</option>';
168
echo '<option value="OIDplus::ENFORCE_SSL_AUTO"'.(!$is_ssl ? ' selected' : '').'>'._L('Intelligent SSL detection (redirect if port 443 is open)').'</option>';
173
echo '<option value="OIDplus::ENFORCE_SSL_AUTO"'.(!$is_ssl ? ' selected' : '').'>'._L('Intelligent SSL detection (redirect if port 443 is open)').'</option>';
169
echo '</select></p>';
174
echo '</select></p>';
170
 
175
 
171
// ----------------------------------------
176
// ----------------------------------------
172
 
177
 
173
echo '<h3>'._L('Public URL of this system (Canonical URL)').'</h3>';
178
echo '<h3>'._L('Public URL of this system (Canonical URL)').'</h3>';
174
 
179
 
175
echo '<p><input id="canonical_url" type="text" value="'.htmlentities(OIDplus::webpath(null,OIDplus::PATH_ABSOLUTE_CANONICAL)).'" onkeypress="rebuild()" onkeyup="rebuild()" style="width:550px"></p>';
180
echo '<p><input id="canonical_url" type="text" value="'.htmlentities(OIDplus::webpath(null,OIDplus::PATH_ABSOLUTE_CANONICAL)).'" onkeypress="rebuild()" onkeyup="rebuild()" style="width:550px"></p>';
176
 
181
 
177
// ----------------------------------------
182
// ----------------------------------------
178
 
183
 
179
echo '</form>';
184
echo '</form>';
180
echo '</div>';
185
echo '</div>';
181
 
186
 
182
echo '<div id="step2">';
187
echo '<div id="step2">';
183
echo '<h2>'._L('Step %1: Initialize database',2).'</h2>';
188
echo '<h2>'._L('Step %1: Initialize database',2).'</h2>';
184
if ($already_setup) {
189
if ($already_setup) {
185
        echo '<p><input type="checkbox" id="step2_enable"> <label for="step2_enable"><font color="red">'._L('Re-Install database (all data will be deleted)').'</font></label></p>';
190
        echo '<p><input type="checkbox" id="step2_enable"> <label for="step2_enable"><font color="red">'._L('Re-Install database (all data will be deleted)').'</font></label></p>';
186
}
191
}
187
echo '<div id="step2_inner">';
192
echo '<div id="step2_inner">';
188
echo '<p>'._L('Please import one of the following SQL dumps in your database:').'</p>';
193
echo '<p>'._L('Please import one of the following SQL dumps in your database:').'</p>';
189
echo '<p><ul>';
194
echo '<p><ul>';
190
echo '  <li><a href="struct_empty.sql.php" id="struct_1" target="_blank">'._L('Empty OIDplus database without example data').'</a><span id="struct_cli_1"></span><br><br></li>';
195
echo '  <li><a href="struct_empty.sql.php" id="struct_1" target="_blank">'._L('Empty OIDplus database without example data').'</a><span id="struct_cli_1"></span><br><br></li>';
191
echo '  <li><a href="struct_with_examples.sql.php" id="struct_2" target="_blank">'._L('OIDplus database with example data').'</a><span id="struct_cli_2"></span><br><br></li>';
196
echo '  <li><a href="struct_with_examples.sql.php" id="struct_2" target="_blank">'._L('OIDplus database with example data').'</a><span id="struct_cli_2"></span><br><br></li>';
192
echo '</ul></p>';
197
echo '</ul></p>';
193
echo '<p><font color="red">'._L('Warning: Existing OIDplus data will be deleted during the initialization of the database.').'</font></p>';
198
echo '<p><font color="red">'._L('Warning: Existing OIDplus data will be deleted during the initialization of the database.').'</font></p>';
194
echo '</div>';
199
echo '</div>';
195
if ($already_setup) {
200
if ($already_setup) {
196
        echo '<script>';
201
        echo '<script>';
197
        echo '$("#step2_enable").click(function() {';
202
        echo '$("#step2_enable").click(function() {';
198
        echo '    if ($(this).is(":checked")) {';
203
        echo '    if ($(this).is(":checked")) {';
199
        echo '        $("#step2_inner").show();';
204
        echo '        $("#step2_inner").show();';
200
        echo '    } else {';
205
        echo '    } else {';
201
        echo '        $("#step2_inner").hide();';
206
        echo '        $("#step2_inner").hide();';
202
        echo '    }';
207
        echo '    }';
203
        echo '});';
208
        echo '});';
204
        echo '$("#step2_inner").hide();';
209
        echo '$("#step2_inner").hide();';
205
        echo '</script>';
210
        echo '</script>';
206
}
211
}
207
echo '</div>';
212
echo '</div>';
208
 
213
 
209
// ----------------------------------------
214
// ----------------------------------------
210
 
215
 
211
echo '<div id="step3">';
216
echo '<div id="step3">';
212
echo '<h2>'._L('Step %1: Save %2 file',3,BASECONFIG_FILE).'</h2>';
217
echo '<h2>'._L('Step %1: Save %2 file',3,BASECONFIG_FILE).'</h2>';
213
echo '<p>'._L('Save following contents into the file <b>%1</b>',BASECONFIG_FILE).'</p>';
218
echo '<p>'._L('Save following contents into the file <b>%1</b>',BASECONFIG_FILE).'</p>';
214
echo '<code><font color="darkblue"><div id="config"></div></font></code>';
219
echo '<code><font color="darkblue"><div id="config"></div></font></code>';
215
echo '<p><input type="button" value="'._L('Copy to clipboard').'" onClick="copyToClipboard(config)"></p>';
220
echo '<p><input type="button" value="'._L('Copy to clipboard').'" onClick="copyToClipboard(config)"></p>';
216
echo '</div>';
221
echo '</div>';
217
 
222
 
218
// ----------------------------------------
223
// ----------------------------------------
219
 
224
 
220
echo '<div id="step4">';
225
echo '<div id="step4">';
221
if ($already_setup) {
226
if ($already_setup) {
222
        echo '<h2>'._L('Step %1: Start OIDplus',4).'</h2>';
227
        echo '<h2>'._L('Step %1: Start OIDplus',4).'</h2>';
223
} else {
228
} else {
224
        echo '<h2>'._L('Step %1: Continue to next step',4).'</h2>';
229
        echo '<h2>'._L('Step %1: Continue to next step',4).'</h2>';
225
}
230
}
226
echo '<p><input type="button" onclick="window.location.href=\'../\'" value="'._L('Continue').'"></p>';
231
echo '<p><input type="button" onclick="window.location.href=\'../\'" value="'._L('Continue').'"></p>';
227
echo '</div>';
232
echo '</div>';
228
 
233
 
229
echo '<br><br><br>'; // because of iPhone Safari
234
echo '<br><br><br>'; // because of iPhone Safari
230
 
235
 
231
echo '</span>';
236
echo '</span>';
232
echo '<script> $("#setupPageContent")[0].style.display = "Block"; </script>';
237
echo '<script> $("#setupPageContent")[0].style.display = "Block"; </script>';
233
 
238
 
234
echo '</body>';
239
echo '</body>';
235
echo '</html>';
240
echo '</html>';
236
 
241