Add a new method and hook for static variables

This is for adding variables which can be computed even without an
ongoing action. Currently, we don't have any, except for timestamp (but
that's a bit special). Other extensions could. For instance, we'll be
able to expose the content of the spam blacklist.

Bug: T211680
Change-Id: Iba59fe8d190dd338ecc8cfd682205bce33c9738b
This commit is contained in:
Daimona Eaytoy 2018-12-30 18:15:33 +01:00
parent e7684d8925
commit b0c5b97b28
2 changed files with 26 additions and 2 deletions

View file

@ -28,7 +28,8 @@ $content: The Content object
&$text: Set this to the desired text.
'AbuseFilter-filterAction': Allows overwriting of abusefilter variables in AbuseFilter::filterAction just
before they're checked against filters.
before they're checked against filters. Note that you may specify custom variables in a saner way using other hooks:
AbuseFilter-generateTitleVars, AbuseFilter-generateUserVars and AbuseFilter-generateStaticVars.
$vars: AbuseFilterVariableHolder with variables
$title: Title object
@ -41,6 +42,9 @@ $prefix: Variable name prefix
$vars: AbuseFilterVariableHolder
$user: User object
'AbuseFilter-generateStaticVars': Allows altering static variables, i.e. independent from page and user
$vars: AbuseFilterVariableHolder
'AbuseFilter-interceptVariable': Called before a variable is set in AFComputedVariable::compute to be able to set
it before the core code runs. Return false to make the function return right after.
$method: Method to generate the variable

View file

@ -468,6 +468,20 @@ class AbuseFilter {
return $vars;
}
/**
* Computes all variables unrelated to title and user. In general, these variables are known
* even without an ongoing action.
*
* @return AbuseFilterVariableHolder
*/
public static function generateStaticVars() {
$vars = new AbuseFilterVariableHolder();
// For now, we don't have variables to add; other extensions could.
Hooks::run( 'AbuseFilter-generateStaticVars', [ $vars ] );
return $vars;
}
/**
* @param string $filter
* @return true|array True when successful, otherwise a two-element array with exception message
@ -493,8 +507,11 @@ class AbuseFilter {
return 'BADSYNTAX';
}
// Static vars are the only ones available
$vars = self::generateStaticVars();
$vars->setVar( 'timestamp', wfTimestamp( TS_UNIX ) );
/** @var $parser AbuseFilterParser */
$parser = new $wgAbuseFilterParserClass;
$parser = new $wgAbuseFilterParserClass( $vars );
return $parser->evaluateExpression( $expr );
}
@ -1114,6 +1131,8 @@ class AbuseFilter {
// Add vars from extensions
Hooks::run( 'AbuseFilter-filterAction', [ &$vars, $title ] );
$vars->addHolders( self::generateStaticVars() );
$vars->setVar( 'context', 'filter' );
$vars->setVar( 'timestamp', time() );
@ -2735,6 +2754,7 @@ class AbuseFilter {
if ( $vars ) {
$vars->setVar( 'context', 'generated' );
$vars->setVar( 'timestamp', wfTimestamp( TS_UNIX, $row->rc_timestamp ) );
$vars->addHolders( self::generateStaticVars() );
}
return $vars;