X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=update.php;h=fc95ba1752b71fead272180aebdf154d1baea8c2;hb=c3fe33524131d0fb672157cfb91c0d7bd085c469;hp=e93fb1e77194fe8976c2cc64200afd4b534c31af;hpb=a34ce8d0407c2947046c73d6b3cc5ebe026744f4;p=lhc%2Fweb%2Fwiklou.git diff --git a/update.php b/update.php index e93fb1e771..fc95ba1752 100644 --- a/update.php +++ b/update.php @@ -3,6 +3,9 @@ # Update already-installed software # +include( "./install-utils.inc" ); +install_version_checks(); + if ( ! ( is_readable( "./LocalSettings.php" ) && is_readable( "./AdminSettings.php" ) ) ) { print "A copy of your installation's LocalSettings.php\n" . @@ -10,58 +13,49 @@ if ( ! ( is_readable( "./LocalSettings.php" ) exit(); } -$DP = "./includes"; +$IP = "./includes"; include_once( "./LocalSettings.php" ); include_once( "./AdminSettings.php" ); +include( "$IP/Version.php" ); + if ( $wgUseTeX && ( ! is_executable( "./math/texvc" ) ) ) { print "To use math functions, you must first compile texvc by\n" . "running \"make\" in the math directory.\n"; exit(); } -umask( 000 ); -set_time_limit( 0 ); +# +# Copy files into installation directories +# +do_update_files(); + +$wgDBuser = $wgDBadminuser; +$wgDBpassword = $wgDBadminpassword; -include_once( "{$IP}/Version.php" ); include_once( "{$IP}/Setup.php" ); -$wgTitle = Title::newFromText( "Update script" ); -$wgCommandLineMode = true; +include_once( "./maintenance/InitialiseMessages.inc" ); -do_revision_updates(); +$wgTitle = Title::newFromText( "Update script" ); # -# Copy files into installation directories +# Check the database for things that need to be fixed... # -print "Copying files...\n"; + print "Checking database for necessary updates...\n"; -copyfile( ".", "wiki.phtml", $IP ); -copyfile( ".", "redirect.phtml", $IP ); -copyfile( ".", "texvc.phtml", $IP ); + $rconn = mysql_connect( $wgDBserver, $wgDBadminuser, $wgDBadminpassword ); + mysql_select_db( $wgDBname ); -copydirectory( "./includes", $IP ); -copydirectory( "./stylesheets", $wgStyleSheetDirectory ); + do_revision_updates(); + + do_ipblocks_update(); + do_interwiki_update(); + do_index_update(); + do_linkscc_update(); -copyfile( "./images", "wiki.png", $wgUploadDirectory ); -copyfile( "./languages", "Language.php", $IP ); -copyfile( "./languages", "Language" . ucfirst( $wgLanguageCode ) . ".php", $IP ); + initialiseMessages(); -$fp = fopen( $wgDebugLogFile, "w" ); -if ( false === $fp ) { - print "Could not create log file \"{$wgDebugLogFile}\".\n"; - exit(); -} -$d = date( "Y-m-d H:i:s" ); -fwrite( $fp, "Wiki debug log file created {$d}\n\n" ); -fclose( $fp ); - -if ( $wgUseTeX ) { - copyfile( "./math", "texvc", "{$IP}/math", 0775 ); - copyfile( "./math", "texvc_test", "{$IP}/math", 0775 ); - copyfile( "./math", "texvc_tex", "{$IP}/math", 0775 ); -} - -copyfile( ".", "Version.php", $IP ); + mysql_close( $rconn ); print "Done.\n"; exit(); @@ -70,56 +64,61 @@ exit(); # # -function copyfile( $sdir, $name, $ddir, $perms = 0664 ) { - global $wgInstallOwner, $wgInstallGroup; - - $d = "{$ddir}/{$name}"; - if ( copy( "{$sdir}/{$name}", $d ) ) { - if ( isset( $wgInstallOwner ) ) { chown( $d, $wgInstallOwner ); } - if ( isset( $wgInstallGroup ) ) { chgrp( $d, $wgInstallGroup ); } - chmod( $d, $perms ); - # print "Copied \"{$name}\" to \"{$ddir}\".\n"; - } else { - print "Failed to copy file \"{$name}\" to \"{$ddir}\".\n"; +function do_update_files() { + global $IP, $wgStyleSheetDirectory, $wgUploadDirectory, $wgLanguageCode, $wgDebugLogFile; + print "Copying files... "; + + copyfile( ".", "wiki.phtml", $IP ); + copyfile( ".", "redirect.phtml", $IP ); + copyfile( ".", "texvc.phtml", $IP ); + + copydirectory( "./includes", $IP ); + copydirectory( "./stylesheets", $wgStyleSheetDirectory ); + + copyfile( "./images", "wiki.png", $wgUploadDirectory ); + copyfile( "./languages", "Language.php", $IP ); + copyfile( "./languages", "Language" . ucfirst( $wgLanguageCode ) . ".php", $IP ); + + $fp = fopen( $wgDebugLogFile, "w" ); + if ( false === $fp ) { + print "Could not create log file \"{$wgDebugLogFile}\".\n"; exit(); } -} - -function copydirectory( $source, $dest ) { - $handle = opendir( $source ); - while ( false !== ( $f = readdir( $handle ) ) ) { - if ( "." == $f{0} ) continue; - if ( "CVS" == $f ) continue; - copyfile( $source, $f, $dest ); + $d = date( "Y-m-d H:i:s" ); + fwrite( $fp, "Wiki debug log file created {$d}\n\n" ); + fclose( $fp ); + + if ( $wgUseTeX ) { + copyfile( "./math", "texvc", "{$IP}/math", 0775 ); + copyfile( "./math", "texvc_test", "{$IP}/math", 0775 ); + copyfile( "./math", "texvc_tex", "{$IP}/math", 0775 ); } -} + + copyfile( ".", "Version.php", $IP ); -function readconsole() { - $fp = fopen( "php://stdin", "r" ); - $resp = trim( fgets( $fp ) ); - fclose( $fp ); - return $resp; + print "ok\n"; } function do_revision_updates() { global $wgSoftwareRevision; - - if ( $wgSoftwareRevision < 1001 ) { update_passwords(); } + if ( $wgSoftwareRevision < 1001 ) { + update_passwords(); + } } function update_passwords() { - $fname = "Update scripte: update_passwords()"; + $fname = "Update script: update_passwords()"; print "\nIt appears that you need to update the user passwords in your\n" . "database. If you have already done this (if you've run this update\n" . "script once before, for example), doing so again will make all your\n" . "user accounts inaccessible, so be sure you only do this once.\n" . - "Update user passwords? (yes/no) "; + "Update user passwords? (yes/no)"; $resp = readconsole(); if ( ! ( "Y" == $resp{0} || "y" == $resp{0} ) ) { return; } $sql = "SELECT user_id,user_password FROM user"; - $source = wfQuery( $sql, fname ); + $source = wfQuery( $sql, DB_READ, fname ); while ( $row = mysql_fetch_object( $source ) ) { $id = $row->user_id; @@ -128,8 +127,59 @@ function update_passwords() { $sql = "UPDATE user SET user_password='{$newpass}' " . "WHERE user_id={$id}"; - wfQuery( $sql, $fname ); + wfQuery( $sql, DB_WRITE, $fname ); + } +} + +function do_ipblocks_update() { + if ( wfFieldExists( "ipblocks", "ipb_id" ) ) { + echo "...ipblocks table is up to date.\n"; + } else { + echo "Updating ipblocks table... "; + dbsource( "maintenance/archives/patch-ipblocks.sql" ); + echo "ok\n"; } } + +function do_interwiki_update() { + # Check that interwiki table exists; if it doesn't source it + if( table_exists( "interwiki" ) ) { + echo "...already have interwiki table\n"; + return true; + } + echo "Creating interwiki table: "; + dbsource( "maintenance/archives/patch-interwiki.sql" ); + echo "ok\n"; + echo "Adding default interwiki definitions: "; + dbsource( "maintenance/interwiki.sql" ); + echo "ok\n"; +} + +function do_index_update() { + # Check that proper indexes are in place + $meta = field_info( "recentchanges", "rc_timestamp" ); + if( $meta->multiple_key == 0 ) { + echo "Updating indexes to 20031107: "; + dbsource( "maintenance/archives/patch-indexes.sql" ); + echo "ok\n"; + return true; + } + echo "...indexes seem up to 20031107 standards\n"; + return false; +} + +function do_linkscc_update() { + // Create linkscc if necessary + global $rconn; + if( table_exists( "linkscc" ) ) { + echo "...have linkscc table.\n"; + } else { + echo "Adding linkscc table... "; + dbsource( "maintenance/archives/patch-linkscc.sql" ); + echo "ok\n"; + } +} + + ?>