summaryrefslogtreecommitdiff
path: root/includes/Autopromote.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/Autopromote.php')
-rw-r--r--includes/Autopromote.php24
1 files changed, 16 insertions, 8 deletions
diff --git a/includes/Autopromote.php b/includes/Autopromote.php
index b5097423..68fe6636 100644
--- a/includes/Autopromote.php
+++ b/includes/Autopromote.php
@@ -8,7 +8,7 @@ class Autopromote {
/**
* Get the groups for the given user based on $wgAutopromote.
*
- * @param User $user The user to get the groups for
+ * @param $user The user to get the groups for
* @return array Array of groups to promote to.
*/
public static function getAutopromoteGroups( User $user ) {
@@ -18,6 +18,9 @@ class Autopromote {
if( self::recCheckCondition( $cond, $user ) )
$promote[] = $group;
}
+
+ wfRunHooks( 'GetAutoPromoteGroups', array($user, &$promote) );
+
return $promote;
}
@@ -33,12 +36,12 @@ class Autopromote {
* This function evaluates the former type recursively, and passes off to
* self::checkCondition for evaluation of the latter type.
*
- * @param mixed $cond A condition, possibly containing other conditions
- * @param User $user The user to check the conditions against
+ * @param $cond Mixed: a condition, possibly containing other conditions
+ * @param $user The user to check the conditions against
* @return bool Whether the condition is true
*/
private static function recCheckCondition( $cond, User $user ) {
- $validOps = array( '&', '|', '^' );
+ $validOps = array( '&', '|', '^', '!' );
if( is_array( $cond ) && count( $cond ) >= 2 && in_array( $cond[0], $validOps ) ) {
# Recursive condition
if( $cond[0] == '&' ) {
@@ -47,7 +50,7 @@ class Autopromote {
return false;
return true;
} elseif( $cond[0] == '|' ) {
- foreach( array_slice( $cond, 1 ) as $subcond )
+ foreach( array_slice( $cond, 1 ) as $subcond )
if( self::recCheckCondition( $subcond, $user ) )
return true;
return false;
@@ -60,6 +63,11 @@ class Autopromote {
$res = ($res xor self::recCheckCondition( $subcond, $user ));
}
return $res;
+ } elseif ( $cond[0] = '!' ) {
+ foreach( array_slice( $cond, 1 ) as $subcond )
+ if( self::recCheckCondition( $subcond, $user ) )
+ return false;
+ return true;
}
}
# If we got here, the array presumably does not contain other condi-
@@ -75,8 +83,8 @@ class Autopromote {
* APCOND_AGE. Other types will throw an exception if no extension evalu-
* ates them.
*
- * @param array $cond A condition, which must not contain other conditions
- * @param User $user The user to check the condition against
+ * @param $cond Array: A condition, which must not contain other conditions
+ * @param $user The user to check the condition against
* @return bool Whether the condition is true for the user
*/
private static function checkCondition( $cond, User $user ) {
@@ -87,7 +95,7 @@ class Autopromote {
if( User::isValidEmailAddr( $user->getEmail() ) ) {
global $wgEmailAuthentication;
if( $wgEmailAuthentication ) {
- return $user->getEmailAuthenticationTimestamp() ? true : false;
+ return (bool)$user->getEmailAuthenticationTimestamp();
} else {
return true;
}