https://www.mediawiki.org/wiki/Special:Code/MediaWiki/114824

Revision: 114824
Author:   yaron
Date:     2012-04-10 17:28:01 +0000 (Tue, 10 Apr 2012)
Log Message:
-----------
Added userCanApprove() utility function

Modified Paths:
--------------
    trunk/extensions/ApprovedRevs/ApprovedRevs_body.php

Modified: trunk/extensions/ApprovedRevs/ApprovedRevs_body.php
===================================================================
--- trunk/extensions/ApprovedRevs/ApprovedRevs_body.php 2012-04-10 17:02:14 UTC 
(rev 114823)
+++ trunk/extensions/ApprovedRevs/ApprovedRevs_body.php 2012-04-10 17:28:01 UTC 
(rev 114824)
@@ -13,6 +13,7 @@
        // Static arrays to prevent querying the database more than necessary.
        static $mApprovedContentForPage = array();
        static $mApprovedRevIDForPage = array();
+       static $mUserCanApprove = null;
        
        /**
         * Gets the approved revision ID for this page, or null if there isn't
@@ -132,6 +133,61 @@
                return $isApprovable;
        }
 
+       public static function userCanApprove( $title ) {
+               global $egApproveRevsSelfOwnedNamespaces;
+
+               // $mUserCanApprove is a static variable used for
+               // "caching" the result of this function, so that
+               // it only has to be called once.
+               if ( self::$mUserCanApprove ) {
+                       return true;
+               } elseif ( self::$mUserCanApprove === false ) {
+                       return false;
+               } elseif ( $title->userCan( 'approverevisions' ) ) {
+                       self::$mUserCanApprove = true;
+                       return true;
+               } else {
+                       // If the user doesn't have the 'approverevisions'
+                       // permission, they still might be able to approve
+                       // revisions - it depends on whether the current
+                       // namespace is within the admin-defined
+                       // $egApproveRevsSelfOwnedNamespaces array.
+                       global $wgUser;
+                       $namespace = $title->getNamespace();
+                       if ( in_array( $namespace, 
$egApproveRevsSelfOwnedNamespaces ) ) {
+                               if ( $namespace == NS_USER ) {
+                                       // If the page is in the 'User:'
+                                       // namespace, this user can approve
+                                       // revisions if it's their user page.
+                                       if ( $title->getText() == 
$wgUser->getName() ) {
+                                               self::$mUserCanApprove = true;
+                                               return true;
+                                       }
+                               } else {
+                                       // Otherwise, they can approve revisions
+                                       // if they created the page.
+                                       // We get that information via a SQL
+                                       // query - is there an easier way?
+                                       $dbr = wfGetDB( DB_SLAVE );
+                                       $row = $dbr->selectRow(
+                                               array( 'revision', 'page' ),
+                                               'revision.rev_user_text',
+                                               array( 'page.page_title' => 
$title->getDBkey() ),
+                                               null,
+                                               array( 'ORDER BY' => 
'revision.rev_id ASC' ),
+                                               array( 'revision' => array( 
'JOIN', 'revision.rev_page = page.page_id' ) )
+                                       );
+                                       if ( $row->rev_user_text == 
$wgUser->getName() ) {
+                                               self::$mUserCanApprove = true;
+                                               return true;
+                                       }
+                               }
+                       }
+               }
+               self::$mUserCanApprove = false;
+               return false;
+       }
+
        public static function saveApprovedRevIDInDB( $title, $rev_id ) {
                $dbr = wfGetDB( DB_MASTER );
                $page_id = $title->getArticleID();


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to