~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/php/phpBB3/install/index.php

  • Committer: dcoles
  • Date: 2008-02-20 01:12:43 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:520
forum: Fixed setup.py to include forum files in install, disabled 
reauthentication for admin control panel (lets admin users log in as they have 
no valid password hash) and updated install procedure

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
*
 
4
* @package install
 
5
* @version $Id: index.php,v 1.71 2007/10/06 11:45:04 acydburn Exp $
 
6
* @copyright (c) 2005 phpBB Group
 
7
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
 
8
*
 
9
*/
 
10
 
 
11
/**#@+
 
12
* @ignore
 
13
*/
 
14
define('IN_PHPBB', true);
 
15
define('IN_INSTALL', true);
 
16
/**#@-*/
 
17
 
 
18
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../';
 
19
$phpEx = substr(strrchr(__FILE__, '.'), 1);
 
20
 
 
21
// Report all errors, except notices
 
22
error_reporting(E_ALL ^ E_NOTICE);
 
23
 
 
24
// @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
 
25
if (version_compare(PHP_VERSION, '4.3.3') < 0)
 
26
{
 
27
        die('You are running an unsupported PHP version. Please upgrade to PHP 4.3.3 or higher before trying to install phpBB 3.0');
 
28
}
 
29
 
 
30
/*
 
31
* Remove variables created by register_globals from the global scope
 
32
* Thanks to Matt Kavanagh
 
33
*/
 
34
function deregister_globals()
 
35
{
 
36
        $not_unset = array(
 
37
                'GLOBALS'       => true,
 
38
                '_GET'          => true,
 
39
                '_POST'         => true,
 
40
                '_COOKIE'       => true,
 
41
                '_REQUEST'      => true,
 
42
                '_SERVER'       => true,
 
43
                '_SESSION'      => true,
 
44
                '_ENV'          => true,
 
45
                '_FILES'        => true,
 
46
                'phpEx'         => true,
 
47
                'phpbb_root_path'       => true
 
48
        );
 
49
 
 
50
        // Not only will array_merge and array_keys give a warning if
 
51
        // a parameter is not an array, array_merge will actually fail.
 
52
        // So we check if _SESSION has been initialised.
 
53
        if (!isset($_SESSION) || !is_array($_SESSION))
 
54
        {
 
55
                $_SESSION = array();
 
56
        }
 
57
 
 
58
        // Merge all into one extremely huge array; unset this later
 
59
        $input = array_merge(
 
60
                array_keys($_GET),
 
61
                array_keys($_POST),
 
62
                array_keys($_COOKIE),
 
63
                array_keys($_SERVER),
 
64
                array_keys($_SESSION),
 
65
                array_keys($_ENV),
 
66
                array_keys($_FILES)
 
67
        );
 
68
 
 
69
        foreach ($input as $varname)
 
70
        {
 
71
                if (isset($not_unset[$varname]))
 
72
                {
 
73
                        // Hacking attempt. No point in continuing unless it's a COOKIE
 
74
                        if ($varname !== 'GLOBALS' || isset($_GET['GLOBALS']) || isset($_POST['GLOBALS']) || isset($_SERVER['GLOBALS']) || isset($_SESSION['GLOBALS']) || isset($_ENV['GLOBALS']) || isset($_FILES['GLOBALS']))
 
75
                        {
 
76
                                exit;
 
77
                        }
 
78
                        else
 
79
                        {
 
80
                                $cookie = &$_COOKIE;
 
81
                                while (isset($cookie['GLOBALS']))
 
82
                                {
 
83
                                        foreach ($cookie['GLOBALS'] as $registered_var => $value)
 
84
                                        {
 
85
                                                if (!isset($not_unset[$registered_var]))
 
86
                                                {
 
87
                                                        unset($GLOBALS[$registered_var]);
 
88
                                                }
 
89
                                        }
 
90
                                        $cookie = &$cookie['GLOBALS'];
 
91
                                }
 
92
                        }
 
93
                }
 
94
 
 
95
                unset($GLOBALS[$varname]);
 
96
        }
 
97
 
 
98
        unset($input);
 
99
}
 
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
?>
 
 
b'\\ No newline at end of file'