]> scripts.mit.edu Git - autoinstalls/phpBB.git/blob - install/install.php
phpBB 2.0.19-scripts
[autoinstalls/phpBB.git] / install / install.php
1 <?php
2 /***************************************************************************
3  *                                install.php
4  *                            -------------------
5  *   begin                : Tuesday, Sept 11, 2001
6  *   copyright            : (C) 2001 The phpBB Group
7  *   email                : support@phpbb.com
8  *
9  *   $Id: install.php,v 1.6.2.14 2005/12/29 11:51:11 acydburn Exp $
10  *
11  ***************************************************************************/
12
13 /***************************************************************************
14  *
15  *   This program is free software; you can redistribute it and/or modify
16  *   it under the terms of the GNU General Public License as published by
17  *   the Free Software Foundation; either version 2 of the License, or
18  *   (at your option) any later version.
19  *
20  ***************************************************************************/
21
22 // ---------
23 // FUNCTIONS
24 //
25 function page_header($text, $form_action = false)
26 {
27         global $phpEx, $lang;
28
29 ?>
30 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
31 <html>
32 <head>
33 <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $lang['ENCODING']; ?>">
34 <meta http-equiv="Content-Style-Type" content="text/css">
35 <title><?php echo $lang['Welcome_install'];?></title>
36 <link rel="stylesheet" href="../templates/subSilver/subSilver.css" type="text/css">
37 <style type="text/css">
38 <!--
39 th                      { background-image: url('../templates/subSilver/images/cellpic3.gif') }
40 td.cat          { background-image: url('../templates/subSilver/images/cellpic1.gif') }
41 td.rowpic       { background-image: url('../templates/subSilver/images/cellpic2.jpg'); background-repeat: repeat-y }
42 td.catHead,td.catSides,td.catLeft,td.catRight,td.catBottom { background-image: url('../templates/subSilver/images/cellpic1.gif') }
43
44 /* Import the fancy styles for IE only (NS4.x doesn't use the @import function) */
45 @import url("../templates/subSilver/formIE.css"); 
46 //-->
47 </style>
48 </head>
49 <body bgcolor="#E5E5E5" text="#000000" link="#006699" vlink="#5584AA">
50
51 <table width="100%" border="0" cellspacing="0" cellpadding="10" align="center"> 
52         <tr>
53                 <td class="bodyline" width="100%"><table width="100%" border="0" cellspacing="0" cellpadding="0">
54                         <tr>
55                                 <td><table width="100%" border="0" cellspacing="0" cellpadding="0">
56                                         <tr>
57                                                 <td><img src="../templates/subSilver/images/logo_phpBB.gif" border="0" alt="Forum Home" vspace="1" /></td>
58                                                 <td align="center" width="100%" valign="middle"><span class="maintitle"><?php echo $lang['Welcome_install'];?></span></td>
59                                         </tr>
60                                 </table></td>
61                         </tr>
62                         <tr>
63                                 <td><br /><br /></td>
64                         </tr>
65                         <tr>
66                                 <td colspan="2"><table width="90%" border="0" align="center" cellspacing="0" cellpadding="0">
67                                         <tr>
68                                                 <td><span class="gen"><?php echo $text; ?></span></td>
69                                         </tr>
70                                 </table></td>
71                         </tr>
72                         <tr>
73                                 <td><br /><br /></td>
74                         </tr>
75                         <tr>
76                                 <td width="100%"><table width="100%" cellpadding="2" cellspacing="1" border="0" class="forumline"><form action="<?php echo ($form_action) ? $form_action : 'install.'.$phpEx; ?>" name="install" method="post">
77 <?php
78
79 }
80
81 function page_footer()
82 {
83
84 ?>
85                                 </table></form></td>
86                         </tr>
87                 </table></td>
88         </tr>
89 </table>
90
91 </body>
92 </html>
93 <?php
94
95 }
96
97 function page_common_form($hidden, $submit)
98 {
99
100 ?>
101                                         <tr> 
102                                           <td class="catBottom" align="center" colspan="2"><?php echo $hidden; ?><input class="mainoption" type="submit" value="<?php echo $submit; ?>" /></td>
103                                         </tr>
104 <?php
105
106 }
107
108 function page_upgrade_form()
109 {
110         global $lang;
111
112 ?>
113                                         <tr>
114                                                 <td class="catBottom" align="center" colspan="2"><?php echo $lang['continue_upgrade']; ?></td>
115                                         </tr>
116                                         <tr>
117                                                 <td class="catBottom" align="center" colspan="2"><input type="submit" name="upgrade_now" value="<?php echo $lang['upgrade_submit']; ?>" /></td>
118                                         </tr>
119 <?php 
120
121 }
122
123 function page_error($error_title, $error)
124 {
125
126 ?>
127                                         <tr>
128                                                 <th><?php echo $error_title; ?></th>
129                                         </tr>
130                                         <tr>
131                                                 <td class="row1" align="center"><span class="gen"><?php echo $error; ?></span></td>
132                                         </tr>
133 <?php
134
135 }
136
137 // Guess an initial language ... borrowed from phpBB 2.2 it's not perfect, 
138 // really it should do a straight match first pass and then try a "fuzzy"
139 // match on a second pass instead of a straight "fuzzy" match.
140 function guess_lang()
141 {
142         global $phpbb_root_path, $HTTP_SERVER_VARS;
143
144         // The order here _is_ important, at least for major_minor
145         // matches. Don't go moving these around without checking with
146         // me first - psoTFX
147         $match_lang = array(
148                 'arabic'                                        => 'ar([_-][a-z]+)?', 
149                 'bulgarian'                                     => 'bg', 
150                 'catalan'                                       => 'ca', 
151                 'czech'                                         => 'cs', 
152                 'danish'                                        => 'da', 
153                 'german'                                        => 'de([_-][a-z]+)?',
154                 'english'                                       => 'en([_-][a-z]+)?', 
155                 'estonian'                                      => 'et', 
156                 'finnish'                                       => 'fi', 
157                 'french'                                        => 'fr([_-][a-z]+)?', 
158                 'greek'                                         => 'el', 
159                 'spanish_argentina'                     => 'es[_-]ar', 
160                 'spanish'                                       => 'es([_-][a-z]+)?', 
161                 'gaelic'                                        => 'gd', 
162                 'galego'                                        => 'gl', 
163                 'gujarati'                                      => 'gu', 
164                 'hebrew'                                        => 'he', 
165                 'hindi'                                         => 'hi', 
166                 'croatian'                                      => 'hr', 
167                 'hungarian'                                     => 'hu', 
168                 'icelandic'                                     => 'is', 
169                 'indonesian'                            => 'id([_-][a-z]+)?', 
170                 'italian'                                       => 'it([_-][a-z]+)?', 
171                 'japanese'                                      => 'ja([_-][a-z]+)?', 
172                 'korean'                                        => 'ko([_-][a-z]+)?', 
173                 'latvian'                                       => 'lv', 
174                 'lithuanian'                            => 'lt', 
175                 'macedonian'                            => 'mk', 
176                 'dutch'                                         => 'nl([_-][a-z]+)?', 
177                 'norwegian'                                     => 'no', 
178                 'punjabi'                                       => 'pa', 
179                 'polish'                                        => 'pl', 
180                 'portuguese_brazil'                     => 'pt[_-]br', 
181                 'portuguese'                            => 'pt([_-][a-z]+)?', 
182                 'romanian'                                      => 'ro([_-][a-z]+)?', 
183                 'russian'                                       => 'ru([_-][a-z]+)?', 
184                 'slovenian'                                     => 'sl([_-][a-z]+)?', 
185                 'albanian'                                      => 'sq', 
186                 'serbian'                                       => 'sr([_-][a-z]+)?', 
187                 'slovak'                                        => 'sv([_-][a-z]+)?', 
188                 'swedish'                                       => 'sv([_-][a-z]+)?', 
189                 'thai'                                          => 'th([_-][a-z]+)?', 
190                 'turkish'                                       => 'tr([_-][a-z]+)?', 
191                 'ukranian'                                      => 'uk([_-][a-z]+)?', 
192                 'urdu'                                          => 'ur', 
193                 'viatnamese'                            => 'vi',
194                 'chinese_traditional_taiwan'=> 'zh[_-]tw',
195                 'chinese_simplified'            => 'zh', 
196         );
197
198         if (isset($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE']))
199         {
200                 $accept_lang_ary = explode(',', $HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE']);
201                 for ($i = 0; $i < sizeof($accept_lang_ary); $i++)
202                 {
203                         @reset($match_lang);
204                         while (list($lang, $match) = each($match_lang))
205                         {
206                                 if (preg_match('#' . $match . '#i', trim($accept_lang_ary[$i])))
207                                 {
208                                         if (file_exists(@phpbb_realpath($phpbb_root_path . 'language/lang_' . $lang)))
209                                         {
210                                                 return $lang;
211                                         }
212                                 }
213                         }
214                 }
215         }
216
217         return 'english';
218         
219 }
220 //
221 // FUNCTIONS
222 // ---------
223
224 // Begin
225 error_reporting  (E_ERROR | E_WARNING | E_PARSE); // This will NOT report uninitialized variables
226 set_magic_quotes_runtime(0); // Disable magic_quotes_runtime
227
228 // PHP5 with register_long_arrays off?
229 if (!isset($HTTP_POST_VARS) && isset($_POST))
230 {
231         $HTTP_POST_VARS = $_POST;
232         $HTTP_GET_VARS = $_GET;
233         $HTTP_SERVER_VARS = $_SERVER;
234         $HTTP_COOKIE_VARS = $_COOKIE;
235         $HTTP_ENV_VARS = $_ENV;
236         $HTTP_POST_FILES = $_FILES;
237
238         // _SESSION is the only superglobal which is conditionally set
239         if (isset($_SESSION))
240         {
241                 $HTTP_SESSION_VARS = $_SESSION;
242         }
243 }
244
245 // Slash data if it isn't slashed
246 if (!get_magic_quotes_gpc())
247 {
248         if (is_array($HTTP_GET_VARS))
249         {
250                 while (list($k, $v) = each($HTTP_GET_VARS))
251                 {
252                         if (is_array($HTTP_GET_VARS[$k]))
253                         {
254                                 while (list($k2, $v2) = each($HTTP_GET_VARS[$k]))
255                                 {
256                                         $HTTP_GET_VARS[$k][$k2] = addslashes($v2);
257                                 }
258                                 @reset($HTTP_GET_VARS[$k]);
259                         }
260                         else
261                         {
262                                 $HTTP_GET_VARS[$k] = addslashes($v);
263                         }
264                 }
265                 @reset($HTTP_GET_VARS);
266         }
267
268         if (is_array($HTTP_POST_VARS))
269         {
270                 while (list($k, $v) = each($HTTP_POST_VARS))
271                 {
272                         if (is_array($HTTP_POST_VARS[$k]))
273                         {
274                                 while (list($k2, $v2) = each($HTTP_POST_VARS[$k]))
275                                 {
276                                         $HTTP_POST_VARS[$k][$k2] = addslashes($v2);
277                                 }
278                                 @reset($HTTP_POST_VARS[$k]);
279                         }
280                         else
281                         {
282                                 $HTTP_POST_VARS[$k] = addslashes($v);
283                         }
284                 }
285                 @reset($HTTP_POST_VARS);
286         }
287
288         if (is_array($HTTP_COOKIE_VARS))
289         {
290                 while (list($k, $v) = each($HTTP_COOKIE_VARS))
291                 {
292                         if (is_array($HTTP_COOKIE_VARS[$k]))
293                         {
294                                 while (list($k2, $v2) = each($HTTP_COOKIE_VARS[$k]))
295                                 {
296                                         $HTTP_COOKIE_VARS[$k][$k2] = addslashes($v2);
297                                 }
298                                 @reset($HTTP_COOKIE_VARS[$k]);
299                         }
300                         else
301                         {
302                                 $HTTP_COOKIE_VARS[$k] = addslashes($v);
303                         }
304                 }
305                 @reset($HTTP_COOKIE_VARS);
306         }
307 }
308
309 // Begin main prog
310 define('IN_PHPBB', true);
311 // Uncomment the following line to completely disable the ftp option...
312 // define('NO_FTP', true);
313 $phpbb_root_path = './../';
314 include($phpbb_root_path.'extension.inc');
315
316 // Initialise some basic arrays
317 $userdata = array();
318 $lang = array();
319 $error = false;
320
321 // Include some required functions
322 include($phpbb_root_path.'includes/constants.'.$phpEx);
323 include($phpbb_root_path.'includes/functions.'.$phpEx);
324 include($phpbb_root_path.'includes/sessions.'.$phpEx);
325
326 // Define schema info
327 $available_dbms = array(
328         'mysql'=> array(
329                 'LABEL'                 => 'MySQL 3.x',
330                 'SCHEMA'                => 'mysql', 
331                 'DELIM'                 => ';',
332                 'DELIM_BASIC'   => ';',
333                 'COMMENTS'              => 'remove_remarks'
334         ), 
335         'mysql4' => array(
336                 'LABEL'                 => 'MySQL 4.x/5.x',
337                 'SCHEMA'                => 'mysql', 
338                 'DELIM'                 => ';', 
339                 'DELIM_BASIC'   => ';',
340                 'COMMENTS'              => 'remove_remarks'
341         ), 
342         'postgres' => array(
343                 'LABEL'                 => 'PostgreSQL 7.x',
344                 'SCHEMA'                => 'postgres', 
345                 'DELIM'                 => ';', 
346                 'DELIM_BASIC'   => ';',
347                 'COMMENTS'              => 'remove_comments'
348         ), 
349         'mssql' => array(
350                 'LABEL'                 => 'MS SQL Server 7/2000',
351                 'SCHEMA'                => 'mssql', 
352                 'DELIM'                 => 'GO', 
353                 'DELIM_BASIC'   => ';',
354                 'COMMENTS'              => 'remove_comments'
355         ),
356         'msaccess' => array(
357                 'LABEL'                 => 'MS Access [ ODBC ]',
358                 'SCHEMA'                => '', 
359                 'DELIM'                 => '', 
360                 'DELIM_BASIC'   => ';',
361                 'COMMENTS'              => ''
362         ),
363         'mssql-odbc' => array(
364                 'LABEL'                 => 'MS SQL Server [ ODBC ]',
365                 'SCHEMA'                => 'mssql', 
366                 'DELIM'                 => 'GO',
367                 'DELIM_BASIC'   => ';',
368                 'COMMENTS'              => 'remove_comments'
369         )
370 );
371
372 // Obtain various vars
373 $confirm = (isset($HTTP_POST_VARS['confirm'])) ? true : false;
374 $cancel = (isset($HTTP_POST_VARS['cancel'])) ? true : false;
375
376 if (isset($HTTP_POST_VARS['install_step']) || isset($HTTP_GET_VARS['install_step']))
377 {
378         $install_step = (isset($HTTP_POST_VARS['install_step'])) ? $HTTP_POST_VARS['install_step'] : $HTTP_GET_VARS['install_step'];
379 }
380 else
381 {
382         $install_step = '';
383 }
384
385 $upgrade = (!empty($HTTP_POST_VARS['upgrade'])) ? $HTTP_POST_VARS['upgrade']: '';
386 $upgrade_now = (!empty($HTTP_POST_VARS['upgrade_now'])) ? $HTTP_POST_VARS['upgrade_now']:'';
387
388 $dbms = isset($HTTP_POST_VARS['dbms']) ? $HTTP_POST_VARS['dbms'] : '';
389
390 $dbhost = (!empty($HTTP_POST_VARS['dbhost'])) ? $HTTP_POST_VARS['dbhost'] : 'localhost';
391 $dbuser = (!empty($HTTP_POST_VARS['dbuser'])) ? $HTTP_POST_VARS['dbuser'] : '';
392 $dbpasswd = (!empty($HTTP_POST_VARS['dbpasswd'])) ? $HTTP_POST_VARS['dbpasswd'] : '';
393 $dbname = (!empty($HTTP_POST_VARS['dbname'])) ? $HTTP_POST_VARS['dbname'] : '';
394
395 $table_prefix = (!empty($HTTP_POST_VARS['prefix'])) ? $HTTP_POST_VARS['prefix'] : '';
396
397 $admin_name = (!empty($HTTP_POST_VARS['admin_name'])) ? $HTTP_POST_VARS['admin_name'] : '';
398 $admin_pass1 = (!empty($HTTP_POST_VARS['admin_pass1'])) ? $HTTP_POST_VARS['admin_pass1'] : '';
399 $admin_pass2 = (!empty($HTTP_POST_VARS['admin_pass2'])) ? $HTTP_POST_VARS['admin_pass2'] : '';
400
401 $ftp_path = (!empty($HTTP_POST_VARS['ftp_path'])) ? $HTTP_POST_VARS['ftp_path'] : '';
402 $ftp_user = (!empty($HTTP_POST_VARS['ftp_user'])) ? $HTTP_POST_VARS['ftp_user'] : '';
403 $ftp_pass = (!empty($HTTP_POST_VARS['ftp_pass'])) ? $HTTP_POST_VARS['ftp_pass'] : '';
404
405 if (isset($HTTP_POST_VARS['lang']) && preg_match('#^[a-z_]+$#', $HTTP_POST_VARS['lang']))
406 {
407         $language = strip_tags($HTTP_POST_VARS['lang']);
408 }
409 else
410 {
411         $language = guess_lang();
412 }
413
414 $board_email = (!empty($HTTP_POST_VARS['board_email'])) ? $HTTP_POST_VARS['board_email'] : '';
415 $script_path = (!empty($HTTP_POST_VARS['script_path'])) ? $HTTP_POST_VARS['script_path'] : str_replace('install', '', dirname($HTTP_SERVER_VARS['PHP_SELF']));
416
417 if (!empty($HTTP_POST_VARS['server_name']))
418 {
419         $server_name = $HTTP_POST_VARS['server_name'];
420 }
421 else
422 {
423         // Guess at some basic info used for install..
424         if (!empty($HTTP_SERVER_VARS['SERVER_NAME']) || !empty($HTTP_ENV_VARS['SERVER_NAME']))
425         {
426                 $server_name = (!empty($HTTP_SERVER_VARS['SERVER_NAME'])) ? $HTTP_SERVER_VARS['SERVER_NAME'] : $HTTP_ENV_VARS['SERVER_NAME'];
427         }
428         else if (!empty($HTTP_SERVER_VARS['HTTP_HOST']) || !empty($HTTP_ENV_VARS['HTTP_HOST']))
429         {
430                 $server_name = (!empty($HTTP_SERVER_VARS['HTTP_HOST'])) ? $HTTP_SERVER_VARS['HTTP_HOST'] : $HTTP_ENV_VARS['HTTP_HOST'];
431         }
432         else
433         {
434                 $server_name = '';
435         }
436 }
437
438 if (!empty($HTTP_POST_VARS['server_port']))
439 {
440         $server_port = $HTTP_POST_VARS['server_port'];
441 }
442 else
443 {
444         if (!empty($HTTP_SERVER_VARS['SERVER_PORT']) || !empty($HTTP_ENV_VARS['SERVER_PORT']))
445         {
446                 $server_port = (!empty($HTTP_SERVER_VARS['SERVER_PORT'])) ? $HTTP_SERVER_VARS['SERVER_PORT'] : $HTTP_ENV_VARS['SERVER_PORT'];
447         }
448         else
449         {
450                 $server_port = '80';
451         }
452 }
453
454 // Open config.php ... if it exists
455 if (@file_exists(@phpbb_realpath('config.'.$phpEx)))
456 {
457         include($phpbb_root_path.'config.'.$phpEx);
458 }
459
460 // Is phpBB already installed? Yes? Redirect to the index
461 if (defined("PHPBB_INSTALLED"))
462 {
463         redirect('../index.'.$phpEx);
464 }
465
466 // Import language file, setup template ...
467 include($phpbb_root_path.'language/lang_' . $language . '/lang_main.'.$phpEx);
468 include($phpbb_root_path.'language/lang_' . $language . '/lang_admin.'.$phpEx);
469
470 // Ok for the time being I'm commenting this out whilst I'm working on
471 // better integration of the install with upgrade as per Bart's request
472 // JLH
473 if ($upgrade == 1)
474 {
475         // require('upgrade.'.$phpEx);
476         $install_step = 1;
477 }
478
479 // What do we need to do?
480 if (!empty($HTTP_POST_VARS['send_file']) && $HTTP_POST_VARS['send_file'] == 1 && empty($HTTP_POST_VARS['upgrade_now']))
481 {
482         header('Content-Type: text/x-delimtext; name="config.' . $phpEx . '"');
483         header('Content-disposition: attachment; filename="config.' . $phpEx . '"');
484
485         // We need to stripslashes no matter what the setting of magic_quotes_gpc is
486         // because we add slashes at the top if its off, and they are added automaticlly 
487         // if it is on.
488         echo stripslashes($HTTP_POST_VARS['config_data']);
489
490         exit;
491 }
492 else if (!empty($HTTP_POST_VARS['send_file']) && $HTTP_POST_VARS['send_file'] == 2)
493 {
494         $s_hidden_fields = '<input type="hidden" name="config_data" value="' . htmlspecialchars(stripslashes($HTTP_POST_VARS['config_data'])) . '" />';
495         $s_hidden_fields .= '<input type="hidden" name="ftp_file" value="1" />';
496
497         if ($upgrade == 1)
498         {
499                 $s_hidden_fields .= '<input type="hidden" name="upgrade" value="1" />';
500         }
501
502         page_header($lang['ftp_instructs']);
503
504 ?>
505                                         <tr>
506                                                 <th colspan="2"><?php echo $lang['ftp_info']; ?></th>
507                                         </tr>
508                                         <tr>
509                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['ftp_path']; ?></span></td>
510                                                 <td class="row2"><input type="text" name="ftp_dir"></td>
511                                         </tr>
512                                         <tr>
513                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['ftp_username']; ?></span></td>
514                                                 <td class="row2"><input type="text" name="ftp_user"></td>
515                                         </tr>
516                                         <tr>
517                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['ftp_password']; ?></span></td>
518                                                 <td class="row2"><input type="password" name="ftp_pass"></td>
519                                         </tr>
520 <?php
521
522         page_common_form($s_hidden_fields, $lang['Transfer_config']);
523         page_footer();
524         exit;
525
526 }
527 else if (!empty($HTTP_POST_VARS['ftp_file']))
528 {
529         // Try to connect ...
530         $conn_id = @ftp_connect('localhost');
531         $login_result = @ftp_login($conn_id, "$ftp_user", "$ftp_pass");
532
533         if (!$conn_id || !$login_result)
534         {
535                 page_header($lang['NoFTP_config']);
536
537                 // Error couldn't get connected... Go back to option to send file...
538                 $s_hidden_fields = '<input type="hidden" name="config_data" value="' . htmlspecialchars(stripslashes($HTTP_POST_VARS['config_data'])) . '" />';
539                 $s_hidden_fields .= '<input type="hidden" name="send_file" value="1" />';
540
541                 // If we're upgrading ...
542                 if ($upgrade == 1)
543                 {
544                         $s_hidden_fields .= '<input type="hidden" name="upgrade" value="1" />';
545                         $s_hidden_fields .= '<input type="hidden" name="dbms" value="'.$dmbs.'" />';
546                         $s_hidden_fields .= '<input type="hidden" name="prefix" value="'.$table_prefix.'" />';
547                         $s_hidden_fields .= '<input type="hidden" name="dbhost" value="'.$dbhost.'" />';
548                         $s_hidden_fields .= '<input type="hidden" name="dbname" value="'.$dbname.'" />';
549                         $s_hidden_fields .= '<input type="hidden" name="dbuser" value="'.$dbuser.'" />';
550                         $s_hidden_fields .= '<input type="hidden" name="dbpasswd" value="'.$dbpasswd.'" />';
551                         $s_hidden_fields .= '<input type="hidden" name="install_step" value="1" />';
552                         $s_hidden_fields .= '<input type="hidden" name="admin_pass1" value="1" />';
553                         $s_hidden_fields .= '<input type="hidden" name="admin_pass2" value="1" />';
554                         $s_hidden_fields .= '<input type="hidden" name="server_port" value="'.$server_port.'" />';
555                         $s_hidden_fields .= '<input type="hidden" name="server_name" value="'.$server_name.'" />';
556                         $s_hidden_fields .= '<input type="hidden" name="script_path" value="'.$script_path.'" />';
557                         $s_hidden_fields .= '<input type="hidden" name="board_email" value="'.$board_email.'" />';
558
559                         page_upgrade_form();
560                 }
561                 else
562                 {
563                         page_common_form($s_hidden_fields, $lang['Download_config']);
564
565                 }
566
567                 page_footer();
568                 exit;
569         }
570         else
571         {
572                 // Write out a temp file...
573                 $tmpfname = @tempnam('/tmp', 'cfg');
574
575                 @unlink($tmpfname); // unlink for safety on php4.0.3+
576
577                 $fp = @fopen($tmpfname, 'w');
578
579                 @fwrite($fp, stripslashes($HTTP_POST_VARS['config_data']));
580
581                 @fclose($fp);
582
583                 // Now ftp it across.
584                 @ftp_chdir($conn_id, $ftp_dir);
585
586                 $res = ftp_put($conn_id, 'config.'.$phpEx, $tmpfname, FTP_ASCII);
587
588                 @ftp_quit($conn_id);
589
590                 unlink($tmpfname);
591
592                 if ($upgrade == 1)      
593                 {
594                         require('upgrade.'.$phpEx);
595                         exit;
596                 }
597
598                 // Ok we are basically done with the install process let's go on 
599                 // and let the user configure their board now. We are going to do 
600                 // this by calling the admin_board.php from the normal board admin
601                 // section.
602                 $s_hidden_fields = '<input type="hidden" name="username" value="' . $admin_name . '" />';
603                 $s_hidden_fields .= '<input type="hidden" name="password" value="' . $admin_pass1 . '" />';
604                 $s_hidden_fields .= '<input type="hidden" name="redirect" value="../admin/index.'.$phpEx.'" />';
605                 $s_hidden_fields .= '<input type="hidden" name="submit" value="' . $lang['Login'] . '" />';
606
607                 page_header($lang['Inst_Step_2']);
608                 page_common_form($s_hidden_fields, $lang['Finish_Install']);
609                 page_footer();
610                 exit();
611         }
612 }
613 else if ((empty($install_step) || $admin_pass1 != $admin_pass2 || empty($admin_pass1) || empty($dbhost)))
614 {
615         // Ok we haven't installed before so lets work our way through the various
616         // steps of the install process.  This could turn out to be quite a lengty 
617         // process.
618
619         // Step 0 gather the pertinant info for database setup...
620         // Namely dbms, dbhost, dbname, dbuser, and dbpasswd.
621         $instruction_text = $lang['Inst_Step_0'];
622
623         if (!empty($install_step))
624         {
625                 if ((($HTTP_POST_VARS['admin_pass1'] != $HTTP_POST_VARS['admin_pass2'])) ||
626                         (empty($HTTP_POST_VARS['admin_pass1']) || empty($dbhost)) && $HTTP_POST_VARS['cur_lang'] == $language)
627                 {
628                         $error = $lang['Password_mismatch'];
629                 }
630         }
631
632         $dirname = $phpbb_root_path . 'language';
633         $dir = opendir($dirname);
634
635         $lang_options = array();
636         while ($file = readdir($dir))
637         {
638                 if (preg_match('#^lang_#i', $file) && !is_file(@phpbb_realpath($dirname . '/' . $file)) && !is_link(@phpbb_realpath($dirname . '/' . $file)))
639                 {
640                         $filename = trim(str_replace('lang_', '', $file));
641                         $displayname = preg_replace('/^(.*?)_(.*)$/', '\1 [ \2 ]', $filename);
642                         $displayname = preg_replace('/\[(.*?)_(.*)\]/', '[ \1 - \2 ]', $displayname);
643                         $lang_options[$displayname] = $filename;
644                 }
645         }
646
647         closedir($dir);
648
649         @asort($lang_options);
650         @reset($lang_options);
651
652         $lang_select = '<select name="lang" onchange="this.form.submit()">';
653         while (list($displayname, $filename) = @each($lang_options))
654         {
655                 $selected = ($language == $filename) ? ' selected="selected"' : '';
656                 $lang_select .= '<option value="' . $filename . '"' . $selected . '>' . ucwords($displayname) . '</option>';
657         }
658         $lang_select .= '</select>';
659
660         $dbms_select = '<select name="dbms" onchange="if(this.form.upgrade.options[this.form.upgrade.selectedIndex].value == 1){ this.selectedIndex = 0;}">';
661         while (list($dbms_name, $details) = @each($available_dbms))
662         {
663                 $selected = ($dbms_name == $dbms) ? 'selected="selected"' : '';
664                 $dbms_select .= '<option value="' . $dbms_name . '">' . $details['LABEL'] . '</option>';
665         }
666         $dbms_select .= '</select>';
667
668         $upgrade_option = '<select name="upgrade"';
669         $upgrade_option .= 'onchange="if (this.options[this.selectedIndex].value == 1) { this.form.dbms.selectedIndex = 0; }">';
670         $upgrade_option .= '<option value="0">' . $lang['Install'] . '</option>';
671         $upgrade_option .= '<option value="1">' . $lang['Upgrade'] . '</option></select>';
672         
673         $s_hidden_fields = '<input type="hidden" name="install_step" value="1" /><input type="hidden" name="cur_lang" value="' . $language . '" />';
674
675         page_header($instruction_text);
676
677 ?>
678                                         <tr>
679                                                 <th colspan="2"><?php echo $lang['Initial_config']; ?></th>
680                                         </tr>
681                                         <tr>
682                                                 <td class="row1" align="right" width="30%"><span class="gen"><?php echo $lang['Default_lang']; ?>: </span></td>
683                                                 <td class="row2"><?php echo $lang_select; ?></td>
684                                         </tr>
685                                         <tr>
686                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['dbms']; ?>: </span></td>
687                                                 <td class="row2"><?php echo $dbms_select; ?></td>
688                                         </tr>
689                                         <tr>
690                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['Install_Method']; ?>:</span></td>
691                                                 <td class="row2"><?php echo $upgrade_option; ?></td>
692                                         </tr>
693                                         <tr>
694                                                 <th colspan="2"><?php echo $lang['DB_config']; ?></th>
695                                         </tr>
696                                         <tr>
697                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['DB_Host']; ?>: </span></td>
698                                                 <td class="row2"><input type="text" name="dbhost" value="<?php echo ($dbhost != '') ? $dbhost : ''; ?>" /></td>
699                                         </tr>
700                                         <tr>
701                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['DB_Name']; ?>: </span></td>
702                                                 <td class="row2"><input type="text" name="dbname" value="<?php echo ($dbname != '') ? $dbname : ''; ?>" /></td>
703                                         </tr>
704                                         <tr>
705                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['DB_Username']; ?>: </span></td>
706                                                 <td class="row2"><input type="text" name="dbuser" value="<?php echo ($dbuser != '') ? $dbuser : ''; ?>" /></td>
707                                         </tr>
708                                         <tr>
709                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['DB_Password']; ?>: </span></td>
710                                                 <td class="row2"><input type="password" name="dbpasswd" value="<?php echo ($dbpasswd != '') ? $dbpasswd : ''; ?>" /></td>
711                                         </tr>
712                                         <tr>
713                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['Table_Prefix']; ?>: </span></td>
714                                                 <td class="row2"><input type="text" name="prefix" value="<?php echo (!empty($table_prefix)) ? $table_prefix : "phpbb_"; ?>" /></td>
715                                         </tr>
716                                         <tr>
717                                                 <th colspan="2"><?php echo $lang['Admin_config']; ?></th>
718                                         </tr>
719 <?php
720
721         if ($error)
722         {
723 ?>
724                                         <tr>
725                                                 <td class="row1" colspan="2" align="center"><span class="gen" style="color:red"><?php echo $error; ?></span></td>
726                                         </tr>
727 <?php
728
729         }
730 ?>
731                                         <tr>
732                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['Admin_email']; ?>: </span></td>
733                                                 <td class="row2"><input type="text" name="board_email" value="<?php echo ($board_email != '') ? $board_email : ''; ?>" /></td>
734                                         </tr> 
735                                         <tr>
736                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['Server_name']; ?>: </span></td>
737                                                 <td class="row2"><input type="text" name="server_name" value="<?php echo $server_name; ?>" /></td>
738                                         </tr> 
739                                         <tr>
740                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['Server_port']; ?>: </span></td>
741                                                 <td class="row2"><input type="text" name="server_port" value="<?php echo $server_port; ?>" /></td>
742                                         </tr>
743                                         <tr>
744                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['Script_path']; ?>: </span></td>
745                                                 <td class="row2"><input type="text" name="script_path" value="<?php echo $script_path; ?>" /></td>
746                                         </tr>
747                                         <tr>
748                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['Admin_Username']; ?>: </span></td>
749                                                 <td class="row2"><input type="text" name="admin_name" value="<?php echo ($admin_name != '') ? $admin_name : ''; ?>" /></td>
750                                         </tr>
751                                         <tr>
752                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['Admin_Password']; ?>: </span></td>
753                                                 <td class="row2"><input type="password" name="admin_pass1" value="<?php echo ($admin_pass1 != '') ? $admin_pass1 : ''; ?>" /></td>
754                                         </tr>
755                                         <tr>
756                                                 <td class="row1" align="right"><span class="gen"><?php echo $lang['Admin_Password_confirm']; ?>: </span></td>
757                                                 <td class="row2"><input type="password" name="admin_pass2" value="<?php echo ($admin_pass2 != '') ? $admin_pass2 : ''; ?>" /></td>
758                                         </tr>
759 <?php
760
761         page_common_form($s_hidden_fields, $lang['Start_Install']);
762         page_footer();
763         exit;
764 }
765 else
766 {
767         // Go ahead and create the DB, then populate it
768         //
769         // MS Access is slightly different in that a pre-built, pre-
770         // populated DB is supplied, all we need do here is update
771         // the relevant entries
772         if (isset($dbms))
773         {
774                 switch($dbms)
775                 {
776                         case 'msaccess':
777                         case 'mssql-odbc':
778                                 $check_exts = 'odbc';
779                                 $check_other = 'odbc';
780                                 break;
781
782                         case 'mssql':
783                                 $check_exts = 'mssql';
784                                 $check_other = 'sybase';
785                                 break;
786
787                         case 'mysql':
788                         case 'mysql4':
789                                 $check_exts = 'mysql';
790                                 $check_other = 'mysql';
791                                 break;
792
793                         case 'postgres':
794                                 $check_exts = 'pgsql';
795                                 $check_other = 'pgsql';
796                                 break;
797                 }
798
799                 if (!extension_loaded($check_exts) && !extension_loaded($check_other))
800                 {       
801                         page_header($lang['Install'], '');
802                         page_error($lang['Installer_Error'], $lang['Install_No_Ext']);
803                         page_footer();
804                         exit;
805                 }
806
807                 include($phpbb_root_path.'includes/db.'.$phpEx);
808         }
809
810         $dbms_schema = 'schemas/' . $available_dbms[$dbms]['SCHEMA'] . '_schema.sql';
811         $dbms_basic = 'schemas/' . $available_dbms[$dbms]['SCHEMA'] . '_basic.sql';
812
813         $remove_remarks = $available_dbms[$dbms]['COMMENTS'];;
814         $delimiter = $available_dbms[$dbms]['DELIM']; 
815         $delimiter_basic = $available_dbms[$dbms]['DELIM_BASIC']; 
816
817         if ($install_step == 1)
818         {
819                 if ($upgrade != 1)
820                 {
821                         if ($dbms != 'msaccess')
822                         {
823                                 // Load in the sql parser
824                                 include($phpbb_root_path.'includes/sql_parse.'.$phpEx);
825
826                                 // Ok we have the db info go ahead and read in the relevant schema
827                                 // and work on building the table.. probably ought to provide some
828                                 // kind of feedback to the user as we are working here in order
829                                 // to let them know we are actually doing something.
830                                 $sql_query = @fread(@fopen($dbms_schema, 'r'), @filesize($dbms_schema));
831                                 $sql_query = preg_replace('/phpbb_/', $table_prefix, $sql_query);
832
833                                 $sql_query = $remove_remarks($sql_query);
834                                 $sql_query = split_sql_file($sql_query, $delimiter);
835
836                                 for ($i = 0; $i < sizeof($sql_query); $i++)
837                                 {
838                                         if (trim($sql_query[$i]) != '')
839                                         {
840                                                 if (!($result = $db->sql_query($sql_query[$i])))
841                                                 {
842                                                         $error = $db->sql_error();
843                         
844                                                         page_header($lang['Install'], '');
845                                                         page_error($lang['Installer_Error'], $lang['Install_db_error'] . '<br />' . $error['message']);
846                                                         page_footer();
847                                                         exit;
848                                                 }
849                                         }
850                                 }
851                 
852                                 // Ok tables have been built, let's fill in the basic information
853                                 $sql_query = @fread(@fopen($dbms_basic, 'r'), @filesize($dbms_basic));
854                                 $sql_query = preg_replace('/phpbb_/', $table_prefix, $sql_query);
855
856                                 $sql_query = $remove_remarks($sql_query);
857                                 $sql_query = split_sql_file($sql_query, $delimiter_basic);
858
859                                 for($i = 0; $i < sizeof($sql_query); $i++)
860                                 {
861                                         if (trim($sql_query[$i]) != '')
862                                         {
863                                                 if (!($result = $db->sql_query($sql_query[$i])))
864                                                 {
865                                                         $error = $db->sql_error();
866
867                                                         page_header($lang['Install'], '');
868                                                         page_error($lang['Installer_Error'], $lang['Install_db_error'] . '<br />' . $error['message']);
869                                                         page_footer();
870                                                         exit;
871                                                 }
872                                         }
873                                 }
874                         }
875
876                         // Ok at this point they have entered their admin password, let's go 
877                         // ahead and create the admin account with some basic default information
878                         // that they can customize later, and write out the config file.  After
879                         // this we are going to pass them over to the admin_forum.php script
880                         // to set up their forum defaults.
881                         $error = '';
882
883                         // Update the default admin user with their information.
884                         $sql = "INSERT INTO " . $table_prefix . "config (config_name, config_value) 
885                                 VALUES ('board_startdate', " . time() . ")";
886                         if (!$db->sql_query($sql))
887                         {
888                                 $error .= "Could not insert board_startdate :: " . $sql . " :: " . __LINE__ . " :: " . __FILE__ . "<br /><br />";
889                         }
890
891                         $sql = "INSERT INTO " . $table_prefix . "config (config_name, config_value) 
892                                 VALUES ('default_lang', '" . str_replace("\'", "''", $language) . "')";
893                         if (!$db->sql_query($sql))
894                         {
895                                 $error .= "Could not insert default_lang :: " . $sql . " :: " . __LINE__ . " :: " . __FILE__ . "<br /><br />";
896                         }
897
898                         $update_config = array(
899                                 'board_email'   => $board_email,
900                                 'script_path'   => $script_path,
901                                 'server_port'   => $server_port,
902                                 'server_name'   => $server_name,
903                         );
904
905                         while (list($config_name, $config_value) = each($update_config))
906                         {
907                                 $sql = "UPDATE " . $table_prefix . "config 
908                                         SET config_value = '$config_value' 
909                                         WHERE config_name = '$config_name'";
910                                 if (!$db->sql_query($sql))
911                                 {
912                                         $error .= "Could not insert default_lang :: " . $sql . " :: " . __LINE__ . " :: " . __FILE__ . "<br /><br />";
913                                 }
914                         }
915
916                         $admin_pass_md5 = ($confirm && $userdata['user_level'] == ADMIN) ? $admin_pass1 : md5($admin_pass1);
917
918                         $sql = "UPDATE " . $table_prefix . "users 
919                                 SET username = '" . str_replace("\'", "''", $admin_name) . "', user_password='" . str_replace("\'", "''", $admin_pass_md5) . "', user_lang = '" . str_replace("\'", "''", $language) . "', user_email='" . str_replace("\'", "''", $board_email) . "'
920                                 WHERE username = 'Admin'";
921                         if (!$db->sql_query($sql))
922                         {
923                                 $error .= "Could not update admin info :: " . $sql . " :: " . __LINE__ . " :: " . __FILE__ . "<br /><br />";
924                         }
925
926                         $sql = "UPDATE " . $table_prefix . "users 
927                                 SET user_regdate = " . time();
928                         if (!$db->sql_query($sql))
929                         {
930                                 $error .= "Could not update user_regdate :: " . $sql . " :: " . __LINE__ . " :: " . __FILE__ . "<br /><br />";
931                         }
932
933                         if ($error != '')
934                         {
935                                 page_header($lang['Install'], '');
936                                 page_error($lang['Installer_Error'], $lang['Install_db_error'] . '<br /><br />' . $error);
937                                 page_footer();
938                                 exit;
939                         }
940                 }
941
942                 if (!$upgrade_now)
943                 {
944                         // Write out the config file.
945                         $config_data = '<?php'."\n\n";
946                         $config_data .= "\n// phpBB 2.x auto-generated config file\n// Do not change anything in this file!\n\n";
947                         $config_data .= '$dbms = \'' . $dbms . '\';' . "\n\n";
948                         $config_data .= '$dbhost = \'' . $dbhost . '\';' . "\n";
949                         $config_data .= '$dbname = \'' . $dbname . '\';' . "\n";
950                         $config_data .= '$dbuser = \'' . $dbuser . '\';' . "\n";
951                         $config_data .= '$dbpasswd = \'' . $dbpasswd . '\';' . "\n\n";
952                         $config_data .= '$table_prefix = \'' . $table_prefix . '\';' . "\n\n";
953                         $config_data .= 'define(\'PHPBB_INSTALLED\', true);'."\n\n";    
954                         $config_data .= '?' . '>'; // Done this to prevent highlighting editors getting confused!
955
956                         @umask(0111);
957                         $no_open = FALSE;
958
959                         // Unable to open the file writeable do something here as an attempt
960                         // to get around that...
961                         if (!($fp = @fopen($phpbb_root_path . 'config.'.$phpEx, 'w')))
962                         {
963                                 $s_hidden_fields = '<input type="hidden" name="config_data" value="' . htmlspecialchars($config_data) . '" />';
964
965                                 if (@extension_loaded('ftp') && !defined('NO_FTP'))
966                                 {
967                                         page_header($lang['Unwriteable_config'] . '<p>' . $lang['ftp_option'] . '</p>');
968
969 ?>
970                                         <tr>
971                                                 <th colspan="2"><?php echo $lang['ftp_choose']; ?></th>
972                                         </tr>
973                                         <tr>
974                                                 <td class="row1" align="right" width="50%"><span class="gen"><?php echo $lang['Attempt_ftp']; ?></span></td>
975                                                 <td class="row2"><input type="radio" name="send_file" value="2"></td>
976                                         </tr>
977                                         <tr>
978                                                 <td class="row1" align="right" width="50%"><span class="gen"><?php echo $lang['Send_file']; ?></span></td>
979                                                 <td class="row2"><input type="radio" name="send_file" value="1"></td>
980                                         </tr>
981 <?php 
982
983                                 }
984                                 else
985                                 {
986                                         page_header($lang['Unwriteable_config']);
987                                         $s_hidden_fields .= '<input type="hidden" name="send_file" value="1" />';
988                                 }
989
990                                 if ($upgrade == 1)
991                                 {
992                                         $s_hidden_fields .= '<input type="hidden" name="upgrade" value="1" />';
993                                         $s_hidden_fields .= '<input type="hidden" name="dbms" value="'.$dbms.'" />';
994                                         $s_hidden_fields .= '<input type="hidden" name="prefix" value="'.$table_prefix.'" />';
995                                         $s_hidden_fields .= '<input type="hidden" name="dbhost" value="'.$dbhost.'" />';
996                                         $s_hidden_fields .= '<input type="hidden" name="dbname" value="'.$dbname.'" />';
997                                         $s_hidden_fields .= '<input type="hidden" name="dbuser" value="'.$dbuser.'" />';
998                                         $s_hidden_fields .= '<input type="hidden" name="dbpasswd" value="'.$dbpasswd.'" />';
999                                         $s_hidden_fields .= '<input type="hidden" name="install_step" value="1" />';
1000                                         $s_hidden_fields .= '<input type="hidden" name="admin_pass1" value="1" />';
1001                                         $s_hidden_fields .= '<input type="hidden" name="admin_pass2" value="1" />';
1002                                         $s_hidden_fields .= '<input type="hidden" name="server_port" value="'.$server_port.'" />';
1003                                         $s_hidden_fields .= '<input type="hidden" name="server_name" value="'.$server_name.'" />';
1004                                         $s_hidden_fields .= '<input type="hidden" name="script_path" value="'.$script_path.'" />';
1005                                         $s_hidden_fields .= '<input type="hidden" name="board_email" value="'.$board_email.'" />';
1006
1007                                         page_upgrade_form();
1008
1009                                 }
1010                                 else
1011                                 {
1012                                         page_common_form($s_hidden_fields, $lang['Download_config']);
1013                                 }
1014
1015                                 page_footer();
1016                                 exit;
1017                         }
1018
1019                         $result = @fputs($fp, $config_data, strlen($config_data));
1020
1021                         @fclose($fp);
1022                         $upgrade_now = $lang['upgrade_submit'];
1023                 }
1024
1025                 // First off let's check and see if we are supposed to be doing an upgrade.
1026                 if ($upgrade == 1 && $upgrade_now == $lang['upgrade_submit'])
1027                 {
1028                         define('INSTALLING', true);
1029                         require('upgrade.'.$phpEx);
1030                         exit;
1031                 }
1032
1033                 // Ok we are basically done with the install process let's go on 
1034                 // and let the user configure their board now. We are going to do
1035                 // this by calling the admin_board.php from the normal board admin
1036                 // section.
1037                 $s_hidden_fields = '<input type="hidden" name="username" value="' . $admin_name . '" />';
1038                 $s_hidden_fields .= '<input type="hidden" name="password" value="' . $admin_pass1 . '" />';
1039                 $s_hidden_fields .= '<input type="hidden" name="redirect" value="admin/index.'.$phpEx.'" />';
1040                 $s_hidden_fields .= '<input type="hidden" name="login" value="true" />';
1041
1042                 page_header($lang['Inst_Step_2'], '../login.'.$phpEx);
1043                 page_common_form($s_hidden_fields, $lang['Finish_Install']);
1044                 page_footer();
1045                 exit;
1046         }
1047 }
1048
1049 ?>