fix some of RC rollback madness:
authorDomas Mituzas <midom@users.mediawiki.org>
Sun, 29 Mar 2009 11:02:16 +0000 (11:02 +0000)
committerDomas Mituzas <midom@users.mediawiki.org>
Sun, 29 Mar 2009 11:02:16 +0000 (11:02 +0000)
* Avoid extensive permission checks, just rely on User::isAllowed("rollback")
* Preload page_latest data in initial RC query, no need to run thousands of queries afterwards

includes/ChangesList.php
includes/specials/SpecialRecentchanges.php

index 079cdc6..1c654dd 100644 (file)
@@ -331,8 +331,7 @@ class ChangesList {
                        $page = $rc->getTitle();
                        /** Check for rollback and edit permissions, disallow special pages, and only
                          * show a link on the top-most revision */
-                       if( $page->quickUserCan('rollback') && $page->quickUserCan('edit')
-                               && $page->getLatestRevID() == $rc->mAttribs['rc_this_oldid'] )
+                       if ($wgUser->isAllowed('rollback') && $rc->mAttribs['page_latest'] == $rc->mAttribs['rc_this_oldid'] )
                        {
                                $rev = new Revision( array(
                                        'id'        => $rc->mAttribs['rc_this_oldid'],
index bc7b1e9..9aec761 100644 (file)
@@ -285,7 +285,10 @@ class SpecialRecentChanges extends SpecialPage {
                        $join_conds['watchlist'] = array('LEFT JOIN',
                                "wl_user={$uid} AND wl_title=rc_title AND wl_namespace=rc_namespace");
                }
-
+               if ($wgUser->isAllowed("rollback")) {
+                       $tables[] = 'page';
+                       $join_conds['page'] = array('LEFT JOIN', 'rc_namespace=page_namespace AND rc_title=page_title AND rc_this_oldid=page_latest');
+               }
                // Tag stuff.
                $fields = array(); // Fields are * in this case, so let the function modify an empty array to keep it happy.
                ChangeTags::modifyDisplayQuery( $tables, $fields, $conds, $join_conds, $opts['tagfilter'] );