Removed double hook explanation AfterFinalPageOutput
[lhc/web/wiklou.git] / includes / Article.php
index 1133724..09d843d 100644 (file)
  * @internal documentation reviewed 15 Mar 2010
  */
 class Article implements Page {
-       /**@{{
-        * @private
-        */
-
-       /**
-        * The context this Article is executed in
-        * @var IContextSource $mContext
-        */
+       /** @var IContextSource The context this Article is executed in */
        protected $mContext;
 
-       /**
-        * The WikiPage object of this instance
-        * @var WikiPage $mPage
-        */
+       /** @var WikiPage The WikiPage object of this instance */
        protected $mPage;
 
-       /**
-        * ParserOptions object for $wgUser articles
-        * @var ParserOptions $mParserOptions
-        */
+       /** @var ParserOptions ParserOptions object for $wgUser articles */
        public $mParserOptions;
 
        /**
-        * Text of the revision we are working on
-        * @var string $mContent
+        * @var string Text of the revision we are working on
+        * @todo BC cruft
         */
-       var $mContent;                    // !< #BC cruft
+       public $mContent;
 
        /**
-        * Content of the revision we are working on
-        * @var Content
+        * @var Content Content of the revision we are working on
         * @since 1.21
         */
-       var $mContentObject;              // !<
+       protected $mContentObject;
 
-       /**
-        * Is the content ($mContent) already loaded?
-        * @var bool $mContentLoaded
-        */
-       var $mContentLoaded = false;      // !<
+       /** @var bool Is the content ($mContent) already loaded? */
+       protected $mContentLoaded = false;
 
-       /**
-        * The oldid of the article that is to be shown, 0 for the
-        * current revision
-        * @var int|null $mOldId
-        */
-       var $mOldId;                      // !<
+       /** @var int|null The oldid of the article that is to be shown, 0 for the current revision */
+       protected $mOldId;
 
-       /**
-        * Title from which we were redirected here
-        * @var Title $mRedirectedFrom
-        */
-       var $mRedirectedFrom = null;
+       /** @var Title Title from which we were redirected here */
+       protected $mRedirectedFrom = null;
 
-       /**
-        * URL to redirect to or false if none
-        * @var string|false $mRedirectUrl
-        */
-       var $mRedirectUrl = false;        // !<
+       /** @var string|bool URL to redirect to or false if none */
+       protected $mRedirectUrl = false;
 
-       /**
-        * Revision ID of revision we are working on
-        * @var int $mRevIdFetched
-        */
-       var $mRevIdFetched = 0;           // !<
-
-       /**
-        * Revision we are working on
-        * @var Revision $mRevision
-        */
-       var $mRevision = null;
+       /** @var int Revision ID of revision we are working on */
+       protected $mRevIdFetched = 0;
 
-       /**
-        * ParserOutput object
-        * @var ParserOutput $mParserOutput
-        */
-       var $mParserOutput;
+       /** @var Revision Revision we are working on */
+       protected $mRevision = null;
 
-       /**@}}*/
+       /** @var ParserOutput */
+       public $mParserOutput;
 
        /**
         * Constructor and clear the article
-        * @param $title Title Reference to a Title object.
-        * @param $oldId Integer revision ID, null to fetch from request, zero for current
+        * @param Title $title Reference to a Title object.
+        * @param int $oldId Revision ID, null to fetch from request, zero for current
         */
        public function __construct( Title $title, $oldId = null ) {
                $this->mOldId = $oldId;
@@ -125,7 +87,7 @@ class Article implements Page {
        }
 
        /**
-        * @param $title Title
+        * @param Title $title
         * @return WikiPage
         */
        protected function newPage( Title $title ) {
@@ -134,7 +96,7 @@ class Article implements Page {
 
        /**
         * Constructor from a page id
-        * @param int $id article ID to load
+        * @param int $id Article ID to load
         * @return Article|null
         */
        public static function newFromID( $id ) {
@@ -147,9 +109,9 @@ class Article implements Page {
        /**
         * Create an Article object of the appropriate class for the given page.
         *
-        * @param $title Title
-        * @param $context IContextSource
-        * @return Article object
+        * @param Title $title
+        * @param IContextSource $context
+        * @return Article
         */
        public static function newFromTitle( $title, IContextSource $context ) {
                if ( NS_MEDIA == $title->getNamespace() ) {
@@ -179,9 +141,9 @@ class Article implements Page {
        /**
         * Create an Article object of the appropriate class for the given page.
         *
-        * @param $page WikiPage
-        * @param $context IContextSource
-        * @return Article object
+        * @param WikiPage $page
+        * @param IContextSource $context
+        * @return Article
         */
        public static function newFromWikiPage( WikiPage $page, IContextSource $context ) {
                $article = self::newFromTitle( $page->getTitle(), $context );
@@ -192,7 +154,7 @@ class Article implements Page {
        /**
         * Tell the page view functions that this view was redirected
         * from another page on the wiki.
-        * @param $from Title object.
+        * @param Title $from
         */
        public function setRedirectedFrom( Title $from ) {
                $this->mRedirectedFrom = $from;
@@ -201,7 +163,7 @@ class Article implements Page {
        /**
         * Get the title object of the article
         *
-        * @return Title object of this page
+        * @return Title Title object of this page
         */
        public function getTitle() {
                return $this->mPage->getTitle();
@@ -238,7 +200,7 @@ class Article implements Page {
         * This function has side effects! Do not use this function if you
         * only want the real revision text if any.
         *
-        * @deprecated in 1.21; use WikiPage::getContent() instead
+        * @deprecated since 1.21; use WikiPage::getContent() instead
         *
         * @return string Return the text of this revision
         */
@@ -290,8 +252,7 @@ class Article implements Page {
        }
 
        /**
-        * @return int The oldid of the article that is to be shown, 0 for the
-        *             current revision
+        * @return int The oldid of the article that is to be shown, 0 for the current revision
         */
        public function getOldID() {
                if ( is_null( $this->mOldId ) ) {
@@ -355,7 +316,7 @@ class Article implements Page {
        /**
         * Load the revision (including text) into this object
         *
-        * @deprecated in 1.19; use fetchContent()
+        * @deprecated since 1.19; use fetchContent()
         */
        function loadContent() {
                wfDeprecated( __METHOD__, '1.19' );
@@ -373,8 +334,8 @@ class Article implements Page {
         * uses this method to retrieve page text from the database, so the function
         * has to remain public for now.
         *
-        * @return mixed string containing article contents, or false if null
-        * @deprecated in 1.21, use WikiPage::getContent() instead
+        * @return string|bool String containing article contents, or false if null
+        * @deprecated since 1.21, use WikiPage::getContent() instead
         */
        function fetchContent() { #BC cruft!
                ContentHandler::deprecated( __METHOD__, '1.21' );
@@ -387,6 +348,11 @@ class Article implements Page {
 
                $content = $this->fetchContentObject();
 
+               if ( !$content ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
                // @todo Get rid of mContent everywhere!
                $this->mContent = ContentHandler::getContentText( $content );
                ContentHandler::runLegacyHooks( 'ArticleAfterFetchContent', array( &$this, &$this->mContent ) );
@@ -404,7 +370,7 @@ class Article implements Page {
         * @note Code that wants to retrieve page content from the database should
         * use WikiPage::getContent().
         *
-        * @return Content|null|boolean false
+        * @return Content|null|bool
         *
         * @since 1.21
         */
@@ -499,7 +465,7 @@ class Article implements Page {
        /**
         * Use this to fetch the rev ID used on page views
         *
-        * @return int revision ID of last article revision
+        * @return int Revision ID of last article revision
         */
        public function getRevIdFetched() {
                if ( $this->mRevIdFetched ) {
@@ -769,7 +735,7 @@ class Article implements Page {
 
        /**
         * Adjust title for pages with displaytitle, -{T|}- or language conversion
-        * @param $pOutput ParserOutput
+        * @param ParserOutput $pOutput
         */
        public function adjustDisplayTitle( ParserOutput $pOutput ) {
                # Adjust the title if it was set by displaytitle, -{T|}- or language conversion
@@ -828,10 +794,11 @@ class Article implements Page {
         * Show a page view for a page formatted as CSS or JavaScript. To be called by
         * Article::view() only.
         *
-        * This is hooked by SyntaxHighlight_GeSHi to do syntax highlighting of these
-        * page views.
+        * This exists mostly to serve the deprecated ShowRawCssJs hook (used to customize these views).
+        * It has been replaced by the ContentGetParserOutput hook, which lets you do the same but with
+        * more flexibility.
         *
-        * @param bool $showCacheHint whether to show a message telling the user
+        * @param bool $showCacheHint Whether to show a message telling the user
         *   to clear the browser cache (default: true).
         */
        protected function showCssOrJsPage( $showCacheHint = true ) {
@@ -863,10 +830,10 @@ class Article implements Page {
 
        /**
         * Get the robot policy to be used for the current view
-        * @param string $action the action= GET parameter
-        * @param $pOutput ParserOutput|null
-        * @return Array the policy that should be set
-        * TODO: actions other than 'view'
+        * @param string $action The action= GET parameter
+        * @param ParserOutput|null $pOutput
+        * @return array The policy that should be set
+        * @todo: actions other than 'view'
         */
        public function getRobotPolicy( $action, $pOutput = null ) {
                global $wgArticleRobotPolicies, $wgNamespaceRobotPolicies, $wgDefaultRobotPolicy;
@@ -944,9 +911,9 @@ class Article implements Page {
        /**
         * Converts a String robot policy into an associative array, to allow
         * merging of several policies using array_merge().
-        * @param $policy Mixed, returns empty array on null/false/'', transparent
-        *            to already-converted arrays, converts String.
-        * @return Array: 'index' => \<indexpolicy\>, 'follow' => \<followpolicy\>
+        * @param array|string $policy Returns empty array on null/false/'', transparent
+        *   to already-converted arrays, converts string.
+        * @return array 'index' => \<indexpolicy\>, 'follow' => \<followpolicy\>
         */
        public static function formatRobotPolicy( $policy ) {
                if ( is_array( $policy ) ) {
@@ -975,7 +942,7 @@ class Article implements Page {
         * the output. Returns true if the header was needed, false if this is not
         * a redirect view. Handles both local and remote redirects.
         *
-        * @return boolean
+        * @return bool
         */
        public function showRedirectedFromHeader() {
                global $wgRedirectSources;
@@ -1277,7 +1244,7 @@ class Article implements Page {
         * If the revision requested for view is deleted, check permissions.
         * Send either an error message or a warning header to the output.
         *
-        * @return boolean true if the view is allowed, false if not.
+        * @return bool true if the view is allowed, false if not.
         */
        public function showDeletedRevisionHeader() {
                if ( !$this->mRevision->isDeleted( Revision::DELETED_TEXT ) ) {
@@ -1320,7 +1287,7 @@ class Article implements Page {
         *   Revision as of \<date\>; view current revision
         *   \<- Previous version | Next Version -\>
         *
-        * @param int $oldid revision ID of this article revision
+        * @param int $oldid Revision ID of this article revision
         */
        public function setOldSubtitle( $oldid = 0 ) {
                if ( !wfRunHooks( 'DisplayOldSubtitle', array( &$this, &$oldid ) ) ) {
@@ -1445,10 +1412,10 @@ class Article implements Page {
         * Chances are you should just be using the ParserOutput from
         * WikitextContent::getParserOutput instead of calling this for redirects.
         *
-        * @param $target Title|Array of destination(s) to redirect
-        * @param $appendSubtitle Boolean [optional]
-        * @param $forceKnown Boolean: should the image be shown as a bluelink regardless of existence?
-        * @return string containing HMTL with redirect link
+        * @param Title|array $target Destination(s) to redirect
+        * @param bool $appendSubtitle [optional]
+        * @param bool $forceKnown Should the image be shown as a bluelink regardless of existence?
+        * @return string Containing HMTL with redirect link
         */
        public function viewRedirect( $target, $appendSubtitle = true, $forceKnown = false ) {
                $lang = $this->getTitle()->getPageLanguage();
@@ -1467,9 +1434,9 @@ class Article implements Page {
         *
         * @since 1.23
         * @param Language $lang
-        * @param Title|array $target destination(s) to redirect
+        * @param Title|array $target Destination(s) to redirect
         * @param bool $forceKnown Should the image be shown as a bluelink regardless of existence?
-        * @return string containing HMTL with redirect link
+        * @return string Containing HMTL with redirect link
         */
        public static function getRedirectHeaderHtml( Language $lang, $target, $forceKnown = false ) {
                global $wgStylePath;
@@ -1658,7 +1625,7 @@ class Article implements Page {
        /**
         * Output deletion confirmation dialog
         * @todo FIXME: Move to another file?
-        * @param string $reason prefilled reason
+        * @param string $reason Prefilled reason
         */
        public function confirmDelete( $reason ) {
                wfDebug( "Article::confirmDelete\n" );
@@ -1826,7 +1793,7 @@ class Article implements Page {
         * output to the client that is necessary for this request.
         * (that is, it has sent a cached version of the page)
         *
-        * @return boolean true if cached version send, false otherwise
+        * @return bool true if cached version send, false otherwise
         */
        protected function tryFileCache() {
                static $called = false;
@@ -1882,9 +1849,9 @@ class Article implements Page {
         *
         * @since 1.16 (r52326) for LiquidThreads
         *
-        * @param $oldid mixed integer Revision ID or null
-        * @param $user User The relevant user
-        * @return ParserOutput or false if the given revision ID is not found
+        * @param int|null $oldid Revision ID or null
+        * @param User $user The relevant user
+        * @return ParserOutput|bool ParserOutput or false if the given revision ID is not found
         */
        public function getParserOutput( $oldid = null, User $user = null ) {
                //XXX: bypasses mParserOptions and thus setParserOptions()
@@ -1928,7 +1895,7 @@ class Article implements Page {
        /**
         * Sets the context this Article is executed in
         *
-        * @param $context IContextSource
+        * @param IContextSource $context
         * @since 1.18
         */
        public function setContext( $context ) {
@@ -2006,7 +1973,7 @@ class Article implements Page {
         * raw WikiPage fields for backwards compatibility.
         *
         * @param string $fname Field name
-        * @param $fvalue mixed New value
+        * @param mixed $fvalue New value
         */
        public function __set( $fname, $fvalue ) {
                if ( property_exists( $this->mPage, $fname ) ) {
@@ -2039,11 +2006,11 @@ class Article implements Page {
        // ****** B/C functions to work-around PHP silliness with __call and references ****** //
 
        /**
-        * @param $limit array
-        * @param $expiry array
-        * @param $cascade bool
-        * @param $reason string
-        * @param $user User
+        * @param array $limit
+        * @param array $expiry
+        * @param bool $cascade
+        * @param string $reason
+        * @param User $user
         * @return Status
         */
        public function doUpdateRestrictions( array $limit, array $expiry, &$cascade,
@@ -2053,10 +2020,10 @@ class Article implements Page {
        }
 
        /**
-        * @param $limit array
-        * @param $reason string
-        * @param $cascade int
-        * @param $expiry array
+        * @param array $limit
+        * @param string $reason
+        * @param int $cascade
+        * @param array $expiry
         * @return bool
         */
        public function updateRestrictions( $limit = array(), $reason = '',
@@ -2072,11 +2039,11 @@ class Article implements Page {
        }
 
        /**
-        * @param $reason string
-        * @param $suppress bool
-        * @param $id int
-        * @param $commit bool
-        * @param $error string
+        * @param string $reason
+        * @param bool $suppress
+        * @param int $id
+        * @param bool $commit
+        * @param string $error
         * @return bool
         */
        public function doDeleteArticle( $reason, $suppress = false, $id = 0,
@@ -2086,12 +2053,12 @@ class Article implements Page {
        }
 
        /**
-        * @param $fromP
-        * @param $summary
-        * @param $token
-        * @param $bot
-        * @param $resultDetails
-        * @param $user User
+        * @param string $fromP
+        * @param string $summary
+        * @param string $token
+        * @param bool $bot
+        * @param array $resultDetails
+        * @param User|null $user
         * @return array
         */
        public function doRollback( $fromP, $summary, $token, $bot, &$resultDetails, User $user = null ) {
@@ -2100,11 +2067,11 @@ class Article implements Page {
        }
 
        /**
-        * @param $fromP
-        * @param $summary
-        * @param $bot
-        * @param $resultDetails
-        * @param $guser User
+        * @param string $fromP
+        * @param string $summary
+        * @param bool $bot
+        * @param array $resultDetails
+        * @param User|null $guser
         * @return array
         */
        public function commitRollback( $fromP, $summary, $bot, &$resultDetails, User $guser = null ) {
@@ -2113,7 +2080,7 @@ class Article implements Page {
        }
 
        /**
-        * @param $hasHistory bool
+        * @param bool $hasHistory
         * @return mixed
         */
        public function generateReason( &$hasHistory ) {
@@ -2132,30 +2099,30 @@ class Article implements Page {
        }
 
        /**
-        * @param $title Title
+        * @param Title $title
         */
        public static function onArticleCreate( $title ) {
                WikiPage::onArticleCreate( $title );
        }
 
        /**
-        * @param $title Title
+        * @param Title $title
         */
        public static function onArticleDelete( $title ) {
                WikiPage::onArticleDelete( $title );
        }
 
        /**
-        * @param $title Title
+        * @param Title $title
         */
        public static function onArticleEdit( $title ) {
                WikiPage::onArticleEdit( $title );
        }
 
        /**
-        * @param $oldtext
-        * @param $newtext
-        * @param $flags
+        * @param string $oldtext
+        * @param string $newtext
+        * @param int $flags
         * @return string
         * @deprecated since 1.21, use ContentHandler::getAutosummary() instead
         */