Fixed some doxygen warnings
[lhc/web/wiklou.git] / includes / parser / ParserOutput.php
index 045403d..bc805d8 100644 (file)
@@ -17,21 +17,18 @@ class ParserOutput
                $mTemplateIds = array(),      # 2-D map of NS/DBK to rev ID for the template references. ID=zero for broken.
                $mImages = array(),           # DB keys of the images used, in the array key only
                $mExternalLinks = array(),    # External link URLs, in the key only
+               $mInterwikiLinks = array(),   # 2-D map of prefix/DBK (in keys only) for the inline interwiki links in the document.
                $mNewSection = false,         # Show a new section link?
+               $mHideNewSection = false,     # Hide the new section link?
                $mNoGallery = false,          # No gallery on category page? (__NOGALLERY__)
                $mHeadItems = array(),        # Items to put in the <head> section
                $mOutputHooks = array(),      # Hook tags as per $wgParserOutputHooks
                $mWarnings = array(),         # Warning text to be returned to the user. Wikitext formatted, in the key only
                $mSections = array(),         # Table of contents
-               $mProperties = array();       # Name/value pairs to be cached in the DB
+               $mProperties = array(),       # Name/value pairs to be cached in the DB
+               $mTOCHTML = '';               # HTML of the TOC
        private $mIndexPolicy = '';           # 'index' or 'noindex'?  Any other value will result in no change.
 
-       /**
-        * Overridden title for display
-        */
-       private $displayTitle = false; #for use in the <title> tag
-       private $displayTitleH1 = false; #for use in the <h1> tag, may contain further HTML tags
-
        function ParserOutput( $text = '', $languageLinks = array(), $categoryLinks = array(),
                $containsOldMagic = false, $titletext = '' )
        {
@@ -44,6 +41,7 @@ class ParserOutput
 
        function getText()                   { return $this->mText; }
        function &getLanguageLinks()         { return $this->mLanguageLinks; }
+       function getInterwikiLinks()         { return $this->mInterwikiLinks; }
        function getCategoryLinks()          { return array_keys( $this->mCategories ); }
        function &getCategories()            { return $this->mCategories; }
        function getCacheTime()              { return $this->mCacheTime; }
@@ -54,10 +52,12 @@ class ParserOutput
        function &getImages()                { return $this->mImages; }
        function &getExternalLinks()         { return $this->mExternalLinks; }
        function getNoGallery()              { return $this->mNoGallery; }
+       function getHeadItems()              { return $this->mHeadItems; }
        function getSubtitle()               { return $this->mSubtitle; }
        function getOutputHooks()            { return (array)$this->mOutputHooks; }
        function getWarnings()               { return array_keys( $this->mWarnings ); }
        function getIndexPolicy()            { return $this->mIndexPolicy; }
+       function getTOCHTML()                { return $this->mTOCHTML; }
 
        function containsOldMagic()          { return $this->mContainsOldMagic; }
        function setText( $text )            { return wfSetVar( $this->mText, $text ); }
@@ -68,10 +68,10 @@ class ParserOutput
        function setTitleText( $t )          { return wfSetVar( $this->mTitleText, $t ); }
        function setSections( $toc )         { return wfSetVar( $this->mSections, $toc ); }
        function setIndexPolicy( $policy )   { return wfSetVar( $this->mIndexPolicy, $policy ); }
+       function setTOCHTML( $tochtml )      { return wfSetVar( $this->mTOCHTML, $tochtml ); }
 
        function addCategory( $c, $sort )    { $this->mCategories[$c] = $sort; }
        function addLanguageLink( $t )       { $this->mLanguageLinks[] = $t; }
-       function addExternalLink( $url )     { $this->mExternalLinks[$url] = 1; }
        function addWarning( $s )            { $this->mWarnings[$s] = 1; }
 
        function addOutputHook( $hook, $data = false ) {
@@ -81,13 +81,48 @@ class ParserOutput
        function setNewSection( $value ) {
                $this->mNewSection = (bool)$value;
        }
+       function hideNewSection ( $value ) {
+               $this->mHideNewSection = (bool)$value;
+       }
+       function getHideNewSection () {
+               return (bool)$this->mHideNewSection;
+       }
        function getNewSection() {
                return (bool)$this->mNewSection;
        }
 
+       function addExternalLink( $url ) {
+               # We don't register links pointing to our own server, unless... :-)
+               global $wgServer, $wgRegisterInternalExternals;
+               if( $wgRegisterInternalExternals or stripos($url,$wgServer.'/')!==0)
+                       $this->mExternalLinks[$url] = 1; 
+       }
+
+       /**
+        * Record a local or interwiki inline link for saving in future link tables.
+        *
+        * @param $title Title object
+        * @param $id Mixed: optional known page_id so we can skip the lookup
+        */
        function addLink( $title, $id = null ) {
+               if ( $title->isExternal() ) {
+                       // Don't record interwikis in pagelinks
+                       $this->addInterwikiLink( $title );
+                       return;
+               }
                $ns = $title->getNamespace();
                $dbk = $title->getDBkey();
+               if ( $ns == NS_MEDIA ) {
+                       // Normalize this pseudo-alias if it makes it down here...
+                       $ns = NS_FILE;
+               } elseif( $ns == NS_SPECIAL ) {
+                       // We don't record Special: links currently
+                       // It might actually be wise to, but we'd need to do some normalization.
+                       return;
+               } elseif( $dbk === '' ) {
+                       // Don't record self links -  [[#Foo]]
+                       return;
+               }
                if ( !isset( $this->mLinks[$ns] ) ) {
                        $this->mLinks[$ns] = array();
                }
@@ -113,17 +148,31 @@ class ParserOutput
                }
                $this->mTemplateIds[$ns][$dbk] = $rev_id; // For versioning
        }
+       
+       /**
+        * @param $title Title object, must be an interwiki link
+        * @throws MWException if given invalid input
+        */
+       function addInterwikiLink( $title ) {
+               $prefix = $title->getInterwiki();
+               if( $prefix == '' ) {
+                       throw new MWException( 'Non-interwiki link passed, internal parser error.' );
+               }
+               if (!isset($this->mInterwikiLinks[$prefix])) {
+                       $this->mInterwikiLinks[$prefix] = array();
+               }
+               $this->mInterwikiLinks[$prefix][$title->getDBkey()] = 1;
+       }
 
        /**
         * Return true if this cached output object predates the global or
         * per-article cache invalidation timestamps, or if it comes from
         * an incompatible older version.
         *
-        * @param string $touched the affected article's last touched timestamp
-        * @return bool
-        * @public
+        * @param $touched String: the affected article's last touched timestamp
+        * @return Boolean
         */
-       function expired( $touched ) {
+       public function expired( $touched ) {
                global $wgCacheEpoch;
                return $this->getCacheTime() == -1 || // parser says it's uncacheable
                       $this->getCacheTime() < $touched ||
@@ -145,32 +194,28 @@ class ParserOutput
                }
        }
 
-       /**
-        * Get the title to be used for display
-        *
-        * @return string
-        */
-       public function getDisplayTitle() {
-               return $this->displayTitle;
-       }
-       
        /**
         * Override the title to be used for display
         * -- this is assumed to have been validated
         * (check equal normalisation, etc.)
         *
-        * @param string $text Desired title text
+        * @param $text String: desired title text
         */
        public function setDisplayTitle( $text ) {
-               $this->displayTitle = $text;
-       }
-       
-       public function getDisplayTitleH1() {
-               return $this->displayTitleH1;
+               $this->setTitleText( $text );
        }
-       
-       public function setDisplayTitleH1( $html ) {
-               $this->displayTitleH1 = $html;
+
+       /**
+        * Get the title to be used for display
+        *
+        * @return String
+        */
+       public function getDisplayTitle() {
+               $t = $this->getTitleText( );
+               if( $t === '' ) {
+                       return false;
+               }
+               return $t;
        }
 
        /**