From 353b0048498ca9ce165b495dfd527cfd500eaf23 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Tue, 22 May 2007 16:30:13 +0000 Subject: [PATCH] *Make bot edit flagging less fragile, flag auto-patrolled edits too --- maintenance/rebuildrecentchanges.inc | 61 ++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/maintenance/rebuildrecentchanges.inc b/maintenance/rebuildrecentchanges.inc index 586c9b6ecd..5ec27aa4c7 100644 --- a/maintenance/rebuildrecentchanges.inc +++ b/maintenance/rebuildrecentchanges.inc @@ -92,22 +92,67 @@ function rebuildRecentChangesTablePass2() function rebuildRecentChangesTablePass3() { + global $wgGroupPermissions; + $dbw = wfGetDB( DB_MASTER ); + list ($recentchanges, $usergroups) = $dbw->tableNamesN( 'recentchanges', 'user_groups' ); - print( "Flagging bot account edits...\n" ); + $botgroups = $autopatrolgroups = array(); + foreach( $wgGroupPermissions as $group => $rights ) { + if( isset( $rights['bot'] ) && $rights['bot'] == true ) { + $botgroups[] = "'" . $dbw->strencode( $group ) . "'"; + } + if( isset( $rights['autopatrol'] ) && $rights['autopatrol'] == true ) { + $autopatrolgroups[] = "'" . $dbw->strencode( $group ) . "'"; + } + } + # Flag our recent bot edits + if( !empty($botgroups) ) { + $botwhere = implode(',',$botgroups); + $botusers = array(); - # Fill in the rc_bot field - $sql = "SELECT DISTINCT rc_user FROM $recentchanges " . - "LEFT JOIN $usergroups ON rc_user=ug_user " . - "WHERE ug_group='bot'"; - $res = $dbw->query( $sql, DB_MASTER ); + print( "Flagging bot account edits...\n" ); - while ( $obj = $dbw->fetchObject( $res ) ) { + # Find all users in RC that are bots + $sql = "SELECT DISTINCT rc_user FROM $recentchanges " . + "LEFT JOIN $usergroups ON rc_user=ug_user " . + "WHERE ug_group IN($botwhere)"; + $res = $dbw->query( $sql, DB_MASTER ); + + while( $obj = $dbw->fetchObject( $res ) ) { + $botusers[] = $obj->rc_user; + } + # Fill in the rc_bot field + $botwhere = implode(',',$botusers); $sql2 = "UPDATE $recentchanges SET rc_bot=1 " . - "WHERE rc_user={$obj->rc_user}"; + "WHERE rc_user IN($botwhere)"; + $dbw->query( $sql2 ); + } + # Flag our recent autopatrolled edits + if( !empty($autopatrolgroups) ) { + $patrolwhere = implode(',',$autopatrolgroups); + $patrolusers = array(); + + print( "Flagging auto-patrolled edits...\n" ); + + # Find all users in RC with autopatrol rights + $sql = "SELECT DISTINCT rc_user FROM $recentchanges " . + "LEFT JOIN $usergroups ON rc_user=ug_user " . + "WHERE ug_group IN($patrolwhere)"; + $res = $dbw->query( $sql, DB_MASTER ); + + while( $obj = $dbw->fetchObject( $res ) ) { + $patrolusers[] = $obj->rc_user; + } + + # Fill in the rc_patrolled field + $patrolwhere = implode(',',$patrolusers); + $sql2 = "UPDATE $recentchanges SET rc_patrolled=1 " . + "WHERE rc_user IN($patrolwhere)"; $dbw->query( $sql2 ); } + $dbw->freeResult( $res ); } -- 2.20.1