';
return $out;
}
/**
* @todo Document
* @param integer $namespace (default NS_MAIN)
*/
function indexShowToplevel ( $namespace = NS_MAIN ) {
global $wgOut, $indexMaxperpage, $toplevelMaxperpage, $wgContLang, $wgRequest, $wgUser;
$sk = $wgUser->getSkin();
$fname = "indexShowToplevel";
$namespace = intval ($namespace);
# TODO: Either make this *much* faster or cache the title index points
# in the querycache table.
$dbr =& wfGetDB( DB_SLAVE );
$page = $dbr->tableName( 'page' );
$fromwhere = "FROM $page WHERE page_namespace=$namespace";
$order_arr = array ( 'ORDER BY' => 'page_title' );
$order_str = 'ORDER BY page_title';
$out = "";
$where = array( 'page_namespace' => $namespace );
$count = $dbr->selectField( 'page', 'COUNT(*)', $where, $fname );
$sections = ceil( $count / $indexMaxperpage );
if ( $sections < 3 ) {
# If there are only two or less sections, don't even display them.
# Instead, display the first section directly.
indexShowChunk( '', $namespace );
return;
}
# We want to display $toplevelMaxperpage lines starting at $offset.
# NOTICE: $offset starts at 0
$offset = intval ( $wgRequest->getVal( 'offset' ) );
if ( $offset < 0 ) { $offset = 0; }
if ( $offset >= $sections ) { $offset = $sections - 1; }
# Where to stop? Notice that this can take the value of $sections, but $offset can't, because if
# we're displaying only the very last section, we still need two DB queries to find the titles
$stopat = ( $offset + $toplevelMaxperpage < $sections )
? $offset + $toplevelMaxperpage : $sections ;
# This array is going to hold the page_titles in order.
$lines = array();
# If we are going to show n rows, we need n+1 queries to find the relevant titles.
for ( $i = $offset; $i <= $stopat; $i++ ) {
if ( $i == $sections ) # if we're displaying the last section, we need to
$from = $count-1; # find the last page_title in the DB
else if ( $i > $offset )
$from = $i * $indexMaxperpage - 1;
else
$from = $i * $indexMaxperpage;
$limit = ( $i == $offset || $i == $stopat ) ? 1 : 2;
$sql = "SELECT page_title $fromwhere $order_str " . $dbr->limitResult ( $limit, $from );
$res = $dbr->query( $sql, $fname );
$s = $dbr->fetchObject( $res );
array_push ( $lines, $s->page_title );
if ( $s = $dbr->fetchObject( $res ) ) {
array_push ( $lines, $s->page_title );
}
$dbr->freeResult( $res );
}
# At this point, $lines should contain an even number of elements.
$out .= "