http://www.mediawiki.org/wiki/Special:Code/MediaWiki/88283

Revision: 88283
Author:   yaron
Date:     2011-05-17 00:59:45 +0000 (Tue, 17 May 2011)
Log Message:
-----------
Fix to also display pages that are approvable because they contain the 
__APPROVEDREVS__ magic word

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

Modified: trunk/extensions/ApprovedRevs/SpecialApprovedRevs.php
===================================================================
--- trunk/extensions/ApprovedRevs/SpecialApprovedRevs.php       2011-05-17 
00:18:00 UTC (rev 88282)
+++ trunk/extensions/ApprovedRevs/SpecialApprovedRevs.php       2011-05-17 
00:59:45 UTC (rev 88283)
@@ -140,6 +140,7 @@
                $dbr = wfGetDB( DB_SLAVE );
                $approved_revs = $dbr->tableName( 'approved_revs' );
                $page = $dbr->tableName( 'page' );
+               $page_props = $dbr->tableName( 'page_props' );
                
                if ( $this->mMode == 'notlatest' ) {
                        return "SELECT 'Page' AS type,
@@ -148,21 +149,30 @@
                                p.page_latest AS latest_id
                                FROM $approved_revs ar JOIN $page p
                                ON ar.page_id = p.page_id
-                               WHERE p.page_latest != ar.rev_id AND $nsCond";
+                               LEFT OUTER JOIN $page_props pp
+                               ON ar.page_id = pp_page
+                               WHERE p.page_latest != ar.rev_id
+                               AND ($nsCond OR (pp_propname = 'approvedrevs' 
AND pp_value = 'y'))";
                } elseif ( $this->mMode == 'unapproved' ) {
                        return "SELECT 'Page' AS type,
                                p.page_id AS id,
                                p.page_latest AS latest_id
                                FROM $approved_revs ar RIGHT OUTER JOIN $page p
                                ON ar.page_id = p.page_id
-                               WHERE ar.page_id IS NULL AND $nsCond";
+                               LEFT OUTER JOIN $page_props pp
+                               ON ar.page_id = pp_page
+                               WHERE ar.page_id IS NULL
+                               AND ($nsCond OR (pp_propname = 'approvedrevs' 
AND pp_value = 'y'))";
                } else { // all approved pages
                        return "SELECT 'Page' AS type,
                                p.page_id AS id,
                                ar.rev_id AS rev_id,
                                p.page_latest AS latest_id
                                FROM $approved_revs ar JOIN $page p
-                               ON ar.page_id = p.page_id AND $nsCond";
+                               ON ar.page_id = p.page_id
+                               LEFT OUTER JOIN $page_props pp
+                               ON ar.page_id = pp_page
+                               WHERE ($nsCond OR (pp_propname = 'approvedrevs' 
AND pp_value = 'y'))";
                }
        }
 
@@ -174,10 +184,15 @@
         */     
        function getQueryInfo() {
                global $egApprovedRevsNamespaces;
-               
+
+               $namespacesString = '(' . implode( ',', 
$egApprovedRevsNamespaces ) . ')';
                if ( $this->mMode == 'notlatest' ) {
                        return array(
-                               'tables' => array( 'ar' => 'approved_revs', 'p' 
=> 'page' ),
+                               'tables' => array(
+                                       'ar' => 'approved_revs',
+                                       'p' => 'page',
+                                       'pp' => 'page_props',
+                               ),
                                'fields' => array(
                                        'p.page_id AS id',
                                        'ar.rev_id AS rev_id',
@@ -186,30 +201,41 @@
                                'join_conds' => array(
                                        'p' => array(
                                                'JOIN', 'ar.page_id=p.page_id'
-                                       )
+                                       ),
+                                       'pp' => array(
+                                               'LEFT OUTER JOIN', 
'ar.page_id=pp_page'
+                                       ),
                                ),
-                               'conds' => array(
-                                       'p.page_latest != ar.rev_id',
-                                       'p.page_namespace' => 
$egApprovedRevsNamespaces
-                               )
+                               'conds' => "p.page_latest != ar.rev_id AND 
((p.page_namespace IN $namespacesString) OR (pp_propname = 'approvedrevs' AND 
pp_value = 'y'))",
                        );
                } elseif ( $this->mMode == 'unapproved' ) {
                        return array(
-                               'tables' => array( 'ar' => 'approved_revs', 'p' 
=> 'page' ),
-                               'fields' => array( 'p.page_id AS id', 
'p.page_latest AS latest_id' ),
+                               'tables' => array(
+                                       'ar' => 'approved_revs',
+                                       'p' => 'page',
+                                       'pp' => 'page_props',
+                               ),
+                               'fields' => array(
+                                       'p.page_id AS id',
+                                       'p.page_latest AS latest_id'
+                               ),
                                'join_conds' => array(
                                        'p' => array(
                                                'RIGHT OUTER JOIN', 
'ar.page_id=p.page_id'
-                                       )
+                                       ),
+                                       'pp' => array(
+                                               'LEFT OUTER JOIN', 
'ar.page_id=pp_page'
+                                       ),
                                ),
-                               'conds' => array(
-                                       'ar.page_id IS NULL',
-                                       'p.page_namespace' => 
$egApprovedRevsNamespaces
-                               )
+                               'conds' => "ar.page_id IS NULL AND 
((p.page_namespace IN $namespacesString) OR (pp_propname = 'approvedrevs' AND 
pp_value = 'y'))",
                        );
                } else { // all approved pages
                        return array(
-                               'tables' => array( 'ar' => 'approved_revs', 'p' 
=> 'page' ),
+                               'tables' => array(
+                                       'ar' => 'approved_revs',
+                                       'p' => 'page',
+                                       'pp' => 'page_props',
+                               ),
                                'fields' => array(
                                        'p.page_id AS id',
                                        'ar.rev_id AS rev_id',
@@ -218,9 +244,12 @@
                                'join_conds' => array(
                                        'p' => array(
                                                'JOIN', 'ar.page_id=p.page_id',
-                                               'p.page_namespace' => 
$egApprovedRevsNamespaces
-                                       )
+                                       ),
+                                       'pp' => array(
+                                               'LEFT OUTER JOIN', 
'ar.page_id=pp_page'
+                                       ),
                                ),
+                               'conds' => "(p.page_namespace IN 
$namespacesString) OR (pp_propname = 'approvedrevs' AND pp_value = 'y')",
                        );
                }
        }


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to