';
return $out;
}
function indexShowToplevel ( $namespace = 0 ) {
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 );
$cur = $dbr->tableName( 'cur' );
$fromwhere = "FROM $cur WHERE cur_namespace=$namespace";
$order_arr = array ( 'ORDER BY' => 'cur_title' );
$order_str = 'ORDER BY cur_title';
$out = "";
$where = array( 'cur_namespace' => $namespace );
$count = $dbr->selectField( 'cur', '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 cur_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 cur_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 cur_title $fromwhere $order_str " . $dbr->limitResult ( $limit, $from );
$res = $dbr->query( $sql, $fname );
$s = $dbr->fetchObject( $res );
array_push ( $lines, $s->cur_title );
if ( $s = $dbr->fetchObject( $res ) ) {
array_push ( $lines, $s->cur_title );
}
$dbr->freeResult( $res );
}
# At this point, $lines should contain an even number of elements.
$out .= "