*/
protected $maxPageLength = 70;
+ /**
+ * Maximum number of pages in a hierarchical ("top level") list.
+ *
+ * Traversal of the entire page list by spidering the top levels is thought
+ * to require O(N^3) DB CPU time where N is the number of pages on the wiki.
+ * See bug 56840. If this limit is exceeded, the behaviour becomes like a
+ * simple alphabetic pager.
+ */
+ protected $maxTopLevelPages = 50000;
+
/**
* Determines, which message describes the input field 'nsfrom'.
*
*/
function namespaceForm( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) {
global $wgScript;
- $t = $this->getTitle();
+ $t = $this->getPageTitle();
$out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
$out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
$lines = $wgMemc->get( $key );
$count = $dbr->estimateRowCount( 'page', '*', $where, __METHOD__ );
+
+ // Don't show a hierarchical list if the number of pages is very large,
+ // since generating it will cause a lot of scanning
+ if ( $count > $this->maxTopLevelPages ) {
+ $this->showChunk( $namespace, $from, $to, $hideredirects );
+ return;
+ }
+
$maxPerSubpage = intval( $count / $this->maxLineCount );
$maxPerSubpage = max( $maxPerSubpage, $this->maxPerPage );
$nsForm .
'</td>
<td class="mw-allpages-nav">' .
- Linker::link( $this->getTitle(), $this->msg( 'allpages' )->escaped(),
+ Linker::link( $this->getPageTitle(), $this->msg( 'allpages' )->escaped(),
array(), array(), 'known' ) .
"</td>
</tr>" .
$queryParams['hideredirects'] = 1;
}
- $url = $this->getTitle()->getLocalURL( $queryParams );
+ $url = $this->getPageTitle()->getLocalURL( $queryParams );
$inlink = Html::element( 'a', array( 'href' => $url ), $inpointf );
$outlink = Html::element( 'a', array( 'href' => $url ), $outpointf );
}
}
- $self = $this->getTitle();
+ $self = $this->getPageTitle();
$nsForm = $this->namespaceForm( $namespace, $from, $to, $hideredirects );
$out2 = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-form' ) ) .