From ca32f08966f1b51fcb19460f0996bb0c4048e6fe Mon Sep 17 00:00:00 2001
From: Pierre Schmitz <pierre@archlinux.de>
Date: Sat, 3 Dec 2011 13:29:22 +0100
Subject: Update to MediaWiki 1.18.0

* also update ArchLinux skin to chagnes in MonoBook
* Use only css to hide our menu bar when printing
---
 includes/api/ApiQueryAllpages.php | 74 ++++++++++++++++++++++++++++-----------
 1 file changed, 54 insertions(+), 20 deletions(-)

(limited to 'includes/api/ApiQueryAllpages.php')

diff --git a/includes/api/ApiQueryAllpages.php b/includes/api/ApiQueryAllpages.php
index 21f72916..42928418 100644
--- a/includes/api/ApiQueryAllpages.php
+++ b/includes/api/ApiQueryAllpages.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * API for MediaWiki 1.8+
+ *
  *
  * Created on Sep 25, 2006
  *
@@ -48,6 +48,10 @@ class ApiQueryAllpages extends ApiQueryGeneratorBase {
 		return 'public';
 	}
 
+	/**
+	 * @param $resultPageSet ApiPageSet
+	 * @return void
+	 */
 	public function executeGenerator( $resultPageSet ) {
 		if ( $resultPageSet->isResolvingRedirects() ) {
 			$this->dieUsage( 'Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator', 'params' );
@@ -56,6 +60,10 @@ class ApiQueryAllpages extends ApiQueryGeneratorBase {
 		$this->run( $resultPageSet );
 	}
 
+	/**
+	 * @param $resultPageSet ApiPageSet
+	 * @return void
+	 */
 	private function run( $resultPageSet = null ) {
 		$db = $this->getDB();
 
@@ -75,7 +83,7 @@ class ApiQueryAllpages extends ApiQueryGeneratorBase {
 		$from = ( is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
 		$to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
 		$this->addWhereRange( 'page_title', $dir, $from, $to );
-		
+
 		if ( isset( $params['prefix'] ) ) {
 			$this->addWhere( 'page_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
 		}
@@ -103,30 +111,38 @@ class ApiQueryAllpages extends ApiQueryGeneratorBase {
 		}
 
 		// Page protection filtering
-		if ( !empty( $params['prtype'] ) ) {
+		if ( count( $params['prtype'] ) || $params['prexpiry'] != 'all' ) {
 			$this->addTables( 'page_restrictions' );
 			$this->addWhere( 'page_id=pr_page' );
 			$this->addWhere( 'pr_expiry>' . $db->addQuotes( $db->timestamp() ) );
-			$this->addWhereFld( 'pr_type', $params['prtype'] );
 
-			if ( isset( $params['prlevel'] ) ) {
-				// Remove the empty string and '*' from the prlevel array
-				$prlevel = array_diff( $params['prlevel'], array( '', '*' ) );
+			if ( count( $params['prtype'] ) ) {
+				$this->addWhereFld( 'pr_type', $params['prtype'] );
 
-				if ( !empty( $prlevel ) ) {
-					$this->addWhereFld( 'pr_level', $prlevel );
-				}
-			}
-			if ( $params['prfiltercascade'] == 'cascading' ) {
-				$this->addWhereFld( 'pr_cascade', 1 );
-			} elseif ( $params['prfiltercascade'] == 'noncascading' ) {
-				$this->addWhereFld( 'pr_cascade', 0 );
-			}
+				if ( isset( $params['prlevel'] ) ) {
+					// Remove the empty string and '*' from the prlevel array
+					$prlevel = array_diff( $params['prlevel'], array( '', '*' ) );
 
-			$this->addOption( 'DISTINCT' );
+					if ( count( $prlevel ) ) {
+						$this->addWhereFld( 'pr_level', $prlevel );
+					}
+				}
+				if ( $params['prfiltercascade'] == 'cascading' ) {
+					$this->addWhereFld( 'pr_cascade', 1 );
+				} elseif ( $params['prfiltercascade'] == 'noncascading' ) {
+					$this->addWhereFld( 'pr_cascade', 0 );
+				}
 
+				$this->addOption( 'DISTINCT' );
+			}
 			$forceNameTitleIndex = false;
 
+			if ( $params['prexpiry'] == 'indefinite' ) {
+				$this->addWhere( "pr_expiry = {$db->addQuotes( $db->getInfinity() )} OR pr_expiry IS NULL" );
+			} elseif ( $params['prexpiry'] == 'definite' ) {
+				$this->addWhere( "pr_expiry != {$db->addQuotes( $db->getInfinity() )}" );
+			}
+
 		} elseif ( isset( $params['prlevel'] ) ) {
 			$this->dieUsage( 'prlevel may not be used without prtype', 'params' );
 		}
@@ -248,7 +264,15 @@ class ApiQueryAllpages extends ApiQueryGeneratorBase {
 					'all'
 				),
 				ApiBase::PARAM_DFLT => 'all'
-			)
+			),
+			'prexpiry' => array(
+				ApiBase::PARAM_TYPE => array(
+					'indefinite',
+					'definite',
+					'all'
+				),
+				ApiBase::PARAM_DFLT => 'all'
+			),
 		);
 	}
 
@@ -267,7 +291,13 @@ class ApiQueryAllpages extends ApiQueryGeneratorBase {
 			'prlevel' => "The protection level (must be used with {$p}prtype= parameter)",
 			'prfiltercascade' => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
 			'filterlanglinks' => 'Filter based on whether a page has langlinks',
-			'limit' => 'How many total pages to return.'
+			'limit' => 'How many total pages to return.',
+			'prexpiry' => array(
+				'Which protection expiry to filter the page on',
+				' indefinite - Get only pages with indefinite protection expiry',
+				' definite - Get only pages with a definite (specific) protection expiry',
+				' all - Get pages with any protections expiry'
+			),
 		);
 	}
 
@@ -295,7 +325,11 @@ class ApiQueryAllpages extends ApiQueryGeneratorBase {
 		);
 	}
 
+	public function getHelpUrls() {
+		return 'https://www.mediawiki.org/wiki/API:Allpages';
+	}
+
 	public function getVersion() {
-		return __CLASS__ . ': $Id: ApiQueryAllpages.php 85354 2011-04-04 18:25:31Z demon $';
+		return __CLASS__ . ': $Id: ApiQueryAllpages.php 104449 2011-11-28 15:52:04Z reedy $';
 	}
 }
-- 
cgit v1.2.3-54-g00ecf