256
+ − 1
<?php
+ − 2
+ − 3
/*
+ − 4
* Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 5
* Version 1.1.1
256
+ − 6
* Copyright (C) 2006-2007 Dan Fuhry
+ − 7
* install.php - handles everything related to installation and initial configuration
+ − 8
*
+ − 9
* This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
+ − 10
* as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+ − 11
*
+ − 12
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ − 13
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
+ − 14
*/
+ − 15
+ − 16
@include('config.php');
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 17
if( ( defined('ENANO_INSTALLED') || defined('MIDGET_INSTALLED') ) && ((isset($_GET['mode']) && ($_GET['mode']!='finish' && $_GET['mode']!='css') && $_GET['mode']!='showlicense') || !isset($_GET['mode'])))
256
+ − 18
{
+ − 19
$_GET['title'] = 'Enano:Installation_locked';
+ − 20
require('includes/common.php');
+ − 21
die_friendly('Installation locked', '<p>The Enano installer has found a Enano installation in this directory. You MUST delete config.php if you want to re-install Enano.</p><p>If you wish to upgrade an older Enano installation to this version, please use the <a href="upgrade.php">upgrade script</a>.</p>');
+ − 22
exit;
+ − 23
}
+ − 24
+ − 25
define('IN_ENANO_INSTALL', 'true');
+ − 26
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 27
define('ENANO_VERSION', '1.1.1');
243
+ − 28
define('ENANO_CODE_NAME', 'Germination');
256
+ − 29
// In beta versions, define ENANO_BETA_VERSION here
+ − 30
240
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 31
// This is required to make installation work right
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 32
define("ENANO_ALLOW_LOAD_NOLANG", 1);
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 33
256
+ − 34
if(!defined('scriptPath')) {
+ − 35
$sp = dirname($_SERVER['REQUEST_URI']);
+ − 36
if($sp == '/' || $sp == '\\') $sp = '';
+ − 37
define('scriptPath', $sp);
+ − 38
}
+ − 39
+ − 40
if(!defined('contentPath')) {
+ − 41
$sp = dirname($_SERVER['REQUEST_URI']);
+ − 42
if($sp == '/' || $sp == '\\') $sp = '';
+ − 43
define('contentPath', $sp);
+ − 44
}
+ − 45
global $_starttime, $this_page, $sideinfo;
+ − 46
$_starttime = microtime(true);
+ − 47
322
+ − 48
global $db;
+ − 49
256
+ − 50
// Determine directory (special case for development servers)
+ − 51
if ( strpos(__FILE__, '/repo/') && file_exists('.enanodev') )
+ − 52
{
+ − 53
$filename = str_replace('/repo/', '/', __FILE__);
+ − 54
}
+ − 55
else
+ − 56
{
+ − 57
$filename = __FILE__;
+ − 58
}
+ − 59
+ − 60
define('ENANO_ROOT', dirname($filename));
+ − 61
+ − 62
function is_page($p)
+ − 63
{
+ − 64
return true;
+ − 65
}
+ − 66
331
+ − 67
function microtime_float()
+ − 68
{
+ − 69
list($usec, $sec) = explode(" ", microtime());
+ − 70
return ((float)$usec + (float)$sec);
+ − 71
}
+ − 72
256
+ − 73
require('includes/wikiformat.php');
+ − 74
require('includes/constants.php');
+ − 75
require('includes/rijndael.php');
+ − 76
require('includes/functions.php');
243
+ − 77
require('includes/dbal.php');
+ − 78
require('includes/lang.php');
+ − 79
require('includes/json.php');
256
+ − 80
331
+ − 81
// Initialize language support
+ − 82
$lang = new Language('eng');
+ − 83
$lang->load_file('./language/english/install.json');
+ − 84
256
+ − 85
strip_magic_quotes_gpc();
+ − 86
+ − 87
//
+ − 88
// INSTALLER LIBRARY
+ − 89
//
+ − 90
243
+ − 91
$neutral_color = 'C';
+ − 92
256
+ − 93
function run_installer_stage($stage_id, $stage_name, $function, $failure_explanation, $allow_skip = true)
+ − 94
{
+ − 95
static $resumed = false;
+ − 96
static $resume_stack = array();
+ − 97
+ − 98
if ( empty($resume_stack) && isset($_POST['resume_stack']) && preg_match('/[a-z_]+((\|[a-z_]+)+)/', $_POST['resume_stack']) )
+ − 99
{
+ − 100
$resume_stack = explode('|', $_POST['resume_stack']);
+ − 101
}
+ − 102
+ − 103
$already_run = false;
+ − 104
if ( in_array($stage_id, $resume_stack) )
+ − 105
{
+ − 106
$already_run = true;
+ − 107
}
+ − 108
+ − 109
if ( !$resumed )
+ − 110
{
+ − 111
if ( !isset($_GET['stage']) )
+ − 112
$resumed = true;
+ − 113
if ( isset($_GET['stage']) && $_GET['stage'] == $stage_id )
+ − 114
{
+ − 115
$resumed = true;
+ − 116
}
+ − 117
}
+ − 118
if ( !$resumed && $allow_skip )
+ − 119
{
267
+ − 120
echo_stage_success($stage_id, $stage_name);
256
+ − 121
return false;
+ − 122
}
+ − 123
if ( !function_exists($function) )
+ − 124
die('libenanoinstall: CRITICAL: function "' . $function . '" for ' . $stage_id . ' doesn\'t exist');
+ − 125
$result = @call_user_func($function, false, $already_run);
+ − 126
if ( $result )
+ − 127
{
+ − 128
echo_stage_success($stage_id, $stage_name);
+ − 129
$resume_stack[] = $stage_id;
+ − 130
return true;
+ − 131
}
+ − 132
else
+ − 133
{
+ − 134
echo_stage_failure($stage_id, $stage_name, $failure_explanation, $resume_stack);
+ − 135
return false;
+ − 136
}
+ − 137
}
+ − 138
+ − 139
function start_install_table()
+ − 140
{
254
+ − 141
echo '<table border="0" cellspacing="0" cellpadding="0" style="margin-top: 10px;">' . "\n";
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 142
ob_start();
256
+ − 143
}
+ − 144
+ − 145
function close_install_table()
+ − 146
{
+ − 147
echo '</table>' . "\n\n";
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 148
ob_end_flush();
256
+ − 149
}
+ − 150
+ − 151
function echo_stage_success($stage_id, $stage_name)
+ − 152
{
+ − 153
global $neutral_color;
+ − 154
$neutral_color = ( $neutral_color == 'A' ) ? 'C' : 'A';
+ − 155
echo '<tr><td style="width: 500px; background-color: #' . "{$neutral_color}{$neutral_color}FF{$neutral_color}{$neutral_color}" . '; padding: 0 5px;">' . htmlspecialchars($stage_name) . '</td><td style="padding: 0 5px;"><img alt="Done" src="images/good.gif" /></td></tr>' . "\n";
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 156
ob_flush();
256
+ − 157
}
+ − 158
+ − 159
function echo_stage_failure($stage_id, $stage_name, $failure_explanation, $resume_stack)
+ − 160
{
+ − 161
global $neutral_color;
254
+ − 162
global $lang;
256
+ − 163
+ − 164
$neutral_color = ( $neutral_color == 'A' ) ? 'C' : 'A';
+ − 165
echo '<tr><td style="width: 500px; background-color: #' . "FF{$neutral_color}{$neutral_color}{$neutral_color}{$neutral_color}" . '; padding: 0 5px;">' . htmlspecialchars($stage_name) . '</td><td style="padding: 0 5px;"><img alt="Failed" src="images/bad.gif" /></td></tr>' . "\n";
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 166
ob_flush();
256
+ − 167
close_install_table();
+ − 168
$post_data = '';
+ − 169
$mysql_error = mysql_error();
+ − 170
foreach ( $_POST as $key => $value )
+ − 171
{
269
+ − 172
// FIXME: These should really also be sanitized for double quotes
256
+ − 173
$value = htmlspecialchars($value);
+ − 174
$key = htmlspecialchars($key);
+ − 175
$post_data .= " <input type=\"hidden\" name=\"$key\" value=\"$value\" />\n";
+ − 176
}
+ − 177
echo '<form action="install.php?mode=install&stage=' . $stage_id . '" method="post">
+ − 178
' . $post_data . '
+ − 179
<input type="hidden" name="resume_stack" value="' . htmlspecialchars(implode('|', $resume_stack)) . '" />
254
+ − 180
<h3>' . $lang->get('meta_msg_err_stagefailed_title') . '</h3>
256
+ − 181
<p>' . $failure_explanation . '</p>
254
+ − 182
' . ( !empty($mysql_error) ? "<p>" . $lang->get('meta_msg_err_stagefailed_mysqlerror') . " $mysql_error</p>" : '' ) . '
+ − 183
<p>' . $lang->get('meta_msg_err_stagefailed_body') . '</p>
+ − 184
<p style="text-align: center;"><input type="submit" value="' . $lang->get('meta_btn_retry_installation') . '" /></p>
256
+ − 185
</form>';
+ − 186
global $template, $template_bak;
+ − 187
if ( is_object($template_bak) )
+ − 188
$template_bak->footer();
+ − 189
else
+ − 190
$template->footer();
+ − 191
exit;
+ − 192
}
+ − 193
+ − 194
//
+ − 195
// INSTALLER STAGES
+ − 196
//
+ − 197
+ − 198
function stg_mysql_connect($act_get = false)
+ − 199
{
322
+ − 200
global $db;
+ − 201
$db = new mysql();
+ − 202
256
+ − 203
static $conn = false;
+ − 204
if ( $act_get )
+ − 205
return $conn;
+ − 206
258
+ − 207
$db_user =& $_POST['db_user'];
+ − 208
$db_pass =& $_POST['db_pass'];
+ − 209
$db_name =& $_POST['db_name'];
256
+ − 210
258
+ − 211
if ( !preg_match('/^[a-z0-9_-]+$/', $db_name) )
+ − 212
{
+ − 213
$db_name = htmlspecialchars($db_name);
+ − 214
die("<p>SECURITY: malformed database name \"$db_name\"</p>");
+ − 215
}
256
+ − 216
+ − 217
// First, try to connect using the normal credentials
+ − 218
$conn = @mysql_connect($_POST['db_host'], $_POST['db_user'], $_POST['db_pass']);
+ − 219
if ( !$conn )
+ − 220
{
+ − 221
// Connection failed. Do we have the root username and password?
+ − 222
if ( !empty($_POST['db_root_user']) && !empty($_POST['db_root_pass']) )
+ − 223
{
+ − 224
$conn_root = @mysql_connect($_POST['db_host'], $_POST['db_root_user'], $_POST['db_root_pass']);
+ − 225
if ( !$conn_root )
+ − 226
{
+ − 227
// Couldn't connect using either set of credentials. Bail out.
+ − 228
return false;
+ − 229
}
258
+ − 230
unset($db_user, $db_pass);
+ − 231
$db_user = mysql_real_escape_string($_POST['db_user']);
+ − 232
$db_pass = mysql_real_escape_string($_POST['db_pass']);
256
+ − 233
// Create the user account
+ − 234
$q = @mysql_query("GRANT ALL PRIVILEGES ON test.* TO '{$db_user}'@'localhost' IDENTIFIED BY '$db_pass' WITH GRANT OPTION;", $conn_root);
+ − 235
if ( !$q )
+ − 236
{
+ − 237
return false;
+ − 238
}
+ − 239
// Revoke privileges from test, we don't need them
+ − 240
$q = @mysql_query("REVOKE ALL PRIVILEGES ON test.* FROM '{$db_user}'@'localhost';", $conn_root);
+ − 241
if ( !$q )
+ − 242
{
+ − 243
return false;
+ − 244
}
+ − 245
if ( $_POST['db_host'] != 'localhost' && $_POST['db_host'] != '127.0.0.1' && $_POST['db_host'] != '::1' )
+ − 246
{
+ − 247
// If not connecting to a server running on localhost, allow from any host
+ − 248
// this is safer than trying to detect the hostname of the webserver, but less secure
+ − 249
$q = @mysql_query("GRANT ALL PRIVILEGES ON test.* TO '{$db_user}'@'%' IDENTIFIED BY '$db_pass' WITH GRANT OPTION;", $conn_root);
+ − 250
if ( !$q )
+ − 251
{
+ − 252
return false;
+ − 253
}
+ − 254
// Revoke privileges from test, we don't need them
+ − 255
$q = @mysql_query("REVOKE ALL PRIVILEGES ON test.* FROM '{$db_user}'@'%';", $conn_root);
+ − 256
if ( !$q )
+ − 257
{
+ − 258
return false;
+ − 259
}
+ − 260
}
258
+ − 261
mysql_close($conn_root);
+ − 262
$conn = @mysql_connect($_POST['db_host'], $_POST['db_user'], $_POST['db_pass']);
+ − 263
if ( !$conn )
+ − 264
{
+ − 265
// This should honestly never happen.
+ − 266
return false;
+ − 267
}
256
+ − 268
}
+ − 269
}
258
+ − 270
$q = @mysql_query("USE `$db_name`;", $conn);
256
+ − 271
if ( !$q )
+ − 272
{
+ − 273
// access denied to the database; try the whole root schenanegan again
+ − 274
if ( !empty($_POST['db_root_user']) && !empty($_POST['db_root_pass']) )
+ − 275
{
+ − 276
$conn_root = @mysql_connect($_POST['db_host'], $_POST['db_root_user'], $_POST['db_root_pass']);
+ − 277
if ( !$conn_root )
+ − 278
{
+ − 279
// Couldn't connect as root; bail out
+ − 280
return false;
+ − 281
}
+ − 282
// create the database, if it doesn't exist
258
+ − 283
$q = @mysql_query("CREATE DATABASE IF NOT EXISTS `$db_name`;", $conn_root);
256
+ − 284
if ( !$q )
+ − 285
{
+ − 286
// this really should never fail, so don't give any tolerance to it
+ − 287
return false;
+ − 288
}
258
+ − 289
unset($db_user, $db_pass);
+ − 290
$db_user = mysql_real_escape_string($_POST['db_user']);
+ − 291
$db_pass = mysql_real_escape_string($_POST['db_pass']);
256
+ − 292
// we're in with root rights; grant access to the database
258
+ − 293
$q = @mysql_query("GRANT ALL PRIVILEGES ON `$db_name`.* TO '{$db_user}'@'localhost';", $conn_root);
256
+ − 294
if ( !$q )
+ − 295
{
+ − 296
return false;
+ − 297
}
+ − 298
if ( $_POST['db_host'] != 'localhost' && $_POST['db_host'] != '127.0.0.1' && $_POST['db_host'] != '::1' )
+ − 299
{
258
+ − 300
$q = @mysql_query("GRANT ALL PRIVILEGES ON `$db_name`.* TO '{$db_user}'@'%';", $conn_root);
256
+ − 301
if ( !$q )
+ − 302
{
+ − 303
return false;
+ − 304
}
+ − 305
}
258
+ − 306
mysql_close($conn_root);
+ − 307
// grant tables have hopefully been flushed, kill and reconnect our regular user connection
+ − 308
mysql_close($conn);
+ − 309
$conn = @mysql_connect($_POST['db_host'], $_POST['db_user'], $_POST['db_pass']);
+ − 310
if ( !$conn )
+ − 311
{
+ − 312
return false;
+ − 313
}
256
+ − 314
}
+ − 315
else
+ − 316
{
+ − 317
return false;
+ − 318
}
+ − 319
// try again
258
+ − 320
$q = @mysql_query("USE `$db_name`;", $conn);
256
+ − 321
if ( !$q )
+ − 322
{
+ − 323
// really failed this time; bail out
+ − 324
return false;
+ − 325
}
+ − 326
}
322
+ − 327
// initialize DBAL
+ − 328
$db->connect(true, $_POST['db_host'], $db_user, $db_pass, $db_name);
+ − 329
// connected and database exists
+ − 330
return true;
+ − 331
}
+ − 332
+ − 333
function stg_pgsql_connect($act_get = false)
+ − 334
{
+ − 335
global $db;
+ − 336
$db = new postgresql();
+ − 337
+ − 338
static $conn = false;
+ − 339
if ( $act_get )
+ − 340
return $conn;
+ − 341
+ − 342
$db_user =& $_POST['db_user'];
+ − 343
$db_pass =& $_POST['db_pass'];
+ − 344
$db_name =& $_POST['db_name'];
+ − 345
+ − 346
if ( !preg_match('/^[a-z0-9_-]+$/', $db_name) )
+ − 347
{
+ − 348
$db_name = htmlspecialchars($db_name);
+ − 349
die("<p>SECURITY: malformed database name \"$db_name\"</p>");
+ − 350
}
+ − 351
+ − 352
// First, try to connect using the normal credentials
+ − 353
$conn = @pg_connect("host={$_POST['db_host']} port=5432 user={$_POST['db_user']} password={$_POST['db_pass']}");
+ − 354
if ( !$conn )
+ − 355
{
+ − 356
// Connection failed. Do we have the root username and password?
+ − 357
if ( !empty($_POST['db_root_user']) && !empty($_POST['db_root_pass']) )
+ − 358
{
+ − 359
$conn_root = @pg_connect("host={$_POST['db_host']} port=5432 user={$_POST['db_root_user']} password={$_POST['db_root_pass']}");
+ − 360
if ( !$conn_root )
+ − 361
{
+ − 362
// Couldn't connect using either set of credentials. Bail out.
+ − 363
return false;
+ − 364
}
+ − 365
unset($db_user, $db_pass);
+ − 366
$db_user = pg_escape_string($_POST['db_user']);
+ − 367
$db_pass = pg_escape_string($_POST['db_pass']);
+ − 368
// Create the user account
+ − 369
$q = @pg_query("CREATE ROLE '$db_user' WITH NOSUPERUSER UNENCRYPTED PASSWORD '$db_pass';", $conn_root);
+ − 370
if ( !$q )
+ − 371
{
+ − 372
return false;
+ − 373
}
+ − 374
pg_close($conn_root);
+ − 375
$conn = @pg_connect("host={$_POST['db_host']} port=5432 user={$_POST['db_user']} password={$_POST['db_pass']}");
+ − 376
if ( !$conn )
+ − 377
{
+ − 378
// This should honestly never happen.
+ − 379
return false;
+ − 380
}
+ − 381
}
+ − 382
}
+ − 383
if ( !$q )
+ − 384
{
+ − 385
// access denied to the database; try the whole root schenanegan again
+ − 386
if ( !empty($_POST['db_root_user']) && !empty($_POST['db_root_pass']) )
+ − 387
{
+ − 388
$conn_root = @pg_connect("host={$_POST['db_host']} port=5432 user={$_POST['db_root_user']} password={$_POST['db_root_pass']}");
+ − 389
if ( !$conn_root )
+ − 390
{
+ − 391
// Couldn't connect as root; bail out
+ − 392
return false;
+ − 393
}
+ − 394
unset($db_user, $db_pass);
+ − 395
$db_user = pg_escape_string($_POST['db_user']);
+ − 396
$db_pass = pg_escape_string($_POST['db_pass']);
+ − 397
// create the database, if it doesn't exist
+ − 398
$q = @mysql_query("CREATE DATABASE $db_name WITH OWNER $db_user;", $conn_root);
+ − 399
if ( !$q )
+ − 400
{
+ − 401
// this really should never fail, so don't give any tolerance to it
+ − 402
return false;
+ − 403
}
+ − 404
// Setting the owner to $db_user should grant all the rights we need
+ − 405
pg_close($conn_root);
+ − 406
// grant tables have hopefully been flushed, kill and reconnect our regular user connection
+ − 407
pg_close($conn);
+ − 408
$conn = @pg_connect("host={$_POST['db_host']} port=5432 user={$_POST['db_user']} password={$_POST['db_pass']}");
+ − 409
if ( !$conn )
+ − 410
{
+ − 411
return false;
+ − 412
}
+ − 413
}
+ − 414
else
+ − 415
{
+ − 416
return false;
+ − 417
}
+ − 418
// try again
+ − 419
$q = @mysql_query("USE `$db_name`;", $conn);
+ − 420
if ( !$q )
+ − 421
{
+ − 422
// really failed this time; bail out
+ − 423
return false;
+ − 424
}
+ − 425
}
+ − 426
// initialize DBAL
+ − 427
$db->connect(true, $_POST['db_host'], $db_user, $db_pass, $db_name);
256
+ − 428
// connected and database exists
+ − 429
return true;
+ − 430
}
+ − 431
+ − 432
function stg_drop_tables()
+ − 433
{
322
+ − 434
global $db;
256
+ − 435
// Our list of tables included in Enano
272
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 436
$tables = Array( 'categories', 'comments', 'config', 'logs', 'page_text', 'session_keys', 'pages', 'users', 'users_extra', 'themes', 'buddies', 'banlist', 'files', 'privmsgs', 'sidebar', 'hits', 'search_index', 'groups', 'group_members', 'acl', 'tags', 'page_groups', 'page_group_members' );
256
+ − 437
+ − 438
// Drop each table individually; if it fails, it probably means we're trying to drop a
+ − 439
// table that didn't exist in the Enano version we're deleting the database for.
+ − 440
foreach ( $tables as $table )
+ − 441
{
+ − 442
// Remember that table_prefix is sanitized.
+ − 443
$table = "{$_POST['table_prefix']}$table";
322
+ − 444
$db->sql_query("DROP TABLE $table;", $conn);
256
+ − 445
}
+ − 446
return true;
+ − 447
}
+ − 448
+ − 449
function stg_decrypt_admin_pass($act_get = false)
+ − 450
{
+ − 451
static $decrypted_pass = false;
+ − 452
if ( $act_get )
+ − 453
return $decrypted_pass;
+ − 454
286
b2f985e4cef3
Fixed a number of issues with SQL query readability and some undefined index-ish errors; consequently the SQL report feature was added
Dan
diff
changeset
+ − 455
$aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
256
+ − 456
+ − 457
if ( !empty($_POST['crypt_data']) )
+ − 458
{
+ − 459
require('config.new.php');
+ − 460
if ( !isset($cryptkey) )
+ − 461
{
+ − 462
return false;
+ − 463
}
+ − 464
define('_INSTRESUME_AES_KEYBACKUP', $key);
+ − 465
$key = hexdecode($cryptkey);
+ − 466
+ − 467
$decrypted_pass = $aes->decrypt($_POST['crypt_data'], $key, ENC_HEX);
+ − 468
+ − 469
}
+ − 470
else
+ − 471
{
+ − 472
$decrypted_pass = $_POST['admin_pass'];
+ − 473
}
+ − 474
if ( empty($decrypted_pass) )
+ − 475
return false;
+ − 476
return true;
+ − 477
}
+ − 478
+ − 479
function stg_generate_aes_key($act_get = false)
+ − 480
{
+ − 481
static $key = false;
+ − 482
if ( $act_get )
+ − 483
return $key;
+ − 484
286
b2f985e4cef3
Fixed a number of issues with SQL query readability and some undefined index-ish errors; consequently the SQL report feature was added
Dan
diff
changeset
+ − 485
$aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
256
+ − 486
$key = $aes->gen_readymade_key();
+ − 487
return true;
+ − 488
}
+ − 489
+ − 490
function stg_parse_schema($act_get = false)
+ − 491
{
+ − 492
static $schema;
+ − 493
if ( $act_get )
+ − 494
return $schema;
+ − 495
322
+ − 496
global $db;
+ − 497
256
+ − 498
$admin_pass = stg_decrypt_admin_pass(true);
+ − 499
$key = stg_generate_aes_key(true);
286
b2f985e4cef3
Fixed a number of issues with SQL query readability and some undefined index-ish errors; consequently the SQL report feature was added
Dan
diff
changeset
+ − 500
$aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
256
+ − 501
$key = $aes->hextostring($key);
+ − 502
$admin_pass = $aes->encrypt($admin_pass, $key, ENC_HEX);
+ − 503
+ − 504
$cacheonoff = is_writable(ENANO_ROOT.'/cache/') ? '1' : '0';
+ − 505
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 506
$admin_user = $_POST['admin_user'];
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 507
$admin_user = str_replace('_', ' ', $admin_user);
322
+ − 508
$admin_user = $db->escape($admin_user);
+ − 509
+ − 510
switch ( $_POST['db_driver'] )
+ − 511
{
+ − 512
case 'mysql':
+ − 513
$schema_file = 'schema.sql';
+ − 514
break;
+ − 515
case 'postgresql':
+ − 516
$schema_file = 'schema-pg.sql';
+ − 517
break;
+ − 518
}
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 519
322
+ − 520
if ( !isset($schema_file) )
+ − 521
die('insanity');
+ − 522
+ − 523
$schema = file_get_contents($schema_file);
+ − 524
$schema = str_replace('{{SITE_NAME}}', $db->escape($_POST['sitename'] ), $schema);
+ − 525
$schema = str_replace('{{SITE_DESC}}', $db->escape($_POST['sitedesc'] ), $schema);
+ − 526
$schema = str_replace('{{COPYRIGHT}}', $db->escape($_POST['copyright'] ), $schema);
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 527
$schema = str_replace('{{ADMIN_USER}}', $admin_user , $schema);
322
+ − 528
$schema = str_replace('{{ADMIN_PASS}}', $db->escape($admin_pass ), $schema);
+ − 529
$schema = str_replace('{{ADMIN_EMAIL}}', $db->escape($_POST['admin_email']), $schema);
+ − 530
$schema = str_replace('{{ENABLE_CACHE}}', $db->escape($cacheonoff ), $schema);
256
+ − 531
$schema = str_replace('{{REAL_NAME}}', '', $schema);
+ − 532
$schema = str_replace('{{TABLE_PREFIX}}', $_POST['table_prefix'], $schema);
+ − 533
$schema = str_replace('{{VERSION}}', ENANO_VERSION, $schema);
+ − 534
$schema = str_replace('{{ADMIN_EMBED_PHP}}', $_POST['admin_embed_php'], $schema);
+ − 535
// Not anymore!! :-D
+ − 536
// $schema = str_replace('{{BETA_VERSION}}', ENANO_BETA_VERSION, $schema);
+ − 537
+ − 538
if(isset($_POST['wiki_mode']))
+ − 539
{
+ − 540
$schema = str_replace('{{WIKI_MODE}}', '1', $schema);
+ − 541
}
+ − 542
else
+ − 543
{
+ − 544
$schema = str_replace('{{WIKI_MODE}}', '0', $schema);
+ − 545
}
+ − 546
+ − 547
// Build an array of queries
+ − 548
$schema = explode("\n", $schema);
+ − 549
+ − 550
foreach ( $schema as $i => $sql )
+ − 551
{
+ − 552
$query =& $schema[$i];
+ − 553
$t = trim($query);
+ − 554
if ( empty($t) || preg_match('/^(\#|--)/i', $t) )
+ − 555
{
+ − 556
unset($schema[$i]);
+ − 557
unset($query);
+ − 558
}
+ − 559
}
+ − 560
+ − 561
$schema = array_values($schema);
+ − 562
$schema = implode("\n", $schema);
+ − 563
$schema = explode(";\n", $schema);
+ − 564
+ − 565
foreach ( $schema as $i => $sql )
+ − 566
{
+ − 567
$query =& $schema[$i];
+ − 568
if ( substr($query, ( strlen($query) - 1 ), 1 ) != ';' )
+ − 569
{
+ − 570
$query .= ';';
+ − 571
}
+ − 572
}
+ − 573
+ − 574
return true;
+ − 575
}
+ − 576
+ − 577
function stg_install($_unused, $already_run)
+ − 578
{
+ − 579
// This one's pretty easy.
+ − 580
$conn = stg_mysql_connect(true);
+ − 581
if ( !is_resource($conn) )
+ − 582
return false;
+ − 583
$schema = stg_parse_schema(true);
+ − 584
if ( !is_array($schema) )
+ − 585
return false;
+ − 586
+ − 587
// If we're resuming installation, the encryption key was regenerated.
+ − 588
// This means we'll have to update the encrypted password in the database.
+ − 589
if ( $already_run )
+ − 590
{
+ − 591
$admin_pass = stg_decrypt_admin_pass(true);
+ − 592
$key = stg_generate_aes_key(true);
286
b2f985e4cef3
Fixed a number of issues with SQL query readability and some undefined index-ish errors; consequently the SQL report feature was added
Dan
diff
changeset
+ − 593
$aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
256
+ − 594
$key = $aes->hextostring($key);
+ − 595
$admin_pass = $aes->encrypt($admin_pass, $key, ENC_HEX);
+ − 596
$admin_user = mysql_real_escape_string($_POST['admin_user']);
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 597
$admin_user = str_replace('_', ' ', $admin_user);
256
+ − 598
+ − 599
$q = @mysql_query("UPDATE {$_POST['table_prefix']}users SET password='$admin_pass' WHERE username='$admin_user';");
+ − 600
if ( !$q )
+ − 601
{
+ − 602
echo '<p><tt>MySQL return: ' . mysql_error() . '</tt></p>';
+ − 603
return false;
+ − 604
}
+ − 605
+ − 606
return true;
+ − 607
}
+ − 608
+ − 609
// OK, do the loop, baby!!!
+ − 610
foreach($schema as $q)
+ − 611
{
+ − 612
$r = mysql_query($q, $conn);
+ − 613
if ( !$r )
+ − 614
{
+ − 615
echo '<p><tt>MySQL return: ' . mysql_error() . '</tt></p>';
+ − 616
return false;
+ − 617
}
+ − 618
}
+ − 619
+ − 620
return true;
+ − 621
}
+ − 622
+ − 623
function stg_write_config()
+ − 624
{
+ − 625
$privkey = stg_generate_aes_key(true);
+ − 626
+ − 627
switch($_POST['urlscheme'])
+ − 628
{
+ − 629
case "ugly":
+ − 630
default:
+ − 631
$cp = scriptPath.'/index.php?title=';
+ − 632
break;
+ − 633
case "short":
+ − 634
$cp = scriptPath.'/index.php/';
+ − 635
break;
+ − 636
case "tiny":
+ − 637
$cp = scriptPath.'/';
+ − 638
break;
+ − 639
}
+ − 640
+ − 641
if ( $_POST['urlscheme'] == 'tiny' )
+ − 642
{
+ − 643
$contents = '# Begin Enano rules
+ − 644
RewriteEngine on
+ − 645
RewriteCond %{REQUEST_FILENAME} !-d
+ − 646
RewriteCond %{REQUEST_FILENAME} !-f
+ − 647
RewriteRule ^(.+) '.scriptPath.'/index.php?title=$1 [L,QSA]
+ − 648
RewriteRule \.(php|html|gif|jpg|png|css|js)$ - [L]
+ − 649
# End Enano rules
+ − 650
';
+ − 651
if ( file_exists('./.htaccess') )
+ − 652
$ht = fopen(ENANO_ROOT.'/.htaccess', 'a+');
+ − 653
else
+ − 654
$ht = fopen(ENANO_ROOT.'/.htaccess.new', 'w');
+ − 655
if ( !$ht )
+ − 656
return false;
+ − 657
fwrite($ht, $contents);
+ − 658
fclose($ht);
+ − 659
}
+ − 660
+ − 661
$config_file = '<?php
+ − 662
/* Enano auto-generated configuration file - editing not recommended! */
+ − 663
$dbhost = \''.addslashes($_POST['db_host']).'\';
+ − 664
$dbname = \''.addslashes($_POST['db_name']).'\';
+ − 665
$dbuser = \''.addslashes($_POST['db_user']).'\';
+ − 666
$dbpasswd = \''.addslashes($_POST['db_pass']).'\';
+ − 667
if ( !defined(\'ENANO_CONSTANTS\') )
+ − 668
{
+ − 669
define(\'ENANO_CONSTANTS\', \'\');
+ − 670
define(\'table_prefix\', \''.addslashes($_POST['table_prefix']).'\');
+ − 671
define(\'scriptPath\', \''.scriptPath.'\');
+ − 672
define(\'contentPath\', \''.$cp.'\');
+ − 673
define(\'ENANO_INSTALLED\', \'true\');
+ − 674
}
+ − 675
$crypto_key = \''.$privkey.'\';
+ − 676
?>';
+ − 677
+ − 678
$cf_handle = fopen(ENANO_ROOT.'/config.new.php', 'w');
+ − 679
if ( !$cf_handle )
+ − 680
return false;
+ − 681
fwrite($cf_handle, $config_file);
+ − 682
+ − 683
fclose($cf_handle);
+ − 684
+ − 685
return true;
+ − 686
}
+ − 687
+ − 688
function _stg_rename_config_revert()
+ − 689
{
+ − 690
if ( file_exists('./config.php') )
+ − 691
{
+ − 692
@rename('./config.php', './config.new.php');
+ − 693
}
+ − 694
+ − 695
$handle = @fopen('./config.php.new', 'w');
+ − 696
if ( !$handle )
+ − 697
return false;
+ − 698
$contents = '<?php $cryptkey = \'' . _INSTRESUME_AES_KEYBACKUP . '\'; ?>';
+ − 699
fwrite($handle, $contents);
+ − 700
fclose($handle);
+ − 701
return true;
+ − 702
}
+ − 703
272
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 704
function stg_build_index()
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 705
{
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 706
global $db, $session, $paths, $template, $plugins; // Common objects;
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 707
if ( $paths->rebuild_search_index() )
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 708
return true;
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 709
return false;
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 710
}
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 711
256
+ − 712
function stg_rename_config()
+ − 713
{
+ − 714
if ( !@rename('./config.new.php', './config.php') )
+ − 715
{
+ − 716
echo '<p>Can\'t rename config.php</p>';
+ − 717
_stg_rename_config_revert();
+ − 718
return false;
+ − 719
}
+ − 720
+ − 721
if ( $_POST['urlscheme'] == 'tiny' && !file_exists('./.htaccess') )
+ − 722
{
+ − 723
if ( !@rename('./.htaccess.new', './.htaccess') )
+ − 724
{
+ − 725
echo '<p>Can\'t rename .htaccess</p>';
+ − 726
_stg_rename_config_revert();
+ − 727
return false;
+ − 728
}
+ − 729
}
+ − 730
return true;
+ − 731
}
+ − 732
+ − 733
function stg_start_api_success()
+ − 734
{
+ − 735
return true;
+ − 736
}
+ − 737
+ − 738
function stg_start_api_failure()
+ − 739
{
+ − 740
return false;
+ − 741
}
+ − 742
240
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 743
function stg_import_language()
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 744
{
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 745
global $db, $session, $paths, $template, $plugins; // Common objects
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 746
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 747
$lang_file = ENANO_ROOT . "/language/english/enano.json";
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 748
install_language("eng", "English", "English", $lang_file);
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 749
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 750
return true;
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 751
}
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 752
256
+ − 753
function stg_init_logs()
+ − 754
{
+ − 755
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 756
+ − 757
$q = $db->sql_query('INSERT INTO ' . table_prefix . 'logs(log_type,action,time_id,date_string,author,page_text,edit_summary) VALUES(\'security\', \'install_enano\', ' . time() . ', \'' . date('d M Y h:i a') . '\', \'' . mysql_real_escape_string($_POST['admin_user']) . '\', \'' . mysql_real_escape_string(ENANO_VERSION) . '\', \'' . mysql_real_escape_string($_SERVER['REMOTE_ADDR']) . '\');');
+ − 758
if ( !$q )
+ − 759
{
+ − 760
echo '<p><tt>MySQL return: ' . mysql_error() . '</tt></p>';
+ − 761
return false;
+ − 762
}
+ − 763
+ − 764
if ( !$session->get_permissions('clear_logs') )
+ − 765
{
+ − 766
echo '<p><tt>$session: denied clear_logs</tt></p>';
+ − 767
return false;
+ − 768
}
+ − 769
+ − 770
PageUtils::flushlogs('Main_Page', 'Article');
+ − 771
+ − 772
return true;
+ − 773
}
+ − 774
+ − 775
//die('Key size: ' . AES_BITS . '<br />Block size: ' . AES_BLOCKSIZE);
+ − 776
+ − 777
if(!function_exists('wikiFormat'))
+ − 778
{
+ − 779
function wikiFormat($message, $filter_links = true)
+ − 780
{
+ − 781
$wiki = & Text_Wiki::singleton('Mediawiki');
+ − 782
$wiki->setRenderConf('Xhtml', 'code', 'css_filename', 'codefilename');
+ − 783
$wiki->setRenderConf('Xhtml', 'wikilink', 'view_url', contentPath);
+ − 784
$result = $wiki->transform($message, 'Xhtml');
+ − 785
+ − 786
// HTML fixes
+ − 787
$result = preg_replace('#<tr>([\s]*?)<\/tr>#is', '', $result);
+ − 788
$result = preg_replace('#<p>([\s]*?)<\/p>#is', '', $result);
+ − 789
$result = preg_replace('#<br />([\s]*?)<table#is', '<table', $result);
+ − 790
+ − 791
return $result;
+ − 792
}
+ − 793
}
+ − 794
+ − 795
global $failed, $warned;
+ − 796
+ − 797
$failed = false;
+ − 798
$warned = false;
+ − 799
+ − 800
function not($var)
+ − 801
{
+ − 802
if($var)
+ − 803
{
+ − 804
return false;
+ − 805
}
+ − 806
else
+ − 807
{
+ − 808
return true;
+ − 809
}
+ − 810
}
+ − 811
+ − 812
function run_test($code, $desc, $extended_desc, $warn = false)
+ − 813
{
+ − 814
global $failed, $warned;
+ − 815
static $cv = true;
+ − 816
$cv = not($cv);
+ − 817
$val = eval($code);
+ − 818
if($val)
+ − 819
{
+ − 820
if($cv) $color='CCFFCC'; else $color='AAFFAA';
322
+ − 821
echo "<tr><td style='background-color: #$color; width: 500px; padding: 5px;'>$desc</td><td style='padding-left: 10px;'><img alt='Test passed' src='images/good.gif' /></td></tr>";
256
+ − 822
} elseif(!$val && $warn) {
+ − 823
if($cv) $color='FFFFCC'; else $color='FFFFAA';
322
+ − 824
echo "<tr><td style='background-color: #$color; width: 500px; padding: 5px;'>$desc<br /><b>$extended_desc</b></td><td style='padding-left: 10px;'><img alt='Test passed with warning' src='images/unknown.gif' /></td></tr>";
256
+ − 825
$warned = true;
+ − 826
} else {
+ − 827
if($cv) $color='FFCCCC'; else $color='FFAAAA';
322
+ − 828
echo "<tr><td style='background-color: #$color; width: 500px; padding: 5px;'>$desc<br /><b>$extended_desc</b></td><td style='padding-left: 10px;'><img alt='Test failed' src='images/bad.gif' /></td></tr>";
256
+ − 829
$failed = true;
+ − 830
}
+ − 831
}
+ − 832
function is_apache() { $r = strstr($_SERVER['SERVER_SOFTWARE'], 'Apache') ? true : false; return $r; }
+ − 833
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 834
function show_license($fb = false)
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 835
{
331
+ − 836
global $lang;
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 837
?>
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 838
<div style="height: 500px; clip: rect(0px,auto,500px,auto); overflow: auto; padding: 10px; border: 1px dashed #456798; margin: 1em;">
279
+ − 839
<?php
+ − 840
if ( !file_exists('./GPL') || !file_exists('./language/english/install/license-deed.html') )
+ − 841
{
+ − 842
echo 'Cannot find the license files.';
+ − 843
}
+ − 844
echo file_get_contents('./language/english/install/license-deed.html');
+ − 845
if ( defined('ENANO_BETA_VERSION') || $branch == 'unstable' )
+ − 846
{
+ − 847
?>
+ − 848
<h3><?php echo $lang->get('license_info_unstable_title'); ?></h3>
+ − 849
<p><?php echo $lang->get('license_info_unstable_body'); ?></p>
+ − 850
<?php
+ − 851
}
+ − 852
?>
+ − 853
<h3><?php echo $lang->get('license_section_gpl_heading'); ?></h3>
+ − 854
<?php if ( $lang->lang_code != 'eng' ): ?>
+ − 855
<p><i><?php echo $lang->get('license_gpl_blurb_inenglish'); ?></i></p>
+ − 856
<?php endif; ?>
+ − 857
<?php echo wikiFormat(file_get_contents(ENANO_ROOT . '/GPL')); ?>
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 858
<?php
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 859
global $template;
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 860
if ( $fb )
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 861
{
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 862
echo '<p style="text-align: center;">Because I could never find the Create a Page button in PHP-Nuke.</p>';
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 863
echo '<p>' . str_replace('http://enanocms.org/', 'http://www.2robots.com/2003/10/15/web-portals-suck/', $template->fading_button) . '</p>';
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 864
echo '<p style="text-align: center;">It\'s not a portal, my friends.</p>';
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 865
}
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 866
?>
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 867
</div>
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 868
<?php
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 869
}
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 870
256
+ − 871
require_once('includes/template.php');
+ − 872
279
+ − 873
if(!isset($_GET['mode']))
+ − 874
{
243
+ − 875
$_GET['mode'] = 'welcome';
279
+ − 876
}
256
+ − 877
switch($_GET['mode'])
+ − 878
{
+ − 879
case 'mysql_test':
+ − 880
error_reporting(0);
+ − 881
$dbhost = rawurldecode($_POST['host']);
+ − 882
$dbname = rawurldecode($_POST['name']);
+ − 883
$dbuser = rawurldecode($_POST['user']);
+ − 884
$dbpass = rawurldecode($_POST['pass']);
+ − 885
$dbrootuser = rawurldecode($_POST['root_user']);
+ − 886
$dbrootpass = rawurldecode($_POST['root_pass']);
+ − 887
if($dbrootuser != '')
+ − 888
{
+ − 889
$conn = mysql_connect($dbhost, $dbrootuser, $dbrootpass);
+ − 890
if(!$conn)
+ − 891
{
+ − 892
$e = mysql_error();
+ − 893
if(strstr($e, "Lost connection"))
+ − 894
die('host'.$e);
+ − 895
else
+ − 896
die('root'.$e);
+ − 897
}
+ − 898
$rsp = 'good';
257
+ − 899
$q = mysql_query('USE `' . mysql_real_escape_string($dbname) . '`;', $conn);
256
+ − 900
if(!$q)
+ − 901
{
+ − 902
$e = mysql_error();
+ − 903
if(strstr($e, 'Unknown database'))
+ − 904
{
+ − 905
$rsp .= '_creating_db';
+ − 906
}
+ − 907
}
+ − 908
mysql_close($conn);
+ − 909
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
+ − 910
if(!$conn)
+ − 911
{
+ − 912
$e = mysql_error();
+ − 913
if(strstr($e, "Lost connection"))
+ − 914
die('host'.$e);
+ − 915
else
+ − 916
$rsp .= '_creating_user';
+ − 917
}
+ − 918
mysql_close($conn);
+ − 919
die($rsp);
+ − 920
}
+ − 921
else
+ − 922
{
+ − 923
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
+ − 924
if(!$conn)
+ − 925
{
+ − 926
$e = mysql_error();
+ − 927
if(strstr($e, "Lost connection"))
+ − 928
die('host'.$e);
+ − 929
else
+ − 930
die('auth'.$e);
+ − 931
}
257
+ − 932
$q = mysql_query('USE `' . mysql_real_escape_string($dbname) . '`;', $conn);
256
+ − 933
if(!$q)
+ − 934
{
+ − 935
$e = mysql_error();
+ − 936
if(strstr($e, 'Unknown database'))
+ − 937
{
+ − 938
die('name'.$e);
+ − 939
}
+ − 940
else
+ − 941
{
+ − 942
die('perm'.$e);
+ − 943
}
+ − 944
}
+ − 945
}
+ − 946
$v = mysql_get_server_info();
+ − 947
if(version_compare($v, '4.1.17', '<')) die('vers'.$v);
+ − 948
mysql_close($conn);
+ − 949
die('good');
+ − 950
break;
322
+ − 951
case 'pgsql_test':
+ − 952
error_reporting(0);
+ − 953
$dbhost = rawurldecode($_POST['host']);
+ − 954
$dbname = rawurldecode($_POST['name']);
+ − 955
$dbuser = rawurldecode($_POST['user']);
+ − 956
$dbpass = rawurldecode($_POST['pass']);
+ − 957
$dbrootuser = rawurldecode($_POST['root_user']);
+ − 958
$dbrootpass = rawurldecode($_POST['root_pass']);
+ − 959
if($dbrootuser != '')
+ − 960
{
+ − 961
$conn = @pg_connect("host=$dbhost port=5432 user=$dbuser password=$dbpass dbname=$dbname");
+ − 962
if(!$conn)
+ − 963
{
+ − 964
$e = pg_last_error();
+ − 965
if(strstr($e, "Lost connection"))
+ − 966
die('host'.$e);
+ − 967
else
+ − 968
die('root'.$e);
+ − 969
}
+ − 970
$rsp = 'good';
+ − 971
$q = mysql_query('USE `' . mysql_real_escape_string($dbname) . '`;', $conn);
+ − 972
if(!$q)
+ − 973
{
+ − 974
$e = mysql_error();
+ − 975
if(strstr($e, 'Unknown database'))
+ − 976
{
+ − 977
$rsp .= '_creating_db';
+ − 978
}
+ − 979
}
+ − 980
mysql_close($conn);
+ − 981
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
+ − 982
if(!$conn)
+ − 983
{
+ − 984
$e = mysql_error();
+ − 985
if(strstr($e, "Lost connection"))
+ − 986
die('host'.$e);
+ − 987
else
+ − 988
$rsp .= '_creating_user';
+ − 989
}
+ − 990
mysql_close($conn);
+ − 991
die($rsp);
+ − 992
}
+ − 993
else
+ − 994
{
+ − 995
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
+ − 996
if(!$conn)
+ − 997
{
+ − 998
$e = mysql_error();
+ − 999
if(strstr($e, "Lost connection"))
+ − 1000
die('host'.$e);
+ − 1001
else
+ − 1002
die('auth'.$e);
+ − 1003
}
+ − 1004
$q = mysql_query('USE `' . mysql_real_escape_string($dbname) . '`;', $conn);
+ − 1005
if(!$q)
+ − 1006
{
+ − 1007
$e = mysql_error();
+ − 1008
if(strstr($e, 'Unknown database'))
+ − 1009
{
+ − 1010
die('name'.$e);
+ − 1011
}
+ − 1012
else
+ − 1013
{
+ − 1014
die('perm'.$e);
+ − 1015
}
+ − 1016
}
+ − 1017
}
+ − 1018
$v = mysql_get_server_info();
+ − 1019
if(version_compare($v, '4.1.17', '<')) die('vers'.$v);
+ − 1020
mysql_close($conn);
+ − 1021
die('good');
+ − 1022
break;
256
+ − 1023
case 'pophelp':
+ − 1024
$topic = ( isset($_GET['topic']) ) ? $_GET['topic'] : 'invalid';
+ − 1025
switch($topic)
+ − 1026
{
+ − 1027
case 'admin_embed_php':
249
+ − 1028
$title = $lang->get('pophelp_admin_embed_php_title');
+ − 1029
$content = $lang->get('pophelp_admin_embed_php_body');
256
+ − 1030
break;
300
c9e192a059c1
Add installer pop-help topic for URL scheme, in response to http://forum.enanocms.org/viewtopic.php?f=5&t=19
Dan
diff
changeset
+ − 1031
case 'url_schemes':
304
+ − 1032
$title = $lang->get('pophelp_url_schemes_title');
+ − 1033
$content = $lang->get('pophelp_url_schemes_body');
300
c9e192a059c1
Add installer pop-help topic for URL scheme, in response to http://forum.enanocms.org/viewtopic.php?f=5&t=19
Dan
diff
changeset
+ − 1034
break;
256
+ − 1035
default:
+ − 1036
$title = 'Invalid topic';
+ − 1037
$content = 'Invalid help topic.';
+ − 1038
break;
+ − 1039
}
249
+ − 1040
$close_window = $lang->get('pophelp_btn_close_window');
256
+ − 1041
echo <<<EOF
+ − 1042
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+ − 1043
<html>
+ − 1044
<head>
+ − 1045
<title>Enano installation quick help • {$title}</title>
+ − 1046
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ − 1047
<style type="text/css">
+ − 1048
body {
+ − 1049
font-family: trebuchet ms, verdana, arial, helvetica, sans-serif;
+ − 1050
font-size: 9pt;
+ − 1051
}
+ − 1052
h2 { border-bottom: 1px solid #90B0D0; margin-bottom: 0; }
+ − 1053
h3 { font-size: 11pt; font-weight: bold; }
+ − 1054
li { list-style: url(../images/bullet.gif); }
+ − 1055
p { margin: 1.0em; }
+ − 1056
blockquote { background-color: #F4F4F4; border: 1px dotted #406080; margin: 1em; padding: 10px; max-height: 250px; overflow: auto; }
+ − 1057
a { color: #7090B0; }
+ − 1058
a:hover { color: #90B0D0; }
+ − 1059
</style>
+ − 1060
</head>
+ − 1061
<body>
+ − 1062
<h2>{$title}</h2>
+ − 1063
{$content}
+ − 1064
<p style="text-align: right;">
249
+ − 1065
<a href="#" onclick="window.close(); return false;">{$close_window}</a>
256
+ − 1066
</p>
+ − 1067
</body>
+ − 1068
</html>
+ − 1069
EOF;
+ − 1070
exit;
+ − 1071
break;
243
+ − 1072
case 'langjs':
+ − 1073
header('Content-type: text/javascript');
+ − 1074
$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
+ − 1075
$lang_js = $json->encode($lang->strings);
+ − 1076
// use EEOF here because jEdit misinterprets "typ'eof'"
+ − 1077
echo <<<EEOF
+ − 1078
if ( typeof(enano_lang) != 'object' )
+ − 1079
var enano_lang = new Object();
+ − 1080
+ − 1081
enano_lang[1] = $lang_js;
+ − 1082
+ − 1083
EEOF;
+ − 1084
exit;
+ − 1085
break;
256
+ − 1086
default:
+ − 1087
break;
+ − 1088
}
+ − 1089
+ − 1090
$template = new template_nodb();
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 1091
$template->load_theme('stpatty', 'shamrock', false);
256
+ − 1092
+ − 1093
$modestrings = Array(
243
+ − 1094
'welcome' => $lang->get('welcome_modetitle'),
+ − 1095
'license' => $lang->get('license_modetitle'),
+ − 1096
'sysreqs' => $lang->get('sysreqs_modetitle'),
326
+ − 1097
'database' => $lang->get('database_modetitle'),
+ − 1098
'database_mysql'=> $lang->get('database_mysql_modetitle'),
+ − 1099
'database_pgsql'=> $lang->get('database_pgsql_modetitle'),
+ − 1100
'website' => $lang->get('website_modetitle'),
243
+ − 1101
'login' => $lang->get('login_modetitle'),
+ − 1102
'confirm' => $lang->get('confirm_modetitle'),
+ − 1103
'install' => $lang->get('install_modetitle'),
280
+ − 1104
'finish' => $lang->get('finish_modetitle'),
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1105
'_hiddenstages' => '...', // all stages below this line are hidden
279
+ − 1106
'showlicense' => $lang->get('license_modetitle')
256
+ − 1107
);
+ − 1108
+ − 1109
$sideinfo = '';
+ − 1110
$vars = $template->extract_vars('elements.tpl');
+ − 1111
$p = $template->makeParserText($vars['sidebar_button']);
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1112
$hidden = false;
256
+ − 1113
foreach ( $modestrings as $id => $str )
+ − 1114
{
+ − 1115
if ( $_GET['mode'] == $id )
+ − 1116
{
+ − 1117
$flags = 'style="font-weight: bold; text-decoration: underline;"';
+ − 1118
$this_page = $str;
+ − 1119
}
+ − 1120
else
+ − 1121
{
+ − 1122
$flags = '';
+ − 1123
}
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1124
if ( $id == '_hiddenstages' )
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1125
$hidden = true;
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1126
if ( !$hidden )
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1127
{
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1128
$p->assign_vars(Array(
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1129
'HREF' => '#',
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1130
'FLAGS' => $flags . ' onclick="return false;"',
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1131
'TEXT' => $str
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1132
));
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1133
$sideinfo .= $p->run();
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1134
}
256
+ − 1135
}
+ − 1136
+ − 1137
$template->init_vars();
+ − 1138
+ − 1139
if(isset($_GET['mode']) && $_GET['mode'] == 'css')
+ − 1140
{
+ − 1141
header('Content-type: text/css');
+ − 1142
echo $template->get_css();
+ − 1143
exit;
+ − 1144
}
+ − 1145
243
+ − 1146
if ( defined('ENANO_IS_STABLE') )
+ − 1147
$branch = 'stable';
+ − 1148
else if ( defined('ENANO_IS_UNSTABLE') )
+ − 1149
$branch = 'unstable';
+ − 1150
else
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1151
{
243
+ − 1152
$version = explode('.', ENANO_VERSION);
+ − 1153
if ( !isset($version[1]) )
+ − 1154
// unknown branch, really
+ − 1155
$branch = 'unstable';
+ − 1156
else
+ − 1157
{
+ − 1158
$version[1] = intval($version[1]);
+ − 1159
if ( $version[1] % 2 == 1 )
+ − 1160
$branch = 'unstable';
+ − 1161
else
+ − 1162
$branch = 'stable';
+ − 1163
}
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1164
}
243
+ − 1165
330
c94af5b5c40f
A minor installer fix to get the installer to run again. TODO: fix bad call to $lang->get() in preinstallation environment set up by index.php
Dan
diff
changeset
+ − 1166
$template->header();
c94af5b5c40f
A minor installer fix to get the installer to run again. TODO: fix bad call to $lang->get() in preinstallation environment set up by index.php
Dan
diff
changeset
+ − 1167
256
+ − 1168
switch($_GET['mode'])
+ − 1169
{
+ − 1170
default:
+ − 1171
case 'welcome':
+ − 1172
?>
+ − 1173
<div style="text-align: center; margin-top: 10px;">
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 1174
<img alt="[ Enano CMS Project logo ]" src="images/enano-artwork/installer-greeting-green.png" style="display: block; margin: 0 auto; padding-left: 100px;" />
243
+ − 1175
<h2><?php echo $lang->get('welcome_heading'); ?></h2>
+ − 1176
<h3>
+ − 1177
<?php
+ − 1178
$branch_l = $lang->get("welcome_branch_$branch");
+ − 1179
+ − 1180
$v_string = sprintf('%s %s – %s', $lang->get('welcome_version'), ENANO_VERSION, $branch_l);
+ − 1181
echo $v_string;
+ − 1182
?>
+ − 1183
</h3>
256
+ − 1184
<?php
243
+ − 1185
if ( defined('ENANO_CODE_NAME') )
+ − 1186
{
+ − 1187
echo '<p>';
+ − 1188
echo $lang->get('welcome_aka', array(
+ − 1189
'codename' => strtolower(ENANO_CODE_NAME)
+ − 1190
));
+ − 1191
echo '</p>';
+ − 1192
}
256
+ − 1193
?>
+ − 1194
<form action="install.php?mode=license" method="post">
243
+ − 1195
<input type="submit" value="<?php echo $lang->get('welcome_btn_start'); ?>" />
256
+ − 1196
</form>
+ − 1197
</div>
+ − 1198
<?php
+ − 1199
break;
+ − 1200
case "license":
+ − 1201
?>
243
+ − 1202
<h3><?php echo $lang->get('license_heading'); ?></h3>
+ − 1203
<p><?php echo $lang->get('license_blurb_thankyou'); ?></p>
+ − 1204
<p><?php echo $lang->get('license_blurb_pleaseread'); ?></p>
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 1205
<?php show_license(); ?>
256
+ − 1206
<div class="pagenav">
+ − 1207
<form action="install.php?mode=sysreqs" method="post">
+ − 1208
<table border="0">
+ − 1209
<tr>
243
+ − 1210
<td>
+ − 1211
<input type="submit" value="<?php echo $lang->get('license_btn_i_agree'); ?>" />
+ − 1212
</td>
+ − 1213
<td>
+ − 1214
<p>
+ − 1215
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 1216
• <?php echo $lang->get('license_objective_ensure_agree'); ?><br />
+ − 1217
• <?php echo $lang->get('license_objective_have_db_info'); ?>
+ − 1218
</p>
+ − 1219
</td>
256
+ − 1220
</tr>
+ − 1221
</table>
+ − 1222
</form>
+ − 1223
</div>
+ − 1224
<?php
+ − 1225
break;
+ − 1226
case "sysreqs":
+ − 1227
error_reporting(E_ALL);
+ − 1228
?>
243
+ − 1229
<h3><?php echo $lang->get('sysreqs_heading'); ?></h3>
+ − 1230
<p><?php echo $lang->get('sysreqs_blurb'); ?></p>
256
+ − 1231
<table border="0" cellspacing="0" cellpadding="0">
+ − 1232
<?php
243
+ − 1233
run_test('return version_compare(\'4.3.0\', PHP_VERSION, \'<\');', $lang->get('sysreqs_req_php'), $lang->get('sysreqs_req_desc_php') );
304
+ − 1234
run_test('return version_compare(\'5.2.0\', PHP_VERSION, \'<\');', $lang->get('sysreqs_req_php5'), $lang->get('sysreqs_req_desc_php5'), true);
243
+ − 1235
run_test('return function_exists(\'mysql_connect\');', $lang->get('sysreqs_req_mysql'), $lang->get('sysreqs_req_desc_mysql') );
322
+ − 1236
run_test('return function_exists(\'pg_connect\');', 'PostgreSQL extension for PHP', 'It seems that your PHP installation does not have the PostgreSQL extension enabled. Because of this, you won\'t be able to use the PostgreSQL database driver. This is OK in the majority of cases. If you want to use PostgreSQL support, you\'ll need to either compile the PHP extension for Postgres or install the extension with your distribution\'s package manager. Windows administrators will need enable php_pgsql.dll in their php.ini.', true);
243
+ − 1237
run_test('return @ini_get(\'file_uploads\');', $lang->get('sysreqs_req_uploads'), $lang->get('sysreqs_req_desc_uploads') );
+ − 1238
run_test('return is_apache();', $lang->get('sysreqs_req_apache'), $lang->get('sysreqs_req_desc_apache'), true);
+ − 1239
run_test('return is_writable(ENANO_ROOT.\'/config.new.php\');', $lang->get('sysreqs_req_config'), $lang->get('sysreqs_req_desc_config') );
+ − 1240
run_test('return file_exists(\'/usr/bin/convert\');', $lang->get('sysreqs_req_magick'), $lang->get('sysreqs_req_desc_magick'), true);
+ − 1241
run_test('return is_writable(ENANO_ROOT.\'/cache/\');', $lang->get('sysreqs_req_cachewriteable'), $lang->get('sysreqs_req_desc_cachewriteable'), true);
+ − 1242
run_test('return is_writable(ENANO_ROOT.\'/files/\');', $lang->get('sysreqs_req_fileswriteable'), $lang->get('sysreqs_req_desc_fileswriteable'), true);
322
+ − 1243
if ( !function_exists('mysql_connect') && !function_exists('pg_connect') )
+ − 1244
{
+ − 1245
run_test('return false;', 'No database drivers are available.', 'You need to have at least one database driver working to install Enano. See the warnings on MySQL and PostgreSQL above for more information on installing these database drivers.', false);
+ − 1246
}
256
+ − 1247
echo '</table>';
+ − 1248
if(!$failed)
+ − 1249
{
+ − 1250
?>
+ − 1251
+ − 1252
<div class="pagenav">
+ − 1253
<?php
+ − 1254
if($warned) {
+ − 1255
echo '<table border="0" cellspacing="0" cellpadding="0">';
243
+ − 1256
run_test('return false;', $lang->get('sysreqs_summary_warn_title'), $lang->get('sysreqs_summary_warn_body'), true);
256
+ − 1257
echo '</table>';
+ − 1258
} else {
+ − 1259
echo '<table border="0" cellspacing="0" cellpadding="0">';
243
+ − 1260
run_test('return true;', '<b>' . $lang->get('sysreqs_summary_success_title') . '</b><br />' . $lang->get('sysreqs_summary_success_body'), 'You should never see this text. Congratulations for being an Enano hacker!');
256
+ − 1261
echo '</table>';
+ − 1262
}
+ − 1263
?>
244
+ − 1264
<form action="install.php?mode=database" method="post">
+ − 1265
<table border="0">
+ − 1266
<tr>
+ − 1267
<td>
+ − 1268
<input type="submit" value="<?php echo $lang->get('meta_btn_continue'); ?>" />
+ − 1269
</td>
+ − 1270
<td>
+ − 1271
<p>
+ − 1272
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 1273
• <?php echo $lang->get('sysreqs_objective_scalebacks'); ?><br />
+ − 1274
• <?php echo $lang->get('license_objective_have_db_info'); ?>
+ − 1275
</p>
+ − 1276
</td>
+ − 1277
</tr>
+ − 1278
</table>
+ − 1279
</form>
+ − 1280
</div>
+ − 1281
<?php
+ − 1282
}
+ − 1283
else
+ − 1284
{
+ − 1285
if ( $failed )
+ − 1286
{
256
+ − 1287
echo '<div class="pagenav"><table border="0" cellspacing="0" cellpadding="0">';
243
+ − 1288
run_test('return false;', $lang->get('sysreqs_summary_fail_title'), $lang->get('sysreqs_summary_fail_body'));
256
+ − 1289
echo '</table></div>';
+ − 1290
}
+ − 1291
}
+ − 1292
?>
+ − 1293
<?php
+ − 1294
break;
+ − 1295
case "database":
322
+ − 1296
echo '<h3>Choose a database driver</h3>';
+ − 1297
echo '<p>The next step is to choose the database driver that Enano will use. In most cases this is MySQL, but there are certain
+ − 1298
advantages to PostgreSQL, which is made available only experimentally.</p>';
+ − 1299
if ( @file_exists('/etc/enano-is-virt-appliance') )
+ − 1300
{
+ − 1301
echo '<p><b>You\'re using the Enano virtual appliance.</b><br />Unless you configured the appliance manually, PostgreSQL support is not available. In 99% of cases you\'ll want to click MySQL below.</p>';
+ − 1302
}
+ − 1303
+ − 1304
$mysql_disable_reason = '';
+ − 1305
$pgsql_disable_reason = '';
+ − 1306
$mysql_disable = '';
+ − 1307
$pgsql_disable = '';
+ − 1308
if ( !function_exists('mysql_connect') )
+ − 1309
{
+ − 1310
$mysql_disable = ' disabled="disabled"';
+ − 1311
$mysql_disable_reason = 'You don\'t have the MySQL PHP extension installed.';
+ − 1312
}
+ − 1313
if ( !function_exists('pg_connect') )
+ − 1314
{
+ − 1315
$pgsql_disable = ' disabled="disabled"';
+ − 1316
$pgsql_disable_reason = 'You don\'t have the PostgreSQL PHP extensnion installed.';
+ − 1317
}
+ − 1318
if ( function_exists('pg_connect') && version_compare(PHP_VERSION, '5.0.0', '<') )
+ − 1319
{
+ − 1320
$pgsql_disable = ' disabled="disabled"';
+ − 1321
$pgsql_disable_reason = 'You need to have at least PHP 5 to use the PostgreSQL database driver.';
+ − 1322
}
+ − 1323
+ − 1324
echo '<form action="install.php" method="get">';
+ − 1325
?>
+ − 1326
<table border="0" cellspacing="5">
+ − 1327
<tr>
+ − 1328
<td>
+ − 1329
<input type="image" name="mode" value="database_mysql" src="images/about-powered-mysql.png"<?php echo $mysql_disable; ?>/>
+ − 1330
</td>
+ − 1331
<td<?php if ( $mysql_disable ) echo ' style="opacity: 0.5; filter: alpha(opacity=50);"'; ?>>
+ − 1332
<b>MySQL</b><br />
+ − 1333
Click this button to use MySQL as the database backend for your site. Most web hosts support MySQL, and if you have
+ − 1334
administrative access to your MySQL server, you can create a new database and user during this installation process if you
+ − 1335
haven't done so already.
+ − 1336
<?php
+ − 1337
if ( $mysql_disable )
+ − 1338
{
+ − 1339
echo "<br /><br /><b>$mysql_disable_reason</b>";
+ − 1340
}
+ − 1341
?>
+ − 1342
</td>
+ − 1343
</tr>
+ − 1344
<tr>
+ − 1345
<td>
+ − 1346
<input type="image" name="mode" value="database_pgsql" src="images/about-powered-pgsql.png"<?php echo $pgsql_disable; ?> />
+ − 1347
</td>
+ − 1348
<td<?php if ( $pgsql_disable ) echo ' style="opacity: 0.5; filter: alpha(opacity=50);"'; ?>>
+ − 1349
<b>PostgreSQL</b><br />
+ − 1350
Click this button to use PostgreSQL as the database backend for your site. While not as widely supported, PostgreSQL has more
+ − 1351
liberal licensing conditions and when properly configured is faster than MySQL. Some plugins may not work with the PostgreSQL
+ − 1352
driver.
+ − 1353
<?php
+ − 1354
if ( $pgsql_disable )
+ − 1355
{
+ − 1356
echo "<br /><br /><b>$pgsql_disable_reason</b>";
+ − 1357
}
+ − 1358
?>
+ − 1359
</td>
+ − 1360
</tr>
+ − 1361
</table>
+ − 1362
<?php
+ − 1363
echo '</form>';
+ − 1364
break;
+ − 1365
case "database_mysql":
256
+ − 1366
?>
+ − 1367
<script type="text/javascript">
+ − 1368
function ajaxGet(uri, f) {
+ − 1369
if (window.XMLHttpRequest) {
+ − 1370
ajax = new XMLHttpRequest();
+ − 1371
} else {
+ − 1372
if (window.ActiveXObject) {
+ − 1373
ajax = new ActiveXObject("Microsoft.XMLHTTP");
+ − 1374
} else {
+ − 1375
alert('Enano client-side runtime error: No AJAX support, unable to continue');
+ − 1376
return;
+ − 1377
}
+ − 1378
}
+ − 1379
ajax.onreadystatechange = f;
+ − 1380
ajax.open('GET', uri, true);
+ − 1381
ajax.send(null);
+ − 1382
}
+ − 1383
+ − 1384
function ajaxPost(uri, parms, f) {
+ − 1385
if (window.XMLHttpRequest) {
+ − 1386
ajax = new XMLHttpRequest();
+ − 1387
} else {
+ − 1388
if (window.ActiveXObject) {
+ − 1389
ajax = new ActiveXObject("Microsoft.XMLHTTP");
+ − 1390
} else {
+ − 1391
alert('Enano client-side runtime error: No AJAX support, unable to continue');
+ − 1392
return;
+ − 1393
}
+ − 1394
}
+ − 1395
ajax.onreadystatechange = f;
+ − 1396
ajax.open('POST', uri, true);
+ − 1397
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ − 1398
ajax.setRequestHeader("Content-length", parms.length);
+ − 1399
ajax.setRequestHeader("Connection", "close");
+ − 1400
ajax.send(parms);
+ − 1401
}
+ − 1402
function ajaxTestConnection()
+ − 1403
{
+ − 1404
v = verify();
+ − 1405
if(!v)
+ − 1406
{
244
+ − 1407
alert($lang.get('meta_msg_err_verification'));
256
+ − 1408
return false;
+ − 1409
}
+ − 1410
var frm = document.forms.dbinfo;
+ − 1411
db_host = escape(frm.db_host.value.replace('+', '%2B'));
+ − 1412
db_name = escape(frm.db_name.value.replace('+', '%2B'));
+ − 1413
db_user = escape(frm.db_user.value.replace('+', '%2B'));
+ − 1414
db_pass = escape(frm.db_pass.value.replace('+', '%2B'));
+ − 1415
db_root_user = escape(frm.db_root_user.value.replace('+', '%2B'));
+ − 1416
db_root_pass = escape(frm.db_root_pass.value.replace('+', '%2B'));
+ − 1417
+ − 1418
parms = 'host='+db_host+'&name='+db_name+'&user='+db_user+'&pass='+db_pass+'&root_user='+db_root_user+'&root_pass='+db_root_pass;
+ − 1419
ajaxPost('<?php echo scriptPath; ?>/install.php?mode=mysql_test', parms, function() {
+ − 1420
if(ajax.readyState==4)
+ − 1421
{
+ − 1422
s = ajax.responseText.substr(0, 4);
+ − 1423
t = ajax.responseText.substr(4, ajax.responseText.length);
+ − 1424
if(s.substr(0, 4)=='good')
+ − 1425
{
+ − 1426
document.getElementById('s_db_host').src='images/good.gif';
+ − 1427
document.getElementById('s_db_name').src='images/good.gif';
+ − 1428
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1429
document.getElementById('s_db_root').src='images/good.gif';
244
+ − 1430
if(t.match(/_creating_db/)) document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_warn_creating_db');
+ − 1431
if(t.match(/_creating_user/)) document.getElementById('e_db_auth').innerHTML = $lang.get('database_msg_warn_creating_user');
256
+ − 1432
document.getElementById('s_mysql_version').src='images/good.gif';
244
+ − 1433
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_info_mysql_good');
256
+ − 1434
}
+ − 1435
else
+ − 1436
{
+ − 1437
switch(s)
+ − 1438
{
+ − 1439
case 'host':
+ − 1440
document.getElementById('s_db_host').src='images/bad.gif';
+ − 1441
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1442
document.getElementById('s_db_auth').src='images/unknown.gif';
+ − 1443
document.getElementById('s_db_root').src='images/unknown.gif';
244
+ − 1444
document.getElementById('e_db_host').innerHTML = $lang.get('database_msg_err_mysql_connect', { db_host: document.forms.dbinfo.db_host.value, mysql_error: t });
+ − 1445
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
256
+ − 1446
break;
+ − 1447
case 'auth':
+ − 1448
document.getElementById('s_db_host').src='images/good.gif';
+ − 1449
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1450
document.getElementById('s_db_auth').src='images/bad.gif';
+ − 1451
document.getElementById('s_db_root').src='images/unknown.gif';
244
+ − 1452
document.getElementById('e_db_auth').innerHTML = $lang.get('database_msg_err_mysql_auth', { mysql_error: t });
+ − 1453
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
256
+ − 1454
break;
+ − 1455
case 'perm':
+ − 1456
document.getElementById('s_db_host').src='images/good.gif';
+ − 1457
document.getElementById('s_db_name').src='images/bad.gif';
+ − 1458
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1459
document.getElementById('s_db_root').src='images/unknown.gif';
244
+ − 1460
document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_err_mysql_dbperm', { mysql_error: t });
+ − 1461
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
256
+ − 1462
break;
+ − 1463
case 'name':
+ − 1464
document.getElementById('s_db_host').src='images/good.gif';
+ − 1465
document.getElementById('s_db_name').src='images/bad.gif';
+ − 1466
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1467
document.getElementById('s_db_root').src='images/unknown.gif';
244
+ − 1468
document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_err_mysql_dbexist', { mysql_error: t });
+ − 1469
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
256
+ − 1470
break;
+ − 1471
case 'root':
+ − 1472
document.getElementById('s_db_host').src='images/good.gif';
+ − 1473
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1474
document.getElementById('s_db_auth').src='images/unknown.gif';
+ − 1475
document.getElementById('s_db_root').src='images/bad.gif';
244
+ − 1476
document.getElementById('e_db_root').innerHTML = $lang.get('database_msg_err_mysql_auth', { mysql_error: t });
+ − 1477
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
256
+ − 1478
break;
+ − 1479
case 'vers':
+ − 1480
document.getElementById('s_db_host').src='images/good.gif';
+ − 1481
document.getElementById('s_db_name').src='images/good.gif';
+ − 1482
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1483
document.getElementById('s_db_root').src='images/good.gif';
244
+ − 1484
if(t.match(/_creating_db/)) document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_warn_creating_db');
+ − 1485
if(t.match(/_creating_user/)) document.getElementById('e_db_auth').innerHTML = $lang.get('database_msg_warn_creating_user');
256
+ − 1486
244
+ − 1487
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_err_mysql_version', { mysql_version: t });
256
+ − 1488
document.getElementById('s_mysql_version').src='images/bad.gif';
+ − 1489
default:
+ − 1490
alert(t);
+ − 1491
break;
+ − 1492
}
+ − 1493
}
+ − 1494
}
+ − 1495
});
+ − 1496
}
+ − 1497
function verify()
+ − 1498
{
+ − 1499
document.getElementById('e_db_host').innerHTML = '';
+ − 1500
document.getElementById('e_db_auth').innerHTML = '';
+ − 1501
document.getElementById('e_db_name').innerHTML = '';
+ − 1502
document.getElementById('e_db_root').innerHTML = '';
+ − 1503
var frm = document.forms.dbinfo;
+ − 1504
ret = true;
+ − 1505
if(frm.db_host.value != '')
+ − 1506
{
+ − 1507
document.getElementById('s_db_host').src='images/unknown.gif';
+ − 1508
}
+ − 1509
else
+ − 1510
{
+ − 1511
document.getElementById('s_db_host').src='images/bad.gif';
+ − 1512
ret = false;
+ − 1513
}
262
+ − 1514
if(frm.db_name.value.match(/^([a-z0-9_-]+)$/g))
256
+ − 1515
{
+ − 1516
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1517
}
+ − 1518
else
+ − 1519
{
+ − 1520
document.getElementById('s_db_name').src='images/bad.gif';
+ − 1521
ret = false;
+ − 1522
}
+ − 1523
if(frm.db_user.value != '')
+ − 1524
{
+ − 1525
document.getElementById('s_db_auth').src='images/unknown.gif';
+ − 1526
}
+ − 1527
else
+ − 1528
{
+ − 1529
document.getElementById('s_db_auth').src='images/bad.gif';
+ − 1530
ret = false;
+ − 1531
}
+ − 1532
if(frm.table_prefix.value.match(/^([a-z0-9_]*)$/g))
+ − 1533
{
+ − 1534
document.getElementById('s_table_prefix').src='images/good.gif';
+ − 1535
}
+ − 1536
else
+ − 1537
{
+ − 1538
document.getElementById('s_table_prefix').src='images/bad.gif';
+ − 1539
ret = false;
+ − 1540
}
+ − 1541
if(frm.db_root_user.value == '')
+ − 1542
{
+ − 1543
document.getElementById('s_db_root').src='images/good.gif';
+ − 1544
}
+ − 1545
else if(frm.db_root_user.value != '' && frm.db_root_pass.value == '')
+ − 1546
{
+ − 1547
document.getElementById('s_db_root').src='images/bad.gif';
+ − 1548
ret = false;
+ − 1549
}
+ − 1550
else
+ − 1551
{
+ − 1552
document.getElementById('s_db_root').src='images/unknown.gif';
+ − 1553
}
+ − 1554
if(ret) frm._cont.disabled = false;
+ − 1555
else frm._cont.disabled = true;
+ − 1556
return ret;
+ − 1557
}
+ − 1558
window.onload = verify;
+ − 1559
</script>
244
+ − 1560
<p><?php echo $lang->get('database_blurb_needdb'); ?></p>
+ − 1561
<p><?php echo $lang->get('database_blurb_howtomysql'); ?></p>
256
+ − 1562
<?php
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 1563
if ( file_exists('/etc/enano-is-virt-appliance') )
256
+ − 1564
{
244
+ − 1565
echo '<p>
+ − 1566
' . $lang->get('database_vm_login_info', array( 'host' => 'localhost', 'user' => 'enano', 'pass' => 'clurichaun', 'name' => 'enano_www1' )) . '
+ − 1567
</p>';
256
+ − 1568
}
+ − 1569
?>
+ − 1570
<form name="dbinfo" action="install.php?mode=website" method="post">
322
+ − 1571
<input type="hidden" name="db_driver" value="mysql" />
256
+ − 1572
<table border="0">
244
+ − 1573
<tr>
+ − 1574
<td colspan="3" style="text-align: center">
+ − 1575
<h3><?php echo $lang->get('database_table_title'); ?></h3>
+ − 1576
</td>
+ − 1577
</tr>
+ − 1578
<tr>
+ − 1579
<td>
+ − 1580
<b><?php echo $lang->get('database_field_hostname_title'); ?></b>
+ − 1581
<br /><?php echo $lang->get('database_field_hostname_body'); ?>
+ − 1582
<br /><span style="color: #993300" id="e_db_host"></span>
+ − 1583
</td>
+ − 1584
<td>
+ − 1585
<input onkeyup="verify();" name="db_host" size="30" type="text" />
+ − 1586
</td>
+ − 1587
<td>
+ − 1588
<img id="s_db_host" alt="Good/bad icon" src="images/bad.gif" />
+ − 1589
</td>
+ − 1590
</tr>
+ − 1591
<tr>
+ − 1592
<td>
+ − 1593
<b><?php echo $lang->get('database_field_dbname_title'); ?></b><br />
+ − 1594
<?php echo $lang->get('database_field_dbname_body'); ?><br />
+ − 1595
<span style="color: #993300" id="e_db_name"></span>
+ − 1596
</td>
+ − 1597
<td>
+ − 1598
<input onkeyup="verify();" name="db_name" size="30" type="text" />
+ − 1599
</td>
+ − 1600
<td>
+ − 1601
<img id="s_db_name" alt="Good/bad icon" src="images/bad.gif" />
+ − 1602
</td>
+ − 1603
</tr>
+ − 1604
<tr>
+ − 1605
<td rowspan="2">
+ − 1606
<b><?php echo $lang->get('database_field_dbauth_title'); ?></b><br />
+ − 1607
<?php echo $lang->get('database_field_dbauth_body'); ?><br />
+ − 1608
<span style="color: #993300" id="e_db_auth"></span>
+ − 1609
</td>
+ − 1610
<td>
+ − 1611
<input onkeyup="verify();" name="db_user" size="30" type="text" />
+ − 1612
</td>
+ − 1613
<td rowspan="2">
+ − 1614
<img id="s_db_auth" alt="Good/bad icon" src="images/bad.gif" />
+ − 1615
</td>
+ − 1616
</tr>
+ − 1617
<tr>
+ − 1618
<td>
+ − 1619
<input name="db_pass" size="30" type="password" />
+ − 1620
</td>
+ − 1621
</tr>
+ − 1622
<tr>
+ − 1623
<td colspan="3" style="text-align: center">
+ − 1624
<h3><?php echo $lang->get('database_heading_optionalinfo'); ?></h3>
+ − 1625
</td>
+ − 1626
</tr>
+ − 1627
<tr>
+ − 1628
<td>
+ − 1629
<b><?php echo $lang->get('database_field_tableprefix_title'); ?></b><br />
+ − 1630
<?php echo $lang->get('database_field_tableprefix_body'); ?>
+ − 1631
</td>
+ − 1632
<td>
+ − 1633
<input onkeyup="verify();" name="table_prefix" size="30" type="text" />
+ − 1634
</td>
+ − 1635
<td>
+ − 1636
<img id="s_table_prefix" alt="Good/bad icon" src="images/good.gif" />
+ − 1637
</td>
+ − 1638
</tr>
+ − 1639
<tr>
+ − 1640
<td rowspan="2">
+ − 1641
<b><?php echo $lang->get('database_field_rootauth_title'); ?></b><br />
+ − 1642
<?php echo $lang->get('database_field_rootauth_body'); ?><br />
+ − 1643
<span style="color: #993300" id="e_db_root"></span>
+ − 1644
</td>
+ − 1645
<td>
+ − 1646
<input onkeyup="verify();" name="db_root_user" size="30" type="text" />
+ − 1647
</td>
+ − 1648
<td rowspan="2">
+ − 1649
<img id="s_db_root" alt="Good/bad icon" src="images/good.gif" />
+ − 1650
</td>
+ − 1651
</tr>
+ − 1652
<tr>
+ − 1653
<td>
+ − 1654
<input onkeyup="verify();" name="db_root_pass" size="30" type="password" />
+ − 1655
</td>
+ − 1656
</tr>
+ − 1657
<tr>
+ − 1658
<td>
+ − 1659
<b><?php echo $lang->get('database_field_mysqlversion_title'); ?></b>
+ − 1660
</td>
+ − 1661
<td id="e_mysql_version">
+ − 1662
<?php echo $lang->get('database_field_mysqlversion_blurb_willbechecked'); ?>
+ − 1663
</td>
+ − 1664
<td>
+ − 1665
<img id="s_mysql_version" alt="Good/bad icon" src="images/unknown.gif" />
+ − 1666
</td>
+ − 1667
</tr>
+ − 1668
<tr>
+ − 1669
<td>
+ − 1670
<b><?php echo $lang->get('database_field_droptables_title'); ?></b><br />
+ − 1671
<?php echo $lang->get('database_field_droptables_body'); ?>
+ − 1672
</td>
+ − 1673
<td>
+ − 1674
<input type="checkbox" name="drop_tables" id="dtcheck" /> <label for="dtcheck"><?php echo $lang->get('database_field_droptables_lbl'); ?></label>
+ − 1675
</td>
+ − 1676
</tr>
+ − 1677
<tr>
+ − 1678
<td colspan="3" style="text-align: center">
+ − 1679
<input type="button" value="<?php echo $lang->get('database_btn_testconnection'); ?>" onclick="ajaxTestConnection();" />
+ − 1680
</td>
+ − 1681
</tr>
256
+ − 1682
</table>
+ − 1683
<div class="pagenav">
244
+ − 1684
<table border="0">
+ − 1685
<tr>
+ − 1686
<td>
+ − 1687
<input type="submit" value="<?php echo $lang->get('meta_btn_continue'); ?>" onclick="return verify();" name="_cont" />
+ − 1688
</td>
+ − 1689
<td>
+ − 1690
<p>
+ − 1691
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 1692
• <?php echo $lang->get('database_objective_test'); ?><br />
+ − 1693
• <?php echo $lang->get('database_objective_uncrypt'); ?>
+ − 1694
</p>
+ − 1695
</td>
+ − 1696
</tr>
+ − 1697
</table>
+ − 1698
</div>
331
+ − 1699
<?php
+ − 1700
break;
+ − 1701
case 'database_pgsql':
+ − 1702
?>
+ − 1703
<script type="text/javascript">
+ − 1704
function ajaxGet(uri, f) {
+ − 1705
if (window.XMLHttpRequest) {
+ − 1706
ajax = new XMLHttpRequest();
322
+ − 1707
} else {
+ − 1708
if (window.ActiveXObject) {
+ − 1709
ajax = new ActiveXObject("Microsoft.XMLHTTP");
+ − 1710
} else {
+ − 1711
alert('Enano client-side runtime error: No AJAX support, unable to continue');
+ − 1712
return;
+ − 1713
}
+ − 1714
}
+ − 1715
ajax.onreadystatechange = f;
+ − 1716
ajax.open('GET', uri, true);
+ − 1717
ajax.send(null);
+ − 1718
}
+ − 1719
+ − 1720
function ajaxPost(uri, parms, f) {
+ − 1721
if (window.XMLHttpRequest) {
+ − 1722
ajax = new XMLHttpRequest();
+ − 1723
} else {
+ − 1724
if (window.ActiveXObject) {
+ − 1725
ajax = new ActiveXObject("Microsoft.XMLHTTP");
+ − 1726
} else {
+ − 1727
alert('Enano client-side runtime error: No AJAX support, unable to continue');
+ − 1728
return;
+ − 1729
}
+ − 1730
}
+ − 1731
ajax.onreadystatechange = f;
+ − 1732
ajax.open('POST', uri, true);
+ − 1733
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ − 1734
ajax.setRequestHeader("Content-length", parms.length);
+ − 1735
ajax.setRequestHeader("Connection", "close");
+ − 1736
ajax.send(parms);
+ − 1737
}
+ − 1738
function ajaxTestConnection()
+ − 1739
{
+ − 1740
v = verify();
+ − 1741
if(!v)
+ − 1742
{
331
+ − 1743
alert($lang.get('meta_msg_err_verification'));
322
+ − 1744
return false;
+ − 1745
}
+ − 1746
var frm = document.forms.dbinfo;
+ − 1747
db_host = escape(frm.db_host.value.replace('+', '%2B'));
+ − 1748
db_name = escape(frm.db_name.value.replace('+', '%2B'));
+ − 1749
db_user = escape(frm.db_user.value.replace('+', '%2B'));
+ − 1750
db_pass = escape(frm.db_pass.value.replace('+', '%2B'));
+ − 1751
db_root_user = escape(frm.db_root_user.value.replace('+', '%2B'));
+ − 1752
db_root_pass = escape(frm.db_root_pass.value.replace('+', '%2B'));
+ − 1753
+ − 1754
parms = 'host='+db_host+'&name='+db_name+'&user='+db_user+'&pass='+db_pass+'&root_user='+db_root_user+'&root_pass='+db_root_pass;
331
+ − 1755
ajaxPost('<?php echo scriptPath; ?>/install.php?mode=mysql_test', parms, function() {
322
+ − 1756
if(ajax.readyState==4)
+ − 1757
{
+ − 1758
s = ajax.responseText.substr(0, 4);
+ − 1759
t = ajax.responseText.substr(4, ajax.responseText.length);
+ − 1760
if(s.substr(0, 4)=='good')
+ − 1761
{
+ − 1762
document.getElementById('s_db_host').src='images/good.gif';
+ − 1763
document.getElementById('s_db_name').src='images/good.gif';
+ − 1764
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1765
document.getElementById('s_db_root').src='images/good.gif';
331
+ − 1766
if(t.match(/_creating_db/)) document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_warn_creating_db');
+ − 1767
if(t.match(/_creating_user/)) document.getElementById('e_db_auth').innerHTML = $lang.get('database_msg_warn_creating_user');
322
+ − 1768
document.getElementById('s_mysql_version').src='images/good.gif';
331
+ − 1769
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_info_mysql_good');
322
+ − 1770
}
+ − 1771
else
+ − 1772
{
+ − 1773
switch(s)
+ − 1774
{
+ − 1775
case 'host':
+ − 1776
document.getElementById('s_db_host').src='images/bad.gif';
+ − 1777
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1778
document.getElementById('s_db_auth').src='images/unknown.gif';
+ − 1779
document.getElementById('s_db_root').src='images/unknown.gif';
331
+ − 1780
document.getElementById('e_db_host').innerHTML = $lang.get('database_msg_err_mysql_connect', { db_host: document.forms.dbinfo.db_host.value, mysql_error: t });
+ − 1781
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
322
+ − 1782
break;
+ − 1783
case 'auth':
+ − 1784
document.getElementById('s_db_host').src='images/good.gif';
+ − 1785
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1786
document.getElementById('s_db_auth').src='images/bad.gif';
+ − 1787
document.getElementById('s_db_root').src='images/unknown.gif';
331
+ − 1788
document.getElementById('e_db_auth').innerHTML = $lang.get('database_msg_err_mysql_auth', { mysql_error: t });
+ − 1789
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
322
+ − 1790
break;
+ − 1791
case 'perm':
+ − 1792
document.getElementById('s_db_host').src='images/good.gif';
+ − 1793
document.getElementById('s_db_name').src='images/bad.gif';
+ − 1794
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1795
document.getElementById('s_db_root').src='images/unknown.gif';
331
+ − 1796
document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_err_mysql_dbperm', { mysql_error: t });
+ − 1797
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
322
+ − 1798
break;
+ − 1799
case 'name':
+ − 1800
document.getElementById('s_db_host').src='images/good.gif';
+ − 1801
document.getElementById('s_db_name').src='images/bad.gif';
+ − 1802
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1803
document.getElementById('s_db_root').src='images/unknown.gif';
331
+ − 1804
document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_err_mysql_dbexist', { mysql_error: t });
+ − 1805
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
322
+ − 1806
break;
+ − 1807
case 'root':
+ − 1808
document.getElementById('s_db_host').src='images/good.gif';
+ − 1809
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1810
document.getElementById('s_db_auth').src='images/unknown.gif';
+ − 1811
document.getElementById('s_db_root').src='images/bad.gif';
331
+ − 1812
document.getElementById('e_db_root').innerHTML = $lang.get('database_msg_err_mysql_auth', { mysql_error: t });
+ − 1813
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_warn_mysql_version');
322
+ − 1814
break;
+ − 1815
case 'vers':
+ − 1816
document.getElementById('s_db_host').src='images/good.gif';
+ − 1817
document.getElementById('s_db_name').src='images/good.gif';
+ − 1818
document.getElementById('s_db_auth').src='images/good.gif';
+ − 1819
document.getElementById('s_db_root').src='images/good.gif';
331
+ − 1820
if(t.match(/_creating_db/)) document.getElementById('e_db_name').innerHTML = $lang.get('database_msg_warn_creating_db');
+ − 1821
if(t.match(/_creating_user/)) document.getElementById('e_db_auth').innerHTML = $lang.get('database_msg_warn_creating_user');
322
+ − 1822
331
+ − 1823
document.getElementById('e_mysql_version').innerHTML = $lang.get('database_msg_err_mysql_version', { mysql_version: t });
322
+ − 1824
document.getElementById('s_mysql_version').src='images/bad.gif';
+ − 1825
default:
+ − 1826
alert(t);
+ − 1827
break;
+ − 1828
}
+ − 1829
}
+ − 1830
}
+ − 1831
});
+ − 1832
}
+ − 1833
function verify()
+ − 1834
{
+ − 1835
document.getElementById('e_db_host').innerHTML = '';
+ − 1836
document.getElementById('e_db_auth').innerHTML = '';
+ − 1837
document.getElementById('e_db_name').innerHTML = '';
+ − 1838
document.getElementById('e_db_root').innerHTML = '';
+ − 1839
var frm = document.forms.dbinfo;
+ − 1840
ret = true;
+ − 1841
if(frm.db_host.value != '')
+ − 1842
{
+ − 1843
document.getElementById('s_db_host').src='images/unknown.gif';
+ − 1844
}
+ − 1845
else
+ − 1846
{
+ − 1847
document.getElementById('s_db_host').src='images/bad.gif';
+ − 1848
ret = false;
+ − 1849
}
+ − 1850
if(frm.db_name.value.match(/^([a-z0-9_-]+)$/g))
+ − 1851
{
+ − 1852
document.getElementById('s_db_name').src='images/unknown.gif';
+ − 1853
}
+ − 1854
else
+ − 1855
{
+ − 1856
document.getElementById('s_db_name').src='images/bad.gif';
+ − 1857
ret = false;
+ − 1858
}
+ − 1859
if(frm.db_user.value != '')
+ − 1860
{
+ − 1861
document.getElementById('s_db_auth').src='images/unknown.gif';
+ − 1862
}
+ − 1863
else
+ − 1864
{
+ − 1865
document.getElementById('s_db_auth').src='images/bad.gif';
+ − 1866
ret = false;
+ − 1867
}
+ − 1868
if(frm.table_prefix.value.match(/^([a-z0-9_]*)$/g))
+ − 1869
{
+ − 1870
document.getElementById('s_table_prefix').src='images/good.gif';
+ − 1871
}
+ − 1872
else
+ − 1873
{
+ − 1874
document.getElementById('s_table_prefix').src='images/bad.gif';
+ − 1875
ret = false;
+ − 1876
}
+ − 1877
if(frm.db_root_user.value == '')
+ − 1878
{
+ − 1879
document.getElementById('s_db_root').src='images/good.gif';
+ − 1880
}
+ − 1881
else if(frm.db_root_user.value != '' && frm.db_root_pass.value == '')
+ − 1882
{
+ − 1883
document.getElementById('s_db_root').src='images/bad.gif';
+ − 1884
ret = false;
+ − 1885
}
+ − 1886
else
+ − 1887
{
+ − 1888
document.getElementById('s_db_root').src='images/unknown.gif';
+ − 1889
}
+ − 1890
if(ret) frm._cont.disabled = false;
+ − 1891
else frm._cont.disabled = true;
+ − 1892
return ret;
+ − 1893
}
+ − 1894
window.onload = verify;
+ − 1895
</script>
331
+ − 1896
<p><?php echo $lang->get('database_blurb_needdb'); ?></p>
+ − 1897
<p><?php echo $lang->get('database_blurb_howtomysql'); ?></p>
+ − 1898
<?php
+ − 1899
if ( file_exists('/etc/enano-is-virt-appliance') )
+ − 1900
{
+ − 1901
echo '<p>
+ − 1902
' . $lang->get('database_vm_login_info', array( 'host' => 'localhost', 'user' => 'enano', 'pass' => 'clurichaun', 'name' => 'enano_www1' )) . '
+ − 1903
</p>';
+ − 1904
}
+ − 1905
?>
322
+ − 1906
<form name="dbinfo" action="install.php?mode=website" method="post">
+ − 1907
<input type="hidden" name="db_driver" value="postgresql" />
+ − 1908
<table border="0">
+ − 1909
<tr><td colspan="3" style="text-align: center"><h3>Database information</h3></td></tr>
+ − 1910
<tr><td><b>Database hostname</b><br />This is the hostname (or sometimes the IP address) of your Postgres server. In many cases, this is "localhost".<br /><span style="color: #993300" id="e_db_host"></span></td><td><input onkeyup="verify();" name="db_host" size="30" type="text" /></td><td><img id="s_db_host" alt="Good/bad icon" src="images/bad.gif" /></td></tr>
+ − 1911
<tr><td><b>Database name</b><br />The name of the actual database. If you don't already have a database, you can create one here, if you have the username and password of a PostgreSQL superuser.<br /><span style="color: #993300" id="e_db_name"></span></td><td><input onkeyup="verify();" name="db_name" size="30" type="text" /></td><td><img id="s_db_name" alt="Good/bad icon" src="images/bad.gif" /></td></tr>
+ − 1912
<tr><td rowspan="2"><b>Database login</b><br />These fields should be the username and password for a role that has permission to create and alter tables, select data, insert data, update data, and delete data. You may or may not choose to allow dropping tables.<br /><span style="color: #993300" id="e_db_auth"></span></td><td><input onkeyup="verify();" name="db_user" size="30" type="text" /></td><td rowspan="2"><img id="s_db_auth" alt="Good/bad icon" src="images/bad.gif" /></td></tr>
+ − 1913
<tr><td><input name="db_pass" size="30" type="password" /></td></tr>
+ − 1914
<tr><td colspan="3" style="text-align: center"><h3>Optional information</h3></td></tr>
+ − 1915
<tr><td><b>Table prefix</b><br />The value that you enter here will be added to the beginning of the name of each Enano table. You may use lowercase letters (a-z), numbers (0-9), and underscores (_).</td><td><input onkeyup="verify();" name="table_prefix" size="30" type="text" /></td><td><img id="s_table_prefix" alt="Good/bad icon" src="images/good.gif" /></td></tr>
+ − 1916
<tr><td rowspan="2"><b>Database administrative login</b><br />If the Postgres database or role that you entered above does not exist yet, you can create them here, assuming that you have the login information for a PostgreSQL superuser. Leave these fields blank unless you need to use them.<br /><span style="color: #993300" id="e_db_root"></span></td><td><input onkeyup="verify();" name="db_root_user" size="30" type="text" /></td><td rowspan="2"><img id="s_db_root" alt="Good/bad icon" src="images/good.gif" /></td></tr>
+ − 1917
<tr><td><input onkeyup="verify();" name="db_root_pass" size="30" type="password" /></td></tr>
+ − 1918
<tr><td><b>PostgreSQL version</b></td><td id="e_mysql_version">PostgreSQL version information will<br />be checked when you click "Test<br />Connection". You need to have at<br />least PostgreSQL 8.2.0 to install Enano.</td><td><img id="s_mysql_version" alt="Good/bad icon" src="images/unknown.gif" /></td></tr>
+ − 1919
<tr><td><b>Delete existing tables?</b><br />If this option is checked, all the tables that will be used by Enano will be dropped (deleted) before the schema is executed. Do NOT use this option unless specifically instructed to.</td><td><input type="checkbox" name="drop_tables" id="dtcheck" /> <label for="dtcheck">Drop existing tables</label></td></tr>
+ − 1920
<tr><td colspan="3" style="text-align: center"><input type="button" value="Test connection" onclick="ajaxTestConnection();" /></td></tr>
+ − 1921
</table>
+ − 1922
<div class="pagenav">
+ − 1923
<table border="0">
+ − 1924
<tr>
+ − 1925
<td><input type="submit" value="Continue" onclick="return verify();" name="_cont" /></td><td><p><span style="font-weight: bold;">Before clicking continue:</span><br />• Check your PostgreSQL connection using the "Test Connection" button.<br />• Be aware that your database information will be transmitted unencrypted several times.</p></td>
+ − 1926
</tr>
+ − 1927
</table>
+ − 1928
</div>
+ − 1929
</form>
+ − 1930
<?php
+ − 1931
break;
256
+ − 1932
case "website":
244
+ − 1933
if ( !isset($_POST['_cont']) )
+ − 1934
{
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 1935
echo 'No POST data signature found. Please <a href="install.php?mode=license">restart the installation</a>.';
256
+ − 1936
$template->footer();
+ − 1937
exit;
+ − 1938
}
+ − 1939
unset($_POST['_cont']);
+ − 1940
?>
+ − 1941
<script type="text/javascript">
+ − 1942
function verify()
+ − 1943
{
+ − 1944
var frm = document.forms.siteinfo;
+ − 1945
ret = true;
+ − 1946
if(frm.sitename.value.match(/^(.+)$/g) && frm.sitename.value != 'Enano')
+ − 1947
{
+ − 1948
document.getElementById('s_name').src='images/good.gif';
+ − 1949
}
+ − 1950
else
+ − 1951
{
+ − 1952
document.getElementById('s_name').src='images/bad.gif';
+ − 1953
ret = false;
+ − 1954
}
+ − 1955
if(frm.sitedesc.value.match(/^(.+)$/g))
+ − 1956
{
+ − 1957
document.getElementById('s_desc').src='images/good.gif';
+ − 1958
}
+ − 1959
else
+ − 1960
{
+ − 1961
document.getElementById('s_desc').src='images/bad.gif';
+ − 1962
ret = false;
+ − 1963
}
+ − 1964
if(frm.copyright.value.match(/^(.+)$/g))
+ − 1965
{
+ − 1966
document.getElementById('s_copyright').src='images/good.gif';
+ − 1967
}
+ − 1968
else
+ − 1969
{
+ − 1970
document.getElementById('s_copyright').src='images/bad.gif';
+ − 1971
ret = false;
+ − 1972
}
+ − 1973
if(ret) frm._cont.disabled = false;
+ − 1974
else frm._cont.disabled = true;
+ − 1975
return ret;
+ − 1976
}
+ − 1977
window.onload = verify;
+ − 1978
</script>
+ − 1979
<form name="siteinfo" action="install.php?mode=login" method="post">
+ − 1980
<?php
+ − 1981
$k = array_keys($_POST);
+ − 1982
for($i=0;$i<sizeof($_POST);$i++) {
+ − 1983
echo '<input type="hidden" name="'.htmlspecialchars($k[$i]).'" value="'.htmlspecialchars($_POST[$k[$i]]).'" />'."\n";
+ − 1984
}
+ − 1985
?>
249
+ − 1986
<p><?php echo $lang->get('website_header_blurb'); ?></p>
256
+ − 1987
<table border="0">
249
+ − 1988
<tr>
+ − 1989
<td>
+ − 1990
<b><?php echo $lang->get('website_field_name_title'); ?></b><br />
+ − 1991
<?php echo $lang->get('website_field_name_body'); ?>
+ − 1992
</td>
+ − 1993
<td>
+ − 1994
<input onkeyup="verify();" name="sitename" type="text" size="30" />
+ − 1995
</td>
+ − 1996
<td>
+ − 1997
<img id="s_name" alt="Good/bad icon" src="images/bad.gif" />
+ − 1998
</td>
+ − 1999
</tr>
+ − 2000
<tr>
+ − 2001
<td>
+ − 2002
<b><?php echo $lang->get('website_field_desc_title'); ?></b><br />
+ − 2003
<?php echo $lang->get('website_field_desc_body'); ?>
+ − 2004
</td>
+ − 2005
<td>
+ − 2006
<input onkeyup="verify();" name="sitedesc" type="text" size="30" />
+ − 2007
</td>
+ − 2008
<td>
+ − 2009
<img id="s_desc" alt="Good/bad icon" src="images/bad.gif" />
+ − 2010
</td>
+ − 2011
</tr>
+ − 2012
<tr>
+ − 2013
<td>
+ − 2014
<b><?php echo $lang->get('website_field_copyright_title'); ?></b><br />
+ − 2015
<?php echo $lang->get('website_field_copyright_body'); ?>
+ − 2016
</td>
+ − 2017
<td>
+ − 2018
<input onkeyup="verify();" name="copyright" type="text" size="30" />
+ − 2019
</td>
+ − 2020
<td>
+ − 2021
<img id="s_copyright" alt="Good/bad icon" src="images/bad.gif" />
+ − 2022
</td>
+ − 2023
</tr>
+ − 2024
<tr>
+ − 2025
<td>
+ − 2026
<b><?php echo $lang->get('website_field_wikimode_title'); ?></b><br />
+ − 2027
<?php echo $lang->get('website_field_wikimode_body'); ?>
+ − 2028
</td>
+ − 2029
<td>
+ − 2030
<input name="wiki_mode" type="checkbox" id="wmcheck" /> <label for="wmcheck"><?php echo $lang->get('website_field_wikimode_checkbox'); ?></label>
+ − 2031
</td>
+ − 2032
<td>
+ − 2033
+ − 2034
</td>
+ − 2035
</tr>
+ − 2036
<tr>
+ − 2037
<td>
+ − 2038
<b><?php echo $lang->get('website_field_urlscheme_title'); ?></b><br />
+ − 2039
<?php echo $lang->get('website_field_urlscheme_body'); ?>
+ − 2040
</td>
+ − 2041
<td colspan="2">
+ − 2042
<input type="radio" <?php if(!is_apache()) echo 'checked="checked" '; ?>name="urlscheme" value="ugly" id="ugly" /> <label for="ugly"><?php echo $lang->get('website_field_urlscheme_ugly'); ?></label><br />
+ − 2043
<input type="radio" <?php if(is_apache()) echo 'checked="checked" '; ?>name="urlscheme" value="short" id="short" /> <label for="short"><?php echo $lang->get('website_field_urlscheme_short'); ?></label><br />
304
+ − 2044
<input type="radio" name="urlscheme" value="tiny" id="petite"> <label for="petite"><?php echo $lang->get('website_field_urlscheme_tiny'); ?></label><br />
+ − 2045
<small><a href="install.php?mode=pophelp&topic=url_schemes" onclick="window.open(this.href, 'pophelpwin', 'width=550,height=400,status=no,toolbars=no,toolbar=no,address=no,scroll=yes'); return false;"><?php echo $lang->get('website_field_urlscheme_helplink'); ?></a></small>
249
+ − 2046
</td>
+ − 2047
</tr>
256
+ − 2048
</table>
+ − 2049
<div class="pagenav">
+ − 2050
<table border="0">
249
+ − 2051
<tr>
+ − 2052
<td>
+ − 2053
<input type="submit" value="<?php echo $lang->get('meta_btn_continue'); ?>" onclick="return verify();" name="_cont" />
+ − 2054
</td>
+ − 2055
<td>
+ − 2056
<p>
+ − 2057
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 2058
• <?php echo $lang->get('website_objective_verify'); ?>
+ − 2059
</p>
+ − 2060
</td>
+ − 2061
</tr>
256
+ − 2062
</table>
+ − 2063
</div>
+ − 2064
</form>
+ − 2065
<?php
+ − 2066
break;
+ − 2067
case "login":
+ − 2068
if(!isset($_POST['_cont'])) {
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 2069
echo 'No POST data signature found. Please <a href="install.php?mode=license">restart the installation</a>.';
256
+ − 2070
$template->footer();
+ − 2071
exit;
+ − 2072
}
+ − 2073
unset($_POST['_cont']);
+ − 2074
require('config.new.php');
286
b2f985e4cef3
Fixed a number of issues with SQL query readability and some undefined index-ish errors; consequently the SQL report feature was added
Dan
diff
changeset
+ − 2075
$aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
256
+ − 2076
if ( isset($crypto_key) )
+ − 2077
{
+ − 2078
$cryptkey = $crypto_key;
+ − 2079
}
+ − 2080
if(!isset($cryptkey) || ( isset($cryptkey) && strlen($cryptkey) != AES_BITS / 4) )
+ − 2081
{
+ − 2082
$cryptkey = $aes->gen_readymade_key();
+ − 2083
$handle = @fopen(ENANO_ROOT.'/config.new.php', 'w');
+ − 2084
if(!$handle)
+ − 2085
{
249
+ − 2086
echo '<p>ERROR: Despite my repeated attempts to verify that the configuration file can be written, I was indeed prevented from opening it for writing. Maybe you\'re still on <del>crack</del> Windows?</p>';
256
+ − 2087
$template->footer();
+ − 2088
exit;
+ − 2089
}
+ − 2090
fwrite($handle, '<?php $cryptkey = \''.$cryptkey.'\'; ?>');
+ − 2091
fclose($handle);
+ − 2092
}
+ − 2093
// Sorry for the ugly hack, but this f***s up jEdit badly.
+ − 2094
echo '
+ − 2095
<script type="text/javascript">
+ − 2096
function verify()
+ − 2097
{
+ − 2098
var frm = document.forms.login;
+ − 2099
ret = true;
284
0f039028f7a5
Made the username validation regexp in install less picky since it was blacklisting two of the letters in my name. >.<
Dan
diff
changeset
+ − 2100
if ( frm.admin_user.value.match(/^([^<>&\?\'"%\/]+)$/) && !frm.admin_user.value.match(/^(?:(?:\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/) && frm.admin_user.value.toLowerCase() != \'anonymous\' )
256
+ − 2101
{
+ − 2102
document.getElementById(\'s_user\').src = \'images/good.gif\';
+ − 2103
}
+ − 2104
else
+ − 2105
{
+ − 2106
document.getElementById(\'s_user\').src = \'images/bad.gif\';
+ − 2107
ret = false;
+ − 2108
}
+ − 2109
if(frm.admin_pass.value.length >= 6 && frm.admin_pass.value == frm.admin_pass_confirm.value)
+ − 2110
{
+ − 2111
document.getElementById(\'s_password\').src = \'images/good.gif\';
+ − 2112
}
+ − 2113
else
+ − 2114
{
+ − 2115
document.getElementById(\'s_password\').src = \'images/bad.gif\';
+ − 2116
ret = false;
+ − 2117
}
295
f948557af068
Add warning in installer for PHP < 5.2.0; hopefully fix validation of e-mail addresses with dashes
Dan
diff
changeset
+ − 2118
if(frm.admin_email.value.match(/^(?:[\\w\\d_-]+\\.?)+@(?:(?:[\\w\\d-]\\-?)+\\.)+\\w{2,4}$/))
256
+ − 2119
{
+ − 2120
document.getElementById(\'s_email\').src = \'images/good.gif\';
+ − 2121
}
+ − 2122
else
+ − 2123
{
+ − 2124
document.getElementById(\'s_email\').src = \'images/bad.gif\';
+ − 2125
ret = false;
+ − 2126
}
+ − 2127
if(ret) frm._cont.disabled = false;
+ − 2128
else frm._cont.disabled = true;
+ − 2129
return ret;
+ − 2130
}
+ − 2131
window.onload = verify;
+ − 2132
+ − 2133
function cryptdata()
+ − 2134
{
+ − 2135
if(!verify()) return false;
+ − 2136
}
+ − 2137
</script>
+ − 2138
';
+ − 2139
?>
+ − 2140
<form name="login" action="install.php?mode=confirm" method="post" onsubmit="runEncryption();">
+ − 2141
<?php
+ − 2142
$k = array_keys($_POST);
+ − 2143
for($i=0;$i<sizeof($_POST);$i++) {
+ − 2144
echo '<input type="hidden" name="'.htmlspecialchars($k[$i]).'" value="'.htmlspecialchars($_POST[$k[$i]]).'" />'."\n";
+ − 2145
}
+ − 2146
?>
249
+ − 2147
<p><?php echo $lang->get('login_header_blurb'); ?></p>
256
+ − 2148
<table border="0">
249
+ − 2149
<tr>
+ − 2150
<td><b><?php echo $lang->get('login_field_username_title'); ?></b><br /><small><?php echo $lang->get('login_field_username_body'); ?></small></td>
+ − 2151
<td><input onkeyup="verify();" name="admin_user" type="text" size="30" /></td>
+ − 2152
<td><img id="s_user" alt="Good/bad icon" src="images/bad.gif" /></td>
+ − 2153
</tr>
+ − 2154
<tr>
+ − 2155
<td><?php echo $lang->get('login_field_password_title'); ?></td>
+ − 2156
<td><input onkeyup="verify();" name="admin_pass" type="password" size="30" /></td>
+ − 2157
<td rowspan="2"><img id="s_password" alt="Good/bad icon" src="images/bad.gif" /></td>
+ − 2158
</tr>
+ − 2159
<tr>
+ − 2160
<td><?php echo $lang->get('login_field_password_confirm'); ?></td>
+ − 2161
<td><input onkeyup="verify();" name="admin_pass_confirm" type="password" size="30" /></td>
+ − 2162
</tr>
+ − 2163
<tr>
+ − 2164
<td><?php echo $lang->get('login_field_email_title'); ?></td>
+ − 2165
<td><input onkeyup="verify();" name="admin_email" type="text" size="30" /></td>
+ − 2166
<td><img id="s_email" alt="Good/bad icon" src="images/bad.gif" /></td>
+ − 2167
</tr>
256
+ − 2168
<tr>
+ − 2169
<td>
249
+ − 2170
<?php echo $lang->get('login_field_allowphp_title'); ?><br />
+ − 2171
<small>
+ − 2172
<span style="color: #D84308">
+ − 2173
<?php
+ − 2174
echo $lang->get('login_field_allowphp_body',
+ − 2175
array(
+ − 2176
'important_notes' => '<a href="install.php?mode=pophelp&topic=admin_embed_php" onclick="window.open(this.href, \'pophelpwin\', \'width=550,height=400,status=no,toolbars=no,toolbar=no,address=no,scroll=yes\'); return false;" style="color: #D84308; text-decoration: underline;">' . $lang->get('login_field_allowphp_isi') . '</a>'
+ − 2177
)
+ − 2178
);
+ − 2179
?>
+ − 2180
</span>
+ − 2181
</small>
256
+ − 2182
</td>
+ − 2183
<td>
249
+ − 2184
<label><input type="radio" name="admin_embed_php" value="2" checked="checked" /> <?php echo $lang->get('login_field_allowphp_disabled'); ?></label>
+ − 2185
<label><input type="radio" name="admin_embed_php" value="4" /> <?php echo $lang->get('login_field_allowphp_enabled'); ?></label>
256
+ − 2186
</td>
+ − 2187
<td></td>
+ − 2188
</tr>
249
+ − 2189
<tr><td colspan="3"><?php echo $lang->get('login_aes_blurb'); ?></td></tr>
256
+ − 2190
</table>
+ − 2191
<div class="pagenav">
+ − 2192
<table border="0">
249
+ − 2193
<tr>
+ − 2194
<td>
+ − 2195
<input type="submit" value="<?php echo $lang->get('meta_btn_continue'); ?>" onclick="return cryptdata();" name="_cont" />
+ − 2196
</td>
+ − 2197
<td>
+ − 2198
<p>
+ − 2199
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 2200
• <?php echo $lang->get('login_objective_remember'); ?>
+ − 2201
</p>
+ − 2202
</td>
+ − 2203
</tr>
256
+ − 2204
</table>
+ − 2205
</div>
+ − 2206
<div id="cryptdebug"></div>
249
+ − 2207
<input type="hidden" name="use_crypt" value="no" />
+ − 2208
<input type="hidden" name="crypt_key" value="<?php echo $cryptkey; ?>" />
+ − 2209
<input type="hidden" name="crypt_data" value="" />
256
+ − 2210
</form>
+ − 2211
<script type="text/javascript">
+ − 2212
// <![CDATA[
+ − 2213
var frm = document.forms.login;
+ − 2214
frm.admin_user.focus();
+ − 2215
function runEncryption()
+ − 2216
{
+ − 2217
str = '';
+ − 2218
for(i=0;i<keySizeInBits/4;i++) str+='0';
+ − 2219
var key = hexToByteArray(str);
+ − 2220
var pt = hexToByteArray(str);
+ − 2221
var ct = rijndaelEncrypt(pt, key, "ECB");
+ − 2222
var ect = byteArrayToHex(ct);
+ − 2223
switch(keySizeInBits)
+ − 2224
{
+ − 2225
case 128:
+ − 2226
v = '66e94bd4ef8a2c3b884cfa59ca342b2e';
+ − 2227
break;
+ − 2228
case 192:
+ − 2229
v = 'aae06992acbf52a3e8f4a96ec9300bd7aae06992acbf52a3e8f4a96ec9300bd7';
+ − 2230
break;
+ − 2231
case 256:
+ − 2232
v = 'dc95c078a2408989ad48a21492842087dc95c078a2408989ad48a21492842087';
+ − 2233
break;
+ − 2234
}
+ − 2235
var testpassed = ( ect == v && md5_vm_test() );
+ − 2236
var frm = document.forms.login;
+ − 2237
if(testpassed)
+ − 2238
{
+ − 2239
// alert('encryption self-test passed');
+ − 2240
frm.use_crypt.value = 'yes';
+ − 2241
var cryptkey = frm.crypt_key.value;
+ − 2242
frm.crypt_key.value = '';
+ − 2243
if(cryptkey != byteArrayToHex(hexToByteArray(cryptkey)))
+ − 2244
{
+ − 2245
alert('Byte array conversion SUCKS');
+ − 2246
testpassed = false;
+ − 2247
}
+ − 2248
cryptkey = hexToByteArray(cryptkey);
+ − 2249
if(!cryptkey || ( ( typeof cryptkey == 'string' || typeof cryptkey == 'object' ) ) && cryptkey.length != keySizeInBits / 8 )
+ − 2250
{
+ − 2251
frm._cont.disabled = true;
+ − 2252
len = ( typeof cryptkey == 'string' || typeof cryptkey == 'object' ) ? '\nLen: '+cryptkey.length : '';
+ − 2253
alert('The key is messed up\nType: '+typeof(cryptkey)+len);
+ − 2254
}
+ − 2255
}
+ − 2256
else
+ − 2257
{
+ − 2258
// alert('encryption self-test FAILED');
+ − 2259
}
+ − 2260
if(testpassed)
+ − 2261
{
+ − 2262
pass = frm.admin_pass.value;
+ − 2263
pass = stringToByteArray(pass);
+ − 2264
cryptstring = rijndaelEncrypt(pass, cryptkey, 'ECB');
+ − 2265
//decrypted = rijndaelDecrypt(cryptstring, cryptkey, 'ECB');
+ − 2266
//decrypted = byteArrayToString(decrypted);
+ − 2267
//return false;
+ − 2268
if(!cryptstring)
+ − 2269
{
+ − 2270
return false;
+ − 2271
}
+ − 2272
cryptstring = byteArrayToHex(cryptstring);
+ − 2273
// document.getElementById('cryptdebug').innerHTML = '<pre>Data: '+cryptstring+'<br />Key: '+byteArrayToHex(cryptkey)+'</pre>';
+ − 2274
frm.crypt_data.value = cryptstring;
+ − 2275
frm.admin_pass.value = '';
+ − 2276
frm.admin_pass_confirm.value = '';
+ − 2277
}
+ − 2278
return false;
+ − 2279
}
+ − 2280
// ]]>
+ − 2281
</script>
+ − 2282
<?php
+ − 2283
break;
+ − 2284
case "confirm":
+ − 2285
if(!isset($_POST['_cont'])) {
+ − 2286
echo 'No POST data signature found. Please <a href="install.php?mode=sysreqs">restart the installation</a>.';
+ − 2287
$template->footer();
+ − 2288
exit;
+ − 2289
}
+ − 2290
unset($_POST['_cont']);
+ − 2291
?>
+ − 2292
<form name="confirm" action="install.php?mode=install" method="post">
+ − 2293
<?php
+ − 2294
$k = array_keys($_POST);
+ − 2295
for($i=0;$i<sizeof($_POST);$i++) {
+ − 2296
echo '<input type="hidden" name="'.htmlspecialchars($k[$i]).'" value="'.htmlspecialchars($_POST[$k[$i]]).'" />'."\n";
+ − 2297
}
+ − 2298
?>
249
+ − 2299
<h3><?php echo $lang->get('confirm_header_blurb_title'); ?></h3>
+ − 2300
<p><?php echo $lang->get('confirm_header_blurb_body'); ?></p>
256
+ − 2301
<ul>
249
+ − 2302
<li><?php echo $lang->get('confirm_lbl_db_host'); ?> <?php echo $_POST['db_host']; ?></li>
+ − 2303
<li><?php echo $lang->get('confirm_lbl_db_name'); ?> <?php echo $_POST['db_name']; ?></li>
+ − 2304
<li><?php echo $lang->get('confirm_lbl_db_user'); ?> <?php echo $_POST['db_user']; ?></li>
+ − 2305
<li><?php echo $lang->get('confirm_lbl_db_pass'); ?></li>
+ − 2306
<li><?php echo $lang->get('confirm_lbl_sitename'); ?> <?php echo $_POST['sitename']; ?></li>
+ − 2307
<li><?php echo $lang->get('confirm_lbl_sitedesc'); ?> <?php echo $_POST['sitedesc']; ?></li>
+ − 2308
<li><?php echo $lang->get('confirm_lbl_adminuser'); ?> <?php echo $_POST['admin_user']; ?></li>
+ − 2309
<li><?php echo $lang->get('confirm_lbl_aesbits'); ?> <?php echo $lang->get('confirm_lbl_aes_strength', array( 'aes_bits' => AES_BITS )); ?><br /><small><?php echo $lang->get('confirm_lbl_aes_change'); ?></small></li>
256
+ − 2310
</ul>
+ − 2311
<div class="pagenav">
+ − 2312
<table border="0">
+ − 2313
<tr>
249
+ − 2314
<td>
+ − 2315
<input type="submit" value="<?php echo $lang->get('confirm_btn_install_enano'); ?>" name="_cont" />
+ − 2316
</td>
+ − 2317
<td>
+ − 2318
<p>
+ − 2319
<span style="font-weight: bold;"><?php echo $lang->get('meta_lbl_before_continue'); ?></span><br />
+ − 2320
<!-- Like this even needs to be localized. :-P -->
+ − 2321
• <?php echo $lang->get('confirm_objective_pray'); ?>
+ − 2322
</p>
+ − 2323
</td>
256
+ − 2324
</tr>
+ − 2325
</table>
+ − 2326
</div>
+ − 2327
</form>
+ − 2328
<?php
+ − 2329
break;
+ − 2330
case "install":
+ − 2331
if(!isset($_POST['db_host']) ||
+ − 2332
!isset($_POST['db_name']) ||
+ − 2333
!isset($_POST['db_user']) ||
+ − 2334
!isset($_POST['db_pass']) ||
322
+ − 2335
!isset($_POST['db_driver']) ||
256
+ − 2336
!isset($_POST['sitename']) ||
+ − 2337
!isset($_POST['sitedesc']) ||
+ − 2338
!isset($_POST['copyright']) ||
+ − 2339
!isset($_POST['admin_user']) ||
+ − 2340
!isset($_POST['admin_pass']) ||
+ − 2341
!isset($_POST['admin_embed_php']) || ( isset($_POST['admin_embed_php']) && !in_array($_POST['admin_embed_php'], array('2', '4')) ) ||
+ − 2342
!isset($_POST['urlscheme'])
+ − 2343
)
+ − 2344
{
204
473cc747022a
You know what folks, a lot of Mercurial merges failed, and I just now figured out why. So now all changes from stable are permanently synced in.
Dan
diff
changeset
+ − 2345
echo 'The installer has detected that one or more required form values is not set. Please <a href="install.php?mode=license">restart the installation</a>.';
256
+ − 2346
$template->footer();
+ − 2347
exit;
+ − 2348
}
322
+ − 2349
if ( !in_array($_POST['db_driver'], array('mysql', 'postgresql')) )
+ − 2350
{
+ − 2351
echo 'Invalid database driver.';
+ − 2352
$template->footer();
+ − 2353
exit;
+ − 2354
}
256
+ − 2355
switch($_POST['urlscheme'])
+ − 2356
{
+ − 2357
case "ugly":
+ − 2358
default:
+ − 2359
$cp = scriptPath.'/index.php?title=';
+ − 2360
break;
+ − 2361
case "short":
+ − 2362
$cp = scriptPath.'/index.php/';
+ − 2363
break;
+ − 2364
case "tiny":
+ − 2365
$cp = scriptPath.'/';
+ − 2366
break;
+ − 2367
}
+ − 2368
function err($t) { global $template; echo $t; $template->footer(); exit; }
+ − 2369
+ − 2370
// $stages = array('connect', 'decrypt', 'genkey', 'parse', 'sql', 'writeconfig', 'renameconfig', 'startapi', 'initlogs');
+ − 2371
252
+ − 2372
if ( !preg_match('/^[a-z0-9_-]*$/', $_POST['table_prefix']) )
256
+ − 2373
err('Hacking attempt was detected in table_prefix.');
+ − 2374
+ − 2375
start_install_table();
269
+ − 2376
+ − 2377
// Are we just trying to auto-rename the config files? If so, skip everything else
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2378
if ( !isset($_GET['stage']) || ( isset($_GET['stage']) && $_GET['stage'] != 'renameconfig' ) )
256
+ − 2379
{
269
+ − 2380
// The stages connect, decrypt, genkey, and parse are preprocessing and don't do any actual data modification.
+ − 2381
// Thus, they need to be run on each retry, e.g. never skipped.
271
+ − 2382
run_installer_stage('connect', $lang->get('install_stg_connect_title'), 'stg_mysql_connect', $lang->get('install_stg_connect_body'), false);
269
+ − 2383
if ( isset($_POST['drop_tables']) )
+ − 2384
{
+ − 2385
// Are we supposed to drop any existing tables? If so, do it now
271
+ − 2386
run_installer_stage('drop', $lang->get('install_stg_drop_title'), 'stg_drop_tables', 'This step never returns failure');
269
+ − 2387
}
271
+ − 2388
run_installer_stage('decrypt', $lang->get('install_stg_decrypt_title'), 'stg_decrypt_admin_pass', $lang->get('install_stg_decrypt_body'), false);
+ − 2389
run_installer_stage('genkey', $lang->get('install_stg_genkey_title', array( 'aes_bits' => AES_BITS )), 'stg_generate_aes_key', $lang->get('install_stg_genkey_body'), false);
+ − 2390
run_installer_stage('parse', $lang->get('install_stg_parse_title'), 'stg_parse_schema', $lang->get('install_stg_parse_body'), false);
+ − 2391
run_installer_stage('sql', $lang->get('install_stg_sql_title'), 'stg_install', $lang->get('install_stg_sql_body'), false);
+ − 2392
run_installer_stage('writeconfig', $lang->get('install_stg_writeconfig_title'), 'stg_write_config', $lang->get('install_stg_writeconfig_body'));
269
+ − 2393
+ − 2394
// Mainstream installation complete - Enano should be usable now
+ − 2395
// The stage of starting the API is special because it has to be called out of function context.
+ − 2396
// To alleviate this, we have two functions, one that returns success and one that returns failure
+ − 2397
// If the Enano API load is successful, the success function is called to report the action to the user
+ − 2398
// If unsuccessful, the failure report is sent
+ − 2399
+ − 2400
$template_bak = $template;
+ − 2401
+ − 2402
$_GET['title'] = 'Main_Page';
+ − 2403
require('includes/common.php');
+ − 2404
+ − 2405
if ( is_object($db) && is_object($session) )
+ − 2406
{
271
+ − 2407
run_installer_stage('startapi', $lang->get('install_stg_startapi_title'), 'stg_start_api_success', '...', false);
269
+ − 2408
}
+ − 2409
else
+ − 2410
{
271
+ − 2411
run_installer_stage('startapi', $lang->get('install_stg_startapi_title'), 'stg_start_api_failure', $lang->get('install_stg_startapi_body'), false);
269
+ − 2412
}
+ − 2413
+ − 2414
// We need to be logged in (with admin rights) before logs can be flushed
+ − 2415
$admin_password = stg_decrypt_admin_pass(true);
+ − 2416
$session->login_without_crypto($_POST['admin_user'], $admin_password, false);
+ − 2417
+ − 2418
// Now that login cookies are set, initialize the session manager and ACLs
+ − 2419
$session->start();
+ − 2420
$paths->init();
+ − 2421
271
+ − 2422
run_installer_stage('importlang', $lang->get('install_stg_importlang_title'), 'stg_import_language', $lang->get('install_stg_importlang_body'));
+ − 2423
run_installer_stage('initlogs', $lang->get('install_stg_initlogs_title'), 'stg_init_logs', $lang->get('install_stg_initlogs_body'));
269
+ − 2424
332
000773138650
[Minor] fix non-localized string in installer (install_stg_buildindex_*); fix wrong string_id in pophelp:url_schemes
Dan
diff
changeset
+ − 2425
run_installer_stage('buildindex', $lang->get('install_stg_buildindex_title'), 'stg_build_index', $lang->get('install_stg_buildindex_body'));
272
e0ec986c0af3
Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
diff
changeset
+ − 2426
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2427
/*
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2428
* HACKERS:
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2429
* If you're making a custom distribution of Enano, put all your custom plugin-related code here.
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2430
* You have access to the full Enano API as well as being logged in with complete admin rights.
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2431
* Don't do anything horrendously fancy here, unless you add a new stage (or more than one) and
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2432
* have the progress printed out properly.
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2433
*/
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2434
269
+ − 2435
} // check for stage == renameconfig
256
+ − 2436
else
+ − 2437
{
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2438
// If we did skip the main installer routine, set $template_bak to make the reversal later work properly
269
+ − 2439
$template_bak = $template;
256
+ − 2440
}
268
58477ab3937f
Hopefully managed to put enough hacks in there to make renaming the config file the last step, so if it fails, it can be done manually
Dan
diff
changeset
+ − 2441
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2442
// Final step is to rename the config file
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2443
// In early revisions of 1.0.2, this step was performed prior to the initialization of the Enano API. It was decided to move
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2444
// this stage to the end because it will fail more often than any other stage, thus making alternate routes imperative. If this
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 2445
// stage fails, then no big deal, we'll just have the user rename the files manually and then let them see the pretty success message.
252
+ − 2446
run_installer_stage('renameconfig', $lang->get('install_stg_rename_title'), 'stg_rename_config', $lang->get('install_stg_rename_body'));
268
58477ab3937f
Hopefully managed to put enough hacks in there to make renaming the config file the last step, so if it fails, it can be done manually
Dan
diff
changeset
+ − 2447
256
+ − 2448
close_install_table();
+ − 2449
+ − 2450
unset($template);
+ − 2451
$template =& $template_bak;
+ − 2452
252
+ − 2453
echo '<h3>' . $lang->get('install_msg_complete_title') . '</h3>';
+ − 2454
echo '<p>' . $lang->get('install_msg_complete_body', array('finish_link' => 'install.php?mode=finish')) . '</p>';
256
+ − 2455
+ − 2456
// echo '<script type="text/javascript">window.location="'.scriptPath.'/install.php?mode=finish";</script>';
+ − 2457
+ − 2458
break;
+ − 2459
case "finish":
252
+ − 2460
echo '<h3>' . $lang->get('finish_msg_congratulations') . '</h3>
+ − 2461
' . $lang->get('finish_body') . '
+ − 2462
<p>' . $lang->get('finish_link_mainpage', array('mainpage_link' => 'index.php')) . '</p>';
256
+ − 2463
break;
276
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 2464
// this stage is never shown during the installation, but is provided for legal purposes
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 2465
case "showlicense":
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 2466
show_license(true);
acfdccf7a2bf
Re-sync Oxygen and Mint and Oxygen simple with Oxygen main; a couple improvements to the redirect-on-no-config code
Dan
diff
changeset
+ − 2467
break;
256
+ − 2468
}
+ − 2469
$template->footer();
+ − 2470
+ − 2471
?>