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

Revision: 88628
Author:   aaron
Date:     2011-05-23 00:06:35 +0000 (Mon, 23 May 2011)
Log Message:
-----------
Made $wgFlaggedRevsAutoconfirm a wrapper around $wgAutopromote

Modified Paths:
--------------
    trunk/extensions/FlaggedRevs/FlaggedRevs.php
    trunk/extensions/FlaggedRevs/FlaggedRevsDefines.php
    trunk/extensions/FlaggedRevs/dataclasses/FRUserCounters.php
    trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.hooks.php

Modified: trunk/extensions/FlaggedRevs/FlaggedRevs.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevs.php        2011-05-23 00:01:06 UTC 
(rev 88627)
+++ trunk/extensions/FlaggedRevs/FlaggedRevs.php        2011-05-23 00:06:35 UTC 
(rev 88628)
@@ -489,7 +489,7 @@
 # Determine what pages can be moved and patrolled
 $wgHooks['getUserPermissionsErrors'][] = 'FlaggedRevsHooks::onUserCan';
 # Implicit autoreview rights group
-$wgHooks['GetAutoPromoteGroups'][] = 'FlaggedRevsHooks::checkAutoPromote';
+$wgHooks['AutopromoteCondition'][] = 'FlaggedRevsHooks::checkAutoPromoteCond';
 
 # Check if a page is currently being reviewed
 $wgHooks['MediaWikiPerformAction'][] = 
'FlaggedRevsUIHooks::onMediaWikiPerformAction';
@@ -559,6 +559,28 @@
                        $wgUseRCPatrol = true;
                }
        }
+       global $wgFlaggedRevsAutoconfirm, $wgAutopromote;
+       # $wgFlaggedRevsAutoconfirm is now a wrapper around $wgAutopromote
+       if ( is_array( $wgFlaggedRevsAutoconfirm ) ) {
+               $wgAutopromote['autoreview'] = array( '&', // AND
+                       array( APCOND_AGE, 
$wgFlaggedRevsAutoconfirm['days']*86400 ),
+                       array( APCOND_EDITCOUNT, 
$wgFlaggedRevsAutoconfirm['edits'] ),
+                       array( APCOND_FR_EDITSUMMARYCOUNT, 
$wgFlaggedRevsAutoconfirm['editComments'] ),
+                       array( APCOND_FR_UNIQUEPAGECOUNT, 
$wgFlaggedRevsAutoconfirm['uniqueContentPages'] ),
+                       array( APCOND_FR_EDITSPACING,
+                               $wgFlaggedRevsAutoconfirm['spacing'], 
$wgFlaggedRevsAutoconfirm['benchmarks'] ),
+                       array( '|', // OR
+                               array( APCOND_FR_CONTENTEDITCOUNT, 
$wgFlaggedRevsAutoconfirm['totalContentEdits'] ),
+                               array( APCOND_FR_CHECKEDEDITCOUNT, 
$wgFlaggedRevsAutoconfirm['totalCheckedEdits'] )
+                       )
+               );
+               if ( $wgFlaggedRevsAutoconfirm['email'] ) {
+                       $wgAutopromote['autoreview'][] = array( 
APCOND_EMAILCONFIRMED );
+               }
+               if ( $wgFlaggedRevsAutoconfirm['neverBlocked'] ) {
+                       $wgAutopromote['autoreview'][] = array( 
APCOND_FR_NEVERBOCKED );
+               }
+       }
        # Conditional API modules
        efSetFlaggedRevsConditionalAPIModules();
        # Load hooks that aren't always set

Modified: trunk/extensions/FlaggedRevs/FlaggedRevsDefines.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevsDefines.php 2011-05-23 00:01:06 UTC 
(rev 88627)
+++ trunk/extensions/FlaggedRevs/FlaggedRevsDefines.php 2011-05-23 00:06:35 UTC 
(rev 88628)
@@ -22,3 +22,13 @@
 define( 'FR_AUTOREVIEW_CHANGES', 1 );
 define( 'FR_AUTOREVIEW_CREATION', 2 );
 define( 'FR_AUTOREVIEW_CREATION_AND_CHANGES', FR_AUTOREVIEW_CHANGES | 
FR_AUTOREVIEW_CREATION );
+
+# Autopromote conds (F=70,R=82)
+# @TODO: move these 5 to core
+define( 'APCOND_FR_EDITSUMMARYCOUNT', 70821 );
+define( 'APCOND_FR_NEVERBOCKED', 70822 );
+define( 'APCOND_FR_UNIQUEPAGECOUNT', 70823 );
+define( 'APCOND_FR_EDITSPACING', 70824 );
+define( 'APCOND_FR_CONTENTEDITCOUNT', 70825 );
+
+define( 'APCOND_FR_CHECKEDEDITCOUNT', 70826 );

Modified: trunk/extensions/FlaggedRevs/dataclasses/FRUserCounters.php
===================================================================
--- trunk/extensions/FlaggedRevs/dataclasses/FRUserCounters.php 2011-05-23 
00:01:06 UTC (rev 88627)
+++ trunk/extensions/FlaggedRevs/dataclasses/FRUserCounters.php 2011-05-23 
00:06:35 UTC (rev 88628)
@@ -4,7 +4,7 @@
  */
 class FRUserCounters {
        /**
-       * Get params for a user
+       * Get params for a user ID
        * @param int $uid
        * @param int $flags FR_MASTER, FR_FOR_UPDATE
        * @param string $dBName, optional wiki name
@@ -21,6 +21,21 @@
        }
 
        /**
+       * Get params for a user
+       * @param User $user
+       * @return array|null
+       */
+       public static function getParams( User $user ) {
+               if ( $user->getId() ) {
+                       if ( !isset( $user->fr_user_params ) ) { // process 
cache...
+                               $user->fr_user_params = self::getUserParams( 
$user->getId() );
+                       }
+                       return $user->fr_user_params;
+               }
+               return null;
+       }
+
+       /**
        * Initializes unset param fields to their starting values
        * @param &array $p
        */

Modified: trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.hooks.php
===================================================================
--- trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.hooks.php      
2011-05-23 00:01:06 UTC (rev 88627)
+++ trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.hooks.php      
2011-05-23 00:06:35 UTC (rev 88628)
@@ -786,73 +786,60 @@
        }
 
        /**
-       * Grant implicit 'autoreview' group to users meeting the
-       * $wgFlaggedRevsAutoconfirm requirements. This lets people who
-       * opt-out as Editors still have their own edits automatically reviewed.
+       * Check an autopromote condition that is defined by FlaggedRevs
        *
        * Note: some unobtrusive caching is used to avoid DB hits.
        */
-       public static function checkAutoPromote( $user, array &$promote ) {
-               global $wgFlaggedRevsAutoconfirm, $wgMemc;
-               $conds = $wgFlaggedRevsAutoconfirm; // convenience
-               if ( !is_array( $conds ) || !$user->getId() ) {
-                       return true; // $wgFlaggedRevsAutoconfirm not applicable
-               }
-               $p = FRUserCounters::getUserParams( $user->getId() );
-               $regTime = wfTimestampOrNull( TS_UNIX, $user->getRegistration() 
);
-               if (
-                       # Check if user edited enough unique pages
-                       $conds['uniqueContentPages'] > count( 
$p['uniqueContentPages'] ) ||
-                       # Check edit comment use
-                       $conds['editComments'] > $p['editComments'] ||
-                       # Check user edit count
-                       $conds['edits'] > $user->getEditCount() ||
-                       # Check account age
-                       ( $regTime && $conds['days'] > ( ( time() - $regTime ) 
/ 86400 ) ) ||
-                       # Check user email
-                       $conds['email'] && !$user->isEmailConfirmed() ||
-                       # Don't grant to currently blocked users...
-                       $user->isBlocked()
-               ) {
-                       return true;
-               }
-               # Check if user edited enough content pages
-               $failedContentEdits = ( $conds['totalContentEdits'] > 
$p['totalContentEdits'] );
-
-               # Check if results are cached to avoid DB queries.
-               # Checked basic, already available, promotion heuristics 
first...
-               $APSkipKey = wfMemcKey( 'flaggedrevs', 'autoreview-skip', 
$user->getId() );
-               if ( $wgMemc->get( $APSkipKey ) === 'true' ) {
-                       return true;
-               }
-               # Check if user was ever blocked before
-               if ( $conds['neverBlocked'] && self::wasPreviouslyBlocked( 
$user ) ) {
-                       $wgMemc->set( $APSkipKey, 'true', 3600 * 24 * 7 ); // 
cache results
-                       return true;
-               }
-               # Check for edit spacing. This lets us know that the account has
-               # been used over N different days, rather than all in one lump.
-               if ( $conds['spacing'] > 0 && $conds['benchmarks'] > 1 ) {
-                       $sTestKey = wfMemcKey( 'flaggedrevs', 
'autoreview-spacing-ok', $user->getId() );
-                       # Hit the DB only if the result is not cached...
-                       if ( $wgMemc->get( $sTestKey ) !== 'true' ) {
-                               $pass = self::editSpacingCheck( 
$conds['spacing'], $conds['benchmarks'], $user );
-                               # Make a key to store the results
-                               if ( $pass === true ) {
-                                       $wgMemc->set( $sTestKey, 'true', 7 * 24 
* 3600 );
+       public static function checkAutoPromoteCond( $cond, array $params, User 
$user, &$result ) {
+               global $wgMemc;
+               switch( $cond ) {
+                       case APCOND_FR_EDITSUMMARYCOUNT:
+                               $p = FRUserCounters::getParams( $user );
+                               $result = ( is_array( $p ) && 
$p['editComments'] >= $params[0] );
+                               break;
+                       case APCOND_FR_NEVERBOCKED:
+                               $key = wfMemcKey( 'flaggedrevs', 
'autopromote-blocked-ok', $user->getId() );
+                               $val = $wgMemc->get( $key );
+                               if ( $val === 'true' ) {
+                                       $result = true; // passed
+                               } elseif ( $val === 'false' ) {
+                                       $result = false; // failed
                                } else {
-                                       $wgMemc->set( $APSkipKey, 'true', $pass 
/* wait time */ );
-                                       return true;
+                                       # Hit the DB only if the result is not 
cached...
+                                       $result = !self::wasPreviouslyBlocked( 
$user );
+                                       $wgMemc->set( $key, $result ? 'true' : 
'false', 3600 * 24 * 7 ); // cache results
                                }
-                       }
+                               break;
+                       case APCOND_FR_UNIQUEPAGECOUNT:
+                               $p = FRUserCounters::getParams( $user );
+                               $result = ( is_array( $p ) && 
$p['uniqueContentPages'] >= $params[0] );
+                               break;
+                       case APCOND_FR_EDITSPACING:
+                               $key = wfMemcKey( 'flaggedrevs', 
'autopromote-spacing-ok', $user->getId() );
+                               $val = $wgMemc->get( $key );
+                               if ( $val === 'true' ) {
+                                       $result = true; // passed
+                               } elseif ( $val === 'false' ) {
+                                       $result = false; // failed
+                               } else {
+                                       # Hit the DB only if the result is not 
cached...
+                                       $pass = self::editSpacingCheck( 
$params[0], $params[1], $user );
+                                       # Make a key to store the results
+                                       if ( $pass === true ) {
+                                               $wgMemc->set( $key, 'true', 14 
* 24 * 3600 );
+                                       } else {
+                                               $wgMemc->set( $key, 'false', 
$pass /* wait time */ );
+                                       }
+                               }
+                               break;
+                       case APCOND_FR_CONTENTEDITCOUNT:
+                               $p = FRUserCounters::getParams( $user );
+                               $result = ( is_array( $p ) && 
$p['totalContentEdits'] >= $params[0] );
+                               break;
+                       case APCOND_FR_CHECKEDEDITCOUNT:
+                               $result = self::reviewedEditsCheck( $user, 
$params[0] );
+                               break;
                }
-               # Check implicitly checked edits
-               if ( $failedContentEdits && $conds['totalCheckedEdits'] > 0 ) {
-                       if ( !self::reviewedEditsCheck( $user, 
$conds['totalCheckedEdits'] ) ) {
-                               return true;
-                       }
-               }
-               $promote[] = 'autoreview'; // add the group
                return true;
        }
 


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

Reply via email to