Minor followup to r64197
[lhc/web/wiklou.git] / includes / Autopromote.php
index b446647..c0adff4 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * This class checks if user can get extra rights
  * because of conditions specified in $wgAutopromote
@@ -18,6 +17,9 @@ class Autopromote {
                        if( self::recCheckCondition( $cond, $user ) )
                                $promote[] = $group;
                }
+
+               wfRunHooks( 'GetAutoPromoteGroups', array( $user, &$promote ) );
+
                return $promote;
        }
 
@@ -38,7 +40,7 @@ class Autopromote {
         * @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 +62,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-
@@ -98,9 +105,18 @@ class Autopromote {
                        case APCOND_AGE:
                                $age = time() - wfTimestampOrNull( TS_UNIX, $user->getRegistration() );
                                return $age >= $cond[1];
+                       case APCOND_AGE_FROM_EDIT:
+                               $age = time() - wfTimestampOrNull( TS_UNIX, $user->getFirstEditTimestamp() );
+                               return $age >= $cond[1];
                        case APCOND_INGROUPS:
                                $groups = array_slice( $cond, 1 );
                                return count( array_intersect( $groups, $user->getGroups() ) ) == count( $groups );
+                       case APCOND_ISIP:
+                               return $cond[1] == wfGetIP();
+                       case APCOND_IPINRANGE:
+                               return IP::isInRange( wfGetIP(), $cond[1] );
+                       case APCOND_BLOCKED:
+                               return $user->isBlocked();
                        default:
                                $result = null;
                                wfRunHooks( 'AutopromoteCondition', array( $cond[0], array_slice( $cond, 1 ), $user, &$result ) );