From: Kunal Mehta Date: Mon, 18 Aug 2014 18:11:34 +0000 (-0700) Subject: Revision: Allow for userCanBitfield to check per-page restrictions X-Git-Tag: 1.31.0-rc.0~14371^2 X-Git-Url: http://git.cyclocoop.org/%24action?a=commitdiff_plain;h=87cbe68f3368dc372d1ea1e0a3ab4e34d93a3a58;p=lhc%2Fweb%2Fwiklou.git Revision: Allow for userCanBitfield to check per-page restrictions Change-Id: I13ded8328cac59466b691e63183a16d321659ea4 --- diff --git a/includes/Revision.php b/includes/Revision.php index a6148c7abf..cad9f2ce59 100644 --- a/includes/Revision.php +++ b/includes/Revision.php @@ -1654,9 +1654,13 @@ class Revision implements IDBAccessObject { * self::DELETED_COMMENT = File::DELETED_COMMENT, * self::DELETED_USER = File::DELETED_USER * @param User|null $user User object to check, or null to use $wgUser + * @param Title|null $title A Title object to check for per-page restrictions on, + * instead of just plain userrights * @return bool */ - public static function userCanBitfield( $bitfield, $field, User $user = null ) { + public static function userCanBitfield( $bitfield, $field, User $user = null , + Title $title = null + ) { if ( $bitfield & $field ) { // aspect is deleted if ( $user === null ) { global $wgUser; @@ -1670,8 +1674,19 @@ class Revision implements IDBAccessObject { $permissions = array( 'deletedhistory' ); } $permissionlist = implode( ', ', $permissions ); - wfDebug( "Checking for $permissionlist due to $field match on $bitfield\n" ); - return call_user_func_array( array( $user, 'isAllowedAny' ), $permissions ); + if ( $title === null ) { + wfDebug( "Checking for $permissionlist due to $field match on $bitfield\n" ); + return call_user_func_array( array( $user, 'isAllowedAny' ), $permissions ); + } else { + $text = $title->getPrefixedText(); + wfDebug( "Checking for $permissionlist on $text due to $field match on $bitfield\n" ); + foreach( $permissions as $perm ) { + if ( $title->userCan( $perm, $user ) ) { + return true; + } + } + return false; + } } else { return true; }