SpecialPages grouped into categories

From Meta

Jump to: navigation, search
 
This page should be moved to MediaWiki.org.
Please do not move the page by hand. It will be imported by a MediaWiki.org administrator with the full edit history. In the meantime, you may continue to edit the page as normal.

This code change makes it possible to group the special pages into categories.

Example: http://www.its-wiki.de/index.php/Spezial:Specialpages

Author: thomas(_at_) thomasfischer.biz

Please review and comment :)

Sourcecode (for German categories and MediaWiki 1.7.1; English version for 1.9.3, with more pages and extension-specific pages):
MediaWiki 1.11.0; Chinese version(中文)
File location: ../includes/SpecialSpecialpages.php

<?php
/**
 *
 * @package MediaWiki
 * @subpackage SpecialPage
 */

/**
 *
 */
function wfSpecialSpecialpages() {
        global $wgOut, $wgUser, $wgAvailableRights;

        $wgOut->setRobotpolicy( 'index,nofollow' );
        $sk = $wgUser->getSkin();

        # Get listable pages, in a 2-d array with the first dimension being user right
        $pages = SpecialPage::getPages();

        /** Pages available to all */
        wfSpecialSpecialpages_gen($pages[''],'spheading',$sk);

        /** Restricted special pages */
        $rpages = array();
        foreach($wgAvailableRights as $right) {
                /** only show pages a user can access */
                if( $wgUser->isAllowed($right) ) {
                        /** some rights might not have any special page associated */
                        if(isset($pages[$right])) {
                                $rpages = array_merge( $rpages, $pages[$right] );
                        }
                }
        }
        wfSpecialSpecialpages_gen( $rpages, 'restrictedpheading', $sk );
}

/**
 * sub function generating the list of pages
 * @param $pages the list of pages
 * @param $heading header to be used
 * @param $sk skin object ???
 */
function wfSpecialSpecialpages_gen($pages,$heading,$sk) {
        global $wgOut, $wgSortSpecialPages;

        if( count( $pages ) == 0 ) {
                # Yeah, that was pointless. Thanks for coming.
                return;
        }

        /** Put them into a sortable array */
        $sortedPages = array();
        foreach ( $pages as $name => $page ) {
                if ( $page->isListed() ) {
                        $sortedPages[$page->getDescription()] = $page->getTitle();
                }
        }

        /** Sort */
        if ( $wgSortSpecialPages ) {
                ksort( $sortedPages );
        }


        $kat["Seiten"] = Array();
        $kat["Sonstige"] = Array();
        $kat["Benutzer"] = Array();
        $kat["Dateien"] = Array();
        $kat["Kategorien"] = Array();
        $kat["Weiterleitungen"] = Array();
        $kat["Vorlagen"] = Array();
        $kat["Mediawiki"] = Array();
        $kat["Suche"] = Array();
        $kat["hide"] = Array();

        foreach ( $sortedPages as $desc => $title ) {
                $t = $title->getText();
                $cat = "";
                switch ($t) {
                    case "Allpages":
                    case "Prefixindex":
                    case "Popularpages":
                    case "Randompage":
                    case "Lonelypages":
                    case "Export":
                    case "Deadendpages":
                    case "Mostrevisions":
                    case "Mostlinked":
                    case "Wantedpages":
                    case "Uncategorizedpages":
                    case "Newpages":
                    case "Ancientpages":
                    case "Shortpages":
                    case "Longpages":
                    case "Unwatchedpages":
                    case "Import":
                        $cat = "Seiten";
                        break;
                    case "Booksources":
                    case "Search":
                    case "MIMEsearch":
                        $cat = "Suche";
                        break;
                    case "Listredirects":
                    case "Randomredirect":
                    case "DoubleRedirects":
                    case "BrokenRedirects":
                        $cat = "Weiterleitungen";
                        break;
                    case "Version":
                    case "Statistics":
                    case "Log":
                    case "Allmessages":
                        $cat = "Mediawiki";
                        break;
                    case "Unusedtemplates":
                        $cat = "Vorlagen";
                        break;
                    case "Userlogin":
                    case "Listusers":
                    case "Preferences":
                    case "Watchlist":
                    case "Blockip":
                    case "Userrights":
                    case "Ipblocklist":
                        $cat = "Benutzer";
                        break;
                    case "Imagelist":
                    case "Newimages":
                    case "Unusedimages":
                    case "Upload":
                    case "Uncategorizedimages":
                    case "Mostimages":
                        $cat = "Dateien";
                        break;
                    case "Categories":
                    case "Wantedcategories":
                    case "Mostcategories":
                    case "Unusedcategories":
                    case "Uncategorizedcategories":
                    case "Mostlinkedcategories":
                        $cat = "Kategorien";
                        break;
                    case "Disambiguations":
                        $cat = "hide";
                        break;
                    default:
                        $cat = "Sonstige";
                        break;
                }
                array_push($kat[$cat], $sk->makeKnownLinkObj( $title, $desc ));
        }

        /** Now output the HTML */
        $wgOut->addHTML( '<h2>' . wfMsgHtml( $heading ) . "</h2>\n<ul>" );
        foreach ( $kat as $title => $value ) {
                if ($title == "hide")
                    continue;
                if (sizeof($value) == 0)
                    continue;
                $wgOut->addHTML( '<h2>' .  $title  . "</h2>\n<ul>" );

                foreach ( $value as $link )
                    $wgOut->addHTML( "<li>{$link}</li>\n" );
                $wgOut->addHTML( "</ul>\n" );
        }
        $wgOut->addHTML( "</ul>\n" );
}

?>
Personal tools