* Query parameters that can be passed through redirects
*/
var $mAllowedRedirectParams = array();
-
+ /**
+ * List of special pages, followed by parameters.
+ * If the only parameter is a string, that is the page name.
+ * Otherwise, it is an array. The format is one of:
+ ** array( 'SpecialPage', name, right )
+ ** array( 'IncludableSpecialPage', name, right, listed? )
+ ** array( 'UnlistedSpecialPage', name, right )
+ ** array( 'SpecialRedirectToSpecial', name, page to redirect to, special page param, ... )
+ */
static public $mList = array(
'DoubleRedirects' => array( 'SpecialPage', 'DoubleRedirects' ),
'BrokenRedirects' => array( 'SpecialPage', 'BrokenRedirects' ),
'Specialpages' => array( 'UnlistedSpecialPage', 'Specialpages' ),
'Contributions' => array( 'SpecialPage', 'Contributions' ),
'Emailuser' => array( 'UnlistedSpecialPage', 'Emailuser' ),
- 'Whatlinkshere' => array( 'SpecialPage', 'Whatlinkshere' ),
+ 'Whatlinkshere' => array( 'UnlistedSpecialPage', 'Whatlinkshere' ),
'Recentchangeslinked' => array( 'UnlistedSpecialPage', 'Recentchangeslinked' ),
'Movepage' => array( 'UnlistedSpecialPage', 'Movepage' ),
'Blockme' => array( 'UnlistedSpecialPage', 'Blockme' ),
static public $mAliases;
static public $mListInitialised = false;
+ /**
+ * List of special pages, followed by what subtitle they should go under
+ * at Special:SpecialPages
+ */
+ static public $mGroupsList = array(
+ 'DoubleRedirects' => 'maintenance',
+ 'BrokenRedirects' => 'maintenance',
+ 'Lonelypages' => 'maintenance',
+ 'Uncategorizedpages' => 'maintenance',
+ 'Uncategorizedcategories' => 'maintenance',
+ 'Uncategorizedimages' => 'maintenance',
+ 'Uncategorizedtemplates' => 'maintenance',
+ 'Unusedcategories' => 'maintenance',
+ 'Unusedimages' => 'maintenance',
+ 'Protectedpages' => 'maintenance',
+ 'Protectedtitles' => 'maintenance',
+ 'Unusedtemplates' => 'maintenance',
+ 'Withoutinterwiki' => 'maintenance',
+ 'Longpages' => 'maintenance',
+
+ 'Userlogin' => 'login',
+ 'Userlogout' => 'login',
+ 'CreateAccount' => 'login',
+
+ 'Recentchanges' => 'changes',
+ 'Recentchangeslinked' => 'changes',
+ 'Watchlist' => 'changes',
+ 'Newimages' => 'changes',
+ 'Newpages' => 'changes',
+ 'Log' => 'changes',
+
+ 'Upload' => 'media',
+ 'Imagelist' => 'media',
+ 'MIMEsearch' => 'media',
+ 'FileDuplicateSearch' => 'media',
+ 'Filepath' => 'media',
+
+ 'Listusers' => 'users',
+ 'Listgrouprights' => 'users',
+ 'Ipblocklist' => 'users',
+ 'Contributions' => 'users',
+ 'Emailuser' => 'users',
+ 'Listadmins' => 'users',
+ 'Listbots' => 'users',
+
+ 'Wantedpages' => 'needy',
+ 'Wantedcategories' => 'needy',
+ 'Shortpages' => 'needy',
+ 'Ancientpages' => 'needy',
+ 'Deadendpages' => 'needy',
+
+ 'Mostlinked' => 'highuse',
+ 'Mostlinkedcategories' => 'highuse',
+ 'Mostlinkedtemplates' => 'highuse',
+ 'Mostcategories' => 'highuse',
+ 'Mostimages' => 'highuse',
+ 'Mostrevisions' => 'highuse',
+
+ 'Userrights' => 'permissions',
+ 'Blockip' => 'permissions',
+
+ 'Statistics' => 'other',
+ 'Fewestrevisions' => 'other',
+ 'Randompage' => 'other',
+ 'Disambiguations' => 'other',
+ 'Specialpages' => 'other',
+ 'Blockme' => 'other',
+ 'Movepage' => 'other',
+ 'MergeHistory' => 'other',
+ 'Lockdb' => 'other',
+ 'Unlockdb' => 'other',
+ 'Version' => 'other',
+ 'Whatlinkshere' => 'other',
+ 'Booksources' => 'other',
+ 'Revisiondelete' => 'other',
+ 'Export' => 'other',
+ 'Categories' => 'other',
+ 'Undelete' => 'other',
+ 'Import' => 'other',
+ 'Unwatchedpages' => 'other',
+ 'Randomredirect' => 'other',
+ 'Allpages' => 'other',
+ 'Allmessages' => 'other',
+ 'Prefixindex' => 'other',
+ 'Listredirects' => 'other',
+ 'Preferences' => 'other',
+ 'Resetpass' => 'other',
+ 'Mypage' => 'other',
+ 'Mytalk' => 'other',
+ 'Mycontributions' => 'other',
+ );
/**#@-*/
}
self::$mList[$page->mName] = $page;
}
+
+ /**
+ * Add a page to a certain display group for Special:SpecialPages
+ *
+ * @param mixed $page Must either be an array specifying a class name and
+ * constructor parameters, or an object.
+ * @param string $group
+ * @static
+ */
+ static function setGroup( &$page, $group ) {
+ if ( !self::$mListInitialised ) {
+ self::initList();
+ }
+ self::$mGroupsList[$page->mName] = $group;
+ }
+
+ /**
+ * Add a page to a certain display group for Special:SpecialPages
+ *
+ * @param mixed $page Must either be an array specifying a class name and
+ * constructor parameters, or an object.
+ * @static
+ */
+ static function getGroup( &$page ) {
+ if ( !self::$mListInitialised ) {
+ self::initList();
+ }
+ $group = isset(self::$mGroupsList[$page->mName]) ?
+ self::$mGroupsList[$page->mName] : 'other';
+ return $group;
+ }
/**
* Remove a special page from the list
}
/** Put them into a sortable array */
- $sortedPages = array();
+ $groups = array();
foreach ( $pages as $page ) {
if ( $page->isListed() ) {
- $sortedPages[$page->getDescription()] = $page->getTitle();
+ $group = SpecialPage::getGroup( $page );
+ if( !isset($groups[$group]) ) {
+ $groups[$group] = array();
+ }
+ $groups[$group][$page->getDescription()] = $page->getTitle();
}
}
/** Sort */
if ( $wgSortSpecialPages ) {
- ksort( $sortedPages );
+ foreach( $groups as $group => $sortedPages ) {
+ ksort( $groups[$group] );
+ }
+ }
+
+ /** Always move "other" to end */
+ if( array_key_exists('other',$groups) ) {
+ $other = $groups['other'];
+ unset( $groups['other'] );
+ $groups['other'] = $other;
}
/** Now output the HTML */
- $wgOut->addHTML( '<h2>' . wfMsgHtml( $heading ) . "</h2>\n<ul>" );
- foreach ( $sortedPages as $desc => $title ) {
- $link = $sk->makeKnownLinkObj( $title , htmlspecialchars( $desc ) );
- $wgOut->addHTML( "<li>{$link}</li>\n" );
+ $wgOut->addHTML( '<h2>' . wfMsgHtml( $heading ) . "</h2>\n" );
+ foreach ( $groups as $group => $sortedPages ) {
+ $middle = ceil( count($sortedPages)/2 );
+ $max = count($sortedPages) - 1;
+ $count = 0;
+
+ $wgOut->addHTML( "<h3 class='mw-specialpagesgroup'>".wfMsgHtml("specialpages-group-$group")."</h3>\n" );
+ $wgOut->addHTML( "<table style='width: 100%;' class='mw-specialpages-table'><tr>" );
+ $wgOut->addHTML( "<td width='30%' valign='top'><ul>\n" );
+ foreach ( $sortedPages as $desc => $title ) {
+ $link = $sk->makeKnownLinkObj( $title , htmlspecialchars( $desc ) );
+ $wgOut->addHTML( "<li>{$link}</li>\n" );
+
+ # Slit up the larger groups
+ $count++;
+ if( $max > 3 && $count == $middle && $count < $max ) {
+ $wgOut->addHTML( "</ul></td><td width='10%'></td><td width='30%' valign='top'><ul>" );
+ }
+ }
+ $wgOut->addHTML( "</ul></td><td width='30%' valign='top'></td></tr></table>\n" );
}
- $wgOut->addHTML( "</ul>\n" );
}