summaryrefslogtreecommitdiff
path: root/includes/specials/SpecialAllPages.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/specials/SpecialAllPages.php')
-rw-r--r--includes/specials/SpecialAllPages.php83
1 files changed, 37 insertions, 46 deletions
diff --git a/includes/specials/SpecialAllPages.php b/includes/specials/SpecialAllPages.php
index 74b1f7bb..c4a67c0c 100644
--- a/includes/specials/SpecialAllPages.php
+++ b/includes/specials/SpecialAllPages.php
@@ -25,6 +25,7 @@
* Implements Special:Allpages
*
* @ingroup SpecialPage
+ * @todo Rewrite using IndexPager
*/
class SpecialAllPages extends IncludableSpecialPage {
@@ -179,6 +180,7 @@ class SpecialAllPages extends IncludableSpecialPage {
$toList = $this->getNamespaceKeyAndText( $namespace, $to );
$namespaces = $this->getContext()->getLanguage()->getNamespaces();
$n = 0;
+ $prevTitle = null;
if ( !$fromList || !$toList ) {
$out = $this->msg( 'allpagesbadtitle' )->parseAsBlock();
@@ -191,15 +193,13 @@ class SpecialAllPages extends IncludableSpecialPage {
list( , $toKey, $to ) = $toList;
$dbr = wfGetDB( DB_SLAVE );
- $conds = array(
- 'page_namespace' => $namespace,
- 'page_title >= ' . $dbr->addQuotes( $fromKey )
- );
-
+ $filterConds = array( 'page_namespace' => $namespace );
if ( $hideredirects ) {
- $conds['page_is_redirect'] = 0;
+ $filterConds['page_is_redirect'] = 0;
}
+ $conds = $filterConds;
+ $conds[] = 'page_title >= ' . $dbr->addQuotes( $fromKey );
if ( $toKey !== "" ) {
$conds[] = 'page_title <= ' . $dbr->addQuotes( $toKey );
}
@@ -234,6 +234,35 @@ class SpecialAllPages extends IncludableSpecialPage {
} else {
$out = '';
}
+
+ if ( $fromKey !== '' && !$this->including() ) {
+ # Get the first title from previous chunk
+ $prevConds = $filterConds;
+ $prevConds[] = 'page_title < ' . $dbr->addQuotes( $fromKey );
+ $prevKey = $dbr->selectField(
+ 'page',
+ 'page_title',
+ $prevConds,
+ __METHOD__,
+ array( 'ORDER BY' => 'page_title DESC', 'OFFSET' => $this->maxPerPage - 1 )
+ );
+
+ if ( $prevKey === false ) {
+ # The previous chunk is not complete, need to link to the very first title
+ # available in the database
+ $prevKey = $dbr->selectField(
+ 'page',
+ 'page_title',
+ $prevConds,
+ __METHOD__,
+ array( 'ORDER BY' => 'page_title' )
+ );
+ }
+
+ if ( $prevKey !== false ) {
+ $prevTitle = Title::makeTitle( $namespace, $prevKey );
+ }
+ }
}
if ( $this->including() ) {
@@ -241,44 +270,6 @@ class SpecialAllPages extends IncludableSpecialPage {
return;
}
- if ( $from == '' ) {
- // First chunk; no previous link.
- $prevTitle = null;
- } else {
- # Get the last title from previous chunk
- $dbr = wfGetDB( DB_SLAVE );
- $res_prev = $dbr->select(
- 'page',
- 'page_title',
- array( 'page_namespace' => $namespace, 'page_title < ' . $dbr->addQuotes( $from ) ),
- __METHOD__,
- array( 'ORDER BY' => 'page_title DESC',
- 'LIMIT' => $this->maxPerPage, 'OFFSET' => ( $this->maxPerPage - 1 )
- )
- );
-
- # Get first title of previous complete chunk
- if ( $dbr->numrows( $res_prev ) >= $this->maxPerPage ) {
- $pt = $dbr->fetchObject( $res_prev );
- $prevTitle = Title::makeTitle( $namespace, $pt->page_title );
- } else {
- # The previous chunk is not complete, need to link to the very first title
- # available in the database
- $options = array( 'LIMIT' => 1 );
- if ( !$dbr->implicitOrderby() ) {
- $options['ORDER BY'] = 'page_title';
- }
- $reallyFirstPage_title = $dbr->selectField( 'page', 'page_title',
- array( 'page_namespace' => $namespace ), __METHOD__, $options );
- # Show the previous link if it s not the current requested chunk
- if ( $from != $reallyFirstPage_title ) {
- $prevTitle = Title::makeTitle( $namespace, $reallyFirstPage_title );
- } else {
- $prevTitle = null;
- }
- }
- }
-
$self = $this->getPageTitle();
$topLinks = array(
@@ -287,7 +278,7 @@ class SpecialAllPages extends IncludableSpecialPage {
$bottomLinks = array();
# Do we put a previous link ?
- if ( $prevTitle && $pt = $prevTitle->getText() ) {
+ if ( $prevTitle ) {
$query = array( 'from' => $prevTitle->getText() );
if ( $namespace ) {
@@ -300,7 +291,7 @@ class SpecialAllPages extends IncludableSpecialPage {
$prevLink = Linker::linkKnown(
$self,
- $this->msg( 'prevpage', $pt )->escaped(),
+ $this->msg( 'prevpage', $prevTitle->getText() )->escaped(),
array(),
$query
);