From 9db190c7e736ec8d063187d4241b59feaf7dc2d1 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 22 Jun 2011 11:28:20 +0200 Subject: update to MediaWiki 1.17.0 --- maintenance/rebuildrecentchanges.php | 139 ++++++++++++++++++----------------- 1 file changed, 71 insertions(+), 68 deletions(-) (limited to 'maintenance/rebuildrecentchanges.php') diff --git a/maintenance/rebuildrecentchanges.php b/maintenance/rebuildrecentchanges.php index 6c76dc59..8964d1a4 100644 --- a/maintenance/rebuildrecentchanges.php +++ b/maintenance/rebuildrecentchanges.php @@ -22,7 +22,7 @@ * @todo Document */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RebuildRecentchanges extends Maintenance { public function __construct() { @@ -31,8 +31,6 @@ class RebuildRecentchanges extends Maintenance { } public function execute() { - global $wgTitle; - $wgTitle = Title::newFromText( "Rebuild recent changes script" ); $this->rebuildRecentChangesTablePass1(); $this->rebuildRecentChangesTablePass2(); $this->rebuildRecentChangesTablePass3(); @@ -45,24 +43,23 @@ class RebuildRecentchanges extends Maintenance { * Rebuild pass 1 * DOCUMENT ME! */ - function rebuildRecentChangesTablePass1() - { + private function rebuildRecentChangesTablePass1() { $dbw = wfGetDB( DB_MASTER ); - + $dbw->delete( 'recentchanges', '*' ); - + $this->output( "Loading from page and revision tables...\n" ); - + global $wgRCMaxAge; - + $this->output( '$wgRCMaxAge=' . $wgRCMaxAge ); $days = $wgRCMaxAge / 24 / 3600; - if ( intval($days) == $days ) { + if ( intval( $days ) == $days ) { $this->output( " (" . $days . " days)\n" ); } else { - $this->output( " (approx. " . intval($days) . " days)\n" ); + $this->output( " (approx. " . intval( $days ) . " days)\n" ); } - + $cutoff = time() - $wgRCMaxAge; $dbw->insertSelect( 'recentchanges', array( 'page', 'revision' ), array( @@ -96,57 +93,65 @@ class RebuildRecentchanges extends Maintenance { */ private function rebuildRecentChangesTablePass2() { $dbw = wfGetDB( DB_MASTER ); - list ($recentchanges, $revision) = $dbw->tableNamesN( 'recentchanges', 'revision' ); - + list ( $recentchanges, $revision ) = $dbw->tableNamesN( 'recentchanges', 'revision' ); + $this->output( "Updating links and size differences...\n" ); - + # Fill in the rc_last_oldid field, which points to the previous edit $sql = "SELECT rc_cur_id,rc_this_oldid,rc_timestamp FROM $recentchanges " . "ORDER BY rc_cur_id,rc_timestamp"; $res = $dbw->query( $sql, DB_MASTER ); - + $lastCurId = 0; $lastOldId = 0; foreach ( $res as $obj ) { $new = 0; - if( $obj->rc_cur_id != $lastCurId ) { + if ( $obj->rc_cur_id != $lastCurId ) { # Switch! Look up the previous last edit, if any $lastCurId = intval( $obj->rc_cur_id ); $emit = $obj->rc_timestamp; $sql2 = "SELECT rev_id,rev_len FROM $revision " . - "WHERE rev_page={$lastCurId} ". + "WHERE rev_page={$lastCurId} " . "AND rev_timestamp<'{$emit}' ORDER BY rev_timestamp DESC"; - $sql2 = $dbw->limitResult($sql2, 1, false); + $sql2 = $dbw->limitResult( $sql2, 1, false ); $res2 = $dbw->query( $sql2 ); - if( $row = $dbw->fetchObject( $res2 ) ) { - $lastOldId = intval($row->rev_id); + $row = $dbw->fetchObject( $res2 ); + if ( $row ) { + $lastOldId = intval( $row->rev_id ); # Grab the last text size if available - $lastSize = !is_null($row->rev_len) ? intval($row->rev_len) : 'NULL'; + $lastSize = !is_null( $row->rev_len ) ? intval( $row->rev_len ) : 'NULL'; } else { # No previous edit $lastOldId = 0; $lastSize = 'NULL'; $new = 1; // probably true } - $dbw->freeResult( $res2 ); } - if( $lastCurId == 0 ) { + if ( $lastCurId == 0 ) { $this->output( "Uhhh, something wrong? No curid\n" ); } else { # Grab the entry's text size - $size = $dbw->selectField( 'revision', 'rev_len', array('rev_id' => $obj->rc_this_oldid ) ); - $size = !is_null($size) ? intval($size) : 'NULL'; - - $sql3 = "UPDATE $recentchanges SET rc_last_oldid=$lastOldId,rc_new=$new,rc_type=$new," . - "rc_old_len=$lastSize,rc_new_len=$size " . - "WHERE rc_cur_id={$lastCurId} AND rc_this_oldid={$obj->rc_this_oldid}"; - $dbw->query( $sql3 ); - + $size = $dbw->selectField( 'revision', 'rev_len', array( 'rev_id' => $obj->rc_this_oldid ) ); + $size = !is_null( $size ) ? intval( $size ) : 'NULL'; + + $dbw->update( 'recentchanges', + array( + 'rc_last_oldid' => $lastOldId, + 'rc_new' => $new, + 'rc_type' => $new, + 'rc_old_len' => $lastSize, + 'rc_new_len' => $size, + ), array( + 'rc_cur_id' => $lastCurId, + 'rc_this_oldid' => $obj->rc_this_oldid, + ), + __METHOD__ + ); + $lastOldId = intval( $obj->rc_this_oldid ); $lastSize = $size; } } - $dbw->freeResult( $res ); } /** @@ -155,22 +160,22 @@ class RebuildRecentchanges extends Maintenance { */ private function rebuildRecentChangesTablePass3() { $dbw = wfGetDB( DB_MASTER ); - + $this->output( "Loading from user, page, and logging tables...\n" ); - + global $wgRCMaxAge, $wgLogTypes, $wgLogRestrictions; // Some logs don't go in RC. This should check for that $basicRCLogs = array_diff( $wgLogTypes, array_keys( $wgLogRestrictions ) ); - + // Escape...blah blah $selectLogs = array(); - foreach( $basicRCLogs as $logtype ) { + foreach ( $basicRCLogs as $logtype ) { $safetype = $dbw->strencode( $logtype ); $selectLogs[] = "'$safetype'"; } - + $cutoff = time() - $wgRCMaxAge; - list($logging, $page) = $dbw->tableNamesN( 'logging', 'page' ); + list( $logging, $page ) = $dbw->tableNamesN( 'logging', 'page' ); $dbw->insertSelect( 'recentchanges', array( 'user', "$logging LEFT JOIN $page ON (log_namespace=page_namespace AND log_title=page_title)" ), array( 'rc_timestamp' => 'log_timestamp', @@ -196,7 +201,7 @@ class RebuildRecentchanges extends Maintenance { ), array( 'log_timestamp > ' . $dbw->addQuotes( $dbw->timestamp( $cutoff ) ), 'log_user=user_id', - 'log_type IN(' . implode(',',$selectLogs) . ')' + 'log_type IN(' . implode( ',', $selectLogs ) . ')' ), __METHOD__, array(), // INSERT options array( 'ORDER BY' => 'log_timestamp DESC', 'LIMIT' => 5000 ) // SELECT options @@ -209,38 +214,38 @@ class RebuildRecentchanges extends Maintenance { */ private function rebuildRecentChangesTablePass4() { global $wgGroupPermissions, $wgUseRCPatrol; - + $dbw = wfGetDB( DB_MASTER ); - - list($recentchanges,$usergroups,$user) = $dbw->tableNamesN( 'recentchanges', 'user_groups', 'user' ); - + + list( $recentchanges, $usergroups, $user ) = $dbw->tableNamesN( 'recentchanges', 'user_groups', 'user' ); + $botgroups = $autopatrolgroups = array(); - foreach( $wgGroupPermissions as $group => $rights ) { - if( isset( $rights['bot'] ) && $rights['bot'] == true ) { + foreach ( $wgGroupPermissions as $group => $rights ) { + if ( isset( $rights['bot'] ) && $rights['bot'] ) { $botgroups[] = $dbw->addQuotes( $group ); } - if( $wgUseRCPatrol && isset( $rights['autopatrol'] ) && $rights['autopatrol'] == true ) { + if ( $wgUseRCPatrol && isset( $rights['autopatrol'] ) && $rights['autopatrol'] ) { $autopatrolgroups[] = $dbw->addQuotes( $group ); } } # Flag our recent bot edits - if( !empty($botgroups) ) { - $botwhere = implode(',',$botgroups); + if ( !empty( $botgroups ) ) { + $botwhere = implode( ',', $botgroups ); $botusers = array(); - + $this->output( "Flagging bot account edits...\n" ); - + # Find all users that are bots $sql = "SELECT DISTINCT user_name FROM $usergroups, $user " . "WHERE ug_group IN($botwhere) AND user_id = ug_user"; $res = $dbw->query( $sql, DB_MASTER ); - - foreach( $res as $obj ) { + + foreach ( $res as $obj ) { $botusers[] = $dbw->addQuotes( $obj->user_name ); } # Fill in the rc_bot field - if( !empty($botusers) ) { - $botwhere = implode(',',$botusers); + if ( !empty( $botusers ) ) { + $botwhere = implode( ',', $botusers ); $sql2 = "UPDATE $recentchanges SET rc_bot=1 " . "WHERE rc_user_text IN($botwhere)"; $dbw->query( $sql2 ); @@ -248,31 +253,29 @@ class RebuildRecentchanges extends Maintenance { } global $wgMiserMode; # Flag our recent autopatrolled edits - if( !$wgMiserMode && !empty($autopatrolgroups) ) { - $patrolwhere = implode(',',$autopatrolgroups); + if ( !$wgMiserMode && !empty( $autopatrolgroups ) ) { + $patrolwhere = implode( ',', $autopatrolgroups ); $patrolusers = array(); - + $this->output( "Flagging auto-patrolled edits...\n" ); - + # Find all users in RC with autopatrol rights $sql = "SELECT DISTINCT user_name FROM $usergroups, $user " . "WHERE ug_group IN($patrolwhere) AND user_id = ug_user"; $res = $dbw->query( $sql, DB_MASTER ); - - foreach( $res as $obj ) { + + foreach ( $res as $obj ) { $patrolusers[] = $dbw->addQuotes( $obj->user_name ); } - + # Fill in the rc_patrolled field - if( !empty($patrolusers) ) { - $patrolwhere = implode(',',$patrolusers); + if ( !empty( $patrolusers ) ) { + $patrolwhere = implode( ',', $patrolusers ); $sql2 = "UPDATE $recentchanges SET rc_patrolled=1 " . "WHERE rc_user_text IN($patrolwhere)"; $dbw->query( $sql2 ); } } - - $dbw->freeResult( $res ); } /** @@ -283,7 +286,7 @@ class RebuildRecentchanges extends Maintenance { $this->output( "Deleting feed timestamps.\n" ); - foreach( $wgFeedClasses as $feed => $className ) { + foreach ( $wgFeedClasses as $feed => $className ) { $messageMemc->delete( wfMemcKey( 'rcfeed', $feed, 'timestamp' ) ); # Good enough for now. } } @@ -291,4 +294,4 @@ class RebuildRecentchanges extends Maintenance { } $maintClass = "RebuildRecentchanges"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); -- cgit v1.2.2