Implement a configurable per-namespace and per-page header, similar to the editnotice.
authorX! <soxred93@users.mediawiki.org>
Sat, 4 Oct 2008 15:27:39 +0000 (15:27 +0000)
committerX! <soxred93@users.mediawiki.org>
Sat, 4 Oct 2008 15:27:39 +0000 (15:27 +0000)
 *MediaWiki:Pageheader-# for whole namespace
 *MediaWiki:Pagenumber-#-PAGENAME for one page.
 *Can be disabled using __NOHEADER__

RELEASE-NOTES
includes/Article.php
includes/MagicWord.php
languages/messages/MessagesEn.php

index 5cf945e..bbfd5e3 100644 (file)
@@ -146,6 +146,10 @@ The following extensions are migrated into MediaWiki 1.14:
   $wgExternalLinkTarget
 * api.php now sends "Retry-After" and "X-Database-Lag" HTTP headers if the maxlag
   check fails, just like index.php does
+* Configurable per-namespace and per-page header,
+  respectively MediaWiki:Pageheader-# where # is the namespace number, and
+  MediaWiki:Pagenumber-#-PAGENAME where # is the page's namespace number and
+  PAGENAME is the page name minus the namespace prefix. Can be disabled with the new magic word __NOHEADER__
 
 
 === Bug fixes in 1.14 ===
index e389de3..88a7bfa 100644 (file)
@@ -796,6 +796,32 @@ class Article {
                                $wasRedirected = true;
                        }
                }
+               
+               # Optional notices on a per-namespace and per-page basis
+               $mw = MagicWord::get( 'noheader' );
+               $ignoreheader = false;
+               $text = $this->getContent();
+               if( $mw->match( $text ) ) {
+                       $ignoreheader = true;
+               }
+               $pageheader_ns   = 'pageheader-'.$this->mTitle->getNamespace();
+               $pageheader_page = $pageheader_ns.'-'.$this->mTitle->getDBkey();
+               if ( !wfEmptyMsg( $pageheader_ns, wfMsgForContent( $pageheader_ns ) ) && !$ignoreheader ) {
+                       $wgOut->addWikiText( wfMsgForContent( $pageheader_ns )  );
+               }
+               
+               if ( MWNamespace::hasSubpages( $this->mTitle->getNamespace() ) && !$ignoreheader  ) {
+                       $parts = explode( '/', $this->mTitle->getDBkey() );
+                       $pageheader_base = $pageheader_ns;
+                       while ( count( $parts ) > 0 ) {
+                               $pageheader_base .= '-'.array_shift( $parts );
+                               if ( !wfEmptyMsg( $pageheader_base, wfMsgForContent( $pageheader_base ) ) ) {
+                                       $wgOut->addWikiText( wfMsgForContent( $pageheader_base )  );
+                               }
+                       }
+               } else if ( !wfEmptyMsg( $pageheader_page, wfMsgForContent( $pageheader_page ) ) && !$ignoreheader  ) {
+                       $wgOut->addWikiText( wfMsgForContent( $pageheader_page ) );
+               }
 
                $outputDone = false;
                wfRunHooks( 'ArticleViewHeader', array( &$this, &$outputDone, &$pcache ) );
@@ -835,7 +861,6 @@ class Article {
                                        $wgOut->addHtml( '</div>' );
                                }
                        }
-                       $text = $this->getContent();
                        if ( $text === false ) {
                                # Failed to load, replace text with error message
                                $t = $this->mTitle->getPrefixedText();
index 594b2f4..3f0888d 100644 (file)
@@ -160,6 +160,7 @@ class MagicWord {
                'index',
                'noindex',
                'staticredirect',
+               'noheader',
        );
 
 
index df95fd2..300c52b 100644 (file)
@@ -221,6 +221,7 @@ $magicWords = array(
        'forcetoc'               => array( 0,    '__FORCETOC__'           ),
        'toc'                    => array( 0,    '__TOC__'                ),
        'noeditsection'          => array( 0,    '__NOEDITSECTION__'      ),
+       'noheader'               => array( 0,    '__NOHEADER__'           ),
        'currentmonth'           => array( 1,    'CURRENTMONTH'           ),
        'currentmonthname'       => array( 1,    'CURRENTMONTHNAME'       ),
        'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN'    ),