X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=maintenance%2Frebuildrecentchanges.php;h=34560fd4cb08ef5e961379cdd5db521f2d76f149;hb=fcdd643a46d87b677f6cdcc3ba9440e1472d8df7;hp=cdaa777a61742d00e26bca3f66db2739090e9f93;hpb=0a5d2b3c69a2daab2008b0fbc604cae001b269de;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/rebuildrecentchanges.php b/maintenance/rebuildrecentchanges.php index cdaa777a61..34560fd4cb 100644 --- a/maintenance/rebuildrecentchanges.php +++ b/maintenance/rebuildrecentchanges.php @@ -41,6 +41,7 @@ class RebuildRecentchanges extends Maintenance { $this->rebuildRecentChangesTablePass2(); $this->rebuildRecentChangesTablePass3(); $this->rebuildRecentChangesTablePass4(); + $this->rebuildRecentChangesTablePass5(); $this->purgeFeeds(); $this->output( "Done.\n" ); } @@ -49,7 +50,7 @@ class RebuildRecentchanges extends Maintenance { * Rebuild pass 1: Insert `recentchanges` entries for page revisions. */ private function rebuildRecentChangesTablePass1() { - $dbw = wfGetDB( DB_MASTER ); + $dbw = $this->getDB( DB_MASTER ); $dbw->delete( 'recentchanges', '*' ); @@ -103,7 +104,7 @@ class RebuildRecentchanges extends Maintenance { * (rc_last_oldid, rc_new etc.) and size differences (rc_old_len, rc_new_len). */ private function rebuildRecentChangesTablePass2() { - $dbw = wfGetDB( DB_MASTER ); + $dbw = $this->getDB( DB_MASTER ); list( $recentchanges, $revision ) = $dbw->tableNamesN( 'recentchanges', 'revision' ); $this->output( "Updating links and size differences...\n" ); @@ -169,7 +170,7 @@ class RebuildRecentchanges extends Maintenance { * Rebuild pass 3: Insert `recentchanges` entries for action logs. */ private function rebuildRecentChangesTablePass3() { - $dbw = wfGetDB( DB_MASTER ); + $dbw = $this->getDB( DB_MASTER ); $this->output( "Loading from user, page, and logging tables...\n" ); @@ -224,7 +225,7 @@ class RebuildRecentchanges extends Maintenance { private function rebuildRecentChangesTablePass4() { global $wgUseRCPatrol; - $dbw = wfGetDB( DB_MASTER ); + $dbw = $this->getDB( DB_MASTER ); list( $recentchanges, $usergroups, $user ) = $dbw->tableNamesN( 'recentchanges', 'user_groups', 'user' ); @@ -281,6 +282,46 @@ class RebuildRecentchanges extends Maintenance { } } + /** + * Rebuild pass 5: Delete duplicate entries where we generate both a page revision and a log entry + * for a single action (upload only, at the moment, but potentially also move, protect, ...). + */ + private function rebuildRecentChangesTablePass5() { + $dbw = wfGetDB( DB_MASTER ); + + $this->output( "Removing duplicate revision and logging entries...\n" ); + + $res = $dbw->select( + array( 'logging', 'log_search' ), + array( 'ls_value', 'ls_log_id' ), + array( + 'ls_log_id = log_id', + 'ls_field' => 'associated_rev_id', + 'log_type' => 'upload', + ), + __METHOD__ + ); + foreach ( $res as $obj ) { + $rev_id = $obj->ls_value; + $log_id = $obj->ls_log_id; + + // Mark the logging row as having an associated rev id + $dbw->update( + 'recentchanges', + /*SET*/ array( 'rc_this_oldid' => $rev_id ), + /*WHERE*/ array( 'rc_logid' => $log_id ), + __METHOD__ + ); + + // Delete the revision row + $dbw->delete( + 'recentchanges', + /*WHERE*/ array( 'rc_this_oldid' => $rev_id, 'rc_logid' => 0 ), + __METHOD__ + ); + } + } + /** * Purge cached feeds in $messageMemc */