- $wasRedirected = true;
- }
- }
-
- $outputDone = false;
- wfRunHooks( 'ArticleViewHeader', array( &$this, &$outputDone, &$pcache ) );
- if( $pcache && $wgOut->tryParserCache( $this, $wgUser ) ) {
- // Ensure that UI elements requiring revision ID have
- // the correct version information.
- $wgOut->setRevisionId( $this->mLatest );
- $outputDone = true;
- }
- # Fetch content and check for errors
- if( !$outputDone ) {
- # If the article does not exist and was deleted, show the log
- if( $this->getID() == 0 ) {
- $this->showDeletionLog();
- }
- $text = $this->getContent();
- if( $text === false ) {
- # Failed to load, replace text with error message
- $t = $this->mTitle->getPrefixedText();
- if( $oldid ) {
- $d = wfMsgExt( 'missingarticle-rev', array( 'escape' ), $oldid );
- $text = wfMsg( 'missing-article', $t, $d );
- } else {
- $text = wfMsg( 'noarticletext' );
- }
- }
- # Non-existent pages
- if( $this->getID() === 0 ) {
- $wgOut->setRobotPolicy( 'noindex,nofollow' );
- $text = "<div class='noarticletext'>\n$text\n</div>";
- }
-
- # Another whitelist check in case oldid is altering the title
- if( !$this->mTitle->userCanRead() ) {
- $wgOut->loginToUse();
- $wgOut->output();
- wfProfileOut( __METHOD__ );
- exit;
- }
-
- # We're looking at an old revision
- if( !empty( $oldid ) ) {
- $wgOut->setRobotPolicy( 'noindex,nofollow' );
- if( is_null( $this->mRevision ) ) {
- // FIXME: This would be a nice place to load the 'no such page' text.
- } else {
- $this->setOldSubtitle( isset($this->mOldId) ? $this->mOldId : $oldid );
- if( $this->mRevision->isDeleted( Revision::DELETED_TEXT ) ) {
- if( !$this->mRevision->userCan( Revision::DELETED_TEXT ) ) {
- $wgOut->addWikiMsg( 'rev-deleted-text-permission' );
- $wgOut->setPageTitle( $this->mTitle->getPrefixedText() );
- wfProfileOut( __METHOD__ );
- return;
- } else {
- $wgOut->addWikiMsg( 'rev-deleted-text-view' );
- // and we are allowed to see...
- }
- }
- }
- }
-
- $wgOut->setRevisionId( $this->getRevIdFetched() );
-
- // Pages containing custom CSS or JavaScript get special treatment
- if( $this->mTitle->isCssOrJsPage() || $this->mTitle->isCssJsSubpage() ) {
- $wgOut->addHTML( wfMsgExt( 'clearyourcache', 'parse' ) );
- // Give hooks a chance to customise the output
- if( wfRunHooks( 'ShowRawCssJs', array( $this->mContent, $this->mTitle, $wgOut ) ) ) {
- // Wrap the whole lot in a <pre> and don't parse
- $m = array();
- preg_match( '!\.(css|js)$!u', $this->mTitle->getText(), $m );
- $wgOut->addHTML( "<pre class=\"mw-code mw-{$m[1]}\" dir=\"ltr\">\n" );
- $wgOut->addHTML( htmlspecialchars( $this->mContent ) );
- $wgOut->addHTML( "\n</pre>\n" );
- }
- } else if( $rt = Title::newFromRedirect( $text ) ) {
- # Don't append the subtitle if this was an old revision
- $wgOut->addHTML( $this->viewRedirect( $rt, !$wasRedirected && $this->isCurrent() ) );
- $parseout = $wgParser->parse($text, $this->mTitle, ParserOptions::newFromUser($wgUser));
- $wgOut->addParserOutputNoText( $parseout );
- } else if( $pcache ) {
- # Display content and save to parser cache
- $this->outputWikiText( $text );
- } else {
- # Display content, don't attempt to save to parser cache
- # Don't show section-edit links on old revisions... this way lies madness.
- if( !$this->isCurrent() ) {
- $oldEditSectionSetting = $wgOut->parserOptions()->setEditSection( false );
- }
- # Display content and don't save to parser cache
- # With timing hack -- TS 2006-07-26
- $time = -wfTime();
- $this->outputWikiText( $text, false );
- $time += wfTime();
-
- # Timing hack
- if( $time > 3 ) {
- wfDebugLog( 'slow-parse', sprintf( "%-5.2f %s", $time,
- $this->mTitle->getPrefixedDBkey()));
- }
-
- if( !$this->isCurrent() ) {
- $wgOut->parserOptions()->setEditSection( $oldEditSectionSetting );
- }