2001-10-22 21:26:27 +00:00
< ? php
/***************************************************************************
* upgrade . php
* -------------------
* begin : Wed Sep 05 2001
* copyright : ( C ) 2001 The phpBB Group
* email : support @ phpbb . com
*
2001-12-31 19:05:34 +00:00
* $Id $
2001-10-22 21:26:27 +00:00
*
****************************************************************************/
/***************************************************************************
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
***************************************************************************/
2001-12-31 19:02:42 +00:00
2001-11-09 15:02:46 +00:00
if ( ! defined ( 'INSTALLING' ) )
{
2002-02-12 00:52:59 +00:00
error_reporting ( E_ERROR | E_WARNING | E_PARSE ); // This will NOT report uninitialized variables
set_magic_quotes_runtime ( 0 ); // Disable magic_quotes_runtime
2001-11-09 15:02:46 +00:00
//
// If we are being called from the install script then we don't need these
// as they are already included.
//
include ( 'extension.inc' );
include ( 'config.' . $phpEx );
include ( 'includes/constants.' . $phpEx );
2001-12-13 19:40:00 +00:00
include ( 'includes/functions.' . $phpEx );
2002-02-11 13:05:08 +00:00
if ( defined ( " PHPBB_INSTALLED " ) )
{
header ( " Location: index. $phpEx " );
exit ;
}
2001-11-09 15:02:46 +00:00
}
2001-12-31 19:02:42 +00:00
//
2001-11-24 21:04:51 +00:00
// Force the DB type to be MySQL
2001-12-31 19:02:42 +00:00
//
2001-11-24 21:04:51 +00:00
$dbms = 'mysql' ;
2001-12-31 19:02:42 +00:00
2001-10-22 21:26:27 +00:00
include ( 'includes/db.' . $phpEx );
include ( 'includes/bbcode.' . $phpEx );
2002-01-03 11:06:22 +00:00
include ( 'includes/search.' . $phpEx );
2001-12-13 19:40:00 +00:00
2001-11-24 21:04:51 +00:00
set_time_limit ( 0 ); // Unlimited execution time
2001-10-22 21:26:27 +00:00
$months = array (
'Jan' => 1 ,
'Feb' => 2 ,
'Mar' => 3 ,
'Apr' => 4 ,
'May' => 5 ,
'Jun' => 6 ,
'Jul' => 7 ,
'Aug' => 8 ,
'Sep' => 9 ,
'Sept' => 9 ,
'Oct' => 10 ,
'Nov' => 11 ,
'Dec' => 12
2001-12-31 19:02:42 +00:00
);
// ---------------
// Begin functions
//
2001-10-22 21:26:27 +00:00
function common_header ()
{
?>
2002-02-12 00:52:59 +00:00
<! DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.01 Transitional//EN " >
< html >
< head >
< meta http - equiv = " Content-Type " content = " text/html; charset=ISO-8859-1 " >
< meta http - equiv = " Content-Style-Type " content = " text/css " >
< style type = " text/css " >
<!--
/* Specifiy background images for selected styles
This can ' t be done within the external style sheet as NS4 sees image paths relative to
the page which called the style sheet ( i . e . this page in the root phpBB directory )
whereas all other browsers see image paths relative to the style sheet . Stupid NS again !
*/
TH { background - image : url ( templates / subSilver / images / cellpic3 . gif ) }
TD . cat { background - image : url ( templates / subSilver / images / cellpic1 . gif ) }
TD . rowpic { background - image : url ( templates / subSilver / images / cellpic2 . jpg ); background - repeat : repeat - y }
td . icqback { background - image : url ( templates / subSilver / images / icon_icq_add . gif ); background - repeat : no - repeat }
TD . catHead , TD . catSides , TD . catLeft , TD . catRight , TD . catBottom { background - image : url ( templates / subSilver / images / cellpic1 . gif ) }
font , th , td , p , body { font - family : Verdana , Arial , Helvetica , sans - serif ; font - size : 11 pt }
a : link , a : active , a : visited { font - family : Verdana , Arial , Helvetica , sans - serif ; color : #006699; font-size:11pt }
a : hover { font - family : Verdana , Arial , Helvetica , sans - serif ; text - decoration : underline ; color : #DD6900; font-size:11pt }
hr { height : 0 px ; border : solid #D1D7DC 0px; border-top-width: 1px;}
. maintitle , h1 , h2 { font - weight : bold ; font - size : 22 px ; font - family : " Trebuchet MS " , Verdana , Arial , Helvetica , sans - serif ; text - decoration : none ; line - height : 120 % ; color : #000000;}
. ok { color : green }
/* Import the fancy styles for IE only (NS4.x doesn't use the @import function) */
@ import url ( " templates/subSilver/formIE.css " );
-->
</ style >
</ head >
< body bgcolor = " #FFFFFF " text = " #000000 " link = " #006699 " vlink = " #5584AA " >
< table width = " 100% " border = " 0 " cellspacing = " 0 " cellpadding = " 10 " align = " center " >
< tr >
< td >< table width = " 100% " border = " 0 " cellspacing = " 0 " cellpadding = " 0 " >
< tr >
< td >< img src = " templates/subSilver/images/logo_phpBB.gif " border = " 0 " alt = " Forum Home " vspace = " 1 " /></ td >
< td align = " center " width = " 100% " valign = " middle " >< span class = " maintitle " > Upgrading to phpBB 2.0 </ span ></ td >
</ tr >
</ table ></ td >
</ tr >
</ table >
< br clear = " all " />
2001-10-22 21:26:27 +00:00
< ?
return ;
}
2001-12-31 19:02:42 +00:00
function common_footer ()
{
?>
2002-02-12 00:52:59 +00:00
< br clear = " all " />
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
</ body >
</ html >
< ?
return ;
2001-12-31 19:02:42 +00:00
}
2001-10-22 21:26:27 +00:00
function query ( $sql , $errormsg )
{
global $db ;
2002-02-12 00:52:59 +00:00
if ( ! ( $result = $db -> sql_query ( $sql )) )
2001-10-22 21:26:27 +00:00
{
print " <br><font color= \" red \" > \n " ;
print " $errormsg <br> " ;
2002-02-12 00:52:59 +00:00
2001-10-22 21:26:27 +00:00
$sql_error = $db -> sql_error ();
print $sql_error [ 'code' ] . " : " . $sql_error [ 'message' ] . " <br> \n " ;
2002-02-12 00:52:59 +00:00
2001-10-22 21:26:27 +00:00
print " <pre> $sql </pre> " ;
print " </font> \n " ;
2002-02-12 00:52:59 +00:00
2001-10-22 21:26:27 +00:00
return FALSE ;
}
else
{
return $result ;
}
}
2001-12-31 19:02:42 +00:00
function smiley_replace ( $text = " " )
2001-12-13 19:40:00 +00:00
{
global $db ;
2001-12-31 19:02:42 +00:00
static $search , $replace ;
2001-12-13 19:40:00 +00:00
// Did we get the smiley info in a previous call?
2002-02-12 00:52:59 +00:00
if ( ! is_array ( $search ) )
2001-12-13 19:40:00 +00:00
{
2001-12-31 19:02:42 +00:00
$sql = " SELECT code, smile_url
FROM smiles " ;
2001-12-13 19:40:00 +00:00
$result = query ( $sql , " Unable to get list of smilies from the DB " );
2001-12-31 19:02:42 +00:00
$smilies = $db -> sql_fetchrowset ( $result );
2002-02-12 00:52:59 +00:00
@ usort ( $smilies , 'smiley_sort' );
2001-12-31 19:02:42 +00:00
$search = array ();
$replace = array ();
for ( $i = 0 ; $i < count ( $smilies ); $i ++ )
2001-12-13 19:40:00 +00:00
{
2001-12-31 19:02:42 +00:00
$search [] = '/<IMG SRC=".*?\/' . phpbb_preg_quote ( $smilies [ $i ][ 'smile_url' ], '/' ) . '">/i' ;
$replace [] = $smilies [ $i ][ 'code' ];
2001-12-13 19:40:00 +00:00
}
}
2001-10-22 21:26:27 +00:00
2001-12-31 19:02:42 +00:00
return ( $text != " " ) ? preg_replace ( $search , $replace , $text ) : " " ;
2001-10-22 21:26:27 +00:00
}
function get_schema ()
{
2001-11-24 21:04:51 +00:00
global $table_prefix ;
2001-12-31 19:02:42 +00:00
2001-11-24 21:04:51 +00:00
$schemafile = file ( 'db/schemas/mysql_schema.sql' );
2001-10-22 21:26:27 +00:00
$tabledata = 0 ;
2001-12-31 19:02:42 +00:00
2001-10-22 21:26:27 +00:00
for ( $i = 0 ; $i < count ( $schemafile ); $i ++ )
{
$line = $schemafile [ $i ];
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
if ( preg_match ( " /^CREATE TABLE ( \ w+)/i " , $line , $matches ) )
2001-10-22 21:26:27 +00:00
{
2001-11-24 21:04:51 +00:00
// Start of a new table definition, set some variables and go to the next line.
2001-10-22 21:26:27 +00:00
$tabledata = 1 ;
2001-11-24 21:04:51 +00:00
// Replace the 'phpbb_' prefix by the user defined prefix.
$table = str_replace ( " phpbb_ " , $table_prefix , $matches [ 1 ]);
$table_def [ $table ] = " CREATE TABLE $table ( \n " ;
2001-10-22 21:26:27 +00:00
continue ;
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
if ( preg_match ( " /^ \ );/ " , $line ) )
2001-10-22 21:26:27 +00:00
{
2001-11-24 21:04:51 +00:00
// End of the table definition
// After this we will skip everything until the next 'CREATE' line
2001-10-22 21:26:27 +00:00
$tabledata = 0 ;
$table_def [ $table ] .= " ) " ; // We don't need the closing semicolon
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
if ( $tabledata == 1 )
2001-10-22 21:26:27 +00:00
{
2001-11-24 21:04:51 +00:00
// We are inside a table definition, parse this line.
// Add the current line to the complete table definition:
2001-10-22 21:26:27 +00:00
$table_def [ $table ] .= $line ;
2002-02-12 00:52:59 +00:00
if ( preg_match ( " /^ \ s*( \ w+) \ s+( \ w+) \ (( \ d+) \ )(.*) $ / " , $line , $matches ) )
2001-11-24 21:04:51 +00:00
{
// This is a column definition
$field = $matches [ 1 ];
$type = $matches [ 2 ];
$size = $matches [ 3 ];
2002-02-12 00:52:59 +00:00
2001-11-24 21:04:51 +00:00
preg_match ( " /DEFAULT (NULL| \ '.*? \ ')[, \ s](.*) $ /i " , $matches [ 4 ], $match );
$default = $match [ 1 ];
2002-02-12 00:52:59 +00:00
$notnull = ( preg_match ( " /NOT NULL/i " , $matches [ 4 ]) ) ? 1 : 0 ;
$auto_increment = ( preg_match ( " /auto_increment/i " , $matches [ 4 ]) ) ? 1 : 0 ;
2001-11-24 21:04:51 +00:00
$field_def [ $table ][ $field ] = array (
'type' => $type ,
'size' => $size ,
'default' => $default ,
'notnull' => $notnull ,
'auto_increment' => $auto_increment
);
2001-10-22 21:26:27 +00:00
}
2001-11-24 21:04:51 +00:00
2002-02-12 00:52:59 +00:00
if ( preg_match ( " / \ s*PRIMARY \ s+KEY \ s* \ ((.*) \ ).*/ " , $line , $matches ) )
2001-10-22 21:26:27 +00:00
{
2001-11-24 21:04:51 +00:00
// Primary key
$key_def [ $table ][ 'PRIMARY' ] = $matches [ 1 ];
2001-10-22 21:26:27 +00:00
}
2002-02-12 00:52:59 +00:00
else if ( preg_match ( " / \ s*KEY \ s+( \ w+) \ s* \ ((.*) \ )/ " , $line , $matches ) )
2001-10-22 21:26:27 +00:00
{
2001-11-24 21:04:51 +00:00
// Normal key
$key_def [ $table ][ $matches [ 1 ]] = $matches [ 2 ];
}
2002-02-12 00:52:59 +00:00
else if ( preg_match ( " /^ \ s*( \ w+) \ s*(.*?),? \ s* $ / " , $line , $matches ) )
2001-11-24 21:04:51 +00:00
{
// Column definition
$create_def [ $table ][ $matches [ 1 ]] = $matches [ 2 ];
}
else
{
// It's a bird! It's a plane! It's something we didn't expect ;(
2001-10-22 21:26:27 +00:00
}
}
}
2002-02-12 00:52:59 +00:00
2001-10-22 21:26:27 +00:00
$schema [ 'field_def' ] = $field_def ;
$schema [ 'table_def' ] = $table_def ;
2001-11-24 21:04:51 +00:00
$schema [ 'create_def' ] = $create_def ;
$schema [ 'key_def' ] = $key_def ;
2002-02-12 00:52:59 +00:00
2001-10-22 21:26:27 +00:00
return $schema ;
}
function get_inserts ()
{
2001-11-24 21:04:51 +00:00
global $table_prefix ;
2001-12-31 19:02:42 +00:00
2001-11-24 21:04:51 +00:00
$insertfile = file ( " db/schemas/mysql_basic.sql " );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
for ( $i = 0 ; $i < count ( $insertfile ); $i ++ )
2001-10-22 21:26:27 +00:00
{
2002-02-12 00:52:59 +00:00
if ( preg_match ( " /(INSERT INTO ( \ w+) \ s.*);/i " , str_replace ( " phpbb_ " , $table_prefix , $insertfile [ $i ]), $matches ) )
2001-10-22 21:26:27 +00:00
{
$returnvalue [ $matches [ 2 ]][] = $matches [ 1 ];
}
}
2001-12-31 19:02:42 +00:00
2001-10-22 21:26:27 +00:00
return $returnvalue ;
}
function lock_tables ( $state , $tables = '' )
{
2002-02-12 00:52:59 +00:00
if ( $state == 1 )
2001-10-22 21:26:27 +00:00
{
2002-02-12 00:52:59 +00:00
if ( is_array ( $tables ) )
2001-10-22 21:26:27 +00:00
{
$tables = join ( ' WRITE, ' , $tables );
}
2002-02-12 00:52:59 +00:00
query ( " LOCK TABLES $tables WRITE " , " Couldn't do: $sql " );
2001-10-22 21:26:27 +00:00
}
else
{
query ( " UNLOCK TABLES " , " Couldn't unlock all tables " );
}
}
2002-02-12 00:52:59 +00:00
function output_table_content ( $content )
{
echo $content . " \n " ;
2001-10-22 21:26:27 +00:00
return ;
}
//
// Nathan's bbcode2 conversion routines
//
2002-02-12 00:52:59 +00:00
function bbdecode ( $message )
{
// Undo [code]
$code_start_html = " <!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE> " ;
$code_end_html = " </PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End --> " ;
$message = str_replace ( $code_start_html , " [code] " , $message );
$message = str_replace ( $code_end_html , " [/code] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// Undo [quote]
$quote_start_html = " <!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE> " ;
$quote_end_html = " </BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End --> " ;
$message = str_replace ( $quote_start_html , " [quote] " , $message );
$message = str_replace ( $quote_end_html , " [/quote] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// Undo [b] and [i]
$message = preg_replace ( " #<!-- BBCode Start --><B>(.*?)</B><!-- BBCode End -->#s " , " [b] \\ 1[/b] " , $message );
$message = preg_replace ( " #<!-- BBCode Start --><I>(.*?)</I><!-- BBCode End -->#s " , " [i] \\ 1[/i] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// Undo [url] (long form)
$message = preg_replace ( " #<!-- BBCode u2 Start --><A HREF= \" ([a-z]+?://)(.*?) \" TARGET= \" _blank \" >(.*?)</A><!-- BBCode u2 End -->#s " , " [url= \\ 1 \\ 2] \\ 3[/url] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// Undo [url] (short form)
$message = preg_replace ( " #<!-- BBCode u1 Start --><A HREF= \" ([a-z]+?://)(.*?) \" TARGET= \" _blank \" >(.*?)</A><!-- BBCode u1 End -->#s " , " [url] \\ 3[/url] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// Undo [email]
$message = preg_replace ( " #<!-- BBCode Start --><A HREF= \" mailto:(.*?) \" >(.*?)</A><!-- BBCode End -->#s " , " [email] \\ 1[/email] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// Undo [img]
$message = preg_replace ( " #<!-- BBCode Start --><IMG SRC= \" (.*?) \" BORDER= \" 0 \" ><!-- BBCode End -->#s " , " [img] \\ 1[/img] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// Undo lists (unordered/ordered)
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// <li> tags:
$message = str_replace ( " <!-- BBCode --><LI> " , " [*] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// [list] tags:
$message = str_replace ( " <!-- BBCode ulist Start --><UL> " , " [list] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// [list=x] tags:
$message = preg_replace ( " #<!-- BBCode olist Start --><OL TYPE=([A1])>#si " , " [list= \\ 1] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
// [/list] tags:
$message = str_replace ( " </UL><!-- BBCode ulist End --> " , " [/list] " , $message );
$message = str_replace ( " </OL><!-- BBCode olist End --> " , " [/list] " , $message );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
return $message ;
2001-10-22 21:26:27 +00:00
}
//
// Alternative for in_array() which is only available in PHP4
//
2002-02-12 00:52:59 +00:00
function inarray ( $needle , $haystack )
{
for ( $i = 0 ; $i < sizeof ( $haystack ) ; $i ++ )
2001-10-22 21:26:27 +00:00
{
2002-02-12 00:52:59 +00:00
if ( $haystack [ $i ] == $needle )
2001-10-22 21:26:27 +00:00
{
return true ;
}
}
2002-02-12 00:52:59 +00:00
return false ;
2001-10-22 21:26:27 +00:00
}
function end_step ( $next )
{
global $debug ;
2002-02-12 00:52:59 +00:00
print " <hr /><a href= \" $PHP_SELF ?next= $next\ " > Next step : < b > $next </ b ></ a >< br />< br /> \n " ;
2001-10-22 21:26:27 +00:00
}
//
2001-12-31 19:02:42 +00:00
// End functions
// -------------
2001-10-22 21:26:27 +00:00
2001-12-31 19:02:42 +00:00
//
2001-10-22 21:26:27 +00:00
// Start at the beginning if the user hasn't specified a specific starting point.
2001-12-31 19:02:42 +00:00
//
$next = ( isset ( $HTTP_GET_VARS [ 'next' ]) ) ? $HTTP_GET_VARS [ 'next' ] : 'start' ;
2001-10-22 21:26:27 +00:00
// If debug is set we'll do all steps in one go.
2001-12-31 19:02:42 +00:00
$debug = 1 ;
2001-11-24 21:04:51 +00:00
// Parse the MySQL schema file into some arrays.
$schema = get_schema ();
2002-02-12 00:52:59 +00:00
2001-11-24 21:04:51 +00:00
$table_def = $schema [ 'table_def' ];
$field_def = $schema [ 'field_def' ];
$key_def = $schema [ 'key_def' ];
$create_def = $schema [ 'create_def' ];
2001-12-31 19:02:42 +00:00
//
// Get mysql_basic data
//
$inserts = get_inserts ();
//
// Get smiley data
//
smiley_replace ();
2001-12-13 19:40:00 +00:00
2002-02-12 00:52:59 +00:00
common_header ();
if ( ! empty ( $next ) )
2001-10-22 21:26:27 +00:00
{
switch ( $next )
{
2001-12-31 19:02:42 +00:00
case 'start' :
2002-02-12 00:52:59 +00:00
end_step ( 'initial_drops' );
case 'initial_drops' :
print " * Dropping sessions and themes tables :: " ;
2002-01-01 15:46:59 +00:00
flush ();
query ( " DROP TABLE sessions " , " Couldn't drop table 'sessions' " );
query ( " DROP TABLE themes " , " Couldn't drop table 'themes' " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2002-01-01 15:46:59 +00:00
2001-12-31 19:02:42 +00:00
end_step ( 'mod_old_tables' );
case 'mod_old_tables' :
$modtables = array (
" banlist " => " banlist " ,
" catagories " => " categories " ,
" config " => " old_config " ,
" forums " => " forums " ,
" disallow " => " disallow " ,
" posts " => " posts " ,
" posts_text " => " posts_text " ,
" priv_msgs " => " privmsgs " ,
" ranks " => " ranks " ,
" smiles " => " smilies " ,
" topics " => " topics " ,
" users " => " users " ,
" words " => " words "
);
2001-11-24 21:04:51 +00:00
2001-12-31 19:02:42 +00:00
while ( list ( $old , $new ) = each ( $modtables ) )
2001-10-22 21:26:27 +00:00
{
2001-12-31 19:02:42 +00:00
$result = query ( " SHOW INDEX FROM $old " , " Couldn't get list of indices for table $old " );
while ( $row = $db -> sql_fetchrow ( $result ) )
2001-10-22 21:26:27 +00:00
{
2001-12-31 19:02:42 +00:00
$index = $row [ 'Key_name' ];
2002-02-12 00:52:59 +00:00
if ( $index != 'PRIMARY' )
2001-12-31 19:02:42 +00:00
{
query ( " ALTER TABLE $old DROP INDEX $index " , " Couldn't DROP INDEX $old . $index " );
}
2001-10-22 21:26:27 +00:00
}
2001-12-31 19:02:42 +00:00
// Rename table
$new = $table_prefix . $new ;
2002-02-12 00:52:59 +00:00
print " * Renaming ' $old ' to ' $new ' :: " ;
flush ();
2001-12-31 19:02:42 +00:00
query ( " ALTER TABLE $old RENAME $new " , " Failed to rename $old to $new " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
2001-10-22 21:26:27 +00:00
}
2001-12-31 19:02:42 +00:00
end_step ( 'create_tables' );
case 'create_tables' :
// Create array with tables in 'old' database
$result = query ( 'SHOW TABLES' , " Couldn't get list of current tables " );
while ( $table = $db -> sql_fetchrow ( $result ) )
2001-10-22 21:26:27 +00:00
{
2001-12-31 19:02:42 +00:00
$currenttables [] = $table [ 0 ];
2001-10-22 21:26:27 +00:00
}
2001-12-31 19:02:42 +00:00
// Check what tables we need to CREATE
while ( list ( $table , $definition ) = each ( $table_def ) )
2001-10-22 21:26:27 +00:00
{
2002-02-12 00:52:59 +00:00
if ( ! inarray ( $table , $currenttables ) )
2001-10-26 23:26:54 +00:00
{
2002-02-12 00:52:59 +00:00
print " * Creating $table :: " ;
2001-10-26 23:26:54 +00:00
2001-12-31 19:02:42 +00:00
query ( $definition , " Couldn't create table $table " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-10-22 21:26:27 +00:00
}
2001-12-31 19:02:42 +00:00
}
end_step ( 'create_config' );
case 'create_config' :
2002-02-12 00:52:59 +00:00
print " * Inserting new values into new layout config table :: " ;
2001-10-22 21:26:27 +00:00
2001-12-31 19:02:42 +00:00
@ reset ( $inserts );
while ( list ( $table , $inserts_table ) = each ( $inserts ) )
{
2002-02-12 00:52:59 +00:00
if ( $table == CONFIG_TABLE )
2001-10-22 21:26:27 +00:00
{
2002-02-12 00:52:59 +00:00
$per_pct = ceil ( count ( $inserts_table ) / 40 );
$inc = 0 ;
2001-12-31 19:02:42 +00:00
while ( list ( $nr , $insert ) = each ( $inserts_table ) )
2001-10-22 21:26:27 +00:00
{
2001-12-31 19:02:42 +00:00
query ( $insert , " Couldn't insert value into config table " );
2002-02-12 00:52:59 +00:00
$inc ++ ;
if ( $inc == $per_pct )
{
print " . " ;
flush ();
$inc = 0 ;
}
2001-10-22 21:26:27 +00:00
}
}
2001-12-31 19:02:42 +00:00
}
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
end_step ( 'convert_config' );
2001-10-22 21:26:27 +00:00
2001-12-31 19:02:42 +00:00
case 'convert_config' :
2002-02-12 00:52:59 +00:00
print " * Converting configuration table :: " ;
2001-12-31 19:02:42 +00:00
$sql = " SELECT *
FROM $table_prefix " . " old_config " ;
$result = query ( $sql , " Couldn't get info from old config table " );
$oldconfig = $db -> sql_fetchrow ( $result );
//
// We don't need several original config types and two others
// have changed name ... so take account of this.
//
$ignore_configs = array ( " selected " , " admin_passwd " , " override_themes " , " allow_sig " );
$rename_configs = array (
" email_from " => " board_email " ,
" email_sig " => " board_email_sig "
);
while ( list ( $name , $value ) = each ( $oldconfig ) )
2001-10-22 21:26:27 +00:00
{
2002-02-12 00:52:59 +00:00
if ( is_int ( $name ) )
2001-10-22 21:26:27 +00:00
{
continue ;
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
if ( ! inarray ( $name , $ignore_configs ) )
2001-10-22 21:26:27 +00:00
{
2001-12-31 19:02:42 +00:00
$name = ( ! empty ( $rename_configs [ $name ]) ) ? $rename_configs [ $name ] : $name ;
$sql = " REPLACE INTO " . CONFIG_TABLE . " (config_name, config_value)
VALUES ( '$name' , '" . stripslashes($value) . "' ) " ;
query ( $sql , " Couldn't update config table with values from old config table " );
2001-10-22 21:26:27 +00:00
}
2001-12-31 19:02:42 +00:00
}
2002-03-05 14:15:39 +00:00
$sql = " UPDATE " . CONFIG_TABLE . "
SET config_value = 'dutch'
WHERE config_name = 'default_lang' && config_value = 'nederlands' " ;
query ( $sql , " Couldn't rename 'nederlands' to 'dutch' in config table " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
end_step ( 'convert_ips' );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
case 'convert_ips' :
2001-12-31 19:02:42 +00:00
$names = array (
POSTS_TABLE => array (
'id' => 'post_id' ,
'field' => 'poster_ip'
),
PRIVMSGS_TABLE => array (
'id' => 'msg_id' ,
'field' => 'poster_ip'
),
BANLIST_TABLE => array (
'id' => 'ban_id' ,
'field' => 'ban_ip'
)
);
lock_tables ( 1 , array ( POSTS_TABLE , PRIVMSGS_TABLE , BANLIST_TABLE ));
2002-02-12 00:52:59 +00:00
$batchsize = 2000 ;
2001-12-31 19:02:42 +00:00
while ( list ( $table , $data_array ) = each ( $names ) )
{
2002-02-12 00:52:59 +00:00
$sql = " SELECT MAX( " . $data_array [ 'id' ] . " ) AS max_id
2001-12-31 19:02:42 +00:00
FROM $table " ;
$result = query ( $sql , " Couldn't obtain ip data from $table ( " . $fields . " ) " );
2002-02-12 00:52:59 +00:00
$row = $db -> sql_fetchrow ( $result );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
$maxid = $row [ 'max_id' ];
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
for ( $i = 0 ; $i <= $maxid ; $i += $batchsize )
2001-10-22 21:26:27 +00:00
{
2002-02-12 00:52:59 +00:00
$batchstart = $i ;
$batchend = $i + $batchsize ;
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
$field_id = $data_array [ 'id' ];
$field = $data_array [ 'field' ];
print " * Converting IP format ' " . $field . " ' / ' $table ' ( $batchstart to $batchend ) :: " ;
flush ();
$sql = " SELECT $field_id , $field
FROM $table
WHERE $field_id
BETWEEN $batchstart
AND $batchend " ;
$result = query ( $sql , " Couldn't obtain ip data from $table ( " . $fields . " ) " );
2001-10-22 21:26:27 +00:00
2002-02-12 00:52:59 +00:00
$per_pct = ceil ( $db -> sql_numrows ( $result ) / 40 );
$inc = 0 ;
while ( $row = $db -> sql_fetchrow ( $result ) )
{
$sql = " UPDATE $table
SET $field = '" . encode_ip($row[$field]) . "'
WHERE $field_id = " . $row[$field_id] ;
query ( $sql , " Couldn't convert IP format of $field in $table with $field_id of " . $rowset [ $field_id ]);
$inc ++ ;
if ( $inc == $per_pct )
{
print " . " ;
flush ();
$inc = 0 ;
}
}
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
}
2001-10-22 21:26:27 +00:00
}
2001-12-31 19:02:42 +00:00
2001-10-22 21:26:27 +00:00
lock_tables ( 0 );
2001-12-31 19:02:42 +00:00
end_step ( 'convert_dates' );
case 'convert_dates' :
$names = array (
POSTS_TABLE => array ( 'post_time' ),
TOPICS_TABLE => array ( 'topic_time' ),
PRIVMSGS_TABLE => array ( 'msg_time' )
);
lock_tables ( 1 , array ( POSTS_TABLE , TOPICS_TABLE , PRIVMSGS_TABLE ));
while ( list ( $table , $fields ) = each ( $names ) )
2001-10-22 21:26:27 +00:00
{
2002-02-12 00:52:59 +00:00
print " * Converting date format of $fields[$i] in $table :: " ;
2001-12-31 19:02:42 +00:00
flush ();
for ( $i = 0 ; $i < count ( $fields ); $i ++ )
2001-10-22 21:26:27 +00:00
{
2001-12-31 19:02:42 +00:00
$sql = " UPDATE $table
SET " . $fields[$i] . " = UNIX_TIMESTAMP ( " . $fields[$i] . " ) " ;
query ( $sql , " Couldn't convert date format of $table ( " . $fields [ $i ] . " ) " );
2001-10-22 21:26:27 +00:00
}
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-10-26 23:26:54 +00:00
}
2001-12-31 19:02:42 +00:00
lock_tables ( 0 );
end_step ( 'fix_addslashes' );
case 'fix_addslashes' :
$slashfields [ TOPICS_TABLE ] = array ( 'topic_title' );
$slashfields [ FORUMS_TABLE ] = array ( 'forum_desc' , 'forum_name' );
$slashfields [ CATEGORIES_TABLE ] = array ( 'cat_title' );
$slashfields [ WORDS_TABLE ] = array ( 'word' , 'replacement' );
$slashfields [ RANKS_TABLE ] = array ( 'rank_title' );
$slashfields [ DISALLOW_TABLE ] = array ( 'disallow_username' );
//convert smilies?
$slashes = array (
" \\ ' " => " ' " ,
" \\ \" " => " \" " ,
" \\ \\ " => " \\ " );
$slashes = array (
" \\ ' " => " ' " ,
" \\ \" " => " \" " ,
" \\ \\ " => " \\ " );
lock_tables ( 1 , array ( TOPICS_TABLE , FORUMS_TABLE , CATEGORIES_TABLE , WORDS_TABLE , RANKS_TABLE , DISALLOW_TABLE , SMILIES_TABLE ));
while ( list ( $table , $fields ) = each ( $slashfields ) )
2001-12-06 18:04:38 +00:00
{
2002-02-12 00:52:59 +00:00
print " * Removing slashes from $table table :: " ;
2001-12-31 19:02:42 +00:00
flush ();
while ( list ( $nr , $field ) = each ( $fields ) )
2001-12-06 18:04:38 +00:00
{
2001-12-31 19:02:42 +00:00
@ reset ( $slashes );
while ( list ( $search , $replace ) = each ( $slashes ) )
{
$sql = " UPDATE $table
SET $field = REPLACE ( $field , '" . addslashes($search) . "' , '" . addslashes($replace) . "' ) " ;
query ( $sql , " Couldn't remove extraneous slashes from the old data. " );
}
2001-12-06 18:04:38 +00:00
}
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-06 18:04:38 +00:00
}
2002-02-12 00:52:59 +00:00
2001-12-31 19:02:42 +00:00
lock_tables ( 0 );
end_step ( 'remove_topics' );
2001-12-06 18:04:38 +00:00
2001-12-31 19:02:42 +00:00
case 'remove_topics' :
2002-02-12 00:52:59 +00:00
print " * Removing posts with no corresponding topics :: " ;
2001-10-22 21:26:27 +00:00
flush ();
2001-12-31 19:02:42 +00:00
$sql = " SELECT p.post_id
FROM " . POSTS_TABLE . " p
LEFT JOIN " . TOPICS_TABLE . " t ON p . topic_id = t . topic_id
WHERE t . topic_id IS NULL " ;
$result = query ( $sql , " Couldn't obtain list of deleted topics " );
2001-10-22 21:26:27 +00:00
2001-12-31 19:02:42 +00:00
$post_total = $db -> sql_numrows ( $result );
2002-02-12 00:52:59 +00:00
if ( $post_total )
2001-10-22 21:26:27 +00:00
{
2001-12-31 21:59:34 +00:00
$post_id_ary = array ();
while ( $row = $db -> sql_fetchrow ( $result ) )
{
$post_id_ary [] = $row [ 'post_id' ];
}
2001-12-31 19:02:42 +00:00
2001-12-31 21:59:34 +00:00
$sql = " DELETE FROM " . POSTS_TABLE . "
WHERE post_id IN ( " . implode( " , " , $post_id_ary ) . " ) " ;
query ( $sql , " Couldn't update posts to remove deleted user poster_id values " );
2001-12-31 19:02:42 +00:00
2001-12-31 21:59:34 +00:00
$sql = " DELETE FROM " . POSTS_TEXT_TABLE . "
WHERE post_id IN ( " . implode( " , " , $post_id_ary ) . " ) " ;
query ( $sql , " Couldn't update posts to remove deleted user poster_id values " );
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
echo " <span class= \" ok \" ><b>OK</b></span> ( Removed $post_total posts )<br /> \n " ;
2001-12-31 19:02:42 +00:00
end_step ( 'convert_users' );
case 'convert_users' :
2002-01-09 23:13:51 +00:00
//
// Completely remove old soft-deleted users
//
$sql = " DELETE FROM " . USERS_TABLE . "
WHERE user_level = - 1 " ;
query ( $sql , " Couldn't delete old soft-deleted users " );
2001-12-31 19:02:42 +00:00
$sql = " SELECT COUNT(*) AS total, MAX(user_id) AS maxid
FROM " . USERS_TABLE;
$result = query ( $sql , " Couldn't get max post_id. " );
$maxid = $db -> sql_fetchrow ( $result );
$totalposts = $maxid [ 'total' ];
$maxid = $maxid [ 'maxid' ];
$sql = " ALTER TABLE " . USERS_TABLE . "
ADD user_sig_bbcode_uid CHAR ( 10 ),
MODIFY user_sig text " ;
query ( $sql , " Couldn't add user_sig_bbcode_uid field to users table " );
$super_mods = array ();
$first_admin = - 2 ;
$batchsize = 1000 ;
for ( $i = - 1 ; $i <= $maxid ; $i += $batchsize )
{
$batchstart = $i ;
$batchend = $i + $batchsize ;
2002-02-12 00:52:59 +00:00
print " * Converting Users ( $batchstart to $batchend ) :: " ;
2001-12-31 19:02:42 +00:00
flush ();
$sql = " SELECT *
FROM " . USERS_TABLE . "
WHERE user_id
BETWEEN $batchstart
AND $batchend " ;
$result = query ( $sql , " Couldn't get " . USERS_TABLE . " .user_id $batchstart to $batchend " );
// Array with user fields that we want to check for invalid data (to few characters)
$checklength = array (
'user_occ' ,
'user_website' ,
'user_email' ,
'user_from' ,
'user_intrest' ,
'user_aim' ,
'user_yim' ,
'user_msnm' );
lock_tables ( 1 , array ( USERS_TABLE , GROUPS_TABLE , USER_GROUP_TABLE , POSTS_TABLE ));
2002-02-12 00:52:59 +00:00
$per_pct = ceil ( $db -> sql_numrows ( $result ) / 40 );
$inc = 0 ;
2001-12-31 19:02:42 +00:00
while ( $row = $db -> sql_fetchrow ( $result ) )
{
$sql = " INSERT INTO " . GROUPS_TABLE . " (group_name, group_description, group_single_user)
VALUES ( '" . addslashes($row[' username ']) . "' , 'Personal User' , 1 ) " ;
query ( $sql , " Wasn't able to insert user " . $row [ 'user_id' ] . " into table " . GROUPS_TABLE );
$group_id = $db -> sql_nextid ();
2002-02-12 00:52:59 +00:00
if ( $group_id != 0 )
2001-12-31 19:02:42 +00:00
{
$sql = " INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending)
VALUES ( $group_id , " . $row['user_id'] . " , 0 ) " ;
query ( $sql , " Wasn't able to insert user " . $row [ 'user_id' ] . " into table " . USER_GROUP_TABLE );
}
else
{
print " Couldn't get insert ID for " . GROUPS_TABLE . " table<br> \n " ;
}
2002-02-12 00:52:59 +00:00
if ( is_int ( $row [ 'user_regdate' ]) )
2001-12-31 19:02:42 +00:00
{
// We already converted this post to the new style BBcode, skip this post.
continue ;
}
//
// Nathan's bbcode2 conversion
//
// undo 1.2.x encoding..
$row [ 'user_sig' ] = bbdecode ( stripslashes ( $row [ 'user_sig' ]));
$row [ 'user_sig' ] = undo_make_clickable ( $row [ 'user_sig' ]);
$row [ 'user_sig' ] = str_replace ( " <BR> " , " \n " , $row [ 'user_sig' ]);
// make a uid
$uid = make_bbcode_uid ();
// do 2.x first-pass encoding..
$row [ 'user_sig' ] = bbencode_first_pass ( $row [ 'user_sig' ], $uid );
$row [ 'user_sig' ] = addslashes ( $row [ 'user_sig' ]);
// Check for invalid info like '-' and '?' for a lot of fields
@ reset ( $checklength );
while ( $field = each ( $checklength ))
{
$row [ $field [ 1 ]] = strlen ( $row [ $field [ 1 ]]) < 3 ? '' : $row [ $field [ 1 ]];
}
preg_match ( '/(.*?) (\d{1,2}), (\d{4})/' , $row [ 'user_regdate' ], $parts );
$row [ 'user_regdate' ] = gmmktime ( 0 , 0 , 0 , $months [ $parts [ 1 ]], $parts [ 2 ], $parts [ 3 ]);
$website = $row [ 'user_website' ];
2002-02-12 00:52:59 +00:00
if ( substr ( strtolower ( $website ), 0 , 7 ) != " http:// " )
2001-12-31 19:02:42 +00:00
{
$website = " http:// " . $website ;
}
if ( strtolower ( $website ) == 'http://' )
{
$website = '' ;
}
$row [ 'user_website' ] = addslashes ( $website );
$row [ 'user_icq' ] = ( ereg ( " ^[0-9]+ $ " , $row [ 'user_icq' ])) ? $row [ 'user_icq' ] : '' ;
reset ( $checklength );
while ( $field = each ( $checklength ))
{
2002-02-12 00:52:59 +00:00
if ( strlen ( $row [ $field [ 1 ]]) < 3 )
2001-12-31 19:02:42 +00:00
{
$row [ $field [ 1 ]] = '' ;
}
$row [ $field [ 1 ]] = addslashes ( $row [ $field [ 1 ]]);
}
//
// Is user a super moderator?
//
if ( $row [ 'user_level' ] == 3 )
{
$super_mods [] = $row [ 'user_id' ];
}
$row [ 'user_level' ] = ( $row [ 'user_level' ] == 4 ) ? ADMIN : USER ;
//
// Used to define a 'practical' group moderator user_id
// for super mods a little latter.
//
if ( $first_admin == - 2 && $row [ 'user_level' ] == ADMIN )
{
$first_admin = $row [ 'user_id' ];
}
2002-03-05 14:15:39 +00:00
//
// Dutch language files have been renamed from 'nederlands' to 'dutch'
//
if ( $row [ 'user_lang' ] == 'nederlands' )
{
$row [ 'user_lang' ] = 'dutch' ;
}
2001-12-31 19:02:42 +00:00
$sql = " UPDATE " . USERS_TABLE . "
SET
user_sig = '" . $row[' user_sig '] . "' ,
2002-02-12 00:52:59 +00:00
user_sig_bbcode_uid = '$uid' ,
2001-12-31 19:02:42 +00:00
user_regdate = '" . $row[' user_regdate '] . "' ,
user_website = '" . $row[' user_website '] . "' ,
user_occ = '" . $row[' user_occ '] . "' ,
user_email = '" . $row[' user_email '] . "' ,
user_from = '" . $row[' user_from '] . "' ,
user_intrest = '" . $row[' user_intrest '] . "' ,
user_aim = '" . $row[' user_aim '] . "' ,
user_yim = '" . $row[' user_yim '] . "' ,
user_msnm = '" . $row[' user_msnm '] . "' ,
user_level = '" . $row[' user_level '] . "' ,
user_desmile = NOT ( user_desmile ),
user_bbcode = 1 ,
user_theme = 1
WHERE user_id = " . $row['user_id'] ;
query ( $sql , " Couldn't update " . USERS_TABLE . " table with new BBcode and regdate for user_id " . $row [ 'user_id' ]);
2002-02-12 00:52:59 +00:00
$inc ++ ;
if ( $inc == $per_pct )
{
print " . " ;
flush ();
$inc = 0 ;
}
2001-10-22 21:26:27 +00:00
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
lock_tables ( 0 );
}
//
// Handle super-mods, create hidden group for them
//
// Iterate trough access table
if ( count ( $super_mods ) && $first_admin != - 2 )
{
2002-02-12 00:52:59 +00:00
print " \n <br /> \n * Creating new group for super moderators :: " ;
2001-12-31 19:02:42 +00:00
flush ();
$sql = " INSERT INTO " . GROUPS_TABLE . " (group_type, group_name, group_description, group_moderator, group_single_user)
VALUES ( " . GROUP_HIDDEN . " , 'Super Moderators' , 'Converted super moderators' , $first_admin , 0 ) " ;
$result = query ( $sql , " Couldn't create group for " . $row [ 'forum_name' ]);
$group_id = $db -> sql_nextid ();
2002-02-12 00:52:59 +00:00
if ( $group_id <= 0 )
2001-10-22 21:26:27 +00:00
{
2001-12-31 19:02:42 +00:00
print " <font color= \" red \" >Group creation failed. Aborting creation of groups...<br></font> \n " ;
continue 2 ;
2001-10-22 21:26:27 +00:00
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
print " * Updating auth_access for super moderator group :: " ;
2001-12-31 19:02:42 +00:00
flush ();
$sql = " SELECT forum_id
FROM " . FORUMS_TABLE;
$result = query ( $sql , " Couldn't obtain forum_id list " );
while ( $row = $db -> sql_fetchrow ( $result ) )
2001-10-22 21:26:27 +00:00
{
2001-12-31 19:02:42 +00:00
$sql = " INSERT INTO " . AUTH_ACCESS_TABLE . " (group_id, forum_id, auth_mod)
VALUES ( $group_id , " . $row['forum_id'] . " , 1 ) " ;
$result_insert = query ( $sql , " Unable to set group auth access for super mods. " );
2001-10-22 21:26:27 +00:00
}
2001-12-31 19:02:42 +00:00
for ( $i = 0 ; $i < count ( $super_mods ); $i ++ )
{
$sql = " INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending)
VALUES ( $group_id , " . $super_mods[$i] . " , 0 ) " ;
query ( $sql , " Unable to add user_id $user_id to group_id $group_id (super mods)<br> \n " );
}
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-10-22 21:26:27 +00:00
}
2001-12-31 19:02:42 +00:00
end_step ( 'convert_posts' );
case 'convert_posts' :
2002-02-12 00:52:59 +00:00
print " * Adding enable_sig field to " . POSTS_TABLE . " :: " ;
flush ();
2001-12-31 19:02:42 +00:00
$sql = " ALTER TABLE " . POSTS_TABLE . "
ADD enable_sig tinyint ( 1 ) DEFAULT '1' NOT NULL " ;
$result = query ( $sql , " Couldn't add enable_sig field to " . POSTS_TABLE . " . " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-11-24 21:04:51 +00:00
2002-02-12 00:52:59 +00:00
print " * Adding enable_bbcode field to " . POSTS_TEXT_TABLE . " :: " ;
flush ();
2001-12-31 19:02:42 +00:00
$sql = " ALTER TABLE " . POSTS_TEXT_TABLE . "
ADD enable_bbcode tinyint ( 1 ) DEFAULT '1' NOT NULL " ;
$result = query ( $sql , " Couldn't add enable_bbcode field to " . POSTS_TABLE . " . " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
print " * Adding bbcode_uid field to " . POSTS_TEXT_TABLE . " :: " ;
flush ();
2001-12-31 19:02:42 +00:00
$sql = " ALTER TABLE " . POSTS_TEXT_TABLE . "
ADD bbcode_uid char ( 10 ) NOT NULL " ;
$result = query ( $sql , " Couldn't add bbcode_uid field to " . POSTS_TABLE . " . " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-11-24 21:04:51 +00:00
2002-02-12 00:52:59 +00:00
print " * Adding post_edit_time field to " . POSTS_TABLE . " :: " ;
flush ();
2001-12-31 19:02:42 +00:00
$sql = " ALTER TABLE " . POSTS_TABLE . "
ADD post_edit_time int ( 11 ) " ;
$result = query ( $sql , " Couldn't add post_edit_time field to " . POSTS_TABLE . " . " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
print " * Adding post_edit_count field to " . POSTS_TABLE . " :: " ;
flush ();
2001-12-31 19:02:42 +00:00
$sql = " ALTER TABLE " . POSTS_TABLE . "
ADD post_edit_count smallint ( 5 ) UNSIGNED DEFAULT '0' NOT NULL " ;
$result = query ( $sql , " Couldn't add post_edit_count field to " . POSTS_TABLE . " . " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n <br /> \n " ;
2001-12-31 19:02:42 +00:00
$sql = " SELECT COUNT(*) as total, MAX(post_id) as maxid
FROM " . POSTS_TEXT_TABLE;
$result = query ( $sql , " Couldn't get max post_id. " );
$maxid = $db -> sql_fetchrow ( $result );
$totalposts = $maxid [ 'total' ];
$maxid = $maxid [ 'maxid' ];
$batchsize = 2000 ;
for ( $i = 0 ; $i <= $maxid ; $i += $batchsize )
2001-11-24 21:04:51 +00:00
{
2001-12-31 19:02:42 +00:00
$batchstart = $i + 1 ;
$batchend = $i + $batchsize ;
2002-02-12 00:52:59 +00:00
print " * Converting BBcode ( $batchstart to $batchend ) :: " ;
2001-12-31 19:02:42 +00:00
flush ();
$sql = " SELECT *
FROM " . POSTS_TEXT_TABLE . "
WHERE post_id
BETWEEN $batchstart
AND $batchend " ;
$result = query ( $sql , " Couldn't get " . POSTS_TEXT_TABLE . " .post_id $batchstart to $batchend " );
lock_tables ( 1 , array ( POSTS_TEXT_TABLE , POSTS_TABLE ));
2002-02-12 00:52:59 +00:00
$per_pct = ceil ( $db -> sql_numrows ( $result ) / 40 );
$inc = 0 ;
2001-12-31 19:02:42 +00:00
while ( $row = $db -> sql_fetchrow ( $result ) )
{
2002-02-12 00:52:59 +00:00
if ( $row [ 'bbcode_uid' ] != '' )
2001-12-31 19:02:42 +00:00
{
// We already converted this post to the new style BBcode, skip this post.
continue ;
}
//
// Nathan's bbcode2 conversion
//
// undo 1.2.x encoding..
$row [ 'post_text' ] = bbdecode ( stripslashes ( $row [ 'post_text' ]));
$row [ 'post_text' ] = undo_make_clickable ( $row [ 'post_text' ]);
$row [ 'post_text' ] = str_replace ( " <BR> " , " \n " , $row [ 'post_text' ]);
// make a uid
$uid = make_bbcode_uid ();
// do 2.x first-pass encoding..
$row [ 'post_text' ] = smiley_replace ( $row [ 'post_text' ]);
$row [ 'post_text' ] = bbencode_first_pass ( $row [ 'post_text' ], $uid );
$row [ 'post_text' ] = addslashes ( $row [ 'post_text' ]);
$edited_sql = " " ;
2002-02-12 00:52:59 +00:00
if ( preg_match ( " /^(.*?)([ \n ]+<font size= \ -1> \ [ This message was .*?) $ /s " , $row [ 'post_text' ], $matches ) )
2001-12-31 19:02:42 +00:00
{
$row [ 'post_text' ] = $matches [ 1 ];
$edit_info = $matches [ 2 ];
$edit_times = count ( explode ( " message " , $edit_info )) - 1 ; // Taken from example for substr_count in annotated PHP manual
2002-02-12 00:52:59 +00:00
if ( preg_match ( " /^.* by: (.*?) on (....)-(..)-(..) (..):(..) \ ]< \ /font>/s " , $edit_info , $matches ) )
2001-12-31 19:02:42 +00:00
{
$edited_user = $matches [ 1 ];
$edited_time = gmmktime ( $matches [ 5 ], $matches [ 6 ], 0 , $matches [ 3 ], $matches [ 4 ], $matches [ 2 ]);
//
// This isn't strictly correct since 2.0 won't include and edit
// statement if the edit wasn't by the user who posted ...
//
$edited_sql = " , post_edit_time = $edited_time , post_edit_count = $edit_times " ;
}
}
2002-02-12 00:52:59 +00:00
if ( preg_match ( " /^(.*?) \n ----------------- \n .* $ /is " , $row [ 'post_text' ], $matches ) )
2001-12-31 19:02:42 +00:00
{
$row [ 'post_text' ] = $matches [ 1 ];
$enable_sig = 1 ;
}
else
{
$checksig = preg_replace ( '/\[addsig\]$/' , '' , $row [ 'post_text' ]);
$enable_sig = ( strlen ( $checksig ) == strlen ( $row [ 'post_text' ]) ) ? 0 : 1 ;
}
$sql = " UPDATE " . POSTS_TEXT_TABLE . "
SET post_text = '$checksig' , bbcode_uid = '$uid'
WHERE post_id = " . $row['post_id'] ;
query ( $sql , " Couldn't update " . POSTS_TEXT_TABLE . " table with new BBcode for post_id :: " . $row [ 'post_id' ]);
$sql = " UPDATE " . POSTS_TABLE . "
SET enable_sig = $enable_sig " . $edited_sql . "
WHERE post_id = " . $row['post_id'] ;
query ( $sql , " Couldn't update " . POSTS_TABLE . " table with signature status for post with post_id :: " . $row [ 'post_id' ]);
2002-02-12 00:52:59 +00:00
$inc ++ ;
if ( $inc == $per_pct )
{
print " . " ;
flush ();
$inc = 0 ;
}
2001-12-31 19:02:42 +00:00
}
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
lock_tables ( 0 );
2001-11-24 21:04:51 +00:00
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
print " <br /> \n * Updating poster_id for deleted users :: " ;
2001-12-31 19:02:42 +00:00
flush ();
$sql = " SELECT DISTINCT p.post_id
FROM " . POSTS_TABLE . " p
LEFT JOIN " . USERS_TABLE . " u ON p . poster_id = u . user_id
WHERE u . user_id IS NULL " ;
$result = query ( $sql , " Couldn't obtain list of deleted users " );
2001-11-24 21:04:51 +00:00
2001-12-31 22:00:59 +00:00
$users_removed = $db -> sql_numrows ( $result );
2002-02-12 00:52:59 +00:00
if ( $users_removed )
2001-12-31 19:02:42 +00:00
{
2001-12-31 22:00:59 +00:00
$post_id_ary = array ();
while ( $row = $db -> sql_fetchrow ( $result ) )
{
$post_id_ary [] = $row [ 'post_id' ];
}
2001-12-31 19:02:42 +00:00
2001-12-31 22:00:59 +00:00
$sql = " UPDATE " . POSTS_TABLE . "
SET poster_id = " . ANONYMOUS . " , enable_sig = 0
WHERE post_id IN ( " . implode( " , " , $post_id_ary ) . " ) " ;
query ( $sql , " Couldn't update posts to remove deleted user poster_id values " );
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span> ( Removed $users_removed non-existent user references )<br /> \n " ;
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
end_step ( 'convert_privmsgs' );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
case 'convert_privmsgs' :
2001-12-31 19:02:42 +00:00
$sql = " SELECT COUNT(*) as total, max(msg_id) as maxid
FROM " . PRIVMSGS_TABLE;
$result = query ( $sql , " Couldn't get max privmsgs_id. " );
$maxid = $db -> sql_fetchrow ( $result );
$totalposts = $maxid [ 'total' ];
$maxid = $maxid [ 'maxid' ];
$sql = " ALTER TABLE " . PRIVMSGS_TABLE . "
ADD privmsgs_subject VARCHAR ( 255 ),
ADD privmsgs_attach_sig TINYINT ( 1 ) DEFAULT 1 " ;
query ( $sql , " Couldn't add privmsgs_subject field to " . PRIVMSGS_TABLE . " table " );
$batchsize = 2000 ;
for ( $i = 0 ; $i <= $maxid ; $i += $batchsize )
2001-11-24 21:04:51 +00:00
{
2001-12-31 19:02:42 +00:00
$batchstart = $i + 1 ;
$batchend = $i + $batchsize ;
2002-02-12 00:52:59 +00:00
print " * Converting Private Message ( $batchstart to $batchend ) :: " ;
2001-12-31 19:02:42 +00:00
flush ();
$sql = " SELECT *
FROM " . PRIVMSGS_TABLE . "
WHERE msg_id
BETWEEN $batchstart
AND $batchend " ;
$result = query ( $sql , " Couldn't get " . POSTS_TEXT_TABLE . " post_id $batchstart to $batchend " );
lock_tables ( 1 , array ( PRIVMSGS_TABLE , PRIVMSGS_TEXT_TABLE ));
2002-02-12 00:52:59 +00:00
$per_pct = ceil ( $db -> sql_numrows ( $result ) / 40 );
$inc = 0 ;
2001-12-31 19:02:42 +00:00
while ( $row = $db -> sql_fetchrow ( $result ) )
2001-11-24 21:04:51 +00:00
{
2002-02-12 00:52:59 +00:00
if ( $row [ 'msg_text' ] == NULL )
2001-12-31 19:02:42 +00:00
{
// We already converted this post to the new style BBcode, skip this post.
continue ;
}
//
// Nathan's bbcode2 conversion
//
// undo 1.2.x encoding..
$row [ 'msg_text' ] = bbdecode ( stripslashes ( $row [ 'msg_text' ]));
$row [ 'msg_text' ] = undo_make_clickable ( $row [ 'msg_text' ]);
$row [ 'msg_text' ] = str_replace ( " <BR> " , " \n " , $row [ 'msg_text' ]);
// make a uid
$uid = make_bbcode_uid ();
// do 2.x first-pass encoding..
$row [ 'msg_text' ] = smiley_replace ( $row [ 'msg_text' ]);
$row [ 'msg_text' ] = bbencode_first_pass ( $row [ 'msg_text' ], $uid );
$checksig = preg_replace ( '/\[addsig\]$/' , '' , $row [ 'msg_text' ]);
$enable_sig = ( strlen ( $checksig ) == strlen ( $row [ 'msg_text' ])) ? 0 : 1 ;
2002-02-12 00:52:59 +00:00
if ( preg_match ( " /^(.*?) \n ----------------- \n .* $ /is " , $checksig , $matches ) )
2001-12-31 19:02:42 +00:00
{
$checksig = $matches [ 1 ];
$enable_sig = 1 ;
}
$row [ 'msg_text' ] = $checksig ;
$row [ 'msg_status' ] = ( $row [ 'msg_status' ] == 1 ) ? PRIVMSGS_READ_MAIL : PRIVMSGS_NEW_MAIL ;
// Subject contains first 60 characters of msg, remove any BBCode tags
$subject = addslashes ( strip_tags ( substr ( $row [ 'msg_text' ], 0 , 60 )));
$subject = preg_replace ( " / \ [.*? \ :(([a-z0-9]:)?) $uid .*? \ ]/si " , " " , $subject );
$row [ 'msg_text' ] = addslashes ( $row [ 'msg_text' ]);
$sql = " INSERT INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_bbcode_uid, privmsgs_text)
VALUES ( '" . $row[' msg_id '] . "' , '$uid' , '" . $row[' msg_text '] . "' ) " ;
query ( $sql , " Couldn't insert PrivMsg text into " . PRIVMSGS_TEXT_TABLE . " table msg_id " . $row [ 'msg_id' ]);
$sql = " UPDATE " . PRIVMSGS_TABLE . "
SET msg_text = NULL , msg_status = " . $row['msg_status'] . " , privmsgs_subject = '$subject' , privmsgs_attach_sig = $enable_sig
WHERE msg_id = " . $row['msg_id'] ;
query ( $sql , " Couldn't update " . PRIVMSGS_TABLE . " table for msg_id " . $row [ 'post_id' ]);
2002-02-12 00:52:59 +00:00
$inc ++ ;
if ( $inc == $per_pct )
{
print " . " ;
flush ();
$inc = 0 ;
}
2001-11-24 21:04:51 +00:00
}
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-11-24 21:04:51 +00:00
}
2001-10-22 21:26:27 +00:00
2001-12-31 19:02:42 +00:00
lock_tables ( 0 );
2002-02-12 00:52:59 +00:00
end_step ( 'convert_moderators' );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
case 'convert_moderators' ;
2001-12-31 19:02:42 +00:00
$sql = " SELECT *
FROM forum_mods " ;
$result = query ( $sql , " Couldn't get list with all forum moderators " );
while ( $row = $db -> sql_fetchrow ( $result ) )
2001-12-06 18:04:38 +00:00
{
2001-12-31 19:02:42 +00:00
// Check if this moderator and this forum still exist
$sql = " SELECT NULL
FROM " . USERS_TABLE . " , " . FORUMS_TABLE . "
WHERE user_id = " . $row['user_id'] . "
AND forum_id = " . $row['forum_id'] ;
2002-02-12 00:52:59 +00:00
$check_data = query ( $sql , " Couldn't check if user " . $row [ 'user_id' ] . " and forum " . $row [ 'forum_id' ] . " exist " );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
if ( ! ( $rowtest = $db -> sql_fetchrow ( $check_data )) )
2001-12-31 19:02:42 +00:00
{
// Either the moderator or the forum have been deleted, this line in forum_mods was redundant, skip it.
continue ;
}
$sql = " SELECT g.group_id
FROM " . GROUPS_TABLE . " g , " . USER_GROUP_TABLE . " ug
2002-02-12 00:52:59 +00:00
WHERE g . group_id = ug . group_id
2001-12-31 19:02:42 +00:00
AND ug . user_id = " . $row['user_id'] . "
AND g . group_single_user = 1 " ;
2002-02-12 00:52:59 +00:00
$insert_group = query ( $sql , " Couldn't get group number for user " . $row [ 'user_id' ] . " . " );
2001-12-31 19:02:42 +00:00
$group_id = $db -> sql_fetchrow ( $insert_group );
$group_id = $group_id [ 'group_id' ];
2002-02-12 00:52:59 +00:00
print " * Adding moderator for forum " . $row [ 'forum_id' ] . " :: " ;
flush ();
2001-12-31 19:02:42 +00:00
$sql = " INSERT INTO " . AUTH_ACCESS_TABLE . " (group_id, forum_id, auth_mod) VALUES ( $group_id , " . $row [ 'forum_id' ] . " , 1) " ;
query ( $sql , " Couldn't set moderator (user_id = " . $row [ 'user_id' ] . " ) for forum " . $row [ 'forum_id' ] . " . " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-06 18:04:38 +00:00
}
2001-12-31 19:02:42 +00:00
end_step ( 'convert_privforums' );
case 'convert_privforums' :
$sql = " SELECT fa.*, f.forum_name
FROM forum_access fa
LEFT JOIN " . FORUMS_TABLE . " f ON fa . forum_id = f . forum_id
ORDER BY fa . forum_id , fa . user_id " ;
$forum_access = query ( $sql , " Couldn't get list with special forum access (forum_access) " );
$forum_id = - 1 ;
while ( $row = $db -> sql_fetchrow ( $forum_access ) )
2001-12-06 18:04:38 +00:00
{
2001-12-31 19:02:42 +00:00
// Iterate trough access table
2002-02-12 00:52:59 +00:00
if ( $row [ 'forum_id' ] != $forum_id )
2001-12-31 19:02:42 +00:00
{
// This is a new forum, create new group.
$forum_id = $row [ 'forum_id' ];
2002-02-12 00:52:59 +00:00
print " * Creating new group for forum $forum_id :: " ;
flush ();
2001-12-31 19:02:42 +00:00
$sql = " INSERT INTO " . GROUPS_TABLE . " (group_type, group_name, group_description, group_moderator, group_single_user)
VALUES ( " . GROUP_HIDDEN . " , '" . addslashes($row[' forum_name ']) . " Group' , 'Converted Private Forum Group' , " . $row['user_id'] . " , 0 ) " ;
$result = query ( $sql , " Couldn't create group for " . $row [ 'forum_name' ]);
$group_id = $db -> sql_nextid ();
2002-02-12 00:52:59 +00:00
if ( $group_id <= 0 )
2001-12-31 19:02:42 +00:00
{
print " <font color= \" red \" >Group creation failed. Aborting creation of groups...<br></font> \n " ;
continue 2 ;
}
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
print " * Creating auth_access group for forum $forum_id :: " ;
flush ();
2001-12-31 19:02:42 +00:00
$sql = " INSERT INTO " . AUTH_ACCESS_TABLE . " (group_id, forum_id, auth_view, auth_read, auth_post, auth_reply, auth_edit, auth_delete)
VALUES ( $group_id , $forum_id , 1 , 1 , 1 , 1 , 1 , 1 ) " ;
$result = query ( $sql , " Unable to set group auth access. " );
2002-02-12 00:52:59 +00:00
if ( $db -> sql_affectedrows ( $result ) <= 0 )
2001-12-31 19:02:42 +00:00
{
print " <font color= \" red \" >Group creation failed. Aborting creation of groups...</font><br> \n " ;
continue 2 ;
}
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
}
// Add user to the group
$user_id = $row [ 'user_id' ];
$sql = " INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending)
VALUES ( $group_id , $user_id , 0 ) " ;
query ( $sql , " Unable to add user_id $user_id to group_id $group_id <br> \n " );
}
end_step ( 'update_schema' );
case 'update_schema' :
$rename = array (
$table_prefix . " users " => array (
" user_interests " => " user_intrest " ,
" user_allowsmile " => " user_desmile " ,
" user_allowhtml " => " user_html " ,
" user_allowbbcode " => " user_bbcode " ,
" user_style " => " user_theme "
),
$table_prefix . " privmsgs " => array (
" privmsgs_id " => " msg_id " ,
" privmsgs_from_userid " => " from_userid " ,
" privmsgs_to_userid " => " to_userid " ,
" privmsgs_date " => " msg_time " ,
" privmsgs_ip " => " poster_ip " ,
" privmsgs_type " => " msg_status "
),
$table_prefix . " smilies " => array (
" smilies_id " => " id "
)
);
$schema = get_schema ();
$table_def = $schema [ 'table_def' ];
$field_def = $schema [ 'field_def' ];
// Loop tables in schema
2002-02-12 00:52:59 +00:00
while ( list ( $table , $table_def ) = @ each ( $field_def ))
2001-12-31 19:02:42 +00:00
{
// Loop fields in table
2002-02-12 00:52:59 +00:00
print " * Updating table ' $table ' :: " ;
2001-12-31 19:02:42 +00:00
flush ();
$sql = " SHOW FIELDS
FROM $table " ;
$result = query ( $sql , " Can't get definition of current $table table " );
2002-02-12 00:52:59 +00:00
while ( $row = $db -> sql_fetchrow ( $result ) )
2001-12-31 19:02:42 +00:00
{
2002-02-12 00:52:59 +00:00
$current_fields [] = $row [ 'Field' ];
2001-12-31 19:02:42 +00:00
}
$alter_sql = " ALTER TABLE $table " ;
while ( list ( $field , $definition ) = each ( $table_def ))
{
2002-02-12 00:52:59 +00:00
if ( $field == '' )
2001-12-31 19:02:42 +00:00
{
// Skip empty fields if any (shouldn't be needed)
continue ;
}
$type = $definition [ 'type' ];
$size = $definition [ 'size' ];
$default = isset ( $definition [ 'default' ]) ? " DEFAULT " . $definition [ 'default' ] : '' ;
$notnull = $definition [ 'notnull' ] == 1 ? 'NOT NULL' : '' ;
$auto_increment = $definition [ 'auto_increment' ] == 1 ? 'auto_increment' : '' ;
$oldfield = isset ( $rename [ $table ][ $field ]) ? $rename [ $table ][ $field ] : $field ;
2002-02-12 00:52:59 +00:00
if ( ! inarray ( $field , $current_fields ) && $oldfield == $field )
2001-12-31 19:02:42 +00:00
{
// If the current is not a key of $current_def and it is not a field that is
// to be renamed then the field doesn't currently exist.
$changes [] = " ADD $field " . $create_def [ $table ][ $field ];
}
else
{
$changes [] = " CHANGE $oldfield $field " . $create_def [ $table ][ $field ];
}
}
$alter_sql .= join ( ',' , $changes );
unset ( $changes );
unset ( $current_fields );
$sql = " SHOW INDEX
FROM $table " ;
$result = query ( $sql , " Couldn't get list of indices for table $table " );
unset ( $indices );
while ( $row = $db -> sql_fetchrow ( $result ) )
{
$indices [] = $row [ 'Key_name' ];
}
2002-02-12 00:52:59 +00:00
while ( list ( $key_name , $key_field ) = each ( $key_def [ $table ]) )
2001-12-31 19:02:42 +00:00
{
2002-02-12 00:52:59 +00:00
if ( ! inarray ( $key_name , $indices ) )
2001-12-31 19:02:42 +00:00
{
$alter_sql .= ( $key_name == 'PRIMARY' ) ? " , ADD PRIMARY KEY ( $key_field ) " : " , ADD INDEX $key_name ( $key_field ) " ;
}
}
query ( $alter_sql , " Couldn't alter table $table " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
flush ();
2001-12-06 18:04:38 +00:00
}
2001-12-31 19:02:42 +00:00
end_step ( 'convert_forums' );
case 'convert_forums' :
$sql = " SELECT *
FROM " . FORUMS_TABLE;
$result = query ( $sql , " Couldn't get list with all forums " );
while ( $row = $db -> sql_fetchrow ( $result ) )
{
2002-02-12 00:52:59 +00:00
print " * Converting forum ' " . $row [ 'forum_name' ] . " ' :: " ;
flush ();
2001-12-31 19:02:42 +00:00
// Old auth structure:
// forum_type: (only concerns viewing)
// 0 = Public
// 1 = Private
2002-02-12 00:52:59 +00:00
switch ( $row [ 'forum_type' ] )
2001-12-31 19:02:42 +00:00
{
case 0 :
$auth_view = AUTH_ALL ;
$auth_read = AUTH_ALL ;
break ;
default :
$auth_view = AUTH_ALL ;
$auth_read = AUTH_ALL ;
break ;
}
2001-12-06 18:04:38 +00:00
2001-12-31 19:02:42 +00:00
// forum_access: (only concerns posting)
// 1 = Registered users only
// 2 = Anonymous Posting
// 3 = Moderators/Administrators only
2002-02-12 00:52:59 +00:00
switch ( $row [ 'forum_access' ] )
2001-12-31 19:02:42 +00:00
{
case 1 :
// Public forum, no anonymous posting
$auth_post = AUTH_REG ;
$auth_reply = AUTH_REG ;
$auth_edit = AUTH_REG ;
$auth_delete = AUTH_REG ;
$auth_vote = AUTH_REG ;
$auth_pollcreate = AUTH_REG ;
$auth_sticky = AUTH_MOD ;
$auth_announce = AUTH_MOD ;
break ;
case 2 :
$auth_post = AUTH_ALL ;
$auth_reply = AUTH_ALL ;
$auth_edit = AUTH_ALL ;
$auth_delete = AUTH_ALL ;
$auth_vote = AUTH_ALL ;
$auth_pollcreate = AUTH_ALL ;
$auth_sticky = AUTH_MOD ;
$auth_announce = AUTH_MOD ;
break ;
default :
$auth_post = AUTH_MOD ;
$auth_reply = AUTH_MOD ;
$auth_edit = AUTH_MOD ;
$auth_delete = AUTH_MOD ;
$auth_vote = AUTH_MOD ;
$auth_pollcreate = AUTH_MOD ;
$auth_sticky = AUTH_MOD ;
$auth_announce = AUTH_MOD ;
break ;
}
$sql = " UPDATE " . FORUMS_TABLE . " SET
auth_view = $auth_view ,
auth_read = $auth_read ,
auth_post = $auth_post ,
auth_reply = $auth_reply ,
auth_edit = $auth_edit ,
auth_delete = $auth_delete ,
auth_vote = $auth_vote ,
auth_pollcreate = $auth_pollcreate ,
auth_sticky = $auth_sticky ,
auth_announce = $auth_announce
WHERE forum_id = " . $row['forum_id'] ;
query ( $sql , " Was unable to update forum permissions! " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
}
end_step ( 'insert_themes' );
case 'insert_themes' :
2002-02-12 00:52:59 +00:00
print " * Inserting new values into themes table :: " ;
2001-12-31 19:02:42 +00:00
@ reset ( $inserts );
while ( list ( $table , $inserts_table ) = each ( $inserts ) )
2001-10-22 21:26:27 +00:00
{
2002-02-12 00:52:59 +00:00
if ( $table == THEMES_TABLE )
2001-10-22 21:26:27 +00:00
{
2002-02-12 00:52:59 +00:00
$per_pct = ceil ( count ( $inserts_table ) / 40 );
$inc = 0 ;
2001-12-31 19:02:42 +00:00
while ( list ( $nr , $insert ) = each ( $inserts_table ) )
{
query ( $insert , " Couldn't insert value into " . THEMES_TABLE );
2002-02-12 00:52:59 +00:00
$inc ++ ;
if ( $inc == $per_pct )
{
print " . " ;
flush ();
$inc = 0 ;
}
2001-12-31 19:02:42 +00:00
}
2001-10-22 21:26:27 +00:00
}
}
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
end_step ( 'fulltext_search_indexing' );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
case 'fulltext_search_indexing' :
2001-12-31 19:02:42 +00:00
//
// Generate search word list
//
// Fetch a batch of posts_text entries
//
$sql = " SELECT COUNT(*) as total, MAX(post_id) as max_post_id
FROM " . POSTS_TEXT_TABLE;
$result = query ( $sql , " Couldn't get post count totals " );
$max_post_id = $db -> sql_fetchrow ( $result );
$totalposts = $max_post_id [ 'total' ];
$max_post_id = $max_post_id [ 'max_post_id' ];
2002-02-12 00:52:59 +00:00
$per_percent = round (( $totalposts / 500 ) * 10 );
2001-12-31 19:02:42 +00:00
$postcounter = ( ! isset ( $HTTP_GET_VARS [ 'batchstart' ]) ) ? 0 : $HTTP_GET_VARS [ 'batchstart' ];
2002-02-12 00:52:59 +00:00
$batchsize = 150 ; // Process this many posts per loop
2001-12-31 19:02:42 +00:00
$batchcount = 0 ;
2002-02-12 00:52:59 +00:00
$total_percent = 0 ;
2001-12-31 19:02:42 +00:00
for (; $postcounter <= $max_post_id ; $postcounter += $batchsize )
{
$batchstart = $postcounter + 1 ;
$batchend = $postcounter + $batchsize ;
$batchcount ++ ;
2002-02-12 00:52:59 +00:00
print " * Fulltext Indexing ( $batchstart to $batchend ) :: " ;
flush ();
2001-12-31 19:02:42 +00:00
$sql = " SELECT *
FROM " . POSTS_TEXT_TABLE . "
WHERE post_id
BETWEEN $batchstart
AND $batchend " ;
$posts_result = query ( $sql , " Couldn't obtain post_text " );
2002-02-12 00:52:59 +00:00
$per_pct = ceil ( $db -> sql_numrows ( $posts_result ) / 40 );
$inc = 0 ;
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
if ( $row = $db -> sql_fetchrow ( $posts_result ) )
{
do
{
add_search_words ( $row [ 'post_id' ], $row [ 'post_text' ], $row [ 'post_subject' ]);
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
$inc ++ ;
if ( $inc == $per_pct )
{
print " . " ;
flush ();
$inc = 0 ;
}
}
while ( $row = $db -> sql_fetchrow ( $posts_result ) );
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
$db -> sql_freeresult ( $posts_result );
// Remove common words after the first 2 batches and after every 4th batch after that.
if ( $batchcount % 4 == 3 )
{
remove_common ( 'global' , 0.4 );
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
}
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
end_step ( 'update_topics' );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
case 'update_topics' :
$sql = " SELECT MAX(topic_id) AS max_topic
FROM " . TOPICS_TABLE;
$result = query ( $sql , " Couldn't get max topic id " );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
$row = $db -> sql_fetchrow ( $result );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
$maxid = $row [ 'max_topic' ];
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
lock_tables ( 1 , array ( TOPICS_TABLE , POSTS_TABLE ));
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
$batchsize = 1000 ;
for ( $i = 0 ; $i <= $maxid ; $i += $batchsize )
{
$batchstart = $i + 1 ;
$batchend = $i + $batchsize ;
print " * Setting topic first post_id ( $batchstart to $batchend ) :: " ;
flush ();
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
$sql = " SELECT MIN(post_id) AS first_post_id, topic_id
FROM " . POSTS_TABLE . "
WHERE topic_id
BETWEEN $batchstart
AND $batchend
GROUP BY topic_id
ORDER BY topic_id ASC " ;
$result = query ( $sql , " Couldn't get post id data " );
$per_pct = ceil ( $db -> sql_numrows ( $result ) / 40 );
$inc = 0 ;
if ( $row = $db -> sql_fetchrow ( $result ) )
{
do
{
$sql = " UPDATE " . TOPICS_TABLE . "
SET topic_first_post_id = " . $row['first_post_id'] . "
WHERE topic_id = " . $row['topic_id'] ;
query ( $sql , " Couldn't update topic first post id in topic :: $topic_id " );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
$inc ++ ;
if ( $inc == $per_pct )
2001-12-31 19:02:42 +00:00
{
2002-02-12 00:52:59 +00:00
print " . " ;
flush ();
$inc = 0 ;
2001-12-31 19:02:42 +00:00
}
2002-02-12 00:52:59 +00:00
}
while ( $row = $db -> sql_fetchrow ( $result ) );
2001-12-31 19:02:42 +00:00
}
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
}
2002-02-12 00:52:59 +00:00
lock_tables ( 0 );
end_step ( 'final_configuration' );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
case 'final_configuration' :
2001-12-31 19:02:42 +00:00
//
// Update forum last post information
//
$sql = " SELECT forum_id, forum_name
FROM " . FORUMS_TABLE;
$f_result = query ( $sql , " Couldn't obtain forum_ids " );
while ( $forum_row = $db -> sql_fetchrow ( $f_result ) )
{
2002-02-12 00:52:59 +00:00
print " * Updating ' " . $forum_row [ 'forum_name' ] . " ' post info :: " ;
2001-12-31 19:02:42 +00:00
flush ();
$id = $forum_row [ 'forum_id' ];
2002-02-12 00:52:59 +00:00
$sql = " SELECT MIN(p.post_id) AS first_post, MAX(p.post_id) AS last_post
2001-12-31 19:02:42 +00:00
FROM " . POSTS_TABLE . " p , " . TOPICS_TABLE . " t
WHERE p . forum_id = $id
AND p . topic_id = t . topic_id " ;
$result = query ( $sql , " Could not get post ID forum post information :: $id " );
2002-02-12 00:52:59 +00:00
if ( $row = $db -> sql_fetchrow ( $result ) )
2001-12-31 19:02:42 +00:00
{
2002-02-12 00:52:59 +00:00
$first_post = ( $row [ 'first_post' ] ) ? $row [ 'first_post' ] : 0 ;
2001-12-31 19:02:42 +00:00
$last_post = ( $row [ 'last_post' ]) ? $row [ 'last_post' ] : 0 ;
}
else
{
2002-02-12 00:52:59 +00:00
$first_post = 0 ;
2001-12-31 19:02:42 +00:00
$last_post = 0 ;
}
$sql = " SELECT COUNT(post_id) AS total
FROM " . POSTS_TABLE . "
WHERE forum_id = $id " ;
$result = query ( $sql , " Could not get post count forum post information :: $id " );
2002-02-12 00:52:59 +00:00
if ( $row = $db -> sql_fetchrow ( $result ) )
2001-12-31 19:02:42 +00:00
{
$total_posts = ( $row [ 'total' ]) ? $row [ 'total' ] : 0 ;
}
else
{
$total_posts = 0 ;
}
$sql = " SELECT COUNT(topic_id) AS total
FROM " . TOPICS_TABLE . "
WHERE forum_id = $id
AND topic_status <> " . TOPIC_MOVED;
$result = query ( $sql , " Could not get topic count forum post information :: $id " );
2002-02-12 00:52:59 +00:00
if ( $row = $db -> sql_fetchrow ( $result ) )
2001-12-31 19:02:42 +00:00
{
$total_topics = ( $row [ 'total' ]) ? $row [ 'total' ] : 0 ;
}
else
{
$total_topics = 0 ;
}
$sql = " UPDATE " . FORUMS_TABLE . "
SET forum_last_post_id = $last_post , forum_posts = $total_posts , forum_topics = $total_topics
WHERE forum_id = $id " ;
query ( $sql , " Could not update forum post information :: $id " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
}
2002-02-12 00:52:59 +00:00
print " <br /> \n * Update default user and finalise configuration :: " ;
2001-12-31 19:02:42 +00:00
flush ();
//
// Update the default admin user with their information.
//
$sql = " SELECT MIN(user_regdate) AS oldest_time
FROM " . USERS_TABLE . "
WHERE user_regdate > 0 " ;
$result = query ( $sql , " Couldn't obtain oldest post time " );
$row = $db -> sql_fetchrow ( $result );
$sql = " INSERT INTO " . $table_prefix . " config (config_name, config_value)
VALUES ( 'board_startdate' , " . $row['oldest_time'] . " ) " ;
query ( $sql , " Couldn't insert board_startdate " );
//
// Change session table to HEAP if MySQL version matches
//
$sql = " SELECT VERSION() AS mysql_version " ;
$result = query ( $sql , " Couldn't obtain MySQL Version " );
$row = $db -> sql_fetchrow ( $result );
$version = $row [ 'mysql_version' ];
2002-02-12 00:52:59 +00:00
if ( preg_match ( " /^(3 \ .23)|(4 \ .)/ " , $version ) )
2001-12-31 19:02:42 +00:00
{
$sql = " ALTER TABLE " . $table_prefix . " sessions
TYPE = HEAP " ;
2002-01-01 22:52:18 +00:00
$db -> sql_query ( $sql );
2001-12-31 19:02:42 +00:00
}
2002-02-12 00:52:59 +00:00
echo " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
end_step ( 'drop_fields' );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
case 'drop_fields' :
2001-12-31 19:02:42 +00:00
$fields = array (
BANLIST_TABLE => array ( " ban_start " , " ban_end " , " ban_time_type " ),
2002-01-01 00:27:55 +00:00
FORUMS_TABLE => array ( " forum_access " , " forum_moderator " , " forum_type " ),
2001-12-31 19:02:42 +00:00
PRIVMSGS_TABLE => array ( " msg_text " ),
RANKS_TABLE => array ( " rank_max " ),
2002-01-01 00:27:55 +00:00
SMILIES_TABLE => array ( " emotion " )
2001-12-31 19:02:42 +00:00
);
while ( list ( $table , $field_data ) = each ( $fields ) )
{
for ( $i = 0 ; $i < count ( $field_data ); $i ++ )
{
2002-02-12 00:52:59 +00:00
print " * Drop field ' " . $field_data [ $i ] . " ' in ' $table ' :: " ;
2001-12-31 19:02:42 +00:00
flush ();
$sql = " ALTER TABLE $table
DROP COLUMN " . $field_data[$i] ;
query ( $sql , " Couldn't drop field :: " . $field_data [ $i ] . " from table :: $table " );
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
}
}
2002-02-12 00:52:59 +00:00
end_step ( 'drop_tables' );
2001-12-31 19:02:42 +00:00
2002-02-12 00:52:59 +00:00
case 'drop_tables' :
2002-01-01 15:46:59 +00:00
$drop_tables = array ( 'access' , 'forum_access' , 'forum_mods' , 'headermetafooter' , 'whosonline' , $table_prefix . 'old_config' );
2001-12-31 19:02:42 +00:00
for ( $i = 0 ; $i < count ( $drop_tables ); $i ++ )
{
2002-02-12 00:52:59 +00:00
print " * Dropping table ' " . $drop_tables [ $i ] . " ' :: " ;
2001-12-31 19:02:42 +00:00
flush ();
$sql = " DROP TABLE " . $drop_tables [ $i ];
query ( $sql , " Couldn't drop table :: " . $drop_tables [ $i ]);
2002-02-12 00:52:59 +00:00
print " <span class= \" ok \" ><b>OK</b></span><br /> \n " ;
2001-12-31 19:02:42 +00:00
}
2002-02-12 00:52:59 +00:00
echo " \n <br /><br /> \n \n <font size= \" +3 \" ><b>UPGRADE COMPLETED</b></font><br /> \n " ;
2001-10-22 21:26:27 +00:00
}
}
2001-12-31 19:02:42 +00:00
print " <br />If the upgrade completed without error you may click <a href= \" index. $phpEx\ " > Here </ a > to proceed to the index < br /> " ;
2002-02-12 00:52:59 +00:00
common_footer ();
2002-03-05 14:15:39 +00:00
?>