Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

index.php

Zuletzt modifiziert: 09.10.2024, 12:50 - Dateigröße: 20.75 KiB


 001  <?php
 002  /**
 003  *
 004  * @package install
 005  * @version $Id$
 006  * @copyright (c) 2005 phpBB Group
 007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 008  *
 009  */
 010   
 011  /**#@+
 012  * @ignore
 013  */
 014  define('IN_PHPBB', true);
 015  define('IN_INSTALL', true);
 016  /**#@-*/
 017   
 018  $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../';
 019  $phpEx = substr(strrchr(__FILE__, '.'), 1);
 020   
 021  // Report all errors, except notices
 022  error_reporting(E_ALL ^ E_NOTICE);
 023   
 024  // @todo Review this test and see if we can find out what it is which prevents PHP 4.2.x from even displaying the page with requirements on it
 025  if (version_compare(PHP_VERSION, '4.3.3') < 0)
 026  {
 027      die('You are running an unsupported PHP version. Please upgrade to PHP 4.3.3 or higher before trying to install phpBB 3.0');
 028  }
 029   
 030  /*
 031  * Remove variables created by register_globals from the global scope
 032  * Thanks to Matt Kavanagh
 033  */
 034  function deregister_globals()
 035  {
 036      $not_unset = array(
 037          'GLOBALS'    => true,
 038          '_GET'        => true,
 039          '_POST'        => true,
 040          '_COOKIE'    => true,
 041          '_REQUEST'    => true,
 042          '_SERVER'    => true,
 043          '_SESSION'    => true,
 044          '_ENV'        => true,
 045          '_FILES'    => true,
 046          'phpEx'        => true,
 047          'phpbb_root_path'    => true
 048      );
 049   
 050      // Not only will array_merge and array_keys give a warning if
 051      // a parameter is not an array, array_merge will actually fail.
 052      // So we check if _SESSION has been initialised.
 053      if (!isset($_SESSION) || !is_array($_SESSION))
 054      {
 055          $_SESSION = array();
 056      }
 057   
 058      // Merge all into one extremely huge array; unset this later
 059      $input = array_merge(
 060          array_keys($_GET),
 061          array_keys($_POST),
 062          array_keys($_COOKIE),
 063          array_keys($_SERVER),
 064          array_keys($_SESSION),
 065          array_keys($_ENV),
 066          array_keys($_FILES)
 067      );
 068   
 069      foreach ($input as $varname)
 070      {
 071          if (isset($not_unset[$varname]))
 072          {
 073              // Hacking attempt. No point in continuing unless it's a COOKIE
 074              if ($varname !== 'GLOBALS' || isset($_GET['GLOBALS']) || isset($_POST['GLOBALS']) || isset($_SERVER['GLOBALS']) || isset($_SESSION['GLOBALS']) || isset($_ENV['GLOBALS']) || isset($_FILES['GLOBALS']))
 075              {
 076                  exit;
 077              }
 078              else
 079              {
 080                  $cookie = &$_COOKIE;
 081                  while (isset($cookie['GLOBALS']))
 082                  {
 083                      foreach ($cookie['GLOBALS'] as $registered_var => $value)
 084                      {
 085                          if (!isset($not_unset[$registered_var]))
 086                          {
 087                              unset($GLOBALS[$registered_var]);
 088                          }
 089                      }
 090                      $cookie = &$cookie['GLOBALS'];
 091                  }
 092              }
 093          }
 094   
 095          unset($GLOBALS[$varname]);
 096      }
 097   
 098      unset($input);
 099  }
 100   
 101  // If we are on PHP >= 6.0.0 we do not need some code
 102  if (version_compare(PHP_VERSION, '6.0.0-dev', '>='))
 103  {
 104      /**
 105      * @ignore
 106      */
 107      define('STRIP', false);
 108  }
 109  else
 110  {
 111      set_magic_quotes_runtime(0);
 112   
 113      // Be paranoid with passed vars
 114      if (@ini_get('register_globals') == '1' || strtolower(@ini_get('register_globals')) == 'on')
 115      {
 116          deregister_globals();
 117      }
 118   
 119      define('STRIP', (get_magic_quotes_gpc()) ? true : false);
 120  }
 121   
 122  // Try to override some limits - maybe it helps some...
 123  @set_time_limit(0);
 124  $mem_limit = @ini_get('memory_limit');
 125  if (!empty($mem_limit))
 126  {
 127      $unit = strtolower(substr($mem_limit, -1, 1));
 128      $mem_limit = (int) $mem_limit;
 129   
 130      if ($unit == 'k')
 131      {
 132          $mem_limit = floor($mem_limit / 1024);
 133      }
 134      else if ($unit == 'g')
 135      {
 136          $mem_limit *= 1024;
 137      }
 138      else if (is_numeric($unit))
 139      {
 140          $mem_limit = floor((int) ($mem_limit . $unit) / 1048576);
 141      }
 142      $mem_limit = max(128, $mem_limit) . 'M';
 143  }
 144  else
 145  {
 146      $mem_limit = '128M';
 147  }
 148  @ini_set('memory_limit', $mem_limit);
 149   
 150  // Include essential scripts
 151  require($phpbb_root_path . 'includes/functions.' . $phpEx);
 152   
 153  if (file_exists($phpbb_root_path . 'includes/functions_content.' . $phpEx))
 154  {
 155      require($phpbb_root_path . 'includes/functions_content.' . $phpEx);
 156  }
 157   
 158  include($phpbb_root_path . 'includes/auth.' . $phpEx);
 159  include($phpbb_root_path . 'includes/session.' . $phpEx);
 160  include($phpbb_root_path . 'includes/template.' . $phpEx);
 161  include($phpbb_root_path . 'includes/acm/acm_file.' . $phpEx);
 162  include($phpbb_root_path . 'includes/cache.' . $phpEx);
 163  include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
 164  include($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
 165  require($phpbb_root_path . 'includes/functions_install.' . $phpEx);
 166   
 167  // Try and load an appropriate language if required
 168  $language = basename(request_var('language', ''));
 169   
 170  if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && !$language)
 171  {
 172      $accept_lang_ary = explode(',', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']));
 173      foreach ($accept_lang_ary as $accept_lang)
 174      {
 175          // Set correct format ... guess full xx_yy form
 176          $accept_lang = substr($accept_lang, 0, 2) . '_' . substr($accept_lang, 3, 2);
 177   
 178          if (file_exists($phpbb_root_path . 'language/' . $accept_lang))
 179          {
 180              $language = $accept_lang;
 181              break;
 182          }
 183          else
 184          {
 185              // No match on xx_yy so try xx
 186              $accept_lang = substr($accept_lang, 0, 2);
 187              if (file_exists($phpbb_root_path . 'language/' . $accept_lang))
 188              {
 189                  $language = $accept_lang;
 190                  break;
 191              }
 192          }
 193      }
 194  }
 195   
 196  // No appropriate language found ... so let's use the first one in the language
 197  // dir, this may or may not be English
 198  if (!$language)
 199  {
 200      $dir = @opendir($phpbb_root_path . 'language');
 201   
 202      if (!$dir)
 203      {
 204          die('Unable to access the language directory');
 205          exit;
 206      }
 207   
 208      while (($file = readdir($dir)) !== false)
 209      {
 210          $path = $phpbb_root_path . 'language/' . $file;
 211   
 212          if (!is_file($path) && !is_link($path) && file_exists($path . '/iso.txt'))
 213          {
 214              $language = $file;
 215              break;
 216          }
 217      }
 218      closedir($dir);
 219  }
 220   
 221  if (!file_exists($phpbb_root_path . 'language/' . $language))
 222  {
 223      die('No language found!');
 224  }
 225   
 226  // And finally, load the relevant language files
 227  include($phpbb_root_path . 'language/' . $language . '/common.' . $phpEx);
 228  include($phpbb_root_path . 'language/' . $language . '/acp/common.' . $phpEx);
 229  include($phpbb_root_path . 'language/' . $language . '/acp/board.' . $phpEx);
 230  include($phpbb_root_path . 'language/' . $language . '/install.' . $phpEx);
 231  include($phpbb_root_path . 'language/' . $language . '/posting.' . $phpEx);
 232   
 233  $mode = request_var('mode', 'overview');
 234  $sub = request_var('sub', '');
 235   
 236  // Set PHP error handler to ours
 237  set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler');
 238   
 239  $user = new user();
 240  $auth = new auth();
 241  $cache = new cache();
 242  $template = new template();
 243   
 244  // Add own hook handler, if present. :o
 245  if (file_exists($phpbb_root_path . 'includes/hooks/index.' . $phpEx))
 246  {
 247      require($phpbb_root_path . 'includes/hooks/index.' . $phpEx);
 248      $phpbb_hook = new phpbb_hook(array('exit_handler', 'phpbb_user_session_handler', 'append_sid', array('template', 'display')));
 249   
 250      foreach ($cache->obtain_hooks() as $hook)
 251      {
 252          @include($phpbb_root_path . 'includes/hooks/' . $hook . '.' . $phpEx);
 253      }
 254  }
 255  else
 256  {
 257      $phpbb_hook = false;
 258  }
 259   
 260  // Set some standard variables we want to force
 261  $config = array(
 262      'load_tplcompile'    => '1'
 263  );
 264   
 265  $template->set_custom_template('../adm/style', 'admin');
 266  $template->assign_var('T_TEMPLATE_PATH', '../adm/style');
 267   
 268  // the acp template is never stored in the database
 269  $user->theme['template_storedb'] = false;
 270   
 271  $install = new module();
 272   
 273  $install->create('install', "index.$phpEx", $mode, $sub);
 274  $install->load();
 275   
 276  // Generate the page
 277  $install->page_header();
 278  $install->generate_navigation();
 279   
 280  $template->set_filenames(array(
 281      'body' => $install->get_tpl_name())
 282  );
 283   
 284  $install->page_footer();
 285   
 286  /**
 287  * @package install
 288  */
 289  class module
 290  {
 291      var $id = 0;
 292      var $type = 'install';
 293      var $module_ary = array();
 294      var $filename;
 295      var $module_url = '';
 296      var $tpl_name = '';
 297      var $mode;
 298      var $sub;
 299   
 300      /**
 301      * Private methods, should not be overwritten
 302      */
 303      function create($module_type, $module_url, $selected_mod = false, $selected_submod = false)
 304      {
 305          global $db, $config, $phpEx, $phpbb_root_path;
 306   
 307          $module = array();
 308   
 309          // Grab module information using Bart's "neat-o-module" system (tm)
 310          $dir = @opendir('.');
 311   
 312          if (!$dir)
 313          {
 314              $this->error('Unable to access the installation directory', __LINE__, __FILE__);
 315          }
 316   
 317          $setmodules = 1;
 318          while (($file = readdir($dir)) !== false)
 319          {
 320              if (preg_match('#^install_(.*?)\.' . $phpEx . '$#', $file))
 321              {
 322                  include($file);
 323              }
 324          }
 325          closedir($dir);
 326   
 327          unset($setmodules);
 328   
 329          if (!sizeof($module))
 330          {
 331              $this->error('No installation modules found', __LINE__, __FILE__);
 332          }
 333   
 334          // Order to use and count further if modules get assigned to the same position or not having an order
 335          $max_module_order = 1000;
 336   
 337          foreach ($module as $row)
 338          {
 339              // Check any module pre-reqs
 340              if ($row['module_reqs'] != '')
 341              {
 342              }
 343   
 344              // Module order not specified or module already assigned at this position?
 345              if (!isset($row['module_order']) || isset($this->module_ary[$row['module_order']]))
 346              {
 347                  $row['module_order'] = $max_module_order;
 348                  $max_module_order++;
 349              }
 350   
 351              $this->module_ary[$row['module_order']]['name'] = $row['module_title'];
 352              $this->module_ary[$row['module_order']]['filename'] = $row['module_filename'];
 353              $this->module_ary[$row['module_order']]['subs'] = $row['module_subs'];
 354              $this->module_ary[$row['module_order']]['stages'] = $row['module_stages'];
 355   
 356              if (strtolower($selected_mod) == strtolower($row['module_title']))
 357              {
 358                  $this->id = (int) $row['module_order'];
 359                  $this->filename = (string) $row['module_filename'];
 360                  $this->module_url = (string) $module_url;
 361                  $this->mode = (string) $selected_mod;
 362                  // Check that the sub-mode specified is valid or set a default if not
 363                  if (is_array($row['module_subs']))
 364                  {
 365                      $this->sub = strtolower((in_array(strtoupper($selected_submod), $row['module_subs'])) ? $selected_submod : $row['module_subs'][0]);
 366                  }
 367                  else if (is_array($row['module_stages']))
 368                  {
 369                      $this->sub = strtolower((in_array(strtoupper($selected_submod), $row['module_stages'])) ? $selected_submod : $row['module_stages'][0]);
 370                  }
 371                  else
 372                  {
 373                      $this->sub = '';
 374                  }
 375              }
 376          } // END foreach
 377      } // END create
 378   
 379      /**
 380      * Load and run the relevant module if applicable
 381      */
 382      function load($mode = false, $run = true)
 383      {
 384          global $phpbb_root_path, $phpEx;
 385   
 386          if ($run)
 387          {
 388              if (!empty($mode))
 389              {
 390                  $this->mode = $mode;
 391              }
 392   
 393              $module = $this->filename;
 394              if (!class_exists($module))
 395              {
 396                  $this->error('Module "' . htmlspecialchars($module) . '" not accessible.', __LINE__, __FILE__);
 397              }
 398              $this->module = new $module($this);
 399   
 400              if (method_exists($this->module, 'main'))
 401              {
 402                  $this->module->main($this->mode, $this->sub);
 403              }
 404          }
 405      }
 406   
 407      /**
 408      * Output the standard page header
 409      */
 410      function page_header()
 411      {
 412          if (defined('HEADER_INC'))
 413          {
 414              return;
 415          }
 416   
 417          define('HEADER_INC', true);
 418          global $template, $lang, $stage, $phpbb_root_path;
 419   
 420          $template->assign_vars(array(
 421              'L_CHANGE'                => $lang['CHANGE'],
 422              'L_INSTALL_PANEL'        => $lang['INSTALL_PANEL'],
 423              'L_SELECT_LANG'            => $lang['SELECT_LANG'],
 424              'L_SKIP'                => $lang['SKIP'],
 425              'PAGE_TITLE'            => $this->get_page_title(),
 426              'T_IMAGE_PATH'            => $phpbb_root_path . 'adm/images/',
 427   
 428              'S_CONTENT_DIRECTION'     => $lang['DIRECTION'],
 429              'S_CONTENT_FLOW_BEGIN'    => ($lang['DIRECTION'] == 'ltr') ? 'left' : 'right',
 430              'S_CONTENT_FLOW_END'    => ($lang['DIRECTION'] == 'ltr') ? 'right' : 'left',
 431              'S_CONTENT_ENCODING'     => 'UTF-8',
 432   
 433              'S_USER_LANG'            => $lang['USER_LANG'],
 434              )
 435          );
 436   
 437          header('Content-type: text/html; charset=UTF-8');
 438          header('Cache-Control: private, no-cache="set-cookie"');
 439          header('Expires: 0');
 440          header('Pragma: no-cache');
 441   
 442          return;
 443      }
 444   
 445      /**
 446      * Output the standard page footer
 447      */
 448      function page_footer()
 449      {
 450          global $db, $template;
 451   
 452          $template->display('body');
 453      
 454          // Close our DB connection.
 455          if (!empty($db) && is_object($db))
 456          {
 457              $db->sql_close();
 458          }
 459   
 460          if (function_exists('exit_handler'))
 461          {
 462              exit_handler();
 463          }
 464      }
 465   
 466      /**
 467      * Returns desired template name
 468      */
 469      function get_tpl_name()
 470      {
 471          return $this->module->tpl_name . '.html';
 472      }
 473   
 474      /**
 475      * Returns the desired page title
 476      */
 477      function get_page_title()
 478      {
 479          global $lang;
 480   
 481          if (!isset($this->module->page_title))
 482          {
 483              return '';
 484          }
 485   
 486          return (isset($lang[$this->module->page_title])) ? $lang[$this->module->page_title] : $this->module->page_title;
 487      }
 488   
 489      /**
 490      * Generate an HTTP/1.1 header to redirect the user to another page
 491      * This is used during the installation when we do not have a database available to call the normal redirect function
 492      * @param string $page The page to redirect to relative to the installer root path
 493      */
 494      function redirect($page)
 495      {
 496          $server_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME');
 497          $server_port = (!empty($_SERVER['SERVER_PORT'])) ? (int) $_SERVER['SERVER_PORT'] : (int) getenv('SERVER_PORT');
 498          $secure = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 1 : 0;
 499   
 500          $script_name = (!empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : getenv('PHP_SELF');
 501          if (!$script_name)
 502          {
 503              $script_name = (!empty($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : getenv('REQUEST_URI');
 504          }
 505   
 506          // Replace backslashes and doubled slashes (could happen on some proxy setups)
 507          $script_name = str_replace(array('\\', '//'), '/', $script_name);
 508          $script_path = trim(dirname($script_name));
 509   
 510          $url = (($secure) ? 'https://' : 'http://') . $server_name;
 511   
 512          if ($server_port && (($secure && $server_port <> 443) || (!$secure && $server_port <> 80)))
 513          {
 514              $url .= ':' . $server_port;
 515          }
 516   
 517          $url .= $script_path . '/' . $page;
 518          header('Location: ' . $url);
 519          exit;
 520      }
 521   
 522      /**
 523      * Generate the navigation tabs
 524      */
 525      function generate_navigation()
 526      {
 527          global $lang, $template, $phpEx, $language;
 528   
 529          if (is_array($this->module_ary))
 530          {
 531              @ksort($this->module_ary);
 532              foreach ($this->module_ary as $cat_ary)
 533              {
 534                  $cat = $cat_ary['name'];
 535                  $l_cat = (!empty($lang['CAT_' . $cat])) ? $lang['CAT_' . $cat] : preg_replace('#_#', ' ', $cat);
 536                  $cat = strtolower($cat);
 537                  $url = $this->module_url . "?mode=$cat&amp;language=$language";
 538                  
 539                  if ($this->mode == $cat)
 540                  {
 541                      $template->assign_block_vars('t_block1', array(
 542                          'L_TITLE'        => $l_cat,
 543                          'S_SELECTED'    => true,
 544                          'U_TITLE'        => $url,
 545                      ));
 546   
 547                      if (is_array($this->module_ary[$this->id]['subs']))
 548                      {
 549                          $subs = $this->module_ary[$this->id]['subs'];
 550                          foreach ($subs as $option)
 551                          {
 552                              $l_option = (!empty($lang['SUB_' . $option])) ? $lang['SUB_' . $option] : preg_replace('#_#', ' ', $option);
 553                              $option = strtolower($option);
 554                              $url = $this->module_url . '?mode=' . $this->mode . "&amp;sub=$option&amp;language=$language";
 555   
 556                              $template->assign_block_vars('l_block1', array(
 557                                  'L_TITLE'        => $l_option,
 558                                  'S_SELECTED'    => ($this->sub == $option),
 559                                  'U_TITLE'        => $url,
 560                              ));
 561                          }
 562                      }
 563   
 564                      if (is_array($this->module_ary[$this->id]['stages']))
 565                      {
 566                          $subs = $this->module_ary[$this->id]['stages'];
 567                          $matched = false;
 568                          foreach ($subs as $option)
 569                          {
 570                              $l_option = (!empty($lang['STAGE_' . $option])) ? $lang['STAGE_' . $option] : preg_replace('#_#', ' ', $option);
 571                              $option = strtolower($option);
 572                              $matched = ($this->sub == $option) ? true : $matched;
 573   
 574                              $template->assign_block_vars('l_block2', array(
 575                                  'L_TITLE'        => $l_option,
 576                                  'S_SELECTED'    => ($this->sub == $option),
 577                                  'S_COMPLETE'    => !$matched,
 578                              ));
 579                          }
 580                      }
 581                  }
 582                  else
 583                  {
 584                      $template->assign_block_vars('t_block1', array(
 585                          'L_TITLE'        => $l_cat,
 586                          'S_SELECTED'    => false,
 587                          'U_TITLE'        => $url,
 588                      ));
 589                  }
 590              }
 591          }
 592      }
 593   
 594      /**
 595      * Output an error message
 596      * If skip is true, return and continue execution, else exit
 597      */
 598      function error($error, $line, $file, $skip = false)
 599      {
 600          global $lang, $db, $template;
 601   
 602          if ($skip)
 603          {
 604              $template->assign_block_vars('checks', array(
 605                  'S_LEGEND'    => true,
 606                  'LEGEND'    => $lang['INST_ERR'],
 607              ));
 608   
 609              $template->assign_block_vars('checks', array(
 610                  'TITLE'        => basename($file) . ' [ ' . $line . ' ]',
 611                  'RESULT'    => '<b style="color:red">' . $error . '</b>',
 612              ));
 613   
 614              return;
 615          }
 616   
 617          echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
 618          echo '<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">';
 619          echo '<head>';
 620          echo '<meta http-equiv="content-type" content="text/html; charset=utf-8" />';
 621          echo '<title>' . $lang['INST_ERR_FATAL'] . '</title>';
 622          echo '<link href="../adm/style/admin.css" rel="stylesheet" type="text/css" media="screen" />';
 623          echo '</head>';
 624          echo '<body id="errorpage">';
 625          echo '<div id="wrap">';
 626          echo '    <div id="page-header">';
 627          echo '    </div>';
 628          echo '    <div id="page-body">';
 629          echo '        <div id="acp">';
 630          echo '        <div class="panel">';
 631          echo '            <span class="corners-top"><span></span></span>';
 632          echo '            <div id="content">';
 633          echo '                <h1>' . $lang['INST_ERR_FATAL'] . '</h1>';
 634          echo '        <p>' . $lang['INST_ERR_FATAL'] . "</p>\n";
 635          echo '        <p>' . basename($file) . ' [ ' . $line . " ]</p>\n";
 636          echo '        <p><b>' . $error . "</b></p>\n";
 637          echo '            </div>';
 638          echo '            <span class="corners-bottom"><span></span></span>';
 639          echo '        </div>';
 640          echo '        </div>';
 641          echo '    </div>';
 642          echo '    <div id="page-footer">';
 643          echo '        Powered by phpBB &copy; 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>';
 644          echo '    </div>';
 645          echo '</div>';
 646          echo '</body>';
 647          echo '</html>';
 648   
 649          if (!empty($db) && is_object($db))
 650          {
 651              $db->sql_close();
 652          }
 653   
 654          exit_handler();
 655      }
 656   
 657      /**
 658      * Output an error message for a database related problem
 659      * If skip is true, return and continue execution, else exit
 660      */
 661      function db_error($error, $sql, $line, $file, $skip = false)
 662      {
 663          global $lang, $db, $template;
 664   
 665          if ($skip)
 666          {
 667              $template->assign_block_vars('checks', array(
 668                  'S_LEGEND'    => true,
 669                  'LEGEND'    => $lang['INST_ERR_FATAL'],
 670              ));
 671   
 672              $template->assign_block_vars('checks', array(
 673                  'TITLE'        => basename($file) . ' [ ' . $line . ' ]',
 674                  'RESULT'    => '<b style="color:red">' . $error . '</b><br />&#187; SQL:' . $sql,
 675              ));
 676   
 677              return;
 678          }
 679   
 680          $template->set_filenames(array(
 681              'body' => 'install_error.html')
 682          );
 683          $this->page_header();
 684          $this->generate_navigation();
 685   
 686          $template->assign_vars(array(
 687              'MESSAGE_TITLE'        => $lang['INST_ERR_FATAL_DB'],
 688              'MESSAGE_TEXT'        => '<p>' . basename($file) . ' [ ' . $line . ' ]</p><p>SQL : ' . $sql . '</p><p><b>' . $error . '</b></p>',
 689          ));
 690   
 691          // Rollback if in transaction
 692          if ($db->transaction)
 693          {
 694              $db->sql_transaction('rollback');
 695          }
 696   
 697          $this->page_footer();
 698      }
 699   
 700      /**
 701      * Generate the relevant HTML for an input field and the associated label and explanatory text
 702      */
 703      function input_field($name, $type, $value='', $options='')
 704      {
 705          global $lang;
 706          $tpl_type = explode(':', $type);
 707          $tpl = '';
 708   
 709          switch ($tpl_type[0])
 710          {
 711              case 'text':
 712              case 'password':
 713                  $size = (int) $tpl_type[1];
 714                  $maxlength = (int) $tpl_type[2];
 715   
 716                  $tpl = '<input id="' . $name . '" type="' . $tpl_type[0] . '"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="' . $name . '" value="' . $value . '" />';
 717              break;
 718   
 719              case 'textarea':
 720                  $rows = (int) $tpl_type[1];
 721                  $cols = (int) $tpl_type[2];
 722   
 723                  $tpl = '<textarea id="' . $name . '" name="' . $name . '" rows="' . $rows . '" cols="' . $cols . '">' . $value . '</textarea>';
 724              break;
 725   
 726              case 'radio':
 727                  $key_yes    = ($value) ? ' checked="checked" id="' . $name . '"' : '';
 728                  $key_no        = (!$value) ? ' checked="checked" id="' . $name . '"' : '';
 729   
 730                  $tpl_type_cond = explode('_', $tpl_type[1]);
 731                  $type_no = ($tpl_type_cond[0] == 'disabled' || $tpl_type_cond[0] == 'enabled') ? false : true;
 732   
 733                  $tpl_no = '<label><input type="radio" name="' . $name . '" value="0"' . $key_no . ' class="radio" /> ' . (($type_no) ? $lang['NO'] : $lang['DISABLED']) . '</label>';
 734                  $tpl_yes = '<label><input type="radio" name="' . $name . '" value="1"' . $key_yes . ' class="radio" /> ' . (($type_no) ? $lang['YES'] : $lang['ENABLED']) . '</label>';
 735   
 736                  $tpl = ($tpl_type_cond[0] == 'yes' || $tpl_type_cond[0] == 'enabled') ? $tpl_yes . '&nbsp;&nbsp;' . $tpl_no : $tpl_no . '&nbsp;&nbsp;' . $tpl_yes;
 737              break;
 738   
 739              case 'select':
 740                  eval('$s_options = ' . str_replace('{VALUE}', $value, $options) . ';');
 741                  $tpl = '<select id="' . $name . '" name="' . $name . '">' . $s_options . '</select>';
 742              break;
 743   
 744              case 'custom':
 745                  eval('$tpl = ' . str_replace('{VALUE}', $value, $options) . ';');
 746              break;
 747   
 748              default:
 749              break;
 750          }
 751   
 752          return $tpl;
 753      }
 754   
 755      /**
 756      * Generate the drop down of available language packs
 757      */
 758      function inst_language_select($default = '')
 759      {
 760          global $phpbb_root_path, $phpEx;
 761   
 762          $dir = @opendir($phpbb_root_path . 'language');
 763   
 764          if (!$dir)
 765          {
 766              $this->error('Unable to access the language directory', __LINE__, __FILE__);
 767          }
 768   
 769          while ($file = readdir($dir))
 770          {
 771              $path = $phpbb_root_path . 'language/' . $file;
 772   
 773              if ($file == '.' || $file == '..' || is_link($path) || is_file($path) || $file == 'CVS')
 774              {
 775                  continue;
 776              }
 777   
 778              if (file_exists($path . '/iso.txt'))
 779              {
 780                  list($displayname, $localname) = @file($path . '/iso.txt');
 781                  $lang[$localname] = $file;
 782              }
 783          }
 784          closedir($dir);
 785   
 786          @asort($lang);
 787          @reset($lang);
 788   
 789          $user_select = '';
 790          foreach ($lang as $displayname => $filename)
 791          {
 792              $selected = (strtolower($default) == strtolower($filename)) ? ' selected="selected"' : '';
 793              $user_select .= '<option value="' . $filename . '"' . $selected . '>' . ucwords($displayname) . '</option>';
 794          }
 795   
 796          return $user_select;
 797      }
 798  }
 799   
 800  ?>