X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FAutopromote.php;h=b4d89b24ac6341e9591f83f5fe7fe60b3d6caf14;hb=7341bc2f56a8d323f797cb36eca80df32ee01871;hp=4b1c6fa76e4d345730c17f3f13822219e5a02946;hpb=e25009cae177568b6fddb58255f46d679fa73aa9;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Autopromote.php b/includes/Autopromote.php index 4b1c6fa76e..b4d89b24ac 100644 --- a/includes/Autopromote.php +++ b/includes/Autopromote.php @@ -1,9 +1,9 @@ $cond ) { - if( self::recCheckCondition( $cond, $user ) ) + + foreach ( $wgAutopromote as $group => $cond ) { + if ( self::recCheckCondition( $cond, $user ) ) { $promote[] = $group; + } } - - wfRunHooks( 'GetAutoPromoteGroups', array($user, &$promote) ); - + + wfRunHooks( 'GetAutoPromoteGroups', array( $user, &$promote ) ); + return $promote; } @@ -41,34 +44,53 @@ class Autopromote { * @return bool Whether the condition is true */ private static function recCheckCondition( $cond, User $user ) { - $validOps = array( '&', '|', '^' ); - if( is_array( $cond ) && count( $cond ) >= 2 && in_array( $cond[0], $validOps ) ) { + $validOps = array( '&', '|', '^', '!' ); + + if ( is_array( $cond ) && count( $cond ) >= 2 && in_array( $cond[0], $validOps ) ) { # Recursive condition - if( $cond[0] == '&' ) { - foreach( array_slice( $cond, 1 ) as $subcond ) - if( !self::recCheckCondition( $subcond, $user ) ) + if ( $cond[0] == '&' ) { + foreach ( array_slice( $cond, 1 ) as $subcond ) { + if ( !self::recCheckCondition( $subcond, $user ) ) { return false; + } + } + return true; - } elseif( $cond[0] == '|' ) { - foreach( array_slice( $cond, 1 ) as $subcond ) - if( self::recCheckCondition( $subcond, $user ) ) + } elseif ( $cond[0] == '|' ) { + foreach ( array_slice( $cond, 1 ) as $subcond ) { + if ( self::recCheckCondition( $subcond, $user ) ) { return true; + } + } + return false; - } elseif( $cond[0] == '^' ) { + } elseif ( $cond[0] == '^' ) { $res = null; - foreach( array_slice( $cond, 1 ) as $subcond ) { - if( is_null( $res ) ) + foreach ( array_slice( $cond, 1 ) as $subcond ) { + if ( is_null( $res ) ) { $res = self::recCheckCondition( $subcond, $user ); - else - $res = ($res xor self::recCheckCondition( $subcond, $user )); + } else { + $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- # tions; it's not recursive. Pass it off to self::checkCondition. - if( !is_array( $cond ) ) + if ( !is_array( $cond ) ) { $cond = array( $cond ); + } + return self::checkCondition( $cond, $user ); } @@ -83,13 +105,15 @@ class Autopromote { * @return bool Whether the condition is true for the user */ private static function checkCondition( $cond, User $user ) { - if( count( $cond ) < 1 ) + global $wgEmailAuthentication; + if ( count( $cond ) < 1 ) { return false; + } + switch( $cond[0] ) { case APCOND_EMAILCONFIRMED: - if( User::isValidEmailAddr( $user->getEmail() ) ) { - global $wgEmailAuthentication; - if( $wgEmailAuthentication ) { + if ( User::isValidEmailAddr( $user->getEmail() ) ) { + if ( $wgEmailAuthentication ) { return (bool)$user->getEmailAuthenticationTimestamp(); } else { return true; @@ -101,16 +125,26 @@ 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 ) ); - if( $result === null ) { + if ( $result === null ) { throw new MWException( "Unrecognized condition {$cond[0]} for autopromotion!" ); } - return $result ? true : false; + + return (bool)$result; } } }