Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

convertdb.php

Go to the documentation of this file.
00001 <?php 00002 00003 print "This script is obsolete!"; 00004 print "It is retained in the source here in case some of its 00005 code might be useful for ad-hoc conversion tasks, but it is 00006 not maintained and probably won't even work as is."; 00007 exit(); 00008 00009 # Database conversion (from May 2002 format). Assumes that 00010 # the old tables have been loaded into an empty database from 00011 # dump files. 00012 00013 global $IP; 00014 require_once( "../LocalSettings.php" ); 00015 require_once( "../AdminSettings.php" ); 00016 require_once( "$IP/Setup.php" ); 00017 00018 $wgTitle = Title::newFromText( "Conversion script" ); 00019 require_once( "./rebuildLinks.inc" ); 00020 require_once( "./rebuildRecentchanges.inc" ); 00021 require_once( "./buildTables.inc" ); 00022 set_time_limit(0); 00023 00024 $wgDBuser = "wikiadmin"; 00025 $wgDBpassword = $wgDBadminpassword; 00026 # $wgImageDirectory = "/usr/local/apache/htdocs/wikiimages"; 00027 $wgImageDirectory = "/usr/local/apache/htdocs/upload"; 00028 $wgMetaImageDirectory = "/usr/local/apache/htdocs-meta/upload"; 00029 00030 renameOldTables(); 00031 buildTables(); 00032 initializeTables(); 00033 00034 # convertImageDirectories(); 00035 convertUserTable(); 00036 convertOldTable(); 00037 convertCurTable(); 00038 00039 buildIndexes(); 00040 00041 rebuildLinkTablesPass1(); 00042 rebuildLinkTablesPass2(); 00043 00044 # This is kinda ugly, could be done cleaner 00045 convertImageDirectories(); 00046 #rebuildLinkTablesPass1(); 00047 #rebuildLinkTablesPass2(); 00048 # 00049 00050 removeOldTables(); 00051 00052 refillRandom(); 00053 rebuildRecentChangesTable(); 00054 00055 print "Done.\n"; 00056 exit(); 00057 00058 ########## End of script, beginning of functions. 00059 00060 function convertUserTable() 00061 { 00062 $count = 0; 00063 print "Converting USER table.\n"; 00064 00065 $sql = "LOCK TABLES old_user READ, user WRITE"; 00066 $newres = wfQuery( $sql, DB_WRITE ); 00067 00068 $sql = "SELECT user_id,user_name,user_rights,user_password," . 00069 "user_email,user_options,user_watch FROM old_user"; 00070 $oldres = wfQuery( $sql, DB_READ ); 00071 00072 $sql = "DELETE FROM user"; 00073 $newres = wfQuery( $sql, DB_WRITE ); 00074 00075 $sql = ""; 00076 while ( $row = mysql_fetch_object( $oldres ) ) { 00077 $name = addslashes( fixUserName( $row->user_name ) ); 00078 if ( "" == $name ) continue; # Don't convert illegal names 00079 00080 if ( 0 == ( $count % 10 ) ) { 00081 if ( 0 != $count ) { $newres = wfQuery( $sql, DB_WRITE ); } 00082 00083 $sql = "INSERT INTO user (user_id,user_name,user_rights," . 00084 "user_password,user_newpassword,user_email,user_options," . 00085 "user_watch) VALUES "; 00086 } else { 00087 $sql .= ","; 00088 } 00089 $ops = addslashes( fixUserOptions( $row->user_options ) ); 00090 $rights = addslashes( fixUserRights( $row->user_rights ) ); 00091 $email = addslashes( $row->user_email ); 00092 $pwd = addslashes( md5( $row->user_password ) ); 00093 $watch = addslashes( $row->user_watch ); 00094 00095 $sql .= "({$row->user_id},'{$name}','{$rights}','{$pwd}',''," . 00096 "'{$email}','{$ops}','{$watch}')"; 00097 00098 if ( ( ++$count % 1000 ) == 0 ) { 00099 print "$count user records processed.\n"; 00100 } 00101 } 00102 if ( $sql ) { $newres = wfQuery( $sql, DB_WRITE ); } 00103 00104 print "$count user records processed.\n"; 00105 mysql_free_result( $oldres ); 00106 00107 $sql = "UNLOCK TABLES"; 00108 $newres = wfQuery( $sql, DB_WRITE ); 00109 } 00110 00111 # Convert May 2002 version of database into new format. 00112 # 00113 function convertCurTable() 00114 { 00115 $count = $countables = 0; 00116 print "Converting CUR table.\n"; 00117 00118 $sql = "LOCK TABLES old_cur READ, cur WRITE, site_stats WRITE"; 00119 $newres = wfQuery( $sql, DB_WRITE ); 00120 00121 $sql = "SELECT cur_id,cur_title,cur_text,cur_comment,cur_user," . 00122 "cur_timestamp,cur_minor_edit,cur_restrictions," . 00123 "cur_counter,cur_ind_title,cur_user_text FROM old_cur"; 00124 $oldres = wfQuery( $sql, DB_READ ); 00125 00126 $sql = "DELETE FROM cur"; 00127 wfQuery( $sql, DB_WRITE ); 00128 00129 $sql = "DELETE FROM site_stats"; 00130 wfQuery( $sql, DB_WRITE ); 00131 00132 $sql = ""; 00133 while ( $row = mysql_fetch_object( $oldres ) ) { 00134 $nt = Title::newFromDBkey( $row->cur_title ); 00135 $title = addslashes( $nt->getDBkey() ); 00136 $ns = $nt->getNamespace(); 00137 $text = addslashes( convertMediaLinks( $row->cur_text ) ); 00138 00139 $ititle = addslashes( indexTitle( $nt->getText() ) ); 00140 $itext = addslashes( indexText( $text, $ititle ) ); 00141 00142 $com = addslashes( $row->cur_comment ); 00143 $cr = addslashes( fixUserRights( $row->cur_restrictions ) ); 00144 $cut = addslashes( $row->cur_user_text ); 00145 if ( "" == $cut ) { $cut = "Unknown"; } 00146 00147 if ( 2 == $row->cur_minor_edit ) { $isnew = 1; } 00148 else { $isnew = 0; } 00149 if ( 0 != $row->cur_minor_edit ) { $isme = 1; } 00150 else { $isme = 0; } 00151 00152 # $counter = $row->cur_counter; 00153 # if ( ! $counter ) { $counter = 0; } 00154 00155 if ( preg_match( "/^#redirect/i", $text ) ) { 00156 $redir = 1; 00157 $text = fixRedirect( $text ); 00158 } else { $redir = 0; } 00159 00160 $sql = "INSERT INTO cur (cur_id,cur_namespace," . 00161 "cur_title,cur_text,cur_comment,cur_user," . 00162 "cur_timestamp,cur_minor_edit,cur_is_new," . 00163 "cur_restrictions,cur_counter,cur_ind_title," . 00164 "cur_ind_text,cur_is_redirect,cur_user_text) VALUES "; 00165 $sql .= "({$row->cur_id},{$ns},'{$title}','{$text}'," . 00166 "'{$com}',{$row->cur_user},'{$row->cur_timestamp}'," . 00167 "{$isme},{$isnew},'{$cr}',0,'{$ititle}','{$itext}'," . 00168 "{$redir},'{$cut}')"; 00169 wfQuery( $sql, DB_WRITE ); 00170 00171 if ( ( ++$count % 1000 ) == 0 ) { 00172 print "$count article records processed.\n"; 00173 } 00174 if ( 0 != $ns ) { continue; } 00175 if ( 0 != $redir ) { continue; } 00176 if ( false === strstr( $text, "," ) ) { continue; } 00177 ++$countables; 00178 } 00179 print "$count article records processed.\n"; 00180 mysql_free_result( $oldres ); 00181 00182 $sql = "REPLACE INTO site_stats (ss_row_id,ss_total_views," . 00183 "ss_total_edits,ss_good_articles) VALUES (1,0,0,{$countables})"; 00184 wfQuery( $sql, DB_WRITE ); 00185 00186 $sql = "UNLOCK TABLES"; 00187 $newres = wfQuery( $sql, DB_WRITE ); 00188 } 00189 00190 # Convert May 2002 version of database into new format. 00191 # 00192 function convertOldTable() 00193 { 00194 $count = 0; 00195 print "Converting OLD table.\n"; 00196 00197 $sql = "LOCK TABLES old_old READ, old WRITE"; 00198 $newres = wfQuery( $sql, DB_WRITE ); 00199 00200 $sql = "SELECT old_id,old_title,old_text,old_comment,old_user," . 00201 "old_timestamp,old_minor_edit,old_user_text FROM old_old"; 00202 $oldres = wfQuery( $sql, DB_READ ); 00203 00204 $sql = "DELETE FROM old"; 00205 $newres = wfQuery( $sql, DB_WRITE ); 00206 00207 while ( $row = mysql_fetch_object( $oldres ) ) { 00208 $nt = Title::newFromDBkey( $row->old_title ); 00209 $title = addslashes( $nt->getDBkey() ); 00210 $ns = $nt->getNamespace(); 00211 #$text = addslashes( convertMediaLinks( $row->old_text ) ); 00212 # DO NOT convert media links on old versions!!!!! 00213 # Old table should always be left intact 00214 $text = addslashes($row->old_text); 00215 00216 $com = addslashes( $row->old_comment ); 00217 $cut = addslashes( $row->old_user_text ); 00218 if ( "" == $cut ) { $cut = "Unknown"; } 00219 00220 if ( 0 != $row->old_minor_edit ) { $isme = 1; } 00221 else { $isme = 0; } 00222 00223 if ( preg_match( "/^#redirect/i", $text ) ) { 00224 $redir = 1; 00225 $text = fixRedirect( $text ); 00226 } else { $redir = 0; } 00227 00228 $sql = "INSERT INTO old (old_id,old_namespace,old_title," . 00229 "old_text,old_comment,old_user," . 00230 "old_timestamp,old_minor_edit,old_user_text) VALUES "; 00231 $sql .= "({$row->old_id},{$ns},'{$title}','{$text}'," . 00232 "'{$com}',{$row->old_user},'{$row->old_timestamp}'," . 00233 "{$isme},'{$cut}')"; 00234 wfQuery( $sql, DB_WRITE ); 00235 00236 if ( ( ++$count % 1000 ) == 0 ) { 00237 print "$count history records processed.\n"; 00238 } 00239 } 00240 print "$count history records processed.\n"; 00241 mysql_free_result( $oldres ); 00242 00243 $sql = "UNLOCK TABLES"; 00244 $newres = wfQuery( $sql, DB_WRITE ); 00245 } 00246 00247 function convertImageDirectoriesX() 00248 { 00249 global $wgImageDirectory, $wgMetaImageDirectory, $wgUploadDirectory; 00250 $count = 0; 00251 00252 print "Moving image files.\n"; 00253 $dir = opendir( $wgImageDirectory ) or die( 00254 "Couldn't open directory \"{$wgImageDirectory}\".\n" ); 00255 00256 while ( false !== ( $oname = readdir( $dir ) ) ) { 00257 if ( "." == $oname{0} ) continue; 00258 00259 $nt = Title::newFromText( $oname ); 00260 $nname = $nt->getDBkey(); 00261 00262 $exts = array( "png", "gif", "jpg", "jpeg", "ogg" ); 00263 $ext = strrchr( $nname, "." ); 00264 if ( false === $ext ) { $ext = ""; } 00265 else { $ext = strtolower( substr( $ext, 1 ) ); } 00266 if ( ! in_array( $ext, $exts ) ) { 00267 print "Skipping \"{$oname}\"\n"; 00268 continue; 00269 } 00270 $oldumask = umask(0); 00271 $hash = md5( $nname ); 00272 $dest = $wgUploadDirectory . "/" . $hash{0}; 00273 if ( ! is_dir( $dest ) ) { 00274 mkdir( $dest, 0777 ) or die( "Can't create \"{$dest}\".\n" ); 00275 } 00276 $dest .= "/" . substr( $hash, 0, 2 ); 00277 if ( ! is_dir( $dest ) ) { 00278 mkdir( $dest, 0777 ) or die( "Can't create \"{$dest}\".\n" ); 00279 } 00280 umask( $oldumask ); 00281 00282 if ( copy( "{$wgImageDirectory}/{$oname}", "{$dest}/{$nname}" ) ) { 00283 ++$count; 00284 00285 $sql = "DELETE FROM image WHERE img_name='" . 00286 addslashes( $nname ) . "'"; 00287 $res = wfQuery( $sql, DB_WRITE ); 00288 00289 $sql = "INSERT INTO image (img_name,img_timestamp,img_user," . 00290 "img_user_text,img_size,img_description) VALUES ('" . 00291 addslashes( $nname ) . "','" . 00292 date( "YmdHis" ) . "',0,'(Automated conversion)','" . 00293 filesize( "{$dest}/{$nname}" ) . "','')"; 00294 $res = wfQuery( $sql, DB_WRITE ); 00295 } else { 00296 die( "Couldn't copy \"{$oname}\" to \"{$nname}\"\n" ); 00297 } 00298 } 00299 print "{$count} images moved.\n"; 00300 } 00301 00302 function convertImageDirectories() 00303 { 00304 global $wgImageDirectory, $wgMetaImageDirectory, $wgUploadDirectory; 00305 $count = 0; 00306 00307 00308 $sql = "SELECT DISTINCT il_to FROM imagelinks"; 00309 $result = wfQuery ( $sql, DB_READ ) ; 00310 00311 while ( $row = mysql_fetch_object ( $result ) ) { 00312 $oname = $row->il_to ; 00313 $nname = ucfirst ( $oname ) ; 00314 00315 $exts = array( "png", "gif", "jpg", "jpeg", "ogg" ); 00316 $ext = strrchr( $nname, "." ); 00317 if ( false === $ext ) { $ext = ""; } 00318 else { $ext = strtolower( substr( $ext, 1 ) ); } 00319 if ( ! in_array( $ext, $exts ) ) { 00320 print "Skipping \"{$oname}\"\n"; 00321 continue; 00322 } 00323 $oldumask = umask(0); 00324 $hash = md5( $nname ); 00325 $dest = $wgUploadDirectory . "/" . $hash{0}; 00326 $wgImageDirectoryHash = $wgImageDirectory . "/" . $hash{0} . "/" . substr ( $hash , 0, 2); 00327 $wgMetaImageDirectoryHash = $wgMetaImageDirectory . "/" . $hash{0} . "/" . substr( $hash, 0, 2); 00328 if ( ! is_dir( $dest ) ) { 00329 mkdir( $dest, 0777 ) or die( "Can't create \"{$dest}\".\n" ); 00330 } 00331 $dest .= "/" . substr( $hash, 0, 2 ); 00332 if ( ! is_dir( $dest ) ) { 00333 mkdir( $dest, 0777 ) or die( "Can't create \"{$dest}\".\n" ); 00334 } 00335 umask( $oldumask ); 00336 00337 #echo "Would be copying {$wgImageDirectoryHash}/{$oname} to {$dest}/{$nname}\n"; 00338 #continue; 00339 00340 if ( copy( "{$wgImageDirectoryHash}/{$nname}", "{$dest}/{$nname}" ) 00341 or copy( "{$wgImageDirectory}/{$oname}", "{$dest}/{$nname}" ) 00342 or copy( "{$wgImageDirectory}/".strtolower($oname), "{$dest}/{$nname}" ) 00343 or copy( "{$wgMetaImageDirectoryHash}/{$oname}", "{$dest}/{$nname}" ) 00344 or copy( "{$wgMetaImageDirectory}/{$oname}", "{$dest}/{$nname}" ) 00345 or copy( "{$wgMetaImageDirectory}/".strtolower($oname), "{$dest}/{$nname}" ) ) { 00346 ++$count; 00347 00348 $sql = "DELETE FROM image WHERE img_name='" . 00349 addslashes( $nname ) . "'"; 00350 $res = wfQuery( $sql, DB_WRITE ); 00351 00352 $sql = "INSERT INTO image (img_name,img_timestamp,img_user," . 00353 "img_user_text,img_size,img_description) VALUES ('" . 00354 addslashes( $nname ) . "','" . 00355 date( "YmdHis" ) . "',0,'(Automated conversion)','" . 00356 filesize( "{$dest}/{$nname}" ) . "','')"; 00357 $res = wfQuery( $sql, DB_WRITE ); 00358 } else { 00359 echo( "Couldn't copy \"{$oname}\" to \"{$nname}\"\n" ); 00360 } 00361 } 00362 } 00363 00364 # Utility functions for the above. 00365 # 00366 function convertMediaLinks( $text ) 00367 { 00368 global $wgLang; 00369 $ins = $wgLang->getNsText( Namespace::getImage() ); 00370 00371 $q = $text; 00372 $text = preg_replace( 00373 "/(^|[^[])http:\/\/(www.||meta.)wikipedia.(?:com|org)\/upload\/(?:[0-9a-f]\/[0-9a-f][0-9a-f]\/|)" . 00374 "([a-zA-Z0-9_:.~\%\-]+)\.(png|PNG|jpg|JPG|jpeg|JPEG|gif|GIF)/", 00375 "\\1[[{$ins}:\\3.\\4]]", $text ); 00376 $text = preg_replace( 00377 "/(^|[^[])http:\/\/(www.||meta.)wikipedia.(?:com|org)\/images\/uploads\/" . 00378 "([a-zA-Z0-9_:.~\%\-]+)\.(png|PNG|jpg|JPG|jpeg|JPEG|gif|GIF)/", 00379 "\\1[[{$ins}:\\3.\\4]]", $text ); 00380 00381 $text = preg_replace( 00382 "/(^|[^[])http:\/\/(www.||meta.)wikipedia.(?:com|org)\/upload\/(?:[0-9a-f]\/[0-9a-f][0-9a-f]\/|)" . 00383 "([a-zA-Z0-9_:.~\%\-]+)/", "\\1[[media:\\3]]", $text ); 00384 $text = preg_replace( 00385 "/(^|[^[])http:\/\/(www.||meta.)wikipedia.(?:com|org)\/images\/uploads\/" . 00386 "([a-zA-Z0-9_:.~\%\-]+)/", "\\1[[media:\\3]]", $text ); 00387 00388 if ($q != $text) echo "BOOF!"; else echo "."; 00389 return $text; 00390 } 00391 00392 function fixRedirect( $text ) 00393 { 00394 $tc = "[&;%\\-,.\\(\\)' _0-9A-Za-z\\/:\\xA0-\\xff]"; 00395 $re = "#redirect"; 00396 if ( preg_match( "/^{$re}\\s*\\[{$tc}+\\]/i", $text ) ) { 00397 $text = preg_replace( "/^({$re})\\s*\\[\\s*({$tc}+)\\]/i", 00398 "\\1 [[\\2]]", $text, 1 ); 00399 } else if ( preg_match( "/^{$re}\\s+{$tc}+/i", $text ) ) { 00400 $text = preg_replace( "/^({$re})\\s+({$tc}+)/i", 00401 "\\1 [[\\2]]", $text, 1 ); 00402 } 00403 return $text; 00404 } 00405 00406 function fixUserOptions( $in ) 00407 { 00408 $s = urldecode( $in ); 00409 $a = explode( "\n", $s ); 00410 00411 foreach ( $a as $l ) { 00412 if ( preg_match( "/^([A-Za-z0-9_]+)=(.*)/", $l, $m ) ) { 00413 $ops[$m[1]] = $m[2]; 00414 } 00415 } 00416 $nops = array(); 00417 00418 $q = strtolower( $ops["quickBar"] ); 00419 if ( $q == "none" ) { $q = 0; } 00420 else { $q = 1; } # Default to left 00421 $nops["quickbar"] = $q; 00422 00423 if ( $ops["markupNewTopics"] == "inverse" ) { 00424 $nops["highlightbroken"] = 1; 00425 } 00426 $sk = substr( strtolower( $ops["skin"] ), 0, 4 ); 00427 if ( "star" == $sk ) { $sk = 0; } 00428 else if ( "nost" == $sk ) { $sk = 1; } 00429 else if ( "colo" == $sk ) { $sk = 2; } 00430 else { $sk = 0; } 00431 $nops["skin"] = $sk; 00432 00433 $u = strtolower( $ops["underlineLinks"] ); 00434 if ( "yes" == $u || "on" == $u ) { $nops["underline"] = 1; } 00435 else { $nops["underline"] = 0; } 00436 00437 $t = ( (int) ($ops["hourDiff"]) ); 00438 if ( $t < -23 || $t > 23 ) { $t = 0; } 00439 if ( 0 != $t ) { $nops["timecorrection"] = $t; } 00440 00441 $j = strtolower( $ops["justify"] ); 00442 if ( "yes" == $j || "on" == $j ) { $nops["justify"] = 1; } 00443 $n = strtolower( $ops["numberHeadings"] ); 00444 if ( "yes" == $n || "on" == $n ) { $nops["numberheadings"] = 1; } 00445 $h = strtolower( $ops["hideMinor"] ); 00446 if ( "yes" == $h || "on" == $h ) { $nops["hideminor"] = 1; } 00447 $r = strtolower( $ops["rememberPassword"] ); 00448 if ( "yes" == $r || "on" == $r ) { $nops["rememberpassword"] = 1; } 00449 $s = strtolower( $ops["showHover"] ); 00450 if ( "yes" == $s || "on" == $s ) { $nops["hover"] = 1; } 00451 00452 $c = $ops["cols"]; 00453 if ( $c < 20 || c > 200 ) { $nops["cols"] = 80; } 00454 else { $nops["cols"] = $c; } 00455 $r = $ops["rows"]; 00456 if ( $r < 5 || $r > 100 ) { $nops["rows"] = 20; } 00457 else { $nops["rows"] = $r; } 00458 $r = $ops["resultsPerPage"]; 00459 if ( $r < 3 || $r > 500 ) { $nops["searchlimit"] = 20; } 00460 else { $nops["searchlimit"] = $r; } 00461 $r = $ops["viewRecentChanges"]; 00462 if ( $r < 10 || $r > 1000 ) { $nops["rclimit"] = 50; } 00463 else { $nops["rclimit"] = $r; } 00464 $nops["rcdays"] = 3; 00465 00466 $a = array(); 00467 foreach ( $nops as $oname => $oval ) { 00468 array_push( $a, "$oname=$oval" ); 00469 } 00470 $s = implode( "\n", $a ); 00471 return $s; 00472 } 00473 00474 function fixUserRights( $in ) 00475 { 00476 $a = explode( ",", $in ); 00477 $b = array(); 00478 foreach ( $a as $r ) { 00479 if ( "is_developer" == strtolower( trim( $r ) ) ) { 00480 array_push( $b, "developer" ); 00481 } else if ( "is_sysop" == strtolower( trim( $r ) ) ) { 00482 array_push( $b, "sysop" ); 00483 } 00484 } 00485 $out = implode( ",", $b ); 00486 return $out; 00487 } 00488 00489 function fixUserName( $in ) 00490 { 00491 $lc = "-,.()' _0-9A-Za-z\\/:\\xA0-\\xFF"; 00492 $out = preg_replace( "/[^{$lc}]/", "", $in ); 00493 $out = ucfirst( trim( str_replace( "_", " ", $out ) ) ); 00494 return $out; 00495 } 00496 00497 function indexTitle( $in ) 00498 { 00499 $lc = "A-Za-z_'0-9&#;\\x90-\\xFF\\-"; 00500 $t = preg_replace( "/[^{$lc}]+/", " ", $in ); 00501 # $t = preg_replace( "/\\b[{$lc}][{$lc}]\\b/", " ", $t ); 00502 $t = preg_replace( "/\\b[{$lc}]\\b/", " ", $t ); 00503 $t = preg_replace( "/\\s+/", " ", $t ); 00504 return $t; 00505 } 00506 00507 function indexText( $text, $ititle ) 00508 { 00509 global $wgLang; 00510 $lc = SearchEngine::legalSearchChars() . "&#;"; 00511 00512 $text = preg_replace( "/<\\/?\\s*[A-Za-z][A-Za-z0-9]*\\s*([^>]*?)>/", 00513 " ", strtolower( " " . $text . " " ) ); # Strip HTML markup 00514 $text = preg_replace( "/(^|\\n)\\s*==\\s+([^\\n]+)\\s+==\\s/sD", 00515 "\\2 \\2 \\2 ", $text ); # Emphasize headings 00516 00517 # Strip external URLs 00518 $uc = "A-Za-z0-9_\\/:.,~%\\-+&;#?!=()@\\xA0-\\xFF"; 00519 $protos = "http|https|ftp|mailto|news|gopher"; 00520 $pat = "/(^|[^\\[])({$protos}):[{$uc}]+([^{$uc}]|$)/"; 00521 $text = preg_replace( $pat, "\\1 \\3", $text ); 00522 00523 $p1 = "/([^\\[])\\[({$protos}):[{$uc}]+]/"; 00524 $p2 = "/([^\\[])\\[({$protos}):[{$uc}]+\\s+([^\\]]+)]/"; 00525 $text = preg_replace( $p1, "\\1 ", $text ); 00526 $text = preg_replace( $p2, "\\1 \\3 ", $text ); 00527 00528 # Internal image links 00529 $ins = $wgLang->getNsText( Namespace::getImage() ); 00530 $pat2 = "/\\[\\[$ins:([{$uc}]+)\\.(gif|png|jpg|jpeg)([^{$uc}])/i"; 00531 $text = preg_replace( $pat2, " \\1 \\3", $text ); 00532 00533 $text = preg_replace( "/([^{$lc}])([{$lc}]+)]]([a-z]+)/", 00534 "\\1\\2 \\2\\3", $text ); # Handle [[game]]s 00535 00536 # Strip all remaining non-search characters 00537 $text = preg_replace( "/[^{$lc}]+/", " ", $text ); 00538 00539 # Handle 's, s' 00540 $text = preg_replace( "/([{$lc}]+)'s /", "\\1 \\1's ", $text ); 00541 $text = preg_replace( "/([{$lc}]+)s' /", "\\1s ", $text ); 00542 00543 # Strip wiki '' and ''' 00544 $text = preg_replace( "/''[']*/", " ", $text ); 00545 00546 # Strip 1- and 2-letter words 00547 # $text = preg_replace( "/\\s[{$lc}][{$lc}]\\s/", " ", $text ); 00548 # $text = preg_replace( "/\\s[{$lc}][{$lc}]\\s/", " ", $text ); 00549 $text = preg_replace( "/\\s[{$lc}]\\s/", " ", $text ); 00550 $text = preg_replace( "/\\s[{$lc}]\\s/", " ", $text ); 00551 00552 return $text; 00553 } 00554 00555 function refillRandom() 00556 { 00557 $sql = "INSERT INTO random(ra_current,ra_title) SELECT 0,cur_title " . 00558 "FROM cur WHERE cur_namespace=0 AND cur_is_redirect=0 " . 00559 "ORDER BY RAND() LIMIT 1000"; 00560 wfQuery( $sql, DB_WRITE, $fname ); 00561 00562 $sql = "UPDATE random SET ra_current=(ra_current+1)"; 00563 wfQuery( $sql, DB_WRITE, $fname ); 00564 00565 $sql = "DELETE FROM random WHERE ra_current>1"; 00566 wfQuery( $sql, DB_WRITE, $fname ); 00567 } 00568 00569 function renameOldTables() 00570 { 00571 $sql = "ALTER TABLE user RENAME TO old_user"; 00572 wfQuery( $sql, DB_WRITE ); 00573 $sql = "ALTER TABLE cur RENAME TO old_cur"; 00574 wfQuery( $sql, DB_WRITE ); 00575 $sql = "ALTER TABLE old RENAME TO old_old"; 00576 wfQuery( $sql, DB_WRITE ); 00577 $sql = "DROP TABLE IF EXISTS linked"; 00578 wfQuery( $sql, DB_WRITE ); 00579 $sql = "DROP TABLE IF EXISTS unlinked"; 00580 wfQuery( $sql, DB_WRITE ); 00581 } 00582 00583 function removeOldTables() 00584 { 00585 wfQuery( "DROP TABLE IF EXISTS old_user", DB_WRITE ); 00586 wfQuery( "DROP TABLE IF EXISTS old_linked", DB_WRITE ); 00587 wfQuery( "DROP TABLE IF EXISTS old_unlinked", DB_WRITE ); 00588 wfQuery( "DROP TABLE IF EXISTS old_cur", DB_WRITE ); 00589 wfQuery( "DROP TABLE IF EXISTS old_old", DB_WRITE ); 00590 } 00591 00592 ?>

Generated on Tue Jun 29 23:40:03 2004 for Mediawiki by doxygen 1.3.7