443
by dcoles
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0 |
1 |
<?php
|
2 |
/**
|
|
3 |
*
|
|
4 |
* @package install
|
|
5 |
* @version $Id: install_install.php,v 1.180 2007/11/19 16:44:30 acydburn Exp $
|
|
6 |
* @copyright (c) 2005 phpBB Group
|
|
7 |
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
|
8 |
*
|
|
9 |
*/
|
|
10 |
||
11 |
/**
|
|
12 |
*/
|
|
13 |
if (!defined('IN_INSTALL')) |
|
14 |
{
|
|
15 |
// Someone has tried to access the file direct. This is not a good idea, so exit
|
|
16 |
exit; |
|
17 |
}
|
|
18 |
||
19 |
if (!empty($setmodules)) |
|
20 |
{
|
|
21 |
// If phpBB is already installed we do not include this module
|
|
22 |
if (@file_exists($phpbb_root_path . 'config.' . $phpEx) && !file_exists($phpbb_root_path . 'cache/install_lock')) |
|
23 |
{
|
|
24 |
include_once($phpbb_root_path . 'config.' . $phpEx); |
|
25 |
||
26 |
if (defined('PHPBB_INSTALLED')) |
|
27 |
{
|
|
28 |
return; |
|
29 |
}
|
|
30 |
}
|
|
31 |
||
32 |
$module[] = array( |
|
33 |
'module_type' => 'install', |
|
34 |
'module_title' => 'INSTALL', |
|
35 |
'module_filename' => substr(basename(__FILE__), 0, -strlen($phpEx)-1), |
|
36 |
'module_order' => 10, |
|
37 |
'module_subs' => '', |
|
38 |
'module_stages' => array('INTRO', 'REQUIREMENTS', 'DATABASE', 'ADMINISTRATOR', 'CONFIG_FILE', 'ADVANCED', 'CREATE_TABLE', 'FINAL'), |
|
39 |
'module_reqs' => '' |
|
40 |
);
|
|
41 |
}
|
|
42 |
||
43 |
/**
|
|
44 |
* Installation
|
|
45 |
* @package install
|
|
46 |
*/
|
|
47 |
class install_install extends module |
|
48 |
{
|
|
49 |
function install_install(&$p_master) |
|
50 |
{
|
|
51 |
$this->p_master = &$p_master; |
|
52 |
}
|
|
53 |
||
54 |
function main($mode, $sub) |
|
55 |
{
|
|
56 |
global $lang, $template, $language, $phpbb_root_path; |
|
57 |
||
58 |
switch ($sub) |
|
59 |
{
|
|
60 |
case 'intro': |
|
61 |
$this->page_title = $lang['SUB_INTRO']; |
|
62 |
||
63 |
$template->assign_vars(array( |
|
64 |
'TITLE' => $lang['INSTALL_INTRO'], |
|
65 |
'BODY' => $lang['INSTALL_INTRO_BODY'], |
|
66 |
'L_SUBMIT' => $lang['NEXT_STEP'], |
|
67 |
'S_LANG_SELECT' => '<select id="language" name="language">' . $this->p_master->inst_language_select($language) . '</select>', |
|
68 |
'U_ACTION' => $this->p_master->module_url . "?mode=$mode&sub=requirements&language=$language", |
|
69 |
));
|
|
70 |
||
71 |
break; |
|
72 |
||
73 |
case 'requirements': |
|
74 |
$this->check_server_requirements($mode, $sub); |
|
75 |
||
76 |
break; |
|
77 |
||
78 |
case 'database': |
|
79 |
$this->obtain_database_settings($mode, $sub); |
|
80 |
||
81 |
break; |
|
82 |
||
83 |
case 'administrator': |
|
84 |
$this->obtain_admin_settings($mode, $sub); |
|
85 |
||
86 |
break; |
|
87 |
||
88 |
case 'config_file': |
|
89 |
$this->create_config_file($mode, $sub); |
|
90 |
||
91 |
break; |
|
92 |
||
93 |
case 'advanced': |
|
94 |
$this->obtain_advanced_settings($mode, $sub); |
|
95 |
||
96 |
break; |
|
97 |
||
98 |
case 'create_table': |
|
99 |
$this->load_schema($mode, $sub); |
|
100 |
break; |
|
101 |
||
102 |
case 'final': |
|
103 |
$this->build_search_index($mode, $sub); |
|
104 |
$this->add_modules($mode, $sub); |
|
105 |
$this->add_language($mode, $sub); |
|
106 |
$this->add_bots($mode, $sub); |
|
107 |
$this->email_admin($mode, $sub); |
|
108 |
||
109 |
// Remove the lock file
|
|
110 |
@unlink($phpbb_root_path . 'cache/install_lock'); |
|
111 |
||
112 |
break; |
|
113 |
}
|
|
114 |
||
115 |
$this->tpl_name = 'install_install'; |
|
116 |
}
|
|
117 |
||
118 |
/**
|
|
119 |
* Checks that the server we are installing on meets the requirements for running phpBB
|
|
120 |
*/
|
|
121 |
function check_server_requirements($mode, $sub) |
|
122 |
{
|
|
123 |
global $lang, $template, $phpbb_root_path, $phpEx, $language; |
|
124 |
||
125 |
$this->page_title = $lang['STAGE_REQUIREMENTS']; |
|
126 |
||
127 |
$template->assign_vars(array( |
|
128 |
'TITLE' => $lang['REQUIREMENTS_TITLE'], |
|
129 |
'BODY' => $lang['REQUIREMENTS_EXPLAIN'], |
|
130 |
));
|
|
131 |
||
132 |
$passed = array('php' => false, 'db' => false, 'files' => false, 'pcre' => false, 'imagesize' => false,); |
|
133 |
||
134 |
// Test for basic PHP settings
|
|
135 |
$template->assign_block_vars('checks', array( |
|
136 |
'S_LEGEND' => true, |
|
137 |
'LEGEND' => $lang['PHP_SETTINGS'], |
|
138 |
'LEGEND_EXPLAIN' => $lang['PHP_SETTINGS_EXPLAIN'], |
|
139 |
));
|
|
140 |
||
141 |
// Test the minimum PHP version
|
|
142 |
$php_version = PHP_VERSION; |
|
143 |
||
144 |
if (version_compare($php_version, '4.3.3') < 0) |
|
145 |
{
|
|
146 |
$result = '<strong style="color:red">' . $lang['NO'] . '</strong>'; |
|
147 |
}
|
|
148 |
else
|
|
149 |
{
|
|
150 |
$passed['php'] = true; |
|
151 |
||
152 |
// We also give feedback on whether we're running in safe mode
|
|
153 |
$result = '<strong style="color:green">' . $lang['YES']; |
|
154 |
if (@ini_get('safe_mode') || strtolower(@ini_get('safe_mode')) == 'on') |
|
155 |
{
|
|
156 |
$result .= ', ' . $lang['PHP_SAFE_MODE']; |
|
157 |
}
|
|
158 |
$result .= '</strong>'; |
|
159 |
}
|
|
160 |
||
161 |
$template->assign_block_vars('checks', array( |
|
162 |
'TITLE' => $lang['PHP_VERSION_REQD'], |
|
163 |
'RESULT' => $result, |
|
164 |
||
165 |
'S_EXPLAIN' => false, |
|
166 |
'S_LEGEND' => false, |
|
167 |
));
|
|
168 |
||
169 |
// Check for register_globals being enabled
|
|
170 |
if (@ini_get('register_globals') == '1' || strtolower(@ini_get('register_globals')) == 'on') |
|
171 |
{
|
|
172 |
$result = '<strong style="color:red">' . $lang['NO'] . '</strong>'; |
|
173 |
}
|
|
174 |
else
|
|
175 |
{
|
|
176 |
$result = '<strong style="color:green">' . $lang['YES'] . '</strong>'; |
|
177 |
}
|
|
178 |
||
179 |
$template->assign_block_vars('checks', array( |
|
180 |
'TITLE' => $lang['PHP_REGISTER_GLOBALS'], |
|
181 |
'TITLE_EXPLAIN' => $lang['PHP_REGISTER_GLOBALS_EXPLAIN'], |
|
182 |
'RESULT' => $result, |
|
183 |
||
184 |
'S_EXPLAIN' => true, |
|
185 |
'S_LEGEND' => false, |
|
186 |
));
|
|
187 |
||
188 |
||
189 |
// Check for url_fopen
|
|
190 |
if (@ini_get('allow_url_fopen') == '1' || strtolower(@ini_get('allow_url_fopen')) == 'on') |
|
191 |
{
|
|
192 |
$result = '<strong style="color:green">' . $lang['YES'] . '</strong>'; |
|
193 |
}
|
|
194 |
else
|
|
195 |
{
|
|
196 |
$result = '<strong style="color:red">' . $lang['NO'] . '</strong>'; |
|
197 |
}
|
|
198 |
||
199 |
$template->assign_block_vars('checks', array( |
|
200 |
'TITLE' => $lang['PHP_URL_FOPEN_SUPPORT'], |
|
201 |
'TITLE_EXPLAIN' => $lang['PHP_URL_FOPEN_SUPPORT_EXPLAIN'], |
|
202 |
'RESULT' => $result, |
|
203 |
||
204 |
'S_EXPLAIN' => true, |
|
205 |
'S_LEGEND' => false, |
|
206 |
));
|
|
207 |
||
208 |
||
209 |
// Check for getimagesize
|
|
210 |
if (@function_exists('getimagesize')) |
|
211 |
{
|
|
212 |
$passed['imagesize'] = true; |
|
213 |
$result = '<strong style="color:green">' . $lang['YES'] . '</strong>'; |
|
214 |
}
|
|
215 |
else
|
|
216 |
{
|
|
217 |
$result = '<strong style="color:red">' . $lang['NO'] . '</strong>'; |
|
218 |
}
|
|
219 |
||
220 |
$template->assign_block_vars('checks', array( |
|
221 |
'TITLE' => $lang['PHP_GETIMAGESIZE_SUPPORT'], |
|
222 |
'TITLE_EXPLAIN' => $lang['PHP_GETIMAGESIZE_SUPPORT_EXPLAIN'], |
|
223 |
'RESULT' => $result, |
|
224 |
||
225 |
'S_EXPLAIN' => true, |
|
226 |
'S_LEGEND' => false, |
|
227 |
));
|
|
228 |
||
229 |
// Check for PCRE UTF-8 support
|
|
230 |
if (@preg_match('//u', '')) |
|
231 |
{
|
|
232 |
$passed['pcre'] = true; |
|
233 |
$result = '<strong style="color:green">' . $lang['YES'] . '</strong>'; |
|
234 |
}
|
|
235 |
else
|
|
236 |
{
|
|
237 |
$result = '<strong style="color:red">' . $lang['NO'] . '</strong>'; |
|
238 |
}
|
|
239 |
||
240 |
$template->assign_block_vars('checks', array( |
|
241 |
'TITLE' => $lang['PCRE_UTF_SUPPORT'], |
|
242 |
'TITLE_EXPLAIN' => $lang['PCRE_UTF_SUPPORT_EXPLAIN'], |
|
243 |
'RESULT' => $result, |
|
244 |
||
245 |
'S_EXPLAIN' => true, |
|
246 |
'S_LEGEND' => false, |
|
247 |
));
|
|
248 |
||
249 |
/**
|
|
250 |
* Better not enabling and adding to the loaded extensions due to the specific requirements needed
|
|
251 |
if (!@extension_loaded('mbstring'))
|
|
252 |
{
|
|
253 |
can_load_dll('mbstring');
|
|
254 |
}
|
|
255 |
*/
|
|
256 |
||
257 |
$passed['mbstring'] = true; |
|
258 |
if (@extension_loaded('mbstring')) |
|
259 |
{
|
|
260 |
// Test for available database modules
|
|
261 |
$template->assign_block_vars('checks', array( |
|
262 |
'S_LEGEND' => true, |
|
263 |
'LEGEND' => $lang['MBSTRING_CHECK'], |
|
264 |
'LEGEND_EXPLAIN' => $lang['MBSTRING_CHECK_EXPLAIN'], |
|
265 |
));
|
|
266 |
||
267 |
$checks = array( |
|
268 |
array('func_overload', '&', MB_OVERLOAD_MAIL|MB_OVERLOAD_STRING), |
|
269 |
array('encoding_translation', '!=', 0), |
|
270 |
array('http_input', '!=', 'pass'), |
|
271 |
array('http_output', '!=', 'pass') |
|
272 |
);
|
|
273 |
||
274 |
foreach ($checks as $mb_checks) |
|
275 |
{
|
|
276 |
$ini_val = @ini_get('mbstring.' . $mb_checks[0]); |
|
277 |
switch ($mb_checks[1]) |
|
278 |
{
|
|
279 |
case '&': |
|
280 |
if (intval($ini_val) & $mb_checks[2]) |
|
281 |
{
|
|
282 |
$result = '<strong style="color:red">' . $lang['NO'] . '</strong>'; |
|
283 |
$passed['mbstring'] = false; |
|
284 |
}
|
|
285 |
else
|
|
286 |
{
|
|
287 |
$result = '<strong style="color:green">' . $lang['YES'] . '</strong>'; |
|
288 |
}
|
|
289 |
break; |
|
290 |
||
291 |
case '!=': |
|
292 |
if ($ini_val != $mb_checks[2]) |
|
293 |
{
|
|
294 |
$result = '<strong style="color:red">' . $lang['NO'] . '</strong>'; |
|
295 |
$passed['mbstring'] = false; |
|
296 |
}
|
|
297 |
else
|
|
298 |
{
|
|
299 |
$result = '<strong style="color:green">' . $lang['YES'] . '</strong>'; |
|
300 |
}
|
|
301 |
break; |
|
302 |
}
|
|
303 |
$template->assign_block_vars('checks', array( |
|
304 |
'TITLE' => $lang['MBSTRING_' . strtoupper($mb_checks[0])], |
|
305 |
'TITLE_EXPLAIN' => $lang['MBSTRING_' . strtoupper($mb_checks[0]) . '_EXPLAIN'], |
|
306 |
'RESULT' => $result, |
|
307 |
||
308 |
'S_EXPLAIN' => true, |
|
309 |
'S_LEGEND' => false, |
|
310 |
));
|
|
311 |
}
|
|
312 |
}
|
|
313 |
||
314 |
// Test for available database modules
|
|
315 |
$template->assign_block_vars('checks', array( |
|
316 |
'S_LEGEND' => true, |
|
317 |
'LEGEND' => $lang['PHP_SUPPORTED_DB'], |
|
318 |
'LEGEND_EXPLAIN' => $lang['PHP_SUPPORTED_DB_EXPLAIN'], |
|
319 |
));
|
|
320 |
||
321 |
$available_dbms = get_available_dbms(false, true); |
|
322 |
$passed['db'] = $available_dbms['ANY_DB_SUPPORT']; |
|
323 |
unset($available_dbms['ANY_DB_SUPPORT']); |
|
324 |
||
325 |
foreach ($available_dbms as $db_name => $db_ary) |
|
326 |
{
|
|
327 |
if (!$db_ary['AVAILABLE']) |
|
328 |
{
|
|
329 |
$template->assign_block_vars('checks', array( |
|
330 |
'TITLE' => $lang['DLL_' . strtoupper($db_name)], |
|
331 |
'RESULT' => '<span style="color:red">' . $lang['UNAVAILABLE'] . '</span>', |
|
332 |
||
333 |
'S_EXPLAIN' => false, |
|
334 |
'S_LEGEND' => false, |
|
335 |
));
|
|
336 |
}
|
|
337 |
else
|
|
338 |
{
|
|
339 |
$template->assign_block_vars('checks', array( |
|
340 |
'TITLE' => $lang['DLL_' . strtoupper($db_name)], |
|
341 |
'RESULT' => '<strong style="color:green">' . $lang['AVAILABLE'] . '</strong>', |
|
342 |
||
343 |
'S_EXPLAIN' => false, |
|
344 |
'S_LEGEND' => false, |
|
345 |
));
|
|
346 |
}
|
|
347 |
}
|
|
348 |
||
349 |
// Test for other modules
|
|
350 |
$template->assign_block_vars('checks', array( |
|
351 |
'S_LEGEND' => true, |
|
352 |
'LEGEND' => $lang['PHP_OPTIONAL_MODULE'], |
|
353 |
'LEGEND_EXPLAIN' => $lang['PHP_OPTIONAL_MODULE_EXPLAIN'], |
|
354 |
));
|
|
355 |
||
356 |
foreach ($this->php_dlls_other as $dll) |
|
357 |
{
|
|
358 |
if (!@extension_loaded($dll)) |
|
359 |
{
|
|
360 |
if (!can_load_dll($dll)) |
|
361 |
{
|
|
362 |
$template->assign_block_vars('checks', array( |
|
363 |
'TITLE' => $lang['DLL_' . strtoupper($dll)], |
|
364 |
'RESULT' => '<strong style="color:red">' . $lang['UNAVAILABLE'] . '</strong>', |
|
365 |
||
366 |
'S_EXPLAIN' => false, |
|
367 |
'S_LEGEND' => false, |
|
368 |
));
|
|
369 |
continue; |
|
370 |
}
|
|
371 |
}
|
|
372 |
||
373 |
$template->assign_block_vars('checks', array( |
|
374 |
'TITLE' => $lang['DLL_' . strtoupper($dll)], |
|
375 |
'RESULT' => '<strong style="color:green">' . $lang['AVAILABLE'] . '</strong>', |
|
376 |
||
377 |
'S_EXPLAIN' => false, |
|
378 |
'S_LEGEND' => false, |
|
379 |
));
|
|
380 |
}
|
|
381 |
||
382 |
// Can we find Imagemagick anywhere on the system?
|
|
383 |
$exe = (DIRECTORY_SEPARATOR == '\\') ? '.exe' : ''; |
|
384 |
||
385 |
$magic_home = getenv('MAGICK_HOME'); |
|
386 |
$img_imagick = ''; |
|
387 |
if (empty($magic_home)) |
|
388 |
{
|
|
389 |
$locations = array('C:/WINDOWS/', 'C:/WINNT/', 'C:/WINDOWS/SYSTEM/', 'C:/WINNT/SYSTEM/', 'C:/WINDOWS/SYSTEM32/', 'C:/WINNT/SYSTEM32/', '/usr/bin/', '/usr/sbin/', '/usr/local/bin/', '/usr/local/sbin/', '/opt/', '/usr/imagemagick/', '/usr/bin/imagemagick/'); |
|
390 |
$path_locations = str_replace('\\', '/', (explode(($exe) ? ';' : ':', getenv('PATH')))); |
|
391 |
||
392 |
$locations = array_merge($path_locations, $locations); |
|
393 |
foreach ($locations as $location) |
|
394 |
{
|
|
395 |
// The path might not end properly, fudge it
|
|
396 |
if (substr($location, -1, 1) !== '/') |
|
397 |
{
|
|
398 |
$location .= '/'; |
|
399 |
}
|
|
400 |
||
401 |
if (@is_readable($location . 'mogrify' . $exe) && @filesize($location . 'mogrify' . $exe) > 3000) |
|
402 |
{
|
|
403 |
$img_imagick = str_replace('\\', '/', $location); |
|
404 |
continue; |
|
405 |
}
|
|
406 |
}
|
|
407 |
}
|
|
408 |
else
|
|
409 |
{
|
|
410 |
$img_imagick = str_replace('\\', '/', $magic_home); |
|
411 |
}
|
|
412 |
||
413 |
$template->assign_block_vars('checks', array( |
|
414 |
'TITLE' => $lang['APP_MAGICK'], |
|
415 |
'RESULT' => ($img_imagick) ? '<strong style="color:green">' . $lang['AVAILABLE'] . ', ' . $img_imagick . '</strong>' : '<strong style="color:blue">' . $lang['NO_LOCATION'] . '</strong>', |
|
416 |
||
417 |
'S_EXPLAIN' => false, |
|
418 |
'S_LEGEND' => false, |
|
419 |
));
|
|
420 |
||
421 |
// Check permissions on files/directories we need access to
|
|
422 |
$template->assign_block_vars('checks', array( |
|
423 |
'S_LEGEND' => true, |
|
424 |
'LEGEND' => $lang['FILES_REQUIRED'], |
|
425 |
'LEGEND_EXPLAIN' => $lang['FILES_REQUIRED_EXPLAIN'], |
|
426 |
));
|
|
427 |
||
428 |
$directories = array('cache/', 'files/', 'store/'); |
|
429 |
||
430 |
umask(0); |
|
431 |
||
432 |
$passed['files'] = true; |
|
433 |
foreach ($directories as $dir) |
|
434 |
{
|
|
435 |
$exists = $write = false; |
|
436 |
||
437 |
// Try to create the directory if it does not exist
|
|
438 |
if (!file_exists($phpbb_root_path . $dir)) |
|
439 |
{
|
|
440 |
@mkdir($phpbb_root_path . $dir, 0777); |
|
441 |
@chmod($phpbb_root_path . $dir, 0777); |
|
442 |
}
|
|
443 |
||
444 |
// Now really check
|
|
445 |
if (file_exists($phpbb_root_path . $dir) && is_dir($phpbb_root_path . $dir)) |
|
446 |
{
|
|
447 |
if (!@is_writable($phpbb_root_path . $dir)) |
|
448 |
{
|
|
449 |
@chmod($phpbb_root_path . $dir, 0777); |
|
450 |
}
|
|
451 |
$exists = true; |
|
452 |
}
|
|
453 |
||
454 |
// Now check if it is writable by storing a simple file
|
|
455 |
$fp = @fopen($phpbb_root_path . $dir . 'test_lock', 'wb'); |
|
456 |
if ($fp !== false) |
|
457 |
{
|
|
458 |
$write = true; |
|
459 |
}
|
|
460 |
@fclose($fp); |
|
461 |
||
462 |
@unlink($phpbb_root_path . $dir . 'test_lock'); |
|
463 |
||
464 |
$passed['files'] = ($exists && $write && $passed['files']) ? true : false; |
|
465 |
||
466 |
$exists = ($exists) ? '<strong style="color:green">' . $lang['FOUND'] . '</strong>' : '<strong style="color:red">' . $lang['NOT_FOUND'] . '</strong>'; |
|
467 |
$write = ($write) ? ', <strong style="color:green">' . $lang['WRITABLE'] . '</strong>' : (($exists) ? ', <strong style="color:red">' . $lang['UNWRITABLE'] . '</strong>' : ''); |
|
468 |
||
469 |
$template->assign_block_vars('checks', array( |
|
470 |
'TITLE' => $dir, |
|
471 |
'RESULT' => $exists . $write, |
|
472 |
||
473 |
'S_EXPLAIN' => false, |
|
474 |
'S_LEGEND' => false, |
|
475 |
));
|
|
476 |
}
|
|
477 |
||
478 |
// Check permissions on files/directories it would be useful access to
|
|
479 |
$template->assign_block_vars('checks', array( |
|
480 |
'S_LEGEND' => true, |
|
481 |
'LEGEND' => $lang['FILES_OPTIONAL'], |
|
482 |
'LEGEND_EXPLAIN' => $lang['FILES_OPTIONAL_EXPLAIN'], |
|
483 |
));
|
|
484 |
||
485 |
$directories = array('config.' . $phpEx, 'images/avatars/upload/'); |
|
486 |
||
487 |
foreach ($directories as $dir) |
|
488 |
{
|
|
489 |
$write = $exists = true; |
|
490 |
if (file_exists($phpbb_root_path . $dir)) |
|
491 |
{
|
|
492 |
if (!@is_writable($phpbb_root_path . $dir)) |
|
493 |
{
|
|
494 |
$write = false; |
|
495 |
}
|
|
496 |
}
|
|
497 |
else
|
|
498 |
{
|
|
499 |
$write = $exists = false; |
|
500 |
}
|
|
501 |
||
502 |
$exists_str = ($exists) ? '<strong style="color:green">' . $lang['FOUND'] . '</strong>' : '<strong style="color:red">' . $lang['NOT_FOUND'] . '</strong>'; |
|
503 |
$write_str = ($write) ? ', <strong style="color:green">' . $lang['WRITABLE'] . '</strong>' : (($exists) ? ', <strong style="color:red">' . $lang['UNWRITABLE'] . '</strong>' : ''); |
|
504 |
||
505 |
$template->assign_block_vars('checks', array( |
|
506 |
'TITLE' => $dir, |
|
507 |
'RESULT' => $exists_str . $write_str, |
|
508 |
||
509 |
'S_EXPLAIN' => false, |
|
510 |
'S_LEGEND' => false, |
|
511 |
));
|
|
512 |
}
|
|
513 |
||
514 |
// And finally where do we want to go next (well today is taken isn't it :P)
|
|
515 |
$s_hidden_fields = ($img_imagick) ? '<input type="hidden" name="img_imagick" value="' . addslashes($img_imagick) . '" />' : ''; |
|
516 |
||
517 |
$url = (!in_array(false, $passed)) ? $this->p_master->module_url . "?mode=$mode&sub=database&language=$language" : $this->p_master->module_url . "?mode=$mode&sub=requirements&language=$language "; |
|
518 |
$submit = (!in_array(false, $passed)) ? $lang['INSTALL_START'] : $lang['INSTALL_TEST']; |
|
519 |
||
520 |
||
521 |
$template->assign_vars(array( |
|
522 |
'L_SUBMIT' => $submit, |
|
523 |
'S_HIDDEN' => $s_hidden_fields, |
|
524 |
'U_ACTION' => $url, |
|
525 |
));
|
|
526 |
}
|
|
527 |
||
528 |
/**
|
|
529 |
* Obtain the information required to connect to the database
|
|
530 |
*/
|
|
531 |
function obtain_database_settings($mode, $sub) |
|
532 |
{
|
|
533 |
global $lang, $template, $phpEx; |
|
534 |
||
535 |
$this->page_title = $lang['STAGE_DATABASE']; |
|
536 |
||
537 |
// Obtain any submitted data
|
|
538 |
$data = $this->get_submitted_data(); |
|
539 |
||
540 |
$connect_test = false; |
|
541 |
$error = array(); |
|
542 |
$available_dbms = get_available_dbms(false, true); |
|
543 |
||
544 |
// Has the user opted to test the connection?
|
|
545 |
if (isset($_POST['testdb'])) |
|
546 |
{
|
|
547 |
if (!isset($available_dbms[$data['dbms']]) || !$available_dbms[$data['dbms']]['AVAILABLE']) |
|
548 |
{
|
|
549 |
$error['db'][] = $lang['INST_ERR_NO_DB']; |
|
550 |
$connect_test = false; |
|
551 |
}
|
|
552 |
else
|
|
553 |
{
|
|
554 |
$connect_test = connect_check_db(true, $error, $available_dbms[$data['dbms']], $data['table_prefix'], $data['dbhost'], $data['dbuser'], $data['dbpasswd'], $data['dbname'], $data['dbport']); |
|
555 |
}
|
|
556 |
||
557 |
$template->assign_block_vars('checks', array( |
|
558 |
'S_LEGEND' => true, |
|
559 |
'LEGEND' => $lang['DB_CONNECTION'], |
|
560 |
'LEGEND_EXPLAIN' => false, |
|
561 |
));
|
|
562 |
||
563 |
if ($connect_test) |
|
564 |
{
|
|
565 |
$template->assign_block_vars('checks', array( |
|
566 |
'TITLE' => $lang['DB_TEST'], |
|
567 |
'RESULT' => '<strong style="color:green">' . $lang['SUCCESSFUL_CONNECT'] . '</strong>', |
|
568 |
||
569 |
'S_EXPLAIN' => false, |
|
570 |
'S_LEGEND' => false, |
|
571 |
));
|
|
572 |
}
|
|
573 |
else
|
|
574 |
{
|
|
575 |
$template->assign_block_vars('checks', array( |
|
576 |
'TITLE' => $lang['DB_TEST'], |
|
577 |
'RESULT' => '<strong style="color:red">' . implode('<br />', $error) . '</strong>', |
|
578 |
||
579 |
'S_EXPLAIN' => false, |
|
580 |
'S_LEGEND' => false, |
|
581 |
));
|
|
582 |
}
|
|
583 |
}
|
|
584 |
||
585 |
if (!$connect_test) |
|
586 |
{
|
|
587 |
// Update the list of available DBMS modules to only contain those which can be used
|
|
588 |
$available_dbms_temp = array(); |
|
589 |
foreach ($available_dbms as $type => $dbms_ary) |
|
590 |
{
|
|
591 |
if (!$dbms_ary['AVAILABLE']) |
|
592 |
{
|
|
593 |
continue; |
|
594 |
}
|
|
595 |
||
596 |
$available_dbms_temp[$type] = $dbms_ary; |
|
597 |
}
|
|
598 |
||
599 |
$available_dbms = &$available_dbms_temp; |
|
600 |
||
601 |
// And now for the main part of this page
|
|
602 |
$data['table_prefix'] = (!empty($data['table_prefix']) ? $data['table_prefix'] : 'phpbb_'); |
|
603 |
||
604 |
foreach ($this->db_config_options as $config_key => $vars) |
|
605 |
{
|
|
606 |
if (!is_array($vars) && strpos($config_key, 'legend') === false) |
|
607 |
{
|
|
608 |
continue; |
|
609 |
}
|
|
610 |
||
611 |
if (strpos($config_key, 'legend') !== false) |
|
612 |
{
|
|
613 |
$template->assign_block_vars('options', array( |
|
614 |
'S_LEGEND' => true, |
|
615 |
'LEGEND' => $lang[$vars]) |
|
616 |
);
|
|
617 |
||
618 |
continue; |
|
619 |
}
|
|
620 |
||
621 |
$options = isset($vars['options']) ? $vars['options'] : ''; |
|
622 |
||
623 |
$template->assign_block_vars('options', array( |
|
624 |
'KEY' => $config_key, |
|
625 |
'TITLE' => $lang[$vars['lang']], |
|
626 |
'S_EXPLAIN' => $vars['explain'], |
|
627 |
'S_LEGEND' => false, |
|
628 |
'TITLE_EXPLAIN' => ($vars['explain']) ? $lang[$vars['lang'] . '_EXPLAIN'] : '', |
|
629 |
'CONTENT' => $this->p_master->input_field($config_key, $vars['type'], $data[$config_key], $options), |
|
630 |
)
|
|
631 |
);
|
|
632 |
}
|
|
633 |
}
|
|
634 |
||
635 |
// And finally where do we want to go next (well today is taken isn't it :P)
|
|
636 |
$s_hidden_fields = ($data['img_imagick']) ? '<input type="hidden" name="img_imagick" value="' . addslashes($data['img_imagick']) . '" />' : ''; |
|
637 |
$s_hidden_fields .= '<input type="hidden" name="language" value="' . $data['language'] . '" />'; |
|
638 |
if ($connect_test) |
|
639 |
{
|
|
640 |
foreach ($this->db_config_options as $config_key => $vars) |
|
641 |
{
|
|
642 |
if (!is_array($vars)) |
|
643 |
{
|
|
644 |
continue; |
|
645 |
}
|
|
646 |
$s_hidden_fields .= '<input type="hidden" name="' . $config_key . '" value="' . $data[$config_key] . '" />'; |
|
647 |
}
|
|
648 |
}
|
|
649 |
||
650 |
$url = ($connect_test) ? $this->p_master->module_url . "?mode=$mode&sub=administrator" : $this->p_master->module_url . "?mode=$mode&sub=database"; |
|
651 |
$s_hidden_fields .= ($connect_test) ? '' : '<input type="hidden" name="testdb" value="true" />'; |
|
652 |
||
653 |
$submit = $lang['NEXT_STEP']; |
|
654 |
||
655 |
$template->assign_vars(array( |
|
656 |
'L_SUBMIT' => $submit, |
|
657 |
'S_HIDDEN' => $s_hidden_fields, |
|
658 |
'U_ACTION' => $url, |
|
659 |
));
|
|
660 |
}
|
|
661 |
||
662 |
/**
|
|
663 |
* Obtain the administrator's name, password and email address
|
|
664 |
*/
|
|
665 |
function obtain_admin_settings($mode, $sub) |
|
666 |
{
|
|
667 |
global $lang, $template, $phpEx; |
|
668 |
||
669 |
$this->page_title = $lang['STAGE_ADMINISTRATOR']; |
|
670 |
||
671 |
// Obtain any submitted data
|
|
672 |
$data = $this->get_submitted_data(); |
|
673 |
||
674 |
if ($data['dbms'] == '') |
|
675 |
{
|
|
676 |
// Someone's been silly and tried calling this page direct
|
|
677 |
// So we send them back to the start to do it again properly
|
|
678 |
$this->p_master->redirect("index.$phpEx?mode=install"); |
|
679 |
}
|
|
680 |
||
681 |
$s_hidden_fields = ($data['img_imagick']) ? '<input type="hidden" name="img_imagick" value="' . addslashes($data['img_imagick']) . '" />' : ''; |
|
682 |
$passed = false; |
|
683 |
||
684 |
$data['default_lang'] = ($data['default_lang'] !== '') ? $data['default_lang'] : $data['language']; |
|
685 |
||
686 |
if (isset($_POST['check'])) |
|
687 |
{
|
|
688 |
$error = array(); |
|
689 |
||
690 |
// Check the entered email address and password
|
|
691 |
if ($data['admin_name'] == '' || $data['admin_pass1'] == '' || $data['admin_pass2'] == '' || $data['board_email1'] == '' || $data['board_email2'] == '') |
|
692 |
{
|
|
693 |
$error[] = $lang['INST_ERR_MISSING_DATA']; |
|
694 |
}
|
|
695 |
||
696 |
if ($data['admin_pass1'] != $data['admin_pass2'] && $data['admin_pass1'] != '') |
|
697 |
{
|
|
698 |
$error[] = $lang['INST_ERR_PASSWORD_MISMATCH']; |
|
699 |
}
|
|
700 |
||
701 |
// Test against the default username rules
|
|
702 |
if ($data['admin_name'] != '' && utf8_strlen($data['admin_name']) < 3) |
|
703 |
{
|
|
704 |
$error[] = $lang['INST_ERR_USER_TOO_SHORT']; |
|
705 |
}
|
|
706 |
||
707 |
if ($data['admin_name'] != '' && utf8_strlen($data['admin_name']) > 20) |
|
708 |
{
|
|
709 |
$error[] = $lang['INST_ERR_USER_TOO_LONG']; |
|
710 |
}
|
|
711 |
||
712 |
// Test against the default password rules
|
|
713 |
if ($data['admin_pass1'] != '' && utf8_strlen($data['admin_pass1']) < 6) |
|
714 |
{
|
|
715 |
$error[] = $lang['INST_ERR_PASSWORD_TOO_SHORT']; |
|
716 |
}
|
|
717 |
||
718 |
if ($data['admin_pass1'] != '' && utf8_strlen($data['admin_pass1']) > 30) |
|
719 |
{
|
|
720 |
$error[] = $lang['INST_ERR_PASSWORD_TOO_LONG']; |
|
721 |
}
|
|
722 |
||
723 |
if ($data['board_email1'] != $data['board_email2'] && $data['board_email1'] != '') |
|
724 |
{
|
|
725 |
$error[] = $lang['INST_ERR_EMAIL_MISMATCH']; |
|
726 |
}
|
|
727 |
||
728 |
if ($data['board_email1'] != '' && !preg_match('/^' . get_preg_expression('email') . '$/i', $data['board_email1'])) |
|
729 |
{
|
|
730 |
$error[] = $lang['INST_ERR_EMAIL_INVALID']; |
|
731 |
}
|
|
732 |
||
733 |
$template->assign_block_vars('checks', array( |
|
734 |
'S_LEGEND' => true, |
|
735 |
'LEGEND' => $lang['STAGE_ADMINISTRATOR'], |
|
736 |
'LEGEND_EXPLAIN' => false, |
|
737 |
));
|
|
738 |
||
739 |
if (!sizeof($error)) |
|
740 |
{
|
|
741 |
$passed = true; |
|
742 |
$template->assign_block_vars('checks', array( |
|
743 |
'TITLE' => $lang['ADMIN_TEST'], |
|
744 |
'RESULT' => '<strong style="color:green">' . $lang['TESTS_PASSED'] . '</strong>', |
|
745 |
||
746 |
'S_EXPLAIN' => false, |
|
747 |
'S_LEGEND' => false, |
|
748 |
));
|
|
749 |
}
|
|
750 |
else
|
|
751 |
{
|
|
752 |
$template->assign_block_vars('checks', array( |
|
753 |
'TITLE' => $lang['ADMIN_TEST'], |
|
754 |
'RESULT' => '<strong style="color:red">' . implode('<br />', $error) . '</strong>', |
|
755 |
||
756 |
'S_EXPLAIN' => false, |
|
757 |
'S_LEGEND' => false, |
|
758 |
));
|
|
759 |
}
|
|
760 |
}
|
|
761 |
||
762 |
if (!$passed) |
|
763 |
{
|
|
764 |
foreach ($this->admin_config_options as $config_key => $vars) |
|
765 |
{
|
|
766 |
if (!is_array($vars) && strpos($config_key, 'legend') === false) |
|
767 |
{
|
|
768 |
continue; |
|
769 |
}
|
|
770 |
||
771 |
if (strpos($config_key, 'legend') !== false) |
|
772 |
{
|
|
773 |
$template->assign_block_vars('options', array( |
|
774 |
'S_LEGEND' => true, |
|
775 |
'LEGEND' => $lang[$vars]) |
|
776 |
);
|
|
777 |
||
778 |
continue; |
|
779 |
}
|
|
780 |
||
781 |
$options = isset($vars['options']) ? $vars['options'] : ''; |
|
782 |
||
783 |
$template->assign_block_vars('options', array( |
|
784 |
'KEY' => $config_key, |
|
785 |
'TITLE' => $lang[$vars['lang']], |
|
786 |
'S_EXPLAIN' => $vars['explain'], |
|
787 |
'S_LEGEND' => false, |
|
788 |
'TITLE_EXPLAIN' => ($vars['explain']) ? $lang[$vars['lang'] . '_EXPLAIN'] : '', |
|
789 |
'CONTENT' => $this->p_master->input_field($config_key, $vars['type'], $data[$config_key], $options), |
|
790 |
)
|
|
791 |
);
|
|
792 |
}
|
|
793 |
}
|
|
794 |
else
|
|
795 |
{
|
|
796 |
foreach ($this->admin_config_options as $config_key => $vars) |
|
797 |
{
|
|
798 |
if (!is_array($vars)) |
|
799 |
{
|
|
800 |
continue; |
|
801 |
}
|
|
802 |
$s_hidden_fields .= '<input type="hidden" name="' . $config_key . '" value="' . $data[$config_key] . '" />'; |
|
803 |
}
|
|
804 |
}
|
|
805 |
||
806 |
$s_hidden_fields .= ($data['img_imagick']) ? '<input type="hidden" name="img_imagick" value="' . addslashes($data['img_imagick']) . '" />' : ''; |
|
807 |
$s_hidden_fields .= '<input type="hidden" name="language" value="' . $data['language'] . '" />'; |
|
808 |
||
809 |
foreach ($this->db_config_options as $config_key => $vars) |
|
810 |
{
|
|
811 |
if (!is_array($vars)) |
|
812 |
{
|
|
813 |
continue; |
|
814 |
}
|
|
815 |
$s_hidden_fields .= '<input type="hidden" name="' . $config_key . '" value="' . $data[$config_key] . '" />'; |
|
816 |
}
|
|
817 |
||
818 |
$submit = $lang['NEXT_STEP']; |
|
819 |
||
820 |
$url = ($passed) ? $this->p_master->module_url . "?mode=$mode&sub=config_file" : $this->p_master->module_url . "?mode=$mode&sub=administrator"; |
|
821 |
$s_hidden_fields .= ($passed) ? '' : '<input type="hidden" name="check" value="true" />'; |
|
822 |
||
823 |
$template->assign_vars(array( |
|
824 |
'L_SUBMIT' => $submit, |
|
825 |
'S_HIDDEN' => $s_hidden_fields, |
|
826 |
'U_ACTION' => $url, |
|
827 |
));
|
|
828 |
}
|
|
829 |
||
830 |
/**
|
|
831 |
* Writes the config file to disk, or if unable to do so offers alternative methods
|
|
832 |
*/
|
|
833 |
function create_config_file($mode, $sub) |
|
834 |
{
|
|
835 |
global $lang, $template, $phpbb_root_path, $phpEx; |
|
836 |
||
837 |
$this->page_title = $lang['STAGE_CONFIG_FILE']; |
|
838 |
||
839 |
// Obtain any submitted data
|
|
840 |
$data = $this->get_submitted_data(); |
|
841 |
||
842 |
if ($data['dbms'] == '') |
|
843 |
{
|
|
844 |
// Someone's been silly and tried calling this page direct
|
|
845 |
// So we send them back to the start to do it again properly
|
|
846 |
$this->p_master->redirect("index.$phpEx?mode=install"); |
|
847 |
}
|
|
848 |
||
849 |
$s_hidden_fields = ($data['img_imagick']) ? '<input type="hidden" name="img_imagick" value="' . addslashes($data['img_imagick']) . '" />' : ''; |
|
850 |
$s_hidden_fields .= '<input type="hidden" name="language" value="' . $data['language'] . '" />'; |
|
851 |
$written = false; |
|
852 |
||
853 |
// Create a list of any PHP modules we wish to have loaded
|
|
854 |
$load_extensions = array(); |
|
855 |
$available_dbms = get_available_dbms($data['dbms']); |
|
856 |
$check_exts = array_merge(array($available_dbms[$data['dbms']]['MODULE']), $this->php_dlls_other); |
|
857 |
||
858 |
foreach ($check_exts as $dll) |
|
859 |
{
|
|
860 |
if (!@extension_loaded($dll)) |
|
861 |
{
|
|
862 |
if (!can_load_dll($dll)) |
|
863 |
{
|
|
864 |
continue; |
|
865 |
}
|
|
866 |
||
867 |
$load_extensions[] = $dll . '.' . PHP_SHLIB_SUFFIX; |
|
868 |
}
|
|
869 |
}
|
|
870 |
||
871 |
// Create a lock file to indicate that there is an install in progress
|
|
872 |
$fp = @fopen($phpbb_root_path . 'cache/install_lock', 'wb'); |
|
873 |
if ($fp === false) |
|
874 |
{
|
|
875 |
// We were unable to create the lock file - abort
|
|
876 |
$this->p_master->error($lang['UNABLE_WRITE_LOCK'], __LINE__, __FILE__); |
|
877 |
}
|
|
878 |
@fclose($fp); |
|
879 |
||
880 |
@chmod($phpbb_root_path . 'cache/install_lock', 0666); |
|
881 |
||
882 |
$load_extensions = implode(',', $load_extensions); |
|
883 |
||
884 |
// Time to convert the data provided into a config file
|
|
885 |
$config_data = "<?php\n"; |
|
886 |
$config_data .= "// phpBB 3.0.x auto-generated configuration file\n// Do not change anything in this file!\n"; |
|
887 |
$config_data .= "\$dbms = '" . $available_dbms[$data['dbms']]['DRIVER'] . "';\n"; |
|
888 |
$config_data .= "\$dbhost = '{$data['dbhost']}';\n"; |
|
889 |
$config_data .= "\$dbport = '{$data['dbport']}';\n"; |
|
890 |
$config_data .= "\$dbname = '{$data['dbname']}';\n"; |
|
891 |
$config_data .= "\$dbuser = '{$data['dbuser']}';\n"; |
|
892 |
$config_data .= "\$dbpasswd = '{$data['dbpasswd']}';\n\n"; |
|
893 |
$config_data .= "\$table_prefix = '{$data['table_prefix']}';\n"; |
|
894 |
// $config_data .= "\$acm_type = '" . (($acm_type) ? $acm_type : 'file') . "';\n";
|
|
895 |
$config_data .= "\$acm_type = 'file';\n"; |
|
896 |
$config_data .= "\$load_extensions = '$load_extensions';\n\n"; |
|
897 |
$config_data .= "@define('PHPBB_INSTALLED', true);\n"; |
|
898 |
$config_data .= "// @define('DEBUG', true);\n"; |
|
899 |
$config_data .= "// @define('DEBUG_EXTRA', true);\n"; |
|
900 |
$config_data .= '?' . '>'; // Done this to prevent highlighting editors getting confused! |
|
901 |
||
902 |
// Attempt to write out the config file directly. If it works, this is the easiest way to do it ...
|
|
903 |
if ((file_exists($phpbb_root_path . 'config.' . $phpEx) && is_writable($phpbb_root_path . 'config.' . $phpEx)) || is_writable($phpbb_root_path)) |
|
904 |
{
|
|
905 |
// Assume it will work ... if nothing goes wrong below
|
|
906 |
$written = true; |
|
907 |
||
908 |
if (!($fp = @fopen($phpbb_root_path . 'config.' . $phpEx, 'w'))) |
|
909 |
{
|
|
910 |
// Something went wrong ... so let's try another method
|
|
911 |
$written = false; |
|
912 |
}
|
|
913 |
||
914 |
if (!(@fwrite($fp, $config_data))) |
|
915 |
{
|
|
916 |
// Something went wrong ... so let's try another method
|
|
917 |
$written = false; |
|
918 |
}
|
|
919 |
||
920 |
@fclose($fp); |
|
921 |
||
922 |
if ($written) |
|
923 |
{
|
|
924 |
@chmod($phpbb_root_path . 'config.' . $phpEx, 0644); |
|
925 |
}
|
|
926 |
}
|
|
927 |
||
928 |
if (isset($_POST['dldone'])) |
|
929 |
{
|
|
930 |
// Do a basic check to make sure that the file has been uploaded
|
|
931 |
// Note that all we check is that the file has _something_ in it
|
|
932 |
// We don't compare the contents exactly - if they can't upload
|
|
933 |
// a single file correctly, it's likely they will have other problems....
|
|
934 |
if (filesize($phpbb_root_path . 'config.' . $phpEx) > 10) |
|
935 |
{
|
|
936 |
$written = true; |
|
937 |
}
|
|
938 |
}
|
|
939 |
||
940 |
$config_options = array_merge($this->db_config_options, $this->admin_config_options); |
|
941 |
||
942 |
foreach ($config_options as $config_key => $vars) |
|
943 |
{
|
|
944 |
if (!is_array($vars)) |
|
945 |
{
|
|
946 |
continue; |
|
947 |
}
|
|
948 |
$s_hidden_fields .= '<input type="hidden" name="' . $config_key . '" value="' . $data[$config_key] . '" />'; |
|
949 |
}
|
|
950 |
||
951 |
if (!$written) |
|
952 |
{
|
|
953 |
// OK, so it didn't work let's try the alternatives
|
|
954 |
||
955 |
if (isset($_POST['dlconfig'])) |
|
956 |
{
|
|
957 |
// They want a copy of the file to download, so send the relevant headers and dump out the data
|
|
958 |
header("Content-Type: text/x-delimtext; name=\"config.$phpEx\""); |
|
959 |
header("Content-disposition: attachment; filename=config.$phpEx"); |
|
960 |
echo $config_data; |
|
961 |
exit;
|
|
962 |
}
|
|
963 |
||
964 |
// The option to download the config file is always available, so output it here
|
|
965 |
$template->assign_vars(array( |
|
966 |
'BODY' => $lang['CONFIG_FILE_UNABLE_WRITE'], |
|
967 |
'L_DL_CONFIG' => $lang['DL_CONFIG'], |
|
968 |
'L_DL_CONFIG_EXPLAIN' => $lang['DL_CONFIG_EXPLAIN'], |
|
969 |
'L_DL_DONE' => $lang['DONE'], |
|
970 |
'L_DL_DOWNLOAD' => $lang['DL_DOWNLOAD'], |
|
971 |
'S_HIDDEN' => $s_hidden_fields, |
|
972 |
'S_SHOW_DOWNLOAD' => true,
|
|
973 |
'U_ACTION' => $this->p_master->module_url . "?mode=$mode&sub=config_file", |
|
974 |
));
|
|
975 |
return;
|
|
976 |
}
|
|
977 |
else
|
|
978 |
{
|
|
979 |
$template->assign_vars(array( |
|
980 |
'BODY' => $lang['CONFIG_FILE_WRITTEN'], |
|
981 |
'L_SUBMIT' => $lang['NEXT_STEP'], |
|
982 |
'S_HIDDEN' => $s_hidden_fields, |
|
983 |
'U_ACTION' => $this->p_master->module_url . "?mode=$mode&sub=advanced", |
|
984 |
));
|
|
985 |
return;
|
|
986 |
}
|
|
987 |
}
|
|
988 |
||
989 |
/**
|
|
990 |
* Provide an opportunity to customise some advanced settings during the install
|
|
991 |
* in case it is necessary for them to be set to access later
|
|
992 |
*/
|
|
993 |
function obtain_advanced_settings($mode, $sub) |
|
994 |
{
|
|
995 |
global $lang, $template, $phpEx; |
|
996 |
||
997 |
$this->page_title = $lang['STAGE_ADVANCED']; |
|
998 |
||
999 |
// Obtain any submitted data
|
|
1000 |
$data = $this->get_submitted_data(); |
|
1001 |
||
1002 |
if ($data['dbms'] == '') |
|
1003 |
{
|
|
1004 |
// Someone's been silly and tried calling this page direct
|
|
1005 |
// So we send them back to the start to do it again properly
|
|
1006 |
$this->p_master->redirect("index.$phpEx?mode=install"); |
|
1007 |
}
|
|
1008 |
||
1009 |
$s_hidden_fields = ($data['img_imagick']) ? '<input type="hidden" name="img_imagick" value="' . addslashes($data['img_imagick']) . '" />' : ''; |
|
1010 |
$s_hidden_fields .= '<input type="hidden" name="language" value="' . $data['language'] . '" />'; |
|
1011 |
||
1012 |
$data['email_enable'] = ($data['email_enable'] !== '') ? $data['email_enable'] : true; |
|
1013 |
$data['server_name'] = ($data['server_name'] !== '') ? $data['server_name'] : ((!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME')); |
|
1014 |
$data['server_port'] = ($data['server_port'] !== '') ? $data['server_port'] : ((!empty($_SERVER['SERVER_PORT'])) ? (int) $_SERVER['SERVER_PORT'] : (int) getenv('SERVER_PORT')); |
|
1015 |
$data['server_protocol'] = ($data['server_protocol'] !== '') ? $data['server_protocol'] : ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://'); |
|
1016 |
$data['cookie_secure'] = ($data['cookie_secure'] !== '') ? $data['cookie_secure'] : ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? true : false); |
|
1017 |
||
1018 |
if ($data['script_path'] === '') |
|
1019 |
{
|
|
1020 |
$name = (!empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : getenv('PHP_SELF'); |
|
1021 |
if (!$name) |
|
1022 |
{
|
|
1023 |
$name = (!empty($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : getenv('REQUEST_URI'); |
|
1024 |
}
|
|
1025 |
||
1026 |
// Replace backslashes and doubled slashes (could happen on some proxy setups)
|
|
1027 |
$name = str_replace(array('\\', '//', '/install'), '/', $name); |
|
1028 |
$data['script_path'] = trim(dirname($name)); |
|
1029 |
}
|
|
1030 |
||
1031 |
foreach ($this->advanced_config_options as $config_key => $vars) |
|
1032 |
{
|
|
1033 |
if (!is_array($vars) && strpos($config_key, 'legend') === false) |
|
1034 |
{
|
|
1035 |
continue;
|
|
1036 |
}
|
|
1037 |
||
1038 |
if (strpos($config_key, 'legend') !== false) |
|
1039 |
{
|
|
1040 |
$template->assign_block_vars('options', array( |
|
1041 |
'S_LEGEND' => true,
|
|
1042 |
'LEGEND' => $lang[$vars]) |
|
1043 |
);
|
|
1044 |
||
1045 |
continue;
|
|
1046 |
}
|
|
1047 |
||
1048 |
$options = isset($vars['options']) ? $vars['options'] : ''; |
|
1049 |
||
1050 |
$template->assign_block_vars('options', array( |
|
1051 |
'KEY' => $config_key, |
|
1052 |
'TITLE' => $lang[$vars['lang']], |
|
1053 |
'S_EXPLAIN' => $vars['explain'], |
|
1054 |
'S_LEGEND' => false,
|
|
1055 |
'TITLE_EXPLAIN' => ($vars['explain']) ? $lang[$vars['lang'] . '_EXPLAIN'] : '', |
|
1056 |
'CONTENT' => $this->p_master->input_field($config_key, $vars['type'], $data[$config_key], $options), |
|
1057 |
)
|
|
1058 |
);
|
|
1059 |
}
|
|
1060 |
||
1061 |
$config_options = array_merge($this->db_config_options, $this->admin_config_options); |
|
1062 |
foreach ($config_options as $config_key => $vars) |
|
1063 |
{
|
|
1064 |
if (!is_array($vars)) |
|
1065 |
{
|
|
1066 |
continue;
|
|
1067 |
}
|
|
1068 |
$s_hidden_fields .= '<input type="hidden" name="' . $config_key . '" value="' . $data[$config_key] . '" />'; |
|
1069 |
}
|
|
1070 |
||
1071 |
$submit = $lang['NEXT_STEP']; |
|
1072 |
||
1073 |
$url = $this->p_master->module_url . "?mode=$mode&sub=create_table"; |
|
1074 |
||
1075 |
$template->assign_vars(array( |
|
1076 |
'BODY' => $lang['STAGE_ADVANCED_EXPLAIN'], |
|
1077 |
'L_SUBMIT' => $submit, |
|
1078 |
'S_HIDDEN' => $s_hidden_fields, |
|
1079 |
'U_ACTION' => $url, |
|
1080 |
));
|
|
1081 |
}
|
|
1082 |
||
1083 |
/**
|
|
1084 |
* Load the contents of the schema into the database and then alter it based on what has been input during the installation
|
|
1085 |
*/
|
|
1086 |
function load_schema($mode, $sub) |
|
1087 |
{
|
|
1088 |
global $db, $lang, $template, $phpbb_root_path, $phpEx; |
|
1089 |
||
1090 |
$this->page_title = $lang['STAGE_CREATE_TABLE']; |
|
1091 |
$s_hidden_fields = ''; |
|
1092 |
||
1093 |
// Obtain any submitted data
|
|
1094 |
$data = $this->get_submitted_data(); |
|
1095 |
||
1096 |
if ($data['dbms'] == '') |
|
1097 |
{
|
|
1098 |
// Someone's been silly and tried calling this page direct
|
|
1099 |
// So we send them back to the start to do it again properly
|
|
1100 |
$this->p_master->redirect("index.$phpEx?mode=install"); |
|
1101 |
}
|
|
1102 |
||
1103 |
$cookie_domain = ($data['server_name'] != '') ? $data['server_name'] : (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME'); |
|
1104 |
||
1105 |
// Try to come up with the best solution for cookie domain...
|
|
1106 |
if (strpos($cookie_domain, 'www.') === 0) |
|
1107 |
{
|
|
1108 |
$cookie_domain = str_replace('www.', '.', $cookie_domain); |
|
1109 |
}
|
|
1110 |
||
1111 |
// If we get here and the extension isn't loaded it should be safe to just go ahead and load it
|
|
1112 |
$available_dbms = get_available_dbms($data['dbms']); |
|
1113 |
||
1114 |
if (!isset($available_dbms[$data['dbms']])) |
|
1115 |
{
|
|
1116 |
// Someone's been silly and tried providing a non-existant dbms
|
|
1117 |
$this->p_master->redirect("index.$phpEx?mode=install"); |
|
1118 |
}
|
|
1119 |
||
1120 |
$dbms = $available_dbms[$data['dbms']]['DRIVER']; |
|
1121 |
||
1122 |
// Load the appropriate database class if not already loaded
|
|
1123 |
include($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx); |
|
1124 |
||
1125 |
// Instantiate the database
|
|
1126 |
$db = new $sql_db(); |
|
1127 |
$db->sql_connect($data['dbhost'], $data['dbuser'], $data['dbpasswd'], $data['dbname'], $data['dbport'], false, false); |
|
1128 |
||
1129 |
// NOTE: trigger_error does not work here.
|
|
1130 |
$db->sql_return_on_error(true); |
|
1131 |
||
1132 |
// If mysql is chosen, we need to adjust the schema filename slightly to reflect the correct version. ;)
|
|
1133 |
if ($data['dbms'] == 'mysql') |
|
1134 |
{
|
|
1135 |
if (version_compare($db->mysql_version, '4.1.3', '>=')) |
|
1136 |
{
|
|
1137 |
$available_dbms[$data['dbms']]['SCHEMA'] .= '_41'; |
|
1138 |
}
|
|
1139 |
else
|
|
1140 |
{
|
|
1141 |
$available_dbms[$data['dbms']]['SCHEMA'] .= '_40'; |
|
1142 |
}
|
|
1143 |
}
|
|
1144 |
||
1145 |
// Ok we have the db info go ahead and read in the relevant schema
|
|
1146 |
// and work on building the table
|
|
1147 |
$dbms_schema = 'schemas/' . $available_dbms[$data['dbms']]['SCHEMA'] . '_schema.sql'; |
|
1148 |
||
1149 |
// How should we treat this schema?
|
|
1150 |
$remove_remarks = $available_dbms[$data['dbms']]['COMMENTS']; |
|
1151 |
$delimiter = $available_dbms[$data['dbms']]['DELIM']; |
|
1152 |
||
1153 |
$sql_query = @file_get_contents($dbms_schema); |
|
1154 |
||
1155 |
$sql_query = preg_replace('#phpbb_#i', $data['table_prefix'], $sql_query); |
|
1156 |
||
1157 |
$remove_remarks($sql_query); |
|
1158 |
||
1159 |
$sql_query = split_sql_file($sql_query, $delimiter); |
|
1160 |
||
1161 |
foreach ($sql_query as $sql) |
|
1162 |
{
|
|
1163 |
//$sql = trim(str_replace('|', ';', $sql)); |
|
1164 |
if (!$db->sql_query($sql)) |
|
1165 |
{
|
|
1166 |
$error = $db->sql_error(); |
|
1167 |
$this->p_master->db_error($error['message'], $sql, __LINE__, __FILE__); |
|
1168 |
}
|
|
1169 |
}
|
|
1170 |
unset($sql_query); |
|
1171 |
||
1172 |
// Ok tables have been built, let's fill in the basic information
|
|
1173 |
$sql_query = file_get_contents('schemas/schema_data.sql'); |
|
1174 |
||
1175 |
// Deal with any special comments
|
|
1176 |
switch ($data['dbms']) |
|
1177 |
{
|
|
1178 |
case 'mssql':
|
|
1179 |
case 'mssql_odbc':
|
|
1180 |
$sql_query = preg_replace('#\# MSSQL IDENTITY (phpbb_[a-z_]+) (ON|OFF) \##s', 'SET IDENTITY_INSERT \1 \2;', $sql_query); |
|
1181 |
break;
|
|
1182 |
||
1183 |
case 'postgres':
|
|
1184 |
$sql_query = preg_replace('#\# POSTGRES (BEGIN|COMMIT) \##s', '\1; ', $sql_query); |
|
1185 |
break;
|
|
1186 |
}
|
|
1187 |
||
1188 |
// Change prefix
|
|
1189 |
$sql_query = preg_replace('#phpbb_#i', $data['table_prefix'], $sql_query); |
|
1190 |
||
1191 |
// Change language strings...
|
|
1192 |
$sql_query = preg_replace_callback('#\{L_([A-Z0-9\-_]*)\}#s', 'adjust_language_keys_callback', $sql_query); |
|
1193 |
||
1194 |
// Since there is only one schema file we know the comment style and are able to remove it directly with remove_remarks
|
|
1195 |
remove_remarks($sql_query); |
|
1196 |
$sql_query = split_sql_file($sql_query, ';'); |
|
1197 |
||
1198 |
foreach ($sql_query as $sql) |
|
1199 |
{
|
|
1200 |
//$sql = trim(str_replace('|', ';', $sql)); |
|
1201 |
if (!$db->sql_query($sql)) |
|
1202 |
{
|
|
1203 |
$error = $db->sql_error(); |
|
1204 |
$this->p_master->db_error($error['message'], $sql, __LINE__, __FILE__); |
|
1205 |
}
|
|
1206 |
}
|
|
1207 |
unset($sql_query); |
|
1208 |
||
1209 |
$current_time = time(); |
|
1210 |
||
1211 |
$user_ip = (!empty($_SERVER['REMOTE_ADDR'])) ? htmlspecialchars($_SERVER['REMOTE_ADDR']) : ''; |
|
1212 |
||
1213 |
if ($data['script_path'] !== '/') |
|
1214 |
{
|
|
1215 |
// Adjust destination path (no trailing slash)
|
|
1216 |
if (substr($data['script_path'], -1) == '/') |
|
1217 |
{
|
|
1218 |
$data['script_path'] = substr($data['script_path'], 0, -1); |
|
1219 |
}
|
|
1220 |
||
1221 |
$data['script_path'] = str_replace(array('../', './'), '', $data['script_path']); |
|
1222 |
||
1223 |
if ($data['script_path'][0] != '/') |
|
1224 |
{
|
|
1225 |
$data['script_path'] = '/' . $data['script_path']; |
|
1226 |
}
|
|
1227 |
}
|
|
1228 |
||
1229 |
// Set default config and post data, this applies to all DB's
|
|
1230 |
$sql_ary = array( |
|
1231 |
'INSERT INTO ' . $data['table_prefix'] . "config (config_name, config_value) |
|
1232 |
VALUES ('board_startdate', '$current_time')", |
|
1233 |
||
1234 |
'INSERT INTO ' . $data['table_prefix'] . "config (config_name, config_value) |
|
1235 |
VALUES ('default_lang', '" . $db->sql_escape($data['default_lang']) . "')", |
|
1236 |
||
1237 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1238 |
SET config_value = '" . $db->sql_escape($data['img_imagick']) . "' |
|
1239 |
WHERE config_name = 'img_imagick'", |
|
1240 |
||
1241 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1242 |
SET config_value = '" . $db->sql_escape($data['server_name']) . "' |
|
1243 |
WHERE config_name = 'server_name'", |
|
1244 |
||
1245 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1246 |
SET config_value = '" . $db->sql_escape($data['server_port']) . "' |
|
1247 |
WHERE config_name = 'server_port'", |
|
1248 |
||
1249 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1250 |
SET config_value = '" . $db->sql_escape($data['board_email1']) . "' |
|
1251 |
WHERE config_name = 'board_email'", |
|
1252 |
||
1253 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1254 |
SET config_value = '" . $db->sql_escape($data['board_email1']) . "' |
|
1255 |
WHERE config_name = 'board_contact'", |
|
1256 |
||
1257 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1258 |
SET config_value = '" . $db->sql_escape($cookie_domain) . "' |
|
1259 |
WHERE config_name = 'cookie_domain'", |
|
1260 |
||
1261 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1262 |
SET config_value = '" . $db->sql_escape($lang['default_dateformat']) . "' |
|
1263 |
WHERE config_name = 'default_dateformat'", |
|
1264 |
||
1265 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1266 |
SET config_value = '" . $db->sql_escape($data['email_enable']) . "' |
|
1267 |
WHERE config_name = 'email_enable'", |
|
1268 |
||
1269 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1270 |
SET config_value = '" . $db->sql_escape($data['smtp_delivery']) . "' |
|
1271 |
WHERE config_name = 'smtp_delivery'", |
|
1272 |
||
1273 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1274 |
SET config_value = '" . $db->sql_escape($data['smtp_host']) . "' |
|
1275 |
WHERE config_name = 'smtp_host'", |
|
1276 |
||
1277 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1278 |
SET config_value = '" . $db->sql_escape($data['smtp_auth']) . "' |
|
1279 |
WHERE config_name = 'smtp_auth_method'", |
|
1280 |
||
1281 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1282 |
SET config_value = '" . $db->sql_escape($data['smtp_user']) . "' |
|
1283 |
WHERE config_name = 'smtp_username'", |
|
1284 |
||
1285 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1286 |
SET config_value = '" . $db->sql_escape($data['smtp_pass']) . "' |
|
1287 |
WHERE config_name = 'smtp_password'", |
|
1288 |
||
1289 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1290 |
SET config_value = '" . $db->sql_escape($data['cookie_secure']) . "' |
|
1291 |
WHERE config_name = 'cookie_secure'", |
|
1292 |
||
1293 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1294 |
SET config_value = '" . $db->sql_escape($data['force_server_vars']) . "' |
|
1295 |
WHERE config_name = 'force_server_vars'", |
|
1296 |
||
1297 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1298 |
SET config_value = '" . $db->sql_escape($data['script_path']) . "' |
|
1299 |
WHERE config_name = 'script_path'", |
|
1300 |
||
1301 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1302 |
SET config_value = '" . $db->sql_escape($data['server_protocol']) . "' |
|
1303 |
WHERE config_name = 'server_protocol'", |
|
1304 |
||
1305 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1306 |
SET config_value = '" . $db->sql_escape($data['admin_name']) . "' |
|
1307 |
WHERE config_name = 'newest_username'", |
|
1308 |
|
|
1309 |
'UPDATE ' . $data['table_prefix'] . "config |
|
1310 |
SET config_value = '" . md5(mt_rand()) . "' |
|
1311 |
WHERE config_name = 'avatar_salt'", |
|
1312 |
|
|
1313 |
'UPDATE ' . $data['table_prefix'] . "users |
|
1314 |
SET username = '" . $db->sql_escape($data['admin_name']) . "', user_password='" . $db->sql_escape(md5($data['admin_pass1'])) . "', user_ip = '" . $db->sql_escape($user_ip) . "', user_lang = '" . $db->sql_escape($data['default_lang']) . "', user_email='" . $db->sql_escape($data['board_email1']) . "', user_dateformat='" . $db->sql_escape($lang['default_dateformat']) . "', user_email_hash = " . (crc32($data['board_email1']) . strlen($data['board_email1'])) . ", username_clean = '" . $db->sql_escape(utf8_clean_string($data['admin_name'])) . "' |
|
1315 |
WHERE username = 'Admin'", |
|
1316 |
||
1317 |
'UPDATE ' . $data['table_prefix'] . "moderator_cache |
|
1318 |
SET username = '" . $db->sql_escape($data['admin_name']) . "' |
|
1319 |
WHERE username = 'Admin'", |
|
1320 |
||
1321 |
'UPDATE ' . $data['table_prefix'] . "forums |
|
1322 |
SET forum_last_poster_name = '" . $db->sql_escape($data['admin_name']) . "' |
|
1323 |
WHERE forum_last_poster_name = 'Admin'", |
|
1324 |
||
1325 |
'UPDATE ' . $data['table_prefix'] . "topics |
|
1326 |
SET topic_first_poster_name = '" . $db->sql_escape($data['admin_name']) . "', topic_last_poster_name = '" . $db->sql_escape($data['admin_name']) . "' |
|
1327 |
WHERE topic_first_poster_name = 'Admin' |
|
1328 |
OR topic_last_poster_name = 'Admin'", |
|
1329 |
||
1330 |
'UPDATE ' . $data['table_prefix'] . "users |
|
1331 |
SET user_regdate = $current_time", |
|
1332 |
||
1333 |
'UPDATE ' . $data['table_prefix'] . "posts |
|
1334 |
SET post_time = $current_time, poster_ip = '" . $db->sql_escape($user_ip) . "'", |
|
1335 |
||
1336 |
'UPDATE ' . $data['table_prefix'] . "topics |
|
1337 |
SET topic_time = $current_time, topic_last_post_time = $current_time", |
|
1338 |
||
1339 |
'UPDATE ' . $data['table_prefix'] . "forums |
|
1340 |
SET forum_last_post_time = $current_time", |
|
1341 |
);
|
|
1342 |
||
1343 |
if (@extension_loaded('gd') || can_load_dll('gd'))
|
|
1344 |
{
|
|
1345 |
$sql_ary[] = 'UPDATE ' . $data['table_prefix'] . "config |
|
1346 |
SET config_value = '1' |
|
1347 |
WHERE config_name = 'captcha_gd'"; |
|
1348 |
}
|
|
1349 |
||
1350 |
// We set a (semi-)unique cookie name to bypass login issues related to the cookie name.
|
|
1351 |
$cookie_name = 'phpbb3_'; |
|
1352 |
$rand_str = md5(mt_rand()); |
|
1353 |
$rand_str = str_replace('0', 'z', base_convert($rand_str, 16, 35)); |
|
1354 |
$rand_str = substr($rand_str, 0, 5); |
|
1355 |
$cookie_name .= strtolower($rand_str); |
|
1356 |
||
1357 |
$sql_ary[] = 'UPDATE ' . $data['table_prefix'] . "config |
|
1358 |
SET config_value = '" . $db->sql_escape($cookie_name) . "' |
|
1359 |
WHERE config_name = 'cookie_name'"; |
|
1360 |
||
1361 |
foreach ($sql_ary as $sql) |
|
1362 |
{
|
|
1363 |
//$sql = trim(str_replace('|', ';', $sql)); |
|
1364 |
||
1365 |
if (!$db->sql_query($sql)) |
|
1366 |
{
|
|
1367 |
$error = $db->sql_error(); |
|
1368 |
$this->p_master->db_error($error['message'], $sql, __LINE__, __FILE__); |
|
1369 |
}
|
|
1370 |
}
|
|
1371 |
||
1372 |
$submit = $lang['NEXT_STEP']; |
|
1373 |
||
1374 |
$url = $this->p_master->module_url . "?mode=$mode&sub=final"; |
|
1375 |
||
1376 |
$template->assign_vars(array( |
|
1377 |
'BODY' => $lang['STAGE_CREATE_TABLE_EXPLAIN'], |
|
1378 |
'L_SUBMIT' => $submit, |
|
1379 |
'S_HIDDEN' => build_hidden_fields($data), |
|
1380 |
'U_ACTION' => $url, |
|
1381 |
));
|
|
1382 |
}
|
|
1383 |
||
1384 |
/**
|
|
1385 |
* Build the search index...
|
|
1386 |
*/
|
|
1387 |
function build_search_index($mode, $sub) |
|
1388 |
{
|
|
1389 |
global $db, $lang, $phpbb_root_path, $phpEx, $config; |
|
1390 |
||
1391 |
// Obtain any submitted data
|
|
1392 |
$data = $this->get_submitted_data(); |
|
1393 |
$table_prefix = $data['table_prefix']; |
|
1394 |
||
1395 |
// If we get here and the extension isn't loaded it should be safe to just go ahead and load it
|
|
1396 |
$available_dbms = get_available_dbms($data['dbms']); |
|
1397 |
||
1398 |
if (!isset($available_dbms[$data['dbms']])) |
|
1399 |
{
|
|
1400 |
// Someone's been silly and tried providing a non-existant dbms
|
|
1401 |
$this->p_master->redirect("index.$phpEx?mode=install"); |
|
1402 |
}
|
|
1403 |
||
1404 |
$dbms = $available_dbms[$data['dbms']]['DRIVER']; |
|
1405 |
||
1406 |
// Load the appropriate database class if not already loaded
|
|
1407 |
include($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx); |
|
1408 |
||
1409 |
// Instantiate the database
|
|
1410 |
$db = new $sql_db(); |
|
1411 |
$db->sql_connect($data['dbhost'], $data['dbuser'], $data['dbpasswd'], $data['dbname'], $data['dbport'], false, false); |
|
1412 |
||
1413 |
// NOTE: trigger_error does not work here.
|
|
1414 |
$db->sql_return_on_error(true); |
|
1415 |
||
1416 |
include_once($phpbb_root_path . 'includes/constants.' . $phpEx); |
|
1417 |
include_once($phpbb_root_path . 'includes/search/fulltext_native.' . $phpEx); |
|
1418 |
||
1419 |
// Fill the config array - it is needed by those functions we call
|
|
1420 |
$sql = 'SELECT * |
|
1421 |
FROM ' . CONFIG_TABLE;
|
|
1422 |
$result = $db->sql_query($sql); |
|
1423 |
||
1424 |
$config = array(); |
|
1425 |
while ($row = $db->sql_fetchrow($result)) |
|
1426 |
{
|
|
1427 |
$config[$row['config_name']] = $row['config_value']; |
|
1428 |
}
|
|
1429 |
$db->sql_freeresult($result); |
|
1430 |
||
1431 |
$error = false; |
|
1432 |
$search = new fulltext_native($error); |
|
1433 |
||
1434 |
$sql = 'SELECT post_id, post_subject, post_text, poster_id, forum_id |
|
1435 |
FROM ' . POSTS_TABLE;
|
|
1436 |
$result = $db->sql_query($sql); |
|
1437 |
||
1438 |
while ($row = $db->sql_fetchrow($result)) |
|
1439 |
{
|
|
1440 |
$search->index('post', $row['post_id'], $row['post_text'], $row['post_subject'], $row['poster_id'], $row['forum_id']); |
|
1441 |
}
|
|
1442 |
$db->sql_freeresult($result); |
|
1443 |
}
|
|
1444 |
||
1445 |
/**
|
|
1446 |
* Populate the module tables
|
|
1447 |
*/
|
|
1448 |
function add_modules($mode, $sub) |
|
1449 |
{
|
|
1450 |
global $db, $lang, $phpbb_root_path, $phpEx; |
|
1451 |
||
1452 |
include_once($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx); |
|
1453 |
||
1454 |
$_module = &new acp_modules(); |
|
1455 |
$module_classes = array('acp', 'mcp', 'ucp'); |
|
1456 |
||
1457 |
// Add categories
|
|
1458 |
foreach ($module_classes as $module_class) |
|
1459 |
{
|
|
1460 |
$categories = array(); |
|
1461 |
||
1462 |
// Set the module class
|
|
1463 |
$_module->module_class = $module_class; |
|
1464 |
||
1465 |
foreach ($this->module_categories[$module_class] as $cat_name => $subs) |
|
1466 |
{
|
|
1467 |
$module_data = array( |
|
1468 |
'module_basename' => '',
|
|
1469 |
'module_enabled' => 1,
|
|
1470 |
'module_display' => 1,
|
|
1471 |
'parent_id' => 0,
|
|
1472 |
'module_class' => $module_class, |
|
1473 |
'module_langname' => $cat_name, |
|
1474 |
'module_mode' => '',
|
|
1475 |
'module_auth' => '',
|
|
1476 |
);
|
|
1477 |
||
1478 |
// Add category
|
|
1479 |
$_module->update_module_data($module_data, true); |
|
1480 |
||
1481 |
// Check for last sql error happened
|
|
1482 |
if ($db->sql_error_triggered) |
|
1483 |
{
|
|
1484 |
$error = $db->sql_error($db->sql_error_sql); |
|
1485 |
$this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__); |
|
1486 |
}
|
|
1487 |
||
1488 |
$categories[$cat_name]['id'] = (int) $module_data['module_id']; |
|
1489 |
$categories[$cat_name]['parent_id'] = 0; |
|
1490 |
||
1491 |
// Create sub-categories...
|
|
1492 |
if (is_array($subs)) |
|
1493 |
{
|
|
1494 |
foreach ($subs as $level2_name) |
|
1495 |
{
|
|
1496 |
$module_data = array( |
|
1497 |
'module_basename' => '',
|
|
1498 |
'module_enabled' => 1,
|
|
1499 |
'module_display' => 1,
|
|
1500 |
'parent_id' => (int) $categories[$cat_name]['id'], |
|
1501 |
'module_class' => $module_class, |
|
1502 |
'module_langname' => $level2_name, |
|
1503 |
'module_mode' => '',
|
|
1504 |
'module_auth' => '',
|
|
1505 |
);
|
|
1506 |
||
1507 |
$_module->update_module_data($module_data, true); |
|
1508 |
||
1509 |
// Check for last sql error happened
|
|
1510 |
if ($db->sql_error_triggered) |
|
1511 |
{
|
|
1512 |
$error = $db->sql_error($db->sql_error_sql); |
|
1513 |
$this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__); |
|
1514 |
}
|
|
1515 |
||
1516 |
$categories[$level2_name]['id'] = (int) $module_data['module_id']; |
|
1517 |
$categories[$level2_name]['parent_id'] = (int) $categories[$cat_name]['id']; |
|
1518 |
}
|
|
1519 |
}
|
|
1520 |
}
|
|
1521 |
||
1522 |
// Get the modules we want to add... returned sorted by name
|
|
1523 |
$module_info = $_module->get_module_infos('', $module_class); |
|
1524 |
||
1525 |
foreach ($module_info as $module_basename => $fileinfo) |
|
1526 |
{
|
|
1527 |
foreach ($fileinfo['modes'] as $module_mode => $row) |
|
1528 |
{
|
|
1529 |
foreach ($row['cat'] as $cat_name) |
|
1530 |
{
|
|
1531 |
if (!isset($categories[$cat_name])) |
|
1532 |
{
|
|
1533 |
continue;
|
|
1534 |
}
|
|
1535 |
||
1536 |
$module_data = array( |
|
1537 |
'module_basename' => $module_basename, |
|
1538 |
'module_enabled' => 1,
|
|
1539 |
'module_display' => (isset($row['display'])) ? (int) $row['display'] : 1, |
|
1540 |
'parent_id' => (int) $categories[$cat_name]['id'], |
|
1541 |
'module_class' => $module_class, |
|
1542 |
'module_langname' => $row['title'], |
|
1543 |
'module_mode' => $module_mode, |
|
1544 |
'module_auth' => $row['auth'], |
|
1545 |
);
|
|
1546 |
||
1547 |
$_module->update_module_data($module_data, true); |
|
1548 |
||
1549 |
// Check for last sql error happened
|
|
1550 |
if ($db->sql_error_triggered) |
|
1551 |
{
|
|
1552 |
$error = $db->sql_error($db->sql_error_sql); |
|
1553 |
$this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__); |
|
1554 |
}
|
|
1555 |
}
|
|
1556 |
}
|
|
1557 |
}
|
|
1558 |
||
1559 |
// Move some of the modules around since the code above will put them in the wrong place
|
|
1560 |
if ($module_class == 'acp') |
|
1561 |
{
|
|
1562 |
// Move main module 4 up...
|
|
1563 |
$sql = 'SELECT * |
|
1564 |
FROM ' . MODULES_TABLE . "
|
|
1565 |
WHERE module_basename = 'main' |
|
1566 |
AND module_class = 'acp' |
|
1567 |
AND module_mode = 'main'"; |
|
1568 |
$result = $db->sql_query($sql); |
|
1569 |
$row = $db->sql_fetchrow($result); |
|
1570 |
$db->sql_freeresult($result); |
|
1571 |
|
|
1572 |
$_module->move_module_by($row, 'move_up', 4); |
|
1573 |
||
1574 |
// Move permissions intro screen module 4 up...
|
|
1575 |
$sql = 'SELECT * |
|
1576 |
FROM ' . MODULES_TABLE . "
|
|
1577 |
WHERE module_basename = 'permissions' |
|
1578 |
AND module_class = 'acp' |
|
1579 |
AND module_mode = 'intro'"; |
|
1580 |
$result = $db->sql_query($sql); |
|
1581 |
$row = $db->sql_fetchrow($result); |
|
1582 |
$db->sql_freeresult($result); |
|
1583 |
|
|
1584 |
$_module->move_module_by($row, 'move_up', 4); |
|
1585 |
||
1586 |
// Move manage users screen module 5 up...
|
|
1587 |
$sql = 'SELECT * |
|
1588 |
FROM ' . MODULES_TABLE . "
|
|
1589 |
WHERE module_basename = 'users' |
|
1590 |
AND module_class = 'acp' |
|
1591 |
AND module_mode = 'overview'"; |
|
1592 |
$result = $db->sql_query($sql); |
|
1593 |
$row = $db->sql_fetchrow($result); |
|
1594 |
$db->sql_freeresult($result); |
|
1595 |
|
|
1596 |
$_module->move_module_by($row, 'move_up', 5); |
|
1597 |
}
|
|
1598 |
||
1599 |
if ($module_class == 'ucp') |
|
1600 |
{
|
|
1601 |
// Move attachment module 4 down...
|
|
1602 |
$sql = 'SELECT * |
|
1603 |
FROM ' . MODULES_TABLE . "
|
|
1604 |
WHERE module_basename = 'attachments' |
|
1605 |
AND module_class = 'ucp' |
|
1606 |
AND module_mode = 'attachments'"; |
|
1607 |
$result = $db->sql_query($sql); |
|
1608 |
$row = $db->sql_fetchrow($result); |
|
1609 |
$db->sql_freeresult($result); |
|
1610 |
|
|
1611 |
$_module->move_module_by($row, 'move_down', 4); |
|
1612 |
}
|
|
1613 |
||
1614 |
// And now for the special ones
|
|
1615 |
// (these are modules which appear in multiple categories and thus get added manually to some for more control)
|
|
1616 |
if (isset($this->module_extras[$module_class])) |
|
1617 |
{
|
|
1618 |
foreach ($this->module_extras[$module_class] as $cat_name => $mods) |
|
1619 |
{
|
|
1620 |
$sql = 'SELECT module_id, left_id, right_id |
|
1621 |
FROM ' . MODULES_TABLE . "
|
|
1622 |
WHERE module_langname = '" . $db->sql_escape($cat_name) . "' |
|
1623 |
AND module_class = '" . $db->sql_escape($module_class) . "'"; |
|
1624 |
$result = $db->sql_query_limit($sql, 1); |
|
1625 |
$row2 = $db->sql_fetchrow($result); |
|
1626 |
$db->sql_freeresult($result); |
|
1627 |
||
1628 |
foreach ($mods as $mod_name) |
|
1629 |
{
|
|
1630 |
$sql = 'SELECT * |
|
1631 |
FROM ' . MODULES_TABLE . "
|
|
1632 |
WHERE module_langname = '" . $db->sql_escape($mod_name) . "' |
|
1633 |
AND module_class = '" . $db->sql_escape($module_class) . "' |
|
1634 |
AND module_basename <> ''"; |
|
1635 |
$result = $db->sql_query_limit($sql, 1); |
|
1636 |
$row = $db->sql_fetchrow($result); |
|
1637 |
$db->sql_freeresult($result); |
|
1638 |
||
1639 |
$module_data = array( |
|
1640 |
'module_basename' => $row['module_basename'], |
|
1641 |
'module_enabled' => (int) $row['module_enabled'], |
|
1642 |
'module_display' => (int) $row['module_display'], |
|
1643 |
'parent_id' => (int) $row2['module_id'], |
|
1644 |
'module_class' => $row['module_class'], |
|
1645 |
'module_langname' => $row['module_langname'], |
|
1646 |
'module_mode' => $row['module_mode'], |
|
1647 |
'module_auth' => $row['module_auth'], |
|
1648 |
);
|
|
1649 |
||
1650 |
$_module->update_module_data($module_data, true); |
|
1651 |
||
1652 |
// Check for last sql error happened
|
|
1653 |
if ($db->sql_error_triggered) |
|
1654 |
{
|
|
1655 |
$error = $db->sql_error($db->sql_error_sql); |
|
1656 |
$this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__); |
|
1657 |
}
|
|
1658 |
}
|
|
1659 |
}
|
|
1660 |
}
|
|
1661 |
||
1662 |
$_module->remove_cache_file(); |
|
1663 |
}
|
|
1664 |
}
|
|
1665 |
||
1666 |
/**
|
|
1667 |
* Populate the language tables
|
|
1668 |
*/
|
|
1669 |
function add_language($mode, $sub) |
|
1670 |
{
|
|
1671 |
global $db, $lang, $phpbb_root_path, $phpEx; |
|
1672 |
||
1673 |
$dir = @opendir($phpbb_root_path . 'language'); |
|
1674 |
||
1675 |
if (!$dir) |
|
1676 |
{
|
|
1677 |
$this->error('Unable to access the language directory', __LINE__, __FILE__); |
|
1678 |
}
|
|
1679 |
||
1680 |
while (($file = readdir($dir)) !== false) |
|
1681 |
{
|
|
1682 |
$path = $phpbb_root_path . 'language/' . $file; |
|
1683 |
||
1684 |
if ($file == '.' || $file == '..' || is_link($path) || is_file($path) || $file == 'CVS') |
|
1685 |
{
|
|
1686 |
continue;
|
|
1687 |
}
|
|
1688 |
||
1689 |
if (is_dir($path) && file_exists($path . '/iso.txt')) |
|
1690 |
{
|
|
1691 |
$lang_file = file("{$phpbb_root_path}language/$path/iso.txt"); |
|
1692 |
||
1693 |
$lang_pack = array( |
|
1694 |
'lang_iso' => basename($path), |
|
1695 |
'lang_dir' => basename($path), |
|
1696 |
'lang_english_name' => trim(htmlspecialchars($lang_file[0])), |
|
1697 |
'lang_local_name' => trim(htmlspecialchars($lang_file[1], ENT_COMPAT, 'UTF-8')), |
|
1698 |
'lang_author' => trim(htmlspecialchars($lang_file[2], ENT_COMPAT, 'UTF-8')), |
|
1699 |
);
|
|
1700 |
||
1701 |
$db->sql_query('INSERT INTO ' . LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $lang_pack)); |
|
1702 |
||
1703 |
if ($db->sql_error_triggered) |
|
1704 |
{
|
|
1705 |
$error = $db->sql_error($db->sql_error_sql); |
|
1706 |
$this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__); |
|
1707 |
}
|
|
1708 |
||
1709 |
$valid_localized = array( |
|
1710 |
'icon_back_top', 'icon_contact_aim', 'icon_contact_email', 'icon_contact_icq', 'icon_contact_jabber', 'icon_contact_msnm', 'icon_contact_pm', 'icon_contact_yahoo', 'icon_contact_www', 'icon_post_delete', 'icon_post_edit', 'icon_post_info', 'icon_post_quote', 'icon_post_report', 'icon_user_online', 'icon_user_offline', 'icon_user_profile', 'icon_user_search', 'icon_user_warn', 'button_pm_forward', 'button_pm_new', 'button_pm_reply', 'button_topic_locked', 'button_topic_new', 'button_topic_reply',
|
|
1711 |
);
|
|
1712 |
||
1713 |
$sql_ary = array(); |
|
1714 |
||
1715 |
$sql = 'SELECT * |
|
1716 |
FROM ' . STYLES_IMAGESET_TABLE;
|
|
1717 |
$result = $db->sql_query($sql); |
|
1718 |
||
1719 |
while ($imageset_row = $db->sql_fetchrow($result)) |
|
1720 |
{
|
|
1721 |
if (@file_exists("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$lang_pack['lang_iso']}/imageset.cfg")) |
|
1722 |
{
|
|
1723 |
$cfg_data_imageset_data = parse_cfg_file("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$lang_pack['lang_iso']}/imageset.cfg"); |
|
1724 |
foreach ($cfg_data_imageset_data as $image_name => $value) |
|
1725 |
{
|
|
1726 |
if (strpos($value, '*') !== false) |
|
1727 |
{
|
|
1728 |
if (substr($value, -1, 1) === '*') |
|
1729 |
{
|
|
1730 |
list($image_filename, $image_height) = explode('*', $value); |
|
1731 |
$image_width = 0; |
|
1732 |
}
|
|
1733 |
else
|
|
1734 |
{
|
|
1735 |
list($image_filename, $image_height, $image_width) = explode('*', $value); |
|
1736 |
}
|
|
1737 |
}
|
|
1738 |
else
|
|
1739 |
{
|
|
1740 |
$image_filename = $value; |
|
1741 |
$image_height = $image_width = 0; |
|
1742 |
}
|
|
1743 |
||
1744 |
if (strpos($image_name, 'img_') === 0 && $image_filename) |
|
1745 |
{
|
|
1746 |
$image_name = substr($image_name, 4); |
|
1747 |
if (in_array($image_name, $valid_localized)) |
|
1748 |
{
|
|
1749 |
$sql_ary[] = array( |
|
1750 |
'image_name' => (string) $image_name, |
|
1751 |
'image_filename' => (string) $image_filename, |
|
1752 |
'image_height' => (int) $image_height, |
|
1753 |
'image_width' => (int) $image_width, |
|
1754 |
'imageset_id' => (int) $imageset_row['imageset_id'], |
|
1755 |
'image_lang' => (string) $lang_pack['lang_iso'], |
|
1756 |
);
|
|
1757 |
}
|
|
1758 |
}
|
|
1759 |
}
|
|
1760 |
}
|
|
1761 |
}
|
|
1762 |
$db->sql_freeresult($result); |
|
1763 |
||
1764 |
if (sizeof($sql_ary)) |
|
1765 |
{
|
|
1766 |
$db->sql_multi_insert(STYLES_IMAGESET_DATA_TABLE, $sql_ary); |
|
1767 |
||
1768 |
if ($db->sql_error_triggered) |
|
1769 |
{
|
|
1770 |
$error = $db->sql_error($db->sql_error_sql); |
|
1771 |
$this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__); |
|
1772 |
}
|
|
1773 |
}
|
|
1774 |
}
|
|
1775 |
}
|
|
1776 |
closedir($dir); |
|
1777 |
}
|
|
1778 |
||
1779 |
/**
|
|
1780 |
* Add search robots to the database
|
|
1781 |
*/
|
|
1782 |
function add_bots($mode, $sub) |
|
1783 |
{
|
|
1784 |
global $db, $lang, $phpbb_root_path, $phpEx, $config; |
|
1785 |
||
1786 |
// Obtain any submitted data
|
|
1787 |
$data = $this->get_submitted_data(); |
|
1788 |
||
1789 |
// Fill the config array - it is needed by those functions we call
|
|
1790 |
$sql = 'SELECT * |
|
1791 |
FROM ' . CONFIG_TABLE;
|
|
1792 |
$result = $db->sql_query($sql); |
|
1793 |
||
1794 |
$config = array(); |
|
1795 |
while ($row = $db->sql_fetchrow($result)) |
|
1796 |
{
|
|
1797 |
$config[$row['config_name']] = $row['config_value']; |
|
1798 |
}
|
|
1799 |
$db->sql_freeresult($result); |
|
1800 |
||
1801 |
$sql = 'SELECT group_id |
|
1802 |
FROM ' . GROUPS_TABLE . "
|
|
1803 |
WHERE group_name = 'BOTS'"; |
|
1804 |
$result = $db->sql_query($sql); |
|
1805 |
$group_id = (int) $db->sql_fetchfield('group_id'); |
|
1806 |
$db->sql_freeresult($result); |
|
1807 |
||
1808 |
if (!$group_id) |
|
1809 |
{
|
|
1810 |
// If we reach this point then something has gone very wrong
|
|
1811 |
$this->p_master->error($lang['NO_GROUP'], __LINE__, __FILE__); |
|
1812 |
}
|
|
1813 |
||
1814 |
if (!function_exists('user_add'))
|
|
1815 |
{
|
|
1816 |
include($phpbb_root_path . 'includes/functions_user.' . $phpEx); |
|
1817 |
}
|
|
1818 |
||
1819 |
foreach ($this->bot_list as $bot_name => $bot_ary) |
|
1820 |
{
|
|
1821 |
$user_row = array( |
|
1822 |
'user_type' => USER_IGNORE,
|
|
1823 |
'group_id' => $group_id, |
|
1824 |
'username' => $bot_name, |
|
1825 |
'user_regdate' => time(),
|
|
1826 |
'user_password' => '',
|
|
1827 |
'user_colour' => '9E8DA7',
|
|
1828 |
'user_email' => '',
|
|
1829 |
'user_lang' => $data['default_lang'], |
|
1830 |
'user_style' => 1,
|
|
1831 |
'user_timezone' => 0,
|
|
1832 |
'user_dateformat' => $lang['default_dateformat'], |
|
1833 |
'user_allow_massemail' => 0,
|
|
1834 |
);
|
|
1835 |
|
|
1836 |
$user_id = user_add($user_row); |
|
1837 |
||
1838 |
if (!$user_id) |
|
1839 |
{
|
|
1840 |
// If we can't insert this user then continue to the next one to avoid inconsistant data
|
|
1841 |
$this->p_master->db_error('Unable to insert bot into users table', $db->sql_error_sql, __LINE__, __FILE__, true); |
|
1842 |
continue;
|
|
1843 |
}
|
|
1844 |
||
1845 |
$sql = 'INSERT INTO ' . BOTS_TABLE . ' ' . $db->sql_build_array('INSERT', array( |
|
1846 |
'bot_active' => 1,
|
|
1847 |
'bot_name' => (string) $bot_name, |
|
1848 |
'user_id' => (int) $user_id, |
|
1849 |
'bot_agent' => (string) $bot_ary[0], |
|
1850 |
'bot_ip' => (string) $bot_ary[1], |
|
1851 |
));
|
|
1852 |
||
1853 |
$result = $db->sql_query($sql); |
|
1854 |
}
|
|
1855 |
}
|
|
1856 |
||
1857 |
/**
|
|
1858 |
* Sends an email to the board administrator with their password and some useful links
|
|
1859 |
*/
|
|
1860 |
function email_admin($mode, $sub) |
|
1861 |
{
|
|
1862 |
global $auth, $config, $db, $lang, $template, $user, $phpbb_root_path, $phpEx; |
|
1863 |
||
1864 |
$this->page_title = $lang['STAGE_FINAL']; |
|
1865 |
||
1866 |
// Obtain any submitted data
|
|
1867 |
$data = $this->get_submitted_data(); |
|
1868 |
||
1869 |
$sql = 'SELECT * |
|
1870 |
FROM ' . CONFIG_TABLE;
|
|
1871 |
$result = $db->sql_query($sql); |
|
1872 |
||
1873 |
$config = array(); |
|
1874 |
while ($row = $db->sql_fetchrow($result)) |
|
1875 |
{
|
|
1876 |
$config[$row['config_name']] = $row['config_value']; |
|
1877 |
}
|
|
1878 |
$db->sql_freeresult($result); |
|
1879 |
||
1880 |
$user->session_begin(); |
|
1881 |
$auth->login($data['admin_name'], $data['admin_pass1'], false, true, true); |
|
1882 |
||
1883 |
// OK, Now that we've reached this point we can be confident that everything
|
|
1884 |
// is installed and working......I hope :)
|
|
1885 |
// So it's time to send an email to the administrator confirming the details
|
|
1886 |
// they entered
|
|
1887 |
||
1888 |
if ($config['email_enable']) |
|
1889 |
{
|
|
1890 |
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx); |
|
1891 |
||
1892 |
$messenger = new messenger(false); |
|
1893 |
||
1894 |
$messenger->template('installed', $data['language']); |
|
1895 |
||
1896 |
$messenger->to($data['board_email1'], $data['admin_name']); |
|
1897 |
||
1898 |
$messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); |
|
1899 |
$messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); |
|
1900 |
$messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); |
|
1901 |
$messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); |
|
1902 |
||
1903 |
$messenger->assign_vars(array( |
|
1904 |
'USERNAME' => htmlspecialchars_decode($data['admin_name']), |
|
1905 |
'PASSWORD' => htmlspecialchars_decode($data['admin_pass1'])) |
|
1906 |
);
|
|
1907 |
||
1908 |
$messenger->send(NOTIFY_EMAIL); |
|
1909 |
}
|
|
1910 |
||
1911 |
// And finally, add a note to the log
|
|
1912 |
add_log('admin', 'LOG_INSTALL_INSTALLED', $config['version']); |
|
1913 |
||
1914 |
$template->assign_vars(array( |
|
1915 |
'TITLE' => $lang['INSTALL_CONGRATS'], |
|
1916 |
'BODY' => sprintf($lang['INSTALL_CONGRATS_EXPLAIN'], $config['version'], append_sid($phpbb_root_path . 'install/index.' . $phpEx, 'mode=convert&language=' . $data['language']), '../docs/README.html'), |
|
1917 |
'L_SUBMIT' => $lang['INSTALL_LOGIN'], |
|
1918 |
'U_ACTION' => append_sid($phpbb_root_path . 'adm/index.' . $phpEx), |
|
1919 |
));
|
|
1920 |
}
|
|
1921 |
||
1922 |
/**
|
|
1923 |
* Generate a list of available mail server authentication methods
|
|
1924 |
*/
|
|
1925 |
function mail_auth_select($selected_method) |
|
1926 |
{
|
|
1927 |
global $lang; |
|
1928 |
||
1929 |
$auth_methods = array('PLAIN', 'LOGIN', 'CRAM-MD5', 'DIGEST-MD5', 'POP-BEFORE-SMTP'); |
|
1930 |
$s_smtp_auth_options = ''; |
|
1931 |
||
1932 |
foreach ($auth_methods as $method) |
|
1933 |
{
|
|
1934 |
$s_smtp_auth_options .= '<option value="' . $method . '"' . (($selected_method == $method) ? ' selected="selected"' : '') . '>' . $lang['SMTP_' . str_replace('-', '_', $method)] . '</option>'; |
|
1935 |
}
|
|
1936 |
||
1937 |
return $s_smtp_auth_options; |
|
1938 |
}
|
|
1939 |
||
1940 |
/**
|
|
1941 |
* Get submitted data
|
|
1942 |
*/
|
|
1943 |
function get_submitted_data()
|
|
1944 |
{
|
|
1945 |
return array(
|
|
1946 |
'language' => basename(request_var('language', '')),
|
|
1947 |
'dbms' => request_var('dbms', ''),
|
|
1948 |
'dbhost' => request_var('dbhost', ''),
|
|
1949 |
'dbport' => request_var('dbport', ''),
|
|
1950 |
'dbuser' => request_var('dbuser', ''),
|
|
1951 |
'dbpasswd' => htmlspecialchars_decode(request_var('dbpasswd', '', true)),
|
|
1952 |
'dbname' => request_var('dbname', ''),
|
|
1953 |
'table_prefix' => request_var('table_prefix', ''),
|
|
1954 |
'default_lang' => basename(request_var('default_lang', '')),
|
|
1955 |
'admin_name' => utf8_normalize_nfc(request_var('admin_name', '', true)),
|
|
1956 |
'admin_pass1' => request_var('admin_pass1', '', true),
|
|
1957 |
'admin_pass2' => request_var('admin_pass2', '', true),
|
|
1958 |
'board_email1' => strtolower(request_var('board_email1', '')),
|
|
1959 |
'board_email2' => strtolower(request_var('board_email2', '')),
|
|
1960 |
'img_imagick' => request_var('img_imagick', ''),
|
|
1961 |
'ftp_path' => request_var('ftp_path', ''),
|
|
1962 |
'ftp_user' => request_var('ftp_user', ''),
|
|
1963 |
'ftp_pass' => request_var('ftp_pass', ''),
|
|
1964 |
'email_enable' => request_var('email_enable', ''),
|
|
1965 |
'smtp_delivery' => request_var('smtp_delivery', ''),
|
|
1966 |
'smtp_host' => request_var('smtp_host', ''),
|
|
1967 |
'smtp_auth' => request_var('smtp_auth', ''),
|
|
1968 |
'smtp_user' => request_var('smtp_user', ''),
|
|
1969 |
'smtp_pass' => request_var('smtp_pass', ''),
|
|
1970 |
'cookie_secure' => request_var('cookie_secure', ''),
|
|
1971 |
'force_server_vars' => request_var('force_server_vars', ''),
|
|
1972 |
'server_protocol' => request_var('server_protocol', ''),
|
|
1973 |
'server_name' => request_var('server_name', ''),
|
|
1974 |
'server_port' => request_var('server_port', ''),
|
|
1975 |
'script_path' => request_var('script_path', ''),
|
|
1976 |
);
|
|
1977 |
}
|
|
1978 |
||
1979 |
/**
|
|
1980 |
* The information below will be used to build the input fields presented to the user
|
|
1981 |
*/
|
|
1982 |
var $db_config_options = array( |
|
1983 |
'legend1' => 'DB_CONFIG',
|
|
1984 |
'dbms' => array('lang' => 'DBMS', 'type' => 'select', 'options' => 'dbms_select(\'{VALUE}\')', 'explain' => false),
|
|
1985 |
'dbhost' => array('lang' => 'DB_HOST', 'type' => 'text:25:100', 'explain' => true),
|
|
1986 |
'dbport' => array('lang' => 'DB_PORT', 'type' => 'text:25:100', 'explain' => true),
|
|
1987 |
'dbname' => array('lang' => 'DB_NAME', 'type' => 'text:25:100', 'explain' => false),
|
|
1988 |
'dbuser' => array('lang' => 'DB_USERNAME', 'type' => 'text:25:100', 'explain' => false),
|
|
1989 |
'dbpasswd' => array('lang' => 'DB_PASSWORD', 'type' => 'password:25:100', 'explain' => false),
|
|
1990 |
'table_prefix' => array('lang' => 'TABLE_PREFIX', 'type' => 'text:25:100', 'explain' => false),
|
|
1991 |
);
|
|
1992 |
var $admin_config_options = array( |
|
1993 |
'legend1' => 'ADMIN_CONFIG',
|
|
1994 |
'default_lang' => array('lang' => 'DEFAULT_LANG', 'type' => 'select', 'options' => '$this->module->inst_language_select(\'{VALUE}\')', 'explain' => false), |
|
1995 |
'admin_name' => array('lang' => 'ADMIN_USERNAME', 'type' => 'text:25:100', 'explain' => true),
|
|
1996 |
'admin_pass1' => array('lang' => 'ADMIN_PASSWORD', 'type' => 'password:25:100', 'explain' => true),
|
|
1997 |
'admin_pass2' => array('lang' => 'ADMIN_PASSWORD_CONFIRM', 'type' => 'password:25:100', 'explain' => false),
|
|
1998 |
'board_email1' => array('lang' => 'CONTACT_EMAIL', 'type' => 'text:25:100', 'explain' => false),
|
|
1999 |
'board_email2' => array('lang' => 'CONTACT_EMAIL_CONFIRM', 'type' => 'text:25:100', 'explain' => false),
|
|
2000 |
);
|
|
2001 |
var $advanced_config_options = array( |
|
2002 |
'legend1' => 'ACP_EMAIL_SETTINGS',
|
|
2003 |
'email_enable' => array('lang' => 'ENABLE_EMAIL', 'type' => 'radio:enabled_disabled', 'explain' => true),
|
|
2004 |
'smtp_delivery' => array('lang' => 'USE_SMTP', 'type' => 'radio:yes_no', 'explain' => true),
|
|
2005 |
'smtp_host' => array('lang' => 'SMTP_SERVER', 'type' => 'text:25:50', 'explain' => false),
|
|
2006 |
'smtp_auth' => array('lang' => 'SMTP_AUTH_METHOD', 'type' => 'select', 'options' => '$this->module->mail_auth_select(\'{VALUE}\')', 'explain' => true), |
|
2007 |
'smtp_user' => array('lang' => 'SMTP_USERNAME', 'type' => 'text:25:255', 'explain' => true),
|
|
2008 |
'smtp_pass' => array('lang' => 'SMTP_PASSWORD', 'type' => 'password:25:255', 'explain' => true),
|
|
2009 |
||
2010 |
'legend2' => 'SERVER_URL_SETTINGS',
|
|
2011 |
'cookie_secure' => array('lang' => 'COOKIE_SECURE', 'type' => 'radio:enabled_disabled', 'explain' => true),
|
|
2012 |
'force_server_vars' => array('lang' => 'FORCE_SERVER_VARS', 'type' => 'radio:yes_no', 'explain' => true),
|
|
2013 |
'server_protocol' => array('lang' => 'SERVER_PROTOCOL', 'type' => 'text:10:10', 'explain' => true),
|
|
2014 |
'server_name' => array('lang' => 'SERVER_NAME', 'type' => 'text:40:255', 'explain' => true),
|
|
2015 |
'server_port' => array('lang' => 'SERVER_PORT', 'type' => 'text:5:5', 'explain' => true),
|
|
2016 |
'script_path' => array('lang' => 'SCRIPT_PATH', 'type' => 'text::255', 'explain' => true),
|
|
2017 |
);
|
|
2018 |
||
2019 |
/**
|
|
2020 |
* Specific PHP modules we may require for certain optional or extended features
|
|
2021 |
*/
|
|
2022 |
var $php_dlls_other = array('zlib', 'ftp', 'gd', 'xml'); |
|
2023 |
||
2024 |
/**
|
|
2025 |
* A list of the web-crawlers/bots we recognise by default
|
|
2026 |
*
|
|
2027 |
* Candidates but not included:
|
|
2028 |
* 'Accoona [Bot]' 'Accoona-AI-Agent/'
|
|
2029 |
* 'ASPseek [Crawler]' 'ASPseek/'
|
|
2030 |
* 'Boitho [Crawler]' 'boitho.com-dc/'
|
|
2031 |
* 'Bunnybot [Bot]' 'powered by www.buncat.de'
|
|
2032 |
* 'Cosmix [Bot]' 'cfetch/'
|
|
2033 |
* 'Crawler Search [Crawler]' '.Crawler-Search.de'
|
|
2034 |
* 'Findexa [Crawler]' 'Findexa Crawler ('
|
|
2035 |
* 'GBSpider [Spider]' 'GBSpider v'
|
|
2036 |
* 'genie [Bot]' 'genieBot ('
|
|
2037 |
* 'Hogsearch [Bot]' 'oegp v. 1.3.0'
|
|
2038 |
* 'Insuranco [Bot]' 'InsurancoBot'
|
|
2039 |
* 'IRLbot [Bot]' 'http://irl.cs.tamu.edu/crawler'
|
|
2040 |
* 'ISC Systems [Bot]' 'ISC Systems iRc Search'
|
|
2041 |
* 'Jyxobot [Bot]' 'Jyxobot/'
|
|
2042 |
* 'Kraehe [Metasuche]' '-DIE-KRAEHE- META-SEARCH-ENGINE/'
|
|
2043 |
* 'LinkWalker' 'LinkWalker'
|
|
2044 |
* 'MMSBot [Bot]' 'http://www.mmsweb.at/bot.html'
|
|
2045 |
* 'Naver [Bot]' 'nhnbot@naver.com)'
|
|
2046 |
* 'NetResearchServer' 'NetResearchServer/'
|
|
2047 |
* 'Nimble [Crawler]' 'NimbleCrawler'
|
|
2048 |
* 'Ocelli [Bot]' 'Ocelli/'
|
|
2049 |
* 'Onsearch [Bot]' 'onCHECK-Robot'
|
|
2050 |
* 'Orange [Spider]' 'OrangeSpider'
|
|
2051 |
* 'Sproose [Bot]' 'http://www.sproose.com/bot'
|
|
2052 |
* 'Susie [Sync]' '!Susie (http://www.sync2it.com/susie)'
|
|
2053 |
* 'Tbot [Bot]' 'Tbot/'
|
|
2054 |
* 'Thumbshots [Capture]' 'thumbshots-de-Bot'
|
|
2055 |
* 'Vagabondo [Crawler]' 'http://webagent.wise-guys.nl/'
|
|
2056 |
* 'Walhello [Bot]' 'appie 1.1 (www.walhello.com)'
|
|
2057 |
* 'WissenOnline [Bot]' 'WissenOnline-Bot'
|
|
2058 |
* 'WWWeasel [Bot]' 'WWWeasel Robot v'
|
|
2059 |
* 'Xaldon [Spider]' 'Xaldon WebSpider'
|
|
2060 |
*/
|
|
2061 |
var $bot_list = array( |
|
2062 |
'AdsBot [Google]' => array('AdsBot-Google', ''),
|
|
2063 |
'Alexa [Bot]' => array('ia_archiver', ''),
|
|
2064 |
'Alta Vista [Bot]' => array('Scooter/', ''),
|
|
2065 |
'Ask Jeeves [Bot]' => array('Ask Jeeves', ''),
|
|
2066 |
'Baidu [Spider]' => array('Baiduspider+(', ''),
|
|
2067 |
'Exabot [Bot]' => array('Exabot/', ''),
|
|
2068 |
'FAST Enterprise [Crawler]' => array('FAST Enterprise Crawler', ''),
|
|
2069 |
'FAST WebCrawler [Crawler]' => array('FAST-WebCrawler/', ''),
|
|
2070 |
'Francis [Bot]' => array('http://www.neomo.de/', ''),
|
|
2071 |
'Gigabot [Bot]' => array('Gigabot/', ''),
|
|
2072 |
'Google Adsense [Bot]' => array('Mediapartners-Google', ''),
|
|
2073 |
'Google Desktop' => array('Google Desktop', ''),
|
|
2074 |
'Google Feedfetcher' => array('Feedfetcher-Google', ''),
|
|
2075 |
'Google [Bot]' => array('Googlebot', ''),
|
|
2076 |
'Heise IT-Markt [Crawler]' => array('heise-IT-Markt-Crawler', ''),
|
|
2077 |
'Heritrix [Crawler]' => array('heritrix/1.', ''),
|
|
2078 |
'IBM Research [Bot]' => array('ibm.com/cs/crawler', ''),
|
|
2079 |
'ICCrawler - ICjobs' => array('ICCrawler - ICjobs', ''),
|
|
2080 |
'ichiro [Crawler]' => array('ichiro/2', ''),
|
|
2081 |
'Majestic-12 [Bot]' => array('MJ12bot/', ''),
|
|
2082 |
'Metager [Bot]' => array('MetagerBot/', ''),
|
|
2083 |
'MSN NewsBlogs' => array('msnbot-NewsBlogs/', ''),
|
|
2084 |
'MSN [Bot]' => array('msnbot/', ''),
|
|
2085 |
'MSNbot Media' => array('msnbot-media/', ''),
|
|
2086 |
'NG-Search [Bot]' => array('NG-Search/', ''),
|
|
2087 |
'Nutch [Bot]' => array('http://lucene.apache.org/nutch/', ''),
|
|
2088 |
'Nutch/CVS [Bot]' => array('NutchCVS/', ''),
|
|
2089 |
'OmniExplorer [Bot]' => array('OmniExplorer_Bot/', ''),
|
|
2090 |
'Online link [Validator]' => array('online link validator', ''),
|
|
2091 |
'psbot [Picsearch]' => array('psbot/0', ''),
|
|
2092 |
'Seekport [Bot]' => array('Seekbot/', ''),
|
|
2093 |
'Sensis [Crawler]' => array('Sensis Web Crawler', ''),
|
|
2094 |
'SEO Crawler' => array('SEO search Crawler/', ''),
|
|
2095 |
'Seoma [Crawler]' => array('Seoma [SEO Crawler]', ''),
|
|
2096 |
'SEOSearch [Crawler]' => array('SEOsearch/', ''),
|
|
2097 |
'Snappy [Bot]' => array('Snappy/1.1 ( http://www.urltrends.com/ )', ''),
|
|
2098 |
'Steeler [Crawler]' => array('http://www.tkl.iis.u-tokyo.ac.jp/~crawler/', ''),
|
|
2099 |
'Synoo [Bot]' => array('SynooBot/', ''),
|
|
2100 |
'Telekom [Bot]' => array('crawleradmin.t-info@telekom.de', ''),
|
|
2101 |
'TurnitinBot [Bot]' => array('TurnitinBot/', ''),
|
|
2102 |
'Voyager [Bot]' => array('voyager/1.0', ''),
|
|
2103 |
'W3 [Sitesearch]' => array('W3 SiteSearch Crawler', ''),
|
|
2104 |
'W3C [Linkcheck]' => array('W3C-checklink/', ''),
|
|
2105 |
'W3C [Validator]' => array('W3C_*Validator', ''),
|
|
2106 |
'WiseNut [Bot]' => array('http://www.WISEnutbot.com', ''),
|
|
2107 |
'YaCy [Bot]' => array('yacybot', ''),
|
|
2108 |
'Yahoo MMCrawler [Bot]' => array('Yahoo-MMCrawler/', ''),
|
|
2109 |
'Yahoo Slurp [Bot]' => array('Yahoo! DE Slurp', ''),
|
|
2110 |
'Yahoo [Bot]' => array('Yahoo! Slurp', ''),
|
|
2111 |
'YahooSeeker [Bot]' => array('YahooSeeker/', ''),
|
|
2112 |
);
|
|
2113 |
||
2114 |
/**
|
|
2115 |
* Define the module structure so that we can populate the database without
|
|
2116 |
* needing to hard-code module_id values
|
|
2117 |
*/
|
|
2118 |
var $module_categories = array( |
|
2119 |
'acp' => array(
|
|
2120 |
'ACP_CAT_GENERAL' => array(
|
|
2121 |
'ACP_QUICK_ACCESS',
|
|
2122 |
'ACP_BOARD_CONFIGURATION',
|
|
2123 |
'ACP_CLIENT_COMMUNICATION',
|
|
2124 |
'ACP_SERVER_CONFIGURATION',
|
|
2125 |
),
|
|
2126 |
'ACP_CAT_FORUMS' => array(
|
|
2127 |
'ACP_MANAGE_FORUMS',
|
|
2128 |
'ACP_FORUM_BASED_PERMISSIONS',
|
|
2129 |
),
|
|
2130 |
'ACP_CAT_POSTING' => array(
|
|
2131 |
'ACP_MESSAGES',
|
|
2132 |
'ACP_ATTACHMENTS',
|
|
2133 |
),
|
|
2134 |
'ACP_CAT_USERGROUP' => array(
|
|
2135 |
'ACP_CAT_USERS',
|
|
2136 |
'ACP_GROUPS',
|
|
2137 |
'ACP_USER_SECURITY',
|
|
2138 |
),
|
|
2139 |
'ACP_CAT_PERMISSIONS' => array(
|
|
2140 |
'ACP_GLOBAL_PERMISSIONS',
|
|
2141 |
'ACP_FORUM_BASED_PERMISSIONS',
|
|
2142 |
'ACP_PERMISSION_ROLES',
|
|
2143 |
'ACP_PERMISSION_MASKS',
|
|
2144 |
),
|
|
2145 |
'ACP_CAT_STYLES' => array(
|
|
2146 |
'ACP_STYLE_MANAGEMENT',
|
|
2147 |
'ACP_STYLE_COMPONENTS',
|
|
2148 |
),
|
|
2149 |
'ACP_CAT_MAINTENANCE' => array(
|
|
2150 |
'ACP_FORUM_LOGS',
|
|
2151 |
'ACP_CAT_DATABASE',
|
|
2152 |
),
|
|
2153 |
'ACP_CAT_SYSTEM' => array(
|
|
2154 |
'ACP_AUTOMATION',
|
|
2155 |
'ACP_GENERAL_TASKS',
|
|
2156 |
'ACP_MODULE_MANAGEMENT',
|
|
2157 |
),
|
|
2158 |
'ACP_CAT_DOT_MODS' => null,
|
|
2159 |
),
|
|
2160 |
'mcp' => array(
|
|
2161 |
'MCP_MAIN' => null,
|
|
2162 |
'MCP_QUEUE' => null,
|
|
2163 |
'MCP_REPORTS' => null,
|
|
2164 |
'MCP_NOTES' => null,
|
|
2165 |
'MCP_WARN' => null,
|
|
2166 |
'MCP_LOGS' => null,
|
|
2167 |
'MCP_BAN' => null,
|
|
2168 |
),
|
|
2169 |
'ucp' => array(
|
|
2170 |
'UCP_MAIN' => null,
|
|
2171 |
'UCP_PROFILE' => null,
|
|
2172 |
'UCP_PREFS' => null,
|
|
2173 |
'UCP_PM' => null,
|
|
2174 |
'UCP_USERGROUPS' => null,
|
|
2175 |
'UCP_ZEBRA' => null,
|
|
2176 |
),
|
|
2177 |
);
|
|
2178 |
||
2179 |
var $module_extras = array( |
|
2180 |
'acp' => array(
|
|
2181 |
'ACP_QUICK_ACCESS' => array(
|
|
2182 |
'ACP_MANAGE_USERS',
|
|
2183 |
'ACP_GROUPS_MANAGE',
|
|
2184 |
'ACP_MANAGE_FORUMS',
|
|
2185 |
'ACP_MOD_LOGS',
|
|
2186 |
'ACP_BOTS',
|
|
2187 |
'ACP_PHP_INFO',
|
|
2188 |
),
|
|
2189 |
'ACP_FORUM_BASED_PERMISSIONS' => array(
|
|
2190 |
'ACP_FORUM_PERMISSIONS',
|
|
2191 |
'ACP_FORUM_MODERATORS',
|
|
2192 |
'ACP_USERS_FORUM_PERMISSIONS',
|
|
2193 |
'ACP_GROUPS_FORUM_PERMISSIONS',
|
|
2194 |
),
|
|
2195 |
),
|
|
2196 |
);
|
|
2197 |
}
|
|
2198 |
||
2199 |
?>
|