[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/install/ -> install.php (source)

   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 5392 2005-12-29 11:51:13Z acydburn $
  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  ?>


Generated: Mon Jan 14 19:21:40 2013 Cross-referenced by PHPXref 0.7.1