X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSpecialAllpages.php;h=4c704e3741f26d4c073bab7fa2d3266fbf039fda;hb=73fc00251699cc8ae137e142809a32e7004c73bd;hp=1853c2e60634dc47be9860131d7969ce9f22e5f2;hpb=14e028bb19ea156f235e6320775f43cfb9901d08;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SpecialAllpages.php b/includes/SpecialAllpages.php index 1853c2e606..4c704e3741 100644 --- a/includes/SpecialAllpages.php +++ b/includes/SpecialAllpages.php @@ -1,80 +1,125 @@ getVal( 'from' ); $namespace = $wgRequest->getInt( 'namespace' ); - $names = $wgLang->getNamespaces(); - if( !isset( $names[$namespace] ) ) { + $invert = $wgRequest->getBool( 'invert' ); + + $namespaces = $wgContLang->getNamespaces(); + + if( !in_array($namespace, array_keys($namespaces)) ) $namespace = 0; - } - $wgOut->setPagetitle ( $namespace > 0 ? wfMsg ( 'allpagesnamespace', $names[$namespace] ) - : wfMsg ( 'allarticles' ) ); - if ( $par ) { - indexShowChunk( $par, $namespace ); - } elseif ( $from ) { - indexShowChunk( $from, $namespace ); + if ($invert) { + $wgOut->setPagetitle( $namespace > 0 ? + wfMsg( 'allnotinnamespace', $namespaces[$namespace] ) : + wfMsg( 'allnonarticles' ) + ); } else { - indexShowToplevel ( $namespace ); + $wgOut->setPagetitle( $namespace > 0 ? + wfMsg( 'allinnamespace', $namespaces[$namespace] ) : + wfMsg( 'allarticles' ) + ); + } + + if ( isset($par) ) { + indexShowChunk( $namespace, $par, $invert, $specialPage->including() ); + } elseif ( isset($from) ) { + indexShowChunk( $namespace, $from, $invert, $specialPage->including() ); + } else { + indexShowToplevel ( $namespace, $invert, $specialPage->including() ); } } -function namespaceForm ( $namespace = 0, $from = "" ) -{ - global $wgLang, $wgScript; - +/** + * HTML for the top form + * @param integer $namespace A namespace constant (default NS_MAIN). + * @param string $from Article name we are starting listing at. + * @param bool $invert true if we want the namespaces inverted (default false) + */ +function indexNamespaceForm ( $namespace = NS_MAIN, $from = '', $invert = false ) { + global $wgContLang, $wgScript; $t = Title::makeTitle( NS_SPECIAL, "Allpages" ); - $namespaceselect = '"; + $arr = $wgContLang->getFormattedNamespaces(); + foreach ( $arr as $ns => $name ) { + if ($ns < NS_MAIN) + continue; + $n = $ns == 0 ? wfMsg ( 'blanknamespace' ) : $name; + $sel = $ns == $namespace ? ' selected="selected"' : ''; + $namespaceselect .= ""; } $namespaceselect .= ''; - $frombox = ''; $submitbutton = ''; + + $invertbox = "'; $out = "
"; $out .= ''; - $out .= wfMsg ( 'allpagesformtext', $frombox, $namespaceselect, $submitbutton ); + $out .= " + + + + + + + + + +
" . wfMsg('allpagesfrom') . "
+ $namespaceselect $submitbutton $invertbox + +
+"; $out .= '
'; - return $out; + return $out; } -function indexShowToplevel ( $namespace = 0 ) -{ - global $wgOut, $indexMaxperpage, $toplevelMaxperpage, $wgLang, $wgRequest, $wgUser; +/** + * @param integer $namespace (default NS_MAIN) + * @param bool $invert true if we want the namespaces inverted (default false) + */ +function indexShowToplevel ( $namespace = NS_MAIN, $invert = false, $including = false ) { + 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'; + $page = $dbr->tableName( 'page' ); + $fromwhere = "FROM $page WHERE page_namespace" . + ($invert ? '!' : '') . "=$namespace"; + $order_arr = array ( 'ORDER BY' => 'page_title' ); + $order_str = 'ORDER BY page_title'; $out = ""; - $where = array( 'cur_namespace' => $namespace ); + $where = array( 'page_namespace' => $namespace ); - $count = $dbr->selectField( 'cur', 'COUNT(*)', $where, $fname ); + $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 ); + indexShowChunk( $namespace, '', $invert, $including ); return; } @@ -89,24 +134,25 @@ function indexShowToplevel ( $namespace = 0 ) $stopat = ( $offset + $toplevelMaxperpage < $sections ) ? $offset + $toplevelMaxperpage : $sections ; - # This array is going to hold the cur_titles in order. + # 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++ ) { + 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 + $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 cur_title $fromwhere $order_str " . $dbr->limitResult ( $limit, $from ); + $sql = "SELECT page_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 ); + array_push ( $lines, $s->page_title ); + if ( $s = $dbr->fetchObject( $res ) ) { + array_push ( $lines, $s->page_title ); + } } $dbr->freeResult( $res ); } @@ -116,51 +162,60 @@ function indexShowToplevel ( $namespace = 0 ) while ( count ( $lines ) > 0 ) { $inpoint = array_shift ( $lines ); $outpoint = array_shift ( $lines ); - $out .= indexShowline ( $inpoint, $outpoint, $namespace ); + $out .= indexShowline ( $inpoint, $outpoint, $namespace, $invert ); } - $out .= ""; - - $nsForm = namespaceForm ( $namespace ); - + $out .= ''; + + $nsForm = indexNamespaceForm ( $namespace, '', $invert ); + # Is there more? - $morelinks = ""; - if ( $offset > 0 ) { - $morelinks = $sk->makeKnownLink ( - $wgLang->specialPage ( "Allpages" ), - wfMsg ( 'allpagesprev' ), - ( $offset > $toplevelMaxperpage ) ? 'offset='.($offset-$toplevelMaxperpage) : '' - ); - } - if ( $stopat < $sections-1 ) { - if ( $morelinks != "" ) { $morelinks .= " | "; } - $morelinks .= $sk->makeKnownLink ( - $wgLang->specialPage ( "Allpages" ), - wfMsg ( 'allpagesnext' ), - 'offset=' . ($offset + $toplevelMaxperpage) - ); - } - - if ( $morelinks != "" ) { - $out2 = ''; - $out2 .= '
' . $nsForm; - $out2 .= ''; - $out2 .= $morelinks . '

'; + if ( $including ) { + $out2 = ''; } else { - $out2 = $nsForm . '
'; + $morelinks = ''; + if ( $offset > 0 ) { + $morelinks = $sk->makeKnownLink ( + $wgContLang->specialPage ( 'Allpages' ), + wfMsg ( 'allpagesprev' ), + ( $offset > $toplevelMaxperpage ) ? 'offset='.($offset-$toplevelMaxperpage) : '' + ); + } + if ( $stopat < $sections-1 ) { + if ( $morelinks != '' ) { $morelinks .= " | "; } + $morelinks .= $sk->makeKnownLink ( + $wgContLang->specialPage ( 'Allpages' ), + wfMsg ( 'allpagesnext' ), + 'offset=' . ($offset + $toplevelMaxperpage) + ); + } + + if ( $morelinks != '' ) { + $out2 = ''; + $out2 .= '
' . $nsForm; + $out2 .= ''; + $out2 .= $morelinks . '

'; + } else { + $out2 = $nsForm . '
'; + } } $wgOut->addHtml( $out2 . $out ); } -function indexShowline( $inpoint, $outpoint, $namespace = 0 ) -{ +/** + * @todo Document + * @param string $from + * @param integer $namespace (Default NS_MAIN) + * @param bool $invert true if we want the namespaces inverted (default false) + */ +function indexShowline( $inpoint, $outpoint, $namespace = NS_MAIN, $invert ) { global $wgOut, $wgLang, $wgUser; $sk = $wgUser->getSkin(); $dbr =& wfGetDB( DB_SLAVE ); - $inpointf = htmlspecialchars( str_replace( "_", " ", $inpoint ) ); - $outpointf = htmlspecialchars( str_replace( "_", " ", $outpoint ) ); - $queryparams = $namespace ? ('namespace='.intval($namespace)) : ''; + $inpointf = htmlspecialchars( str_replace( '_', ' ', $inpoint ) ); + $outpointf = htmlspecialchars( str_replace( '_', ' ', $outpoint ) ); + $queryparams = ($namespace ? "namespace=$namespace" : '') . ($invert ? "&invert=$invert" : ''); $special = Title::makeTitle( NS_SPECIAL, 'Allpages/' . $inpoint ); $link = $special->escapeLocalUrl( $queryparams ); @@ -172,35 +227,44 @@ function indexShowline( $inpoint, $outpoint, $namespace = 0 ) return ''.$out.''; } -function indexShowChunk( $from, $namespace = 0 ) -{ - global $wgOut, $wgUser, $indexMaxperpage, $wgLang; +/** + * @param integer $namespace (Default NS_MAIN) + * @param string $from list all pages from this name (default FALSE) + * @param bool $invert true if we want the namespaces inverted (default false) + */ +function indexShowChunk( $namespace = NS_MAIN, $from, $invert = false, $including = false ) { + global $wgOut, $wgUser, $indexMaxperpage, $wgContLang; $sk = $wgUser->getSkin(); $maxPlusOne = $indexMaxperpage + 1; - $namespacee = intval($namespace); - $out = ""; + $out = ''; $dbr =& wfGetDB( DB_SLAVE ); - $cur = $dbr->tableName( 'cur' ); + $page = $dbr->tableName( 'page' ); $fromTitle = Title::newFromURL( $from ); $fromKey = is_null( $fromTitle ) ? '' : $fromTitle->getDBkey(); - $sql = "SELECT cur_title FROM $cur WHERE cur_namespace=$namespacee" . - " AND cur_title >= ". $dbr->addQuotes( $fromKey ) . - " ORDER BY cur_title LIMIT " . $maxPlusOne; - $res = $dbr->query( $sql, "indexShowChunk" ); + $sql = "SELECT page_namespace,page_title FROM $page WHERE page_namespace" . + ($invert ? '!' : '') . "=$namespace" . + " AND page_title >= ". $dbr->addQuotes( $fromKey ) . + " ORDER BY page_title LIMIT " . $maxPlusOne; + $res = $dbr->query( $sql, 'indexShowChunk' ); ### FIXME: side link to previous $n = 0; $out = ''; + + $namespaces = $wgContLang->getFormattedNamespaces(); while( ($n < $indexMaxperpage) && ($s = $dbr->fetchObject( $res )) ) { - $t = Title::makeTitle( $namespacee, $s->cur_title ); + $t = Title::makeTitle( $s->page_namespace, $s->page_title ); if( $t ) { - $link = $sk->makeKnownLinkObj( $t, $t->getText() ); + $ns = $s->page_namespace; + $prefix = $invert ? $namespaces[$ns] : ''; + $prefix .= $invert && $namespaces[$ns] != $wgContLang->getNsText(NS_MAIN) ? ':' : ''; + $link = $sk->makeKnownLinkObj( $t, $t->getText(), false, false, $prefix ); } else { - $link = '[[' . htmlspecialchars( $s->cur_title ) . ']]'; + $link = '[[' . htmlspecialchars( $s->page_title ) . ']]'; } if( $n % 3 == 0 ) { $out .= ''; @@ -215,20 +279,26 @@ function indexShowChunk( $from, $namespace = 0 ) $out .= ''; } $out .= '
'; - - $nsForm = namespaceForm ( $namespace, $from ); - $out2 = ''; - $out2 .= '
' . $nsForm; - $out2 .= '' . - $sk->makeKnownLink( $wgLang->specialPage( "Allpages" ), - wfMsg ( 'allpages' ) ); - if ( ($n == $indexMaxperpage) && ($s = $dbr->fetchObject( $res )) ) { - $out2 .= " | " . $sk->makeKnownLink( - $wgLang->specialPage( "Allpages" ), - wfMsg ( 'nextpage', $s->cur_title ), - "from=" . wfUrlEncode ( $s->cur_title ) ); + + if ( $including ) { + $out2 = ''; + } else { + $nsForm = indexNamespaceForm ( $namespace, $from, $invert ); + $out2 = ''; + $out2 .= '
' . $nsForm; + $out2 .= '' . + $sk->makeKnownLink( $wgContLang->specialPage( "Allpages" ), + wfMsg ( 'allpages' ) ); + if ( ($n == $indexMaxperpage) && ($s = $dbr->fetchObject( $res )) ) { + $namespaceparam = $namespace ? "&namespace=$namespace" : ""; + $invertparam = $invert ? "&invert=$invert" : ''; + $out2 .= " | " . $sk->makeKnownLink( + $wgContLang->specialPage( "Allpages" ), + wfMsg ( 'nextpage', $s->page_title ), + "from=" . wfUrlEncode ( $s->page_title ) . $namespaceparam . $invertparam ); + } + $out2 .= "

"; } - $out2 .= "

"; $wgOut->addHtml( $out2 . $out ); }