Typo
[lhc/web/wiklou.git] / includes / Autopromote.php
index 2a159fe..3a9384e 100644 (file)
@@ -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] == '&' ) {
@@ -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 boolval( $user->getEmailAuthenticationTimestamp() );
+                                               return (bool)$user->getEmailAuthenticationTimestamp();
                                        } else {
                                                return true;
                                        }