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