0byt3m1n1
Path:
/
data
/
applications
/
aps
/
mantis
/
1.2.7-0
/
standard
/
scripts
/
[
Home
]
File: mantis_upgrade_script.patch
--- mantisbt-1.2.3/admin/install.php.orig 2010-09-30 18:07:27.000000000 +0400 +++ mantisbt-1.2.3/admin/install.php 2010-09-30 19:05:27.000000000 +0400 @@ -40,32 +40,31 @@ # print test result function print_test_result( $p_result, $p_hard_fail = true, $p_message = '' ) { global $g_failed; - echo '<td '; + echo "\n"; if( BAD == $p_result ) { if( $p_hard_fail ) { $g_failed = true; - echo 'bgcolor="red">BAD'; + echo 'Error: '; } else { - echo 'bgcolor="pink">POSSIBLE PROBLEM'; + echo 'Warning: '; } if( '' != $p_message ) { - echo '<br />' . $p_message; + echo $p_message."\n"; } } if( GOOD == $p_result ) { - echo 'bgcolor="green">GOOD'; + //echo 'bgcolor="green">GOOD'."\n"; } - echo '</td>'; } # ------- # print test header and result function print_test( $p_test_description, $p_result, $p_hard_fail = true, $p_message = '' ) { - echo "\n<tr><td bgcolor=\"#ffffff\">$p_test_description</td>"; + echo "\n$p_test_description\n"; print_test_result( $p_result, $p_hard_fail, $p_message ); - echo "</tr>\n"; + echo "\n"; } # -------- @@ -84,966 +83,232 @@ # 5 = write the config file # 6 = post install checks # 7 = done, link to login or db updater -$t_install_state = gpc_get_int( 'install', 0 ); -?> -<html> -<head> -<title> MantisBT Administration - Installation </title> -<link rel="stylesheet" type="text/css" href="admin.css" /> -</head> -<body> -<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#ffffff"> - <tr class="top-bar"> - <td class="links"> - [ <a href="index.php">Back to Administration</a> ] - </td> - <td class="title"> - <?php -switch( $t_install_state ) { - case 6: - echo "Post Installation Checks"; - break; - case 5: - echo "Install Configuration File"; - break; - case 4: - echo "Additional Configuration Information"; - break; - case 3: - echo "Install Database"; - break; - case 2: - echo "Check and Install Database"; - break; - case 1: - echo "Database Parameters"; - break; - case 0: - default: - echo "Pre-Installation Check"; - break; -} -?> - </td> - </tr> -</table> -<br /><br /> - -<form method='POST'> -<?php -if( 0 == $t_install_state ) { - ?> -<table width="100%" bgcolor="#222222" border="0" cellpadding="10" cellspacing="1"> -<tr> - <td bgcolor="#e8e8e8" colspan="2"> - <span class="title">Checking Installation...</span> - </td> -</tr> -<?php -} +#$t_install_state = gpc_get_int( 'install', 0 ); $t_config_filename = $g_absolute_path . 'config_inc.php'; $t_config_exists = file_exists( $t_config_filename ); -$f_hostname = null; -$f_db_type = null; -$f_database_name = null; -$f_db_username = null; -$f_db_password = null; -if( $t_config_exists ) { - if( 0 == $t_install_state ) { - print_test( "Config File Exists - Upgrade", true ); - } - # config already exists - probably an upgrade - - $f_dsn = config_get( 'dsn', '' ); - $f_hostname = config_get( 'hostname', '' ); - $f_db_type = config_get( 'db_type', '' ); - $f_database_name = config_get( 'database_name', '' ); - $f_db_username = config_get( 'db_username', '' ); - $f_db_password = config_get( 'db_password', '' ); - - if( 0 == $t_install_state ) { - print_test( 'Setting Database Type', '' !== $f_db_type, true, 'database type is blank?' ); - print_test( 'Checking Database connection settings exist', ( $f_dsn !== '' || ( $f_database_name !== '' && $f_db_username !== '' && $f_hostname !== '' ) ), true, 'database connection settings do not exist?' ); - print_test( 'Checking PHP support for database type', db_check_database_support( $f_db_type ), true, 'database is not supported by PHP. Check that it has been compiled into your server.' ); - } - - $g_db = ADONewConnection( $f_db_type ); - $t_result = @$g_db->Connect( $f_hostname, $f_db_username, $f_db_password, $f_database_name ); - if( $g_db->IsConnected() ) { - $g_db_connected = true; - } - $t_cur_version = config_get( 'database_version', -1 ); - if( $t_cur_version > 1 ) { - $g_database_upgrade = true; - $f_db_exists = true; - } else { - if( 0 == $t_install_state ) { - print_test( 'Config File Exists but Database does not', false, false, 'Bad config_inc.php?' ); - } - } +$g_db = ADONewConnection( $f_db_type ); +$t_result = @$g_db->Connect( $f_hostname, $f_db_username, $f_db_password, $f_database_name ); +if( $g_db->IsConnected() ) { + $g_db_connected = true; +} +$t_cur_version = config_get( 'database_version', -1 ); +if( $t_cur_version > 1 ) { + $g_database_upgrade = true; + $f_db_exists = true; } else { - # read control variables with defaults - $f_hostname = gpc_get( 'hostname', config_get( 'hostname', 'localhost' ) ); - $f_db_type = gpc_get( 'db_type', config_get( 'db_type', '' ) ); - $f_database_name = gpc_get( 'database_name', config_get( 'database_name', 'bugtrack' ) ); - $f_db_username = gpc_get( 'db_username', config_get( 'db_username', '' ) ); - $f_db_password = gpc_get( 'db_password', config_get( 'db_password', '' ) ); - if( CONFIGURED_PASSWORD == $f_db_password ) { - $f_db_password = config_get( 'db_password' ); - } -} -$f_admin_username = gpc_get( 'admin_username', '' ); -$f_admin_password = gpc_get( 'admin_password', '' ); -$f_log_queries = gpc_get_bool( 'log_queries', false ); -$f_db_exists = gpc_get_bool( 'db_exists', false ); - -$f_db_schema = ''; -if( $f_db_type == 'db2' ) { - - # If schema name is supplied, then separate it from database name. - if( strpos( $f_database_name, '/' ) != false ) { - $f_db2AS400 = $f_database_name; - list( $f_database_name, $f_db_schema ) = explode( '/', $f_db2AS400, 2 ); - } + print_test( 'Config File Exists but Database does not', false, false, 'Bad config_inc.php?' ); } -if( 0 == $t_install_state ) { - ?> +# got database information, check and install +//<!-- Setting config variables --> +print_test( 'Setting Database Hostname', '' !== $f_hostname, true, 'host name is blank' ); -<!-- Check PHP Version --> -<?php print_test( ' Checking PHP version (your version is ' . phpversion() . ')', check_php_version( phpversion() ), true, 'Upgrade to a more recent version of PHP' );?> +//<!-- Setting config variables --> +print_test( 'Setting Database Type', '' !== $f_db_type, true, 'database type is blank?' ); -<!-- Check Safe Mode --> -<?php -print_test( 'Checking if safe mode is enabled for install script', - ! ini_get ( 'SAFE_MODE' ), - true, - 'Disable safe_mode in php.ini before proceeding' ) ?> - -</table> -<?php - if( false == $g_failed ) { - $t_install_state++; - } -} # end install_state == 0 +//<!-- Checking DB support--> +print_test( 'Checking PHP support for database type', db_check_database_support( $f_db_type ), true, 'database is not supported by PHP. Check that it has been compiled into your server.' ); -# got database information, check and install -if( 2 == $t_install_state ) { - ?> +print_test( 'Setting Database Username', '' !== $f_db_username, true, 'database username is blank' ); +print_test( 'Setting Database Password', '' !== $f_db_password, false, 'database password is blank' ); +print_test( 'Setting Database Name', '' !== $f_database_name, true, 'database name is blank' ); -<table width="100%" border="0" cellpadding="10" cellspacing="1"> -<!-- Setting config variables --> -<?php print_test( 'Setting Database Hostname', '' !== $f_hostname, true, 'host name is blank' )?> - -<!-- Setting config variables --> -<?php print_test( 'Setting Database Type', '' !== $f_db_type, true, 'database type is blank?' )?> - -<!-- Checking DB support--> -<?php print_test( 'Checking PHP support for database type', db_check_database_support( $f_db_type ), true, 'database is not supported by PHP. Check that it has been compiled into your server.' )?> - -<?php print_test( 'Setting Database Username', '' !== $f_db_username, true, 'database username is blank' )?> -<?php print_test( 'Setting Database Password', '' !== $f_db_password, false, 'database password is blank' )?> -<?php print_test( 'Setting Database Name', '' !== $f_database_name, true, 'database name is blank' )?> -<?php - if( $f_db_type == 'db2' ) { - print_test( 'Setting Database Schema', !is_blank( $f_db_schema ), true, 'must have a schema name for AS400 in the form of DBNAME/SCHEMA' ); - } - ?> -<tr> - <td bgcolor="#ffffff"> - Setting Admin Username - </td> - <?php - if( '' !== $f_admin_username ) { - print_test_result( GOOD ); - } else { - print_test_result( BAD, false, 'admin user name is blank, using database user instead' ); - $f_admin_username = $f_db_username; - } - ?> -</tr> -<tr> - <td bgcolor="#ffffff"> - Setting Admin Password - </td> - <?php - if( '' !== $f_admin_password ) { - print_test_result( GOOD ); - } else { - if( '' != $f_db_password ) { - print_test_result( BAD, false, 'admin user password is blank, using database user password instead' ); - $f_admin_password = $f_db_password; - } else { - print_test_result( GOOD ); - } - } - ?> -</tr> +//<!-- connect to db --> +$t_db_open = false; -<!-- connect to db --> -<tr> - <td bgcolor="#ffffff"> - Attempting to connect to database as admin - </td> - <?php - $t_db_open = false; - $g_db = ADONewConnection( $f_db_type ); - $t_result = @$g_db->Connect( $f_hostname, $f_admin_username, $f_admin_password ); - - if( $t_result ) { +$g_db = ADONewConnection( $f_db_type ); +$t_result = @$g_db->Connect( $f_hostname, $f_admin_username, $f_admin_password ); - # check if db exists for the admin - $t_result = @$g_db->Connect( $f_hostname, $f_admin_username, $f_admin_password, $f_database_name ); - if( $t_result ) { - $t_db_open = true; - $f_db_exists = true; - } - if( $f_db_type == 'db2' ) { - $result = &$g_db->execute( 'set schema ' . $f_db_schema ); - if( $result === false ) { - print_test_result( BAD, true, 'set schema failed: ' . $g_db->errorMsg() ); - } - } else { - print_test_result( GOOD ); - } - } else { - print_test_result( BAD, true, 'Does administrative user have access to the database? ( ' . db_error_msg() . ' )' ); - } - ?> -</tr> -<?php - if( $f_db_exists ) { - ?> -<tr> - <td bgcolor="#ffffff"> - Attempting to connect to database as user - </td> - <?php - $g_db = ADONewConnection( $f_db_type ); - $t_result = @$g_db->Connect( $f_hostname, $f_db_username, $f_db_password, $f_database_name ); - - if( $t_result == true ) { - $t_db_open = true; - if( $f_db_type == 'db2' ) { - $result = &$g_db->execute( 'set schema ' . $f_db_schema ); - if( $result === false ) { - print_test_result( BAD, true, 'set schema failed: ' . $g_db->errorMsg() ); - } - } else { - print_test_result( GOOD ); - } - } else { - print_test_result( BAD, false, 'Database user doesn\'t have access to the database ( ' . db_error_msg() . ' )' ); - } - ?> -</tr> +if( $t_result ) { -<?php + # check if db exists for the admin + $t_result = @$g_db->Connect( $f_hostname, $f_admin_username, $f_admin_password, $f_database_name ); + if( $t_result ) { + $t_db_open = true; + $f_db_exists = true; } - if( $t_db_open ) { - ?> -<!-- display database version --> -<tr> - <td bgcolor="#ffffff"> - Checking Database Server Version - <?php - # due to a bug in ADODB, this call prompts warnings, hence the @ - # the check only works on mysql if the database is open - $t_version_info = @$g_db->ServerInfo(); - echo '<br /> Running ' . $f_db_type . ' version ' . $t_version_info['description']; - ?> - </td> - <?php - $t_warning = ''; - $t_error = ''; - switch( $f_db_type ) { - case 'mysql': - case 'mysqli': - if( version_compare( $t_version_info['version'], '4.1.0', '<' ) ) { - $t_error = 'MySQL 4.1.0 or later is required for installation.'; - } - break; - case 'pgsql': - case 'mssql': - case 'db2': - default: - break; - } +} else { + print_test_result( BAD, true, 'Does administrative user have access to the database? ( ' . db_error_msg() . ' )' ); +} +if( $f_db_exists ) { + $g_db = ADONewConnection( $f_db_type ); + $t_result = @$g_db->Connect( $f_hostname, $f_db_username, $f_db_password, $f_database_name ); - print_test_result(( '' == $t_error ) && ( '' == $t_warning ), ( '' != $t_error ), $t_error . ' ' . $t_warning ); - ?> -</tr> -<?php - } - if( false == $g_failed ) { - $t_install_state++; + if( $t_result == true ) { + $t_db_open = true; } else { - $t_install_state--; # a check failed, redisplay the questions + print_test_result( BAD, false, 'Database user doesn\'t have access to the database ( ' . db_error_msg() . ' )' ); } -} # end 2 == $t_install_state - -# system checks have passed, get the database information -if( 1 == $t_install_state ) { - ?> - -<table width="100%" border="0" cellpadding="10" cellspacing="1"> -<tr> - <td bgcolor="#e8e8e8" colspan="2"> - <span class="title"><?php echo $g_database_upgrade ? 'Upgrade Options' : 'Installation Options'?></span> - </td> -</tr> - -<?php if( !$g_database_upgrade ) {?> -<tr> - <td> - Type of Database - </td> - <td> - <select name="db_type"> - <?php - if( $f_db_type == 'mysql' ) { - echo '<option value="mysql" selected="selected">MySql (default)</option>'; - } else { - echo '<option value="mysql">MySql (default)</option>'; - } +} +if( $t_db_open ) { + $t_version_info = @$g_db->ServerInfo(); + echo "\n Running " . $f_db_type . ' version ' . $t_version_info['description']."\n"; + $t_warning = ''; + $t_error = ''; + switch( $f_db_type ) { + case 'mysql': + case 'mysqli': + if( version_compare( $t_version_info['version'], '4.1.0', '<' ) ) { + $t_error = 'MySQL 4.1.0 or later is required for installation.'; + } + break; + case 'pgsql': + case 'mssql': + case 'db2': + default: + break; + } + print_test_result(( '' == $t_error ) && ( '' == $t_warning ), ( '' != $t_error ), $t_error . ' ' . $t_warning ); +} +if( $g_failed ) { + exit(1); +} - if( $f_db_type == 'mysqli' ) { - echo '<option value="mysqli" selected="selected">MySqli</option>'; - } else { - echo '<option value="mysqli">MySqli</option>'; - } +# all checks have passed, install the database +$t_result = @$g_db->Connect( $f_hostname, $f_admin_username, $f_admin_password, $f_database_name ); - if( $f_db_type == 'mssql' ) { - echo '<option value="mssql" selected="selected">Microsoft SQL Server (experimental)</option>'; - } else { - echo '<option value="mssql">Microsoft SQL Server (experimental)</option>'; - } +$t_db_open = false; - if( $f_db_type == 'pgsql' ) { - echo '<option value="pgsql" selected="selected">PGSQL (experimental)</option>'; - } else { - echo '<option value="pgsql">PGSQL (experimental)</option>'; - } +if( $t_result == true ) { + print_test_result( GOOD ); + $t_db_open = true; +} else { + // create db + $g_db = ADONewConnection( $f_db_type ); + $t_result = $g_db->Connect( $f_hostname, $f_admin_username, $f_admin_password ); - if( $f_db_type == 'oci8' ) { - echo '<option value="oci8" selected="selected">Oracle - oci8 (Experimental)</option>'; - } else { - echo '<option value="oci8">Oracle - oci8 (Experimental)</option>'; - } + $dict = NewDataDictionary( $g_db ); - if( $f_db_type == 'db2' ) { - echo '<option value="db2" selected="selected">db2/400 (experimental)</option>'; - } else { - echo '<option value="db2">db2/400 (experimental)</option>'; + $sqlarray = $dict->CreateDatabase( $f_database_name, Array( 'mysql' => 'DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci' ) ); + $ret = $dict->ExecuteSQLArray( $sqlarray ); + if( $ret == 2 ) { + print_test_result( GOOD ); + $t_db_open = true; + } else { + $t_error = db_error_msg(); + if( strstr( $t_error, 'atabase exists' ) ) { + print_test_result( BAD, false, 'Database already exists? ( ' . db_error_msg() . ' )' ); + } else { + print_test_result( BAD, true, 'Does administrative user have access to create the database? ( ' . db_error_msg() . ' )' ); + # db creation failed + exit(1); } - ?> - </select> - </td> -</tr> -<?php -} - -if( !$g_database_upgrade ) {?> -<tr> - <td> - Hostname (for Database Server) - </td> - <td> - <input name="hostname" type="textbox" value="<?php echo $f_hostname?>"></input> - </td> -</tr> -<?php -} - -if( !$g_database_upgrade ) {?> -<tr> - <td> - Username (for Database) - </td> - <td> - <input name="db_username" type="textbox" value="<?php echo $f_db_username?>"></input> - </td> -</tr> -<?php -} - -if( !$g_database_upgrade ) {?> -<tr> - <td> - Password (for Database) - </td> - <td> - <input name="db_password" type="password" value="<?php echo( !is_blank( $f_db_password ) ? CONFIGURED_PASSWORD : "" )?>"></input> - </td> -</tr> -<?php -} - -if( !$g_database_upgrade ) {?> -<tr> - <td> - Database name (for Database) - </td> - <td> - <input name="database_name" type="textbox" value="<?php echo $f_database_name?>"></input> - </td> -</tr> -<?php -}?> - -<tr> - <td> - Admin Username (to <?php echo( !$g_database_upgrade ) ? 'create Database' : 'update Database'?> if required) - </td> - <td> - <input name="admin_username" type="textbox" value="<?php echo $f_admin_username?>"></input> - </td> -</tr> - -<tr> - <td> - Admin Password (to <?php echo( !$g_database_upgrade ) ? 'create Database' : 'update Database'?> if required) - </td> - <td> - <input name="admin_password" type="password" value="<?php echo $f_admin_password?>"></input> - </td> -</tr> - -<tr> - <td> - Print SQL Queries instead of Writing to the Database - </td> - <td> - <input name="log_queries" type="checkbox" value="1" <?php echo( $f_log_queries ? 'checked="checked"' : '' )?>></input> - </td> -</tr> - -<tr> - <td> - Attempt Installation - </td> - <td> - <input name="go" type="submit" value="Install/Upgrade Database"></input> - </td> -</tr> -<input name="install" type="hidden" value="2"></input> - -</table> -<?php -} # end install_state == 1 + } +} +if( $t_db_open ) { + # due to a bug in ADODB, this call prompts warnings, hence the @ + $t_version_info = @$g_db->ServerInfo(); + echo 'Running ' . $f_db_type . ' version ' . $t_version_info['description']."\n"; + $t_warning = ''; + $t_error = ''; + switch( $f_db_type ) { + case 'mysql': + case 'mysqli': + if( version_compare( $t_version_info['version'], '4.1.0', '<' ) ) { + $t_error = 'MySQL 4.1.0 or later is required for installation.'; + } + break; + case 'pgsql': + case 'mssql': + case 'db2': + default: + break; + } +} -# all checks have passed, install the database -if( 3 == $t_install_state ) { - ?> -<table width="100%" border="0" cellpadding="10" cellspacing="1"> -<tr> - <td bgcolor="#e8e8e8" colspan="2"> - <span class="title">Installing Database</span> - </td> -</tr> -<?php if( !$f_log_queries ) {?> -<tr> - <td bgcolor="#ffffff"> - Create database if it does not exist - </td> - <?php - $t_result = @$g_db->Connect( $f_hostname, $f_admin_username, $f_admin_password, $f_database_name ); - - if( $f_db_type == 'db2' ) { - $rs = $g_db->Execute( "select * from SYSIBM.SCHEMATA WHERE SCHEMA_NAME = '" . $f_db_schema . "' AND SCHEMA_OWNER = '" . $f_db_username . "'" ); - if( $rs === false ) { - echo "<br />false"; - } +print_test_result(( '' == $t_error ) && ( '' == $t_warning ), ( '' != $t_error ), $t_error . ' ' . $t_warning ); +$g_db->Close(); - if( $rs->EOF ) { - $t_result = false; - echo $g_db->errorMsg(); - } else { - $t_result = &$g_db->execute( 'set schema ' . $f_db_schema ); - } - } - - $t_db_open = false; +if ( $g_failed ) { + exit(1); +} +# install the tables +$g_db_connected = false; - if( $t_result == true ) { - print_test_result( GOOD ); - $t_db_open = true; - } else { - // create db - $g_db = ADONewConnection( $f_db_type ); - $t_result = $g_db->Connect( $f_hostname, $f_admin_username, $f_admin_password ); - - $dict = NewDataDictionary( $g_db ); - - if( $f_db_type == 'db2' ) { - $rs = &$g_db->Execute( "CREATE SCHEMA " . $f_db_schema ); - - if( !$rs ) { - $t_result = false; - print_test_result( BAD, true, 'Does administrative user have access to create the database? ( ' . db_error_msg() . ' )' ); - $t_install_state--; # db creation failed, allow user to re-enter user/password info - } else { - print_test_result( GOOD ); - $t_db_open = true; - } +# fake out database access routines used by config_get +$GLOBALS['g_db_type'] = $f_db_type; + +# database_api references this +require_once( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'schema.php' ); +$g_db = ADONewConnection( $f_db_type ); +$t_result = @$g_db->Connect( $f_hostname, $f_admin_username, $f_admin_password, $f_database_name ); +$g_db_connected = true; + +$t_last_update = config_get( 'database_version', -1, ALL_USERS, ALL_PROJECTS ); +$lastid = count( $upgrade ) - 1; +$i = $t_last_update + 1; + +# Make sure we do the upgrades using UTF-8 +$g_db->execute( 'SET NAMES UTF8' ); + +while(( $i <= $lastid ) && !$g_failed ) { + + $dict = NewDataDictionary( $g_db ); + $t_sql = true; + $t_target = $upgrade[$i][1][0]; + if( $upgrade[$i][0] == 'InsertData' ) { + $sqlarray = call_user_func_array( $upgrade[$i][0], $upgrade[$i][1] ); + } + else if( $upgrade[$i][0] == 'UpdateSQL' ) { + $sqlarray = array( + $upgrade[$i][1], + ); + $t_target = $upgrade[$i][1]; + } else if( $upgrade[$i][0] == 'UpdateFunction' ) { + $sqlarray = array( + $upgrade[$i][1], + ); + if( isset( $upgrade[$i][2] ) ) { + $sqlarray[] = $upgrade[$i][2]; + } + $t_sql = false; + $t_target = $upgrade[$i][1]; + } else { + /* 0: function to call, 1: function params, 2: function to evaluate before calling upgrade, if false, skip upgrade. */ + if( isset( $upgrade[$i][2] ) ) { + if( call_user_func_array( $upgrade[$i][2][0], $upgrade[$i][2][1] ) ) { + $sqlarray = call_user_func_array( Array( $dict, $upgrade[$i][0] ), $upgrade[$i][1] ); } else { - $sqlarray = $dict->CreateDatabase( $f_database_name, Array( 'mysql' => 'DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci' ) ); - $ret = $dict->ExecuteSQLArray( $sqlarray ); - if( $ret == 2 ) { - print_test_result( GOOD ); - $t_db_open = true; - } else { - $t_error = db_error_msg(); - if( strstr( $t_error, 'atabase exists' ) ) { - print_test_result( BAD, false, 'Database already exists? ( ' . db_error_msg() . ' )' ); - } else { - print_test_result( BAD, true, 'Does administrative user have access to create the database? ( ' . db_error_msg() . ' )' ); - $t_install_state--; # db creation failed, allow user to re-enter user/password info - } - } + $sqlarray = array(); } - } - ?> -</tr> -<?php - if( $t_db_open ) { - ?> -<!-- display database version --> -<tr> - <td bgcolor="#ffffff"> - Checking Database Server Version - <?php - # due to a bug in ADODB, this call prompts warnings, hence the @ - $t_version_info = @$g_db->ServerInfo(); - echo '<br /> Running ' . $f_db_type . ' version ' . $t_version_info['description']; - ?> - </td> - <?php - $t_warning = ''; - $t_error = ''; - switch( $f_db_type ) { - case 'mysql': - case 'mysqli': - if( version_compare( $t_version_info['version'], '4.1.0', '<' ) ) { - $t_error = 'MySQL 4.1.0 or later is required for installation.'; - } - break; - case 'pgsql': - case 'mssql': - case 'db2': - default: - break; - } - - print_test_result(( '' == $t_error ) && ( '' == $t_warning ), ( '' != $t_error ), $t_error . ' ' . $t_warning ); - ?> -</tr> -<?php - } - $g_db->Close(); - ?> -<tr> - <td bgcolor="#ffffff"> - Attempting to connect to database as user - </td> - <?php - $g_db = ADONewConnection( $f_db_type ); - $t_result = @$g_db->Connect( $f_hostname, $f_db_username, $f_db_password, $f_database_name ); - - if( $f_db_type == 'db2' ) { - $result = &$g_db->execute( 'set schema ' . $f_db_schema ); - if( $result === false ) { - echo $g_db->errorMsg(); - } - } - - if( $t_result == true ) { - print_test_result( GOOD ); } else { - print_test_result( BAD, false, 'Database user doesn\'t have access to the database ( ' . db_error_msg() . ' )' ); + $sqlarray = call_user_func_array( Array( $dict, $upgrade[$i][0] ), $upgrade[$i][1] ); } - $g_db->Close(); - ?> -</tr> -<?php } - - # install the tables - if( false == $g_failed ) { - $g_db_connected = false; - - # fake out database access routines used by config_get - $GLOBALS['g_db_type'] = $f_db_type; - - # database_api references this - require_once( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'schema.php' ); - $g_db = ADONewConnection( $f_db_type ); - $t_result = @$g_db->Connect( $f_hostname, $f_admin_username, $f_admin_password, $f_database_name ); - if( !$f_log_queries ) { - $g_db_connected = true; - - # fake out database access routines used by config_get - } - $t_last_update = config_get( 'database_version', -1, ALL_USERS, ALL_PROJECTS ); - $lastid = count( $upgrade ) - 1; - $i = $t_last_update + 1; - if( $f_log_queries ) { - echo '<tr><td bgcolor="#ffffff" col_span="2"> Database Creation Suppressed, SQL Queries follow <pre>'; - } - - # Make sure we do the upgrades using UTF-8 if needed - if ( $f_db_type === 'mysql' || $f_db_type === 'mysqli' ) { - $g_db->execute( 'SET NAMES UTF8' ); - } - - if( $f_db_type == 'db2' ) { - $result = &$g_db->execute( 'set schema ' . $f_db_schema ); - if( $result === false ) { - echo $g_db->errorMsg(); + if( $f_log_queries ) { + if( $t_sql ) { + foreach( $sqlarray as $sql ) { + echo htmlentities( $sql ) . ";\r\n\r\n"; } } - - while(( $i <= $lastid ) && !$g_failed ) { - if( !$f_log_queries ) { - echo '<tr><td bgcolor="#ffffff">'; - } - - $dict = NewDataDictionary( $g_db ); - $t_sql = true; - $t_target = $upgrade[$i][1][0]; - if( $upgrade[$i][0] == 'InsertData' ) { - $sqlarray = call_user_func_array( $upgrade[$i][0], $upgrade[$i][1] ); - } - else if( $upgrade[$i][0] == 'UpdateSQL' ) { - $sqlarray = array( - $upgrade[$i][1], - ); - $t_target = $upgrade[$i][1]; - } else if( $upgrade[$i][0] == 'UpdateFunction' ) { - $sqlarray = array( - $upgrade[$i][1], - ); - if( isset( $upgrade[$i][2] ) ) { - $sqlarray[] = $upgrade[$i][2]; - } - $t_sql = false; - $t_target = $upgrade[$i][1]; - } else { - /* 0: function to call, 1: function params, 2: function to evaluate before calling upgrade, if false, skip upgrade. */ - if( isset( $upgrade[$i][2] ) ) { - if( call_user_func_array( $upgrade[$i][2][0], $upgrade[$i][2][1] ) ) { - $sqlarray = call_user_func_array( Array( $dict, $upgrade[$i][0] ), $upgrade[$i][1] ); - } else { - $sqlarray = array(); - } - } else { - $sqlarray = call_user_func_array( Array( $dict, $upgrade[$i][0] ), $upgrade[$i][1] ); - } - } - if( $f_log_queries ) { - if( $t_sql ) { - foreach( $sqlarray as $sql ) { - echo htmlentities( $sql ) . ";\r\n\r\n"; - } - } + } else { + echo 'Schema ' . $upgrade[$i][0] . ' ( ' . $t_target . ' )'."\n"; + if( $t_sql ) { + $ret = $dict->ExecuteSQLArray( $sqlarray ); + } else { + if( isset( $sqlarray[1] ) ) { + $ret = call_user_func( 'install_' . $sqlarray[0], $sqlarray[1] ); } else { - echo 'Schema ' . $upgrade[$i][0] . ' ( ' . $t_target . ' )</td>'; - if( $t_sql ) { - $ret = $dict->ExecuteSQLArray( $sqlarray ); - } else { - if( isset( $sqlarray[1] ) ) { - $ret = call_user_func( 'install_' . $sqlarray[0], $sqlarray[1] ); - } else { - $ret = call_user_func( 'install_' . $sqlarray[0] ); - } - } - if( $ret == 2 ) { - print_test_result( GOOD ); - config_set( 'database_version', $i ); - } else { - $all_sql = ''; - foreach ( $sqlarray as $single_sql ) - $all_sql .= $single_sql . '<br>'; - print_test_result( BAD, true, $all_sql . $g_db->ErrorMsg() ); - } - echo '</tr>'; + $ret = call_user_func( 'install_' . $sqlarray[0] ); } - $i++; } - if( $f_log_queries ) { - # add a query to set the database version - echo 'INSERT INTO mantis_config_table ( value, type, access_reqd, config_id, project_id, user_id ) VALUES (\'' . $lastid . '\', 1, 90, \'database_version\', 0, 0 );' . "\r\n"; - echo '</pre></br /><p style="color:red">Your database has not been created yet. Please create the database, then install the tables and data using the information above before proceeding.</td></tr>'; - } - } - if( false == $g_failed ) { - $t_install_state++; - } else { - $t_install_state--; - } - - ?> -</table> -<?php -} # end install_state == 3 - -# database installed, get any additional information -if( 4 == $t_install_state ) { - - /** @todo to be written */ - // must post data gathered to preserve it - ?> - <input name="hostname" type="hidden" value="<?php echo $f_hostname?>"></input> - <input name="db_type" type="hidden" value="<?php echo $f_db_type?>"></input> - <input name="database_name" type="hidden" value="<?php echo $f_database_name?>"></input> - <input name="db_username" type="hidden" value="<?php echo $f_db_username?>"></input> - <input name="db_password" type="hidden" value="<?php echo $f_db_password?>"></input> - <input name="admin_username" type="hidden" value="<?php echo $f_admin_username?>"></input> - <input name="admin_password" type="hidden" value="<?php echo $f_admin_password?>"></input> - <input name="log_queries" type="hidden" value="<?php echo( $f_log_queries ? 1 : 0 )?>"></input> - <input name="db_exists" type="hidden" value="<?php echo( $f_db_exists ? 1 : 0 )?>"></input> -<?php - # must post <input name="install" type="hidden" value="5"></input> - # rather than the following line - $t_install_state++; -} # end install_state == 4 - -# all checks have passed, install the database -if( 5 == $t_install_state ) { - $t_config_filename = $g_absolute_path . 'config_inc.php'; - $t_config_exists = file_exists( $t_config_filename ); - ?> -<table width="100%" border="0" cellpadding="10" cellspacing="1"> -<tr> - <td bgcolor="#e8e8e8" colspan="2"> - <span class="title">Write Configuration File(s)</span> - </td> -</tr> - -<tr> - <td bgcolor="#ffffff"> - <?php - if( !$t_config_exists ) { - echo 'Creating Configuration File (config_inc.php)<br />'; - echo '<font color="red">(if this file is not created, create it manually with the contents below)</font>'; - } else { - echo 'Updating Configuration File (config_inc.php)<br />'; - } - ?> - </td> - <?php - $t_config = '<?php' . "\r\n"; - $t_config .= "\t\$g_hostname = '$f_hostname';\r\n"; - $t_config .= "\t\$g_db_type = '$f_db_type';\r\n"; - $t_config .= "\t\$g_database_name = '$f_database_name';\r\n"; - $t_config .= "\t\$g_db_username = '$f_db_username';\r\n"; - $t_config .= "\t\$g_db_password = '$f_db_password';\r\n"; - - if( $f_db_type == 'db2' ) { - $t_config .= "\t\$g_db_schema = '$f_db_schema';\r\n"; - } - - $t_config .= '?>' . "\r\n"; - $t_write_failed = true; - - if( !$t_config_exists ) { - if( $fd = @fopen( $t_config_filename, 'w' ) ) { - fwrite( $fd, $t_config ); - fclose( $fd ); - } - - if( file_exists( $t_config_filename ) ) { + if( $ret == 2 ) { print_test_result( GOOD ); - $t_write_failed = false; + config_set( 'database_version', $i ); } else { - print_test_result( BAD, false, 'cannot write ' . $t_config_filename ); + $all_sql = ''; + foreach ( $sqlarray as $single_sql ) + $all_sql .= $single_sql . "\n"; + print_test_result( BAD, true, $all_sql . $g_db->ErrorMsg() ); } - } else { - # already exists, see if the information is the same - if ( ( $f_hostname != config_get( 'hostname', '' ) ) || - ( $f_db_type != config_get( 'db_type', '' ) ) || - ( $f_database_name != config_get( 'database_name', '') ) || - ( $f_db_schema != config_get( 'db_schema', '') ) || - ( $f_db_username != config_get( 'db_username', '' ) ) || - ( $f_db_password != config_get( 'db_password', '' ) ) ) { - print_test_result( BAD, false, 'file ' . $g_absolute_path . 'config_inc.php' . ' already exists and has different settings' ); - } else { - print_test_result( GOOD, false ); - $t_write_failed = false; - } - } - ?> -</tr> -<?php - if( true == $t_write_failed ) { - echo '<tr><table width="50%" border="0" cellpadding="10" cellspacing="1" align="center">'; - echo '<tr><td>Please add the following lines to ' . $g_absolute_path . 'config_inc.php before continuing to the database upgrade check:</td></tr>'; - echo '<tr><td><pre>' . htmlentities( $t_config ) . '</pre></td></tr></table></tr>'; - } - ?> - -</table> - -<?php - if( false == $g_failed ) { - $t_install_state++; } + $i++; } - -# end install_state == 5 - -if( 6 == $t_install_state ) { - - # post install checks - ?> -<table width="100%" bgcolor="#222222" border="0" cellpadding="10" cellspacing="1"> -<tr> - <td bgcolor="#e8e8e8" colspan="2"> - <span class="title">Checking Installation...</span> - </td> -</tr> - -<!-- Checking register_globals are off --> -<?php print_test( 'Checking for register_globals are off for mantis', !ini_get_bool( 'register_globals' ), false, 'change php.ini to disable register_globals setting' )?> - -<tr> - <td bgcolor="#ffffff"> - Attempting to connect to database as user - </td> - <?php - $g_db = ADONewConnection( $f_db_type ); - $t_result = @$g_db->Connect( $f_hostname, $f_db_username, $f_db_password, $f_database_name ); - - if( $t_result == true ) { - print_test_result( GOOD ); - } else { - print_test_result( BAD, false, 'Database user doesn\'t have access to the database ( ' . db_error_msg() . ' )' ); - } - - if( $f_db_type == 'db2' ) { - $result = &$g_db->execute( 'set schema ' . $f_db_schema ); - if( $result === false ) { - echo $g_db->errorMsg(); - } - } - ?> -</tr> -<tr> - <td bgcolor="#ffffff"> - checking ability to SELECT records - </td> - <?php - $t_mantis_config_table = db_get_table( 'mantis_config_table' ); - $t_query = "SELECT COUNT(*) FROM $t_mantis_config_table"; - $t_result = @$g_db->Execute( $t_query ); - - if( $t_result != false ) { - print_test_result( GOOD ); - } else { - print_test_result( BAD, true, 'Database user doesn\'t have SELECT access to the database ( ' . db_error_msg() . ' )' ); - } - ?> -</tr> -<tr> - <td bgcolor="#ffffff"> - checking ability to INSERT records - </td> - <?php - $t_query = "INSERT INTO $t_mantis_config_table ( value, type, access_reqd, config_id, project_id, user_id ) VALUES ('test', 1, 90, 'database_test', 20, 0 )"; - $t_result = @$g_db->Execute( $t_query ); - - if( $t_result != false ) { - print_test_result( GOOD ); - } else { - print_test_result( BAD, true, 'Database user doesn\'t have INSERT access to the database ( ' . db_error_msg() . ' )' ); - } - ?> -</tr> -<tr> - <td bgcolor="#ffffff"> - checking ability to UPDATE records - </td> - <?php - $t_query = "UPDATE $t_mantis_config_table SET value='test_update' WHERE config_id='database_test'"; - $t_result = @$g_db->Execute( $t_query ); - - if( $t_result != false ) { - print_test_result( GOOD ); - } else { - print_test_result( BAD, true, 'Database user doesn\'t have UPDATE access to the database ( ' . db_error_msg() . ' )' ); - } - ?> -</tr> -<tr> - <td bgcolor="#ffffff"> - checking ability to DELETE records - </td> - <?php - $t_query = "DELETE FROM $t_mantis_config_table WHERE config_id='database_test'"; - $t_result = @$g_db->Execute( $t_query ); - - if( $t_result != false ) { - print_test_result( GOOD ); - } else { - print_test_result( BAD, true, 'Database user doesn\'t have DELETE access to the database ( ' . db_error_msg() . ' )' ); - } - ?> -</tr> -</table> -<?php - if( false == $g_failed ) { - $t_install_state++; - } -} - -# end install_state == 6 - -if( 7 == $t_install_state ) { - # cleanup and launch upgrade - ?> -<p>Install was successful.</p> -<?php if( $f_db_exists ) {?> -<p><a href="../login_page.php">Continue</a> to log into Mantis</p> -<?php - } else {?> -<p>Please log in as the administrator and <a href="../manage_proj_create_page.php">create</a> your first project. - -<?php - } -} - -# end install_state == 7 - if( $g_failed ) { - ?> -<table width="100%" bgcolor="#222222" border="0" cellpadding="10" cellspacing="1"> -<tr> - <td bgcolor="#e8e8e8" colspan="2"> - <span class="title">Checks Failed...</span> - </td> -</tr> -<tr> - <td bgcolor="#ffffff">Please correct failed checks</td> - <td bgcolor="#ffffff"> - <input name="install" type="hidden" value="<?php echo $t_install_state?>"></input> - <input name="hostname" type="hidden" value="<?php echo $f_hostname?>"></input> - <input name="db_type" type="hidden" value="<?php echo $f_db_type?>"></input> - <input name="database_name" type="hidden" value="<?php echo $f_database_name?>"></input> - <input name="db_username" type="hidden" value="<?php echo $f_db_username?>"></input> - <input name="db_password" type="hidden" value="<?php echo $f_db_password?>"></input> - <input name="admin_username" type="hidden" value="<?php echo $f_admin_username?>"></input> - <input name="admin_password" type="hidden" value="<?php echo $f_admin_password?>"></input> - <input name="log_queries" type="hidden" value="<?php echo( $f_log_queries ? 1 : 0 )?>"></input> - <input name="retry" type="submit" value="Retry"></input> - <input name="db_exists" type="hidden" value="<?php echo( $f_db_exists ? 1 : 0 )?>"></input> - </td> -</tr> -</table> -<?php + exit(1); } + ?> -</form> -</body> -</html> +