http://www.mediawiki.org/wiki/Special:Code/MediaWiki/100149

Revision: 100149
Author:   aaron
Date:     2011-10-18 19:57:07 +0000 (Tue, 18 Oct 2011)
Log Message:
-----------
Made updatePendingList() order by timestamp instead of rev ID for robustness

Modified Paths:
--------------
    trunk/extensions/FlaggedRevs/dataclasses/FlaggableWikiPage.php

Modified: trunk/extensions/FlaggedRevs/dataclasses/FlaggableWikiPage.php
===================================================================
--- trunk/extensions/FlaggedRevs/dataclasses/FlaggableWikiPage.php      
2011-10-18 19:56:55 UTC (rev 100148)
+++ trunk/extensions/FlaggedRevs/dataclasses/FlaggableWikiPage.php      
2011-10-18 19:57:07 UTC (rev 100149)
@@ -496,34 +496,42 @@
        */
        protected static function updatePendingList( $pageId, $latest ) {
                $data = array();
+               # Get the highest tier used on this wiki
                $level = FlaggedRevs::highestReviewTier();
+
+               $dbw = wfGetDB( DB_MASTER );
                # Update pending times for each level, going from highest to 
lowest
-               $dbw = wfGetDB( DB_MASTER );
                $higherLevelId = 0;
                $higherLevelTS = '';
                while ( $level >= 0 ) {
                        # Get the latest revision of this level...
-                       $row = $dbw->selectRow( array( 'flaggedrevs', 
'revision' ),
+                       # Any revision of one tier is also a revision of lower 
tiers.
+                       # Instead of doing fr_quality > X queries we do exact 
comparisons
+                       # for better INDEX usage. However, in order to treat a 
rev as the
+                       # latest tier X rev, we make sure it is newer than all 
tier (X+1) revs.
+                       $row = $dbw->selectRow(
+                               array( 'flaggedrevs', 'revision' ),
                                array( 'fr_rev_id', 'rev_timestamp' ),
-                               array( 'fr_page_id' => $pageId,
-                                       'fr_quality' => $level,
-                                       'rev_id = fr_rev_id',
-                                       'rev_page = fr_page_id',
-                                       'rev_deleted & ' . 
Revision::DELETED_TEXT => 0,
-                                       'rev_id > ' . intval( $higherLevelId )
+                               array(
+                                       'fr_page_id' => $pageId,
+                                       'fr_quality' => $level, // this level
+                                       'fr_rev_timestamp > ' . 
$dbw->addQuotes( $higherLevelTS ),
+                                       'rev_id = fr_rev_id', // rev exists
+                                       'rev_page = fr_page_id', // sanity
+                                       'rev_deleted & ' . 
Revision::DELETED_TEXT => 0
                                ),
                                __METHOD__,
-                               array( 'ORDER BY' => 'fr_rev_id DESC', 'LIMIT' 
=> 1 )
+                               array( 'ORDER BY' => 'fr_rev_timestamp DESC', 
'LIMIT' => 1 )
                        );
                        # If there is a revision of this level, track it...
-                       # Revisions reviewed to one level  count as reviewed
-                       # at the lower levels (i.e. quality -> checked).
+                       # Revisions accepted to one tier count as accepted
+                       # at the lower tiers (i.e. quality -> checked).
                        if ( $row ) {
                                $id = $row->fr_rev_id;
                                $ts = $row->rev_timestamp;
-                       } else {
-                               $id = $higherLevelId; // use previous (quality 
-> checked)
-                               $ts = $higherLevelTS; // use previous (quality 
-> checked)
+                       } else { // use previous rev of higher tier (if any)
+                               $id = $higherLevelId;
+                               $ts = $higherLevelTS;
                        }
                        # Get edits that actually are pending...
                        if ( $id && $latest > $id ) {


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to