Corrected spelling error
[lhc/web/wiklou.git] / includes / OutputPage.php
index f344fe4..50d0d38 100644 (file)
@@ -1,14 +1,15 @@
 <?php
 # See design.doc
 
-if($wgUseTeX) include_once( "Math.php" );
+if($wgUseTeX) require_once( "Math.php" );
 
 class OutputPage {
        var $mHeaders, $mCookies, $mMetatags, $mKeywords;
        var $mLinktags, $mPagetitle, $mBodytext, $mDebugtext;
        var $mHTMLtitle, $mRobotpolicy, $mIsarticle, $mPrintable;
-       var $mSubtitle, $mRedirect, $mHeadtext;
+       var $mSubtitle, $mRedirect;
        var $mLastModified, $mCategoryLinks;
+       var $mScripts;
 
        var $mSuppressQuickbar;
        var $mOnloadHandler;
@@ -35,6 +36,7 @@ class OutputPage {
                $this->mContainsOldMagic = $this->mContainsNewMagic = 0;
                $this->mParserOptions = ParserOptions::newFromUser( $temp = NULL );
                $this->mSquidMaxage = 0;
+               $this->mScripts = "";
        }
 
        function addHeader( $name, $val ) { array_push( $this->mHeaders, "$name: $val" ) ; }
@@ -44,6 +46,8 @@ class OutputPage {
        # To add an http-equiv meta tag, precede the name with "http:"
        function addMeta( $name, $val ) { array_push( $this->mMetatags, array( $name, $val ) ); }
        function addKeyword( $text ) { array_push( $this->mKeywords, $text ); }
+       function addScript( $script ) { $this->mScripts .= $script; }
+       function getScript() { return $this->mScripts; }
        
        function addLink( $linkarr ) {
                # $linkarr should be an associative array of attributes. We'll escape on output.
@@ -79,10 +83,9 @@ class OutputPage {
                        return;
                }
 
-               $lastmod = gmdate( "D, j M Y H:i:s", wfTimestamp2Unix(
-                 max( $timestamp, $wgUser->mTouched ) ) ) . " GMT";
+               $lastmod = gmdate( "D, j M Y H:i:s", wfTimestamp2Unix( max( $timestamp, $wgUser->mTouched ) ) ) . " GMT";
 
-        if( !empty( $_SERVER["HTTP_IF_MODIFIED_SINCE"] ) ) {
+               if( !empty( $_SERVER["HTTP_IF_MODIFIED_SINCE"] ) ) {
                        # IE sends sizes after the date like this:
                        # Wed, 20 Aug 2003 06:51:19 GMT; length=5202
                        # this breaks strtotime().
@@ -90,7 +93,7 @@ class OutputPage {
                        $ismodsince = wfUnix2Timestamp( strtotime( $modsince ) );
                        wfDebug( "-- client send If-Modified-Since: " . $modsince . "\n", false );
                        wfDebug( "--  we might send Last-Modified : $lastmod\n", false ); 
-               
+
                        if( ($ismodsince >= $timestamp ) and $wgUser->validateCache( $ismodsince ) ) {
                                # Make sure you're in a place you can leave when you call us!
                                header( "HTTP/1.0 304 Not Modified" );
@@ -178,15 +181,28 @@ class OutputPage {
        }
        
        function getLanguageLinks() {
-               global $wgTitle, $wgLanguageCode;
-               global $wgDBconnection, $wgDBname;
                return $this->mLanguageLinks;
        }
+       function addLanguageLinks($newLinkArray) {
+               $this->mLanguageLinks += $newLinkArray;
+       }
+       function setLanguageLinks($newLinkArray) {
+               $this->mLanguageLinks = $newLinkArray;
+       }
+       function getCategoryLinks() {
+               return $this->mCategoryLinks;
+       } 
+       function addCategoryLinks($newLinkArray) {
+               $this->mCategoryLinks += $newLinkArray;
+       }
+       function setCategoryLinks($newLinkArray) {
+               $this->mCategoryLinks += $newLinkArray;
+       }
+
        function suppressQuickbar() { $this->mSuppressQuickbar = true; }
        function isQuickbarSuppressed() { return $this->mSuppressQuickbar; }
 
        function addHTML( $text ) { $this->mBodytext .= $text; }
-       function addHeadtext( $text ) { $this->mHeadtext .= $text; }
        function debug( $text ) { $this->mDebugtext .= $text; }
 
        function setParserOptions( $options )
@@ -202,26 +218,30 @@ class OutputPage {
        function addWikiText( $text, $linestart = true, $cacheArticle = NULL )
        {
                global $wgParser, $wgParserCache, $wgUser, $wgTitle;
-
-               $parserOutput = false;
+               
+               $parserOutput = $wgParser->parse( $text, $wgTitle, $this->mParserOptions, $linestart );
                if ( $cacheArticle ) {
-                       $parserOutput = $wgParserCache->get( $cacheArticle, $wgUser );
-               }
-
-               if ( $parserOutput === false ) {
-                       $parserOutput = $wgParser->parse( $text, $wgTitle, $this->mParserOptions, $linestart );
-                       if ( $cacheArticle ) {
-                               $wgParserCache->save( $parserOutput, $cacheArticle, $wgUser );
-                       }
+                       $wgParserCache->save( $parserOutput, $cacheArticle, $wgUser );
                }
                
                $this->mLanguageLinks += $parserOutput->getLanguageLinks();
                $this->mCategoryLinks += $parserOutput->getCategoryLinks();
-               
                $this->addHTML( $parserOutput->getText() );
-               
        }
 
+       function tryParserCache( $article, $user ) {
+               global $wgParserCache;
+               $parserOutput = $wgParserCache->get( $article, $user );
+               if ( $parserOutput !== false ) {
+                       $this->mLanguageLinks += $parserOutput->getLanguageLinks();
+                       $this->mCategoryLinks += $parserOutput->getCategoryLinks();
+                       $this->addHTML( $parserOutput->getText() );
+                       return true;
+               } else {
+                       return false;
+               }
+       }
+       
        # Set the maximum cache time on the Squid in seconds
        function setSquidMaxage( $maxage ) {
                $this->mSquidMaxage = $maxage;
@@ -236,9 +256,9 @@ class OutputPage {
                global $wgUseSquid, $wgUseESI;
                # FIXME: This header may cause trouble with some versions of Internet Explorer
                header( "Vary: Accept-Encoding, Cookie" );
-               if( $this->mEnableClientCache && $this->mLastModified != "" ) {
+               if( $this->mEnableClientCache ) {
                        if( $wgUseSquid && ! isset( $_COOKIE[ini_get( "session.name") ] ) && 
-                         ! $this->isPrintable() ) 
+                         ! $this->isPrintable() && $this->mSquidMaxage != 0 
                        {
                                if ( $wgUseESI ) {
                                        # We'll purge the proxy cache explicitly, but require end user agents
@@ -266,7 +286,7 @@ class OutputPage {
                                header( "Expires: -1" );
                                header( "Cache-Control: private, must-revalidate, max-age=0" );
                        }
-                       header( "Last-modified: {$this->mLastModified}" );
+                       if($this->mLastModified) header( "Last-modified: {$this->mLastModified}" );
                } else {
                        wfDebug( "** no caching **\n", false );
 
@@ -405,8 +425,22 @@ class OutputPage {
                list( $usec, $sec ) = explode( " ", $wgRequestTime );
                $start = (float)$sec + (float)$usec;
                $elapsed = $now - $start;
-               $com = sprintf( "<!-- Time since request: %01.2f secs. -->",
-                 $elapsed );
+               
+               # Use real server name if available, so we know which machine
+               # in a server farm generated the current page.
+               if ( function_exists( "posix_uname" ) ) {
+                       $uname = @posix_uname();
+               } else {
+                       $uname = false;
+               }
+               if( is_array( $uname ) && isset( $uname['nodename'] ) ) {
+                       $hostname = $uname['nodename'];
+               } else {
+                       # This may be a virtual server.
+                       $hostname = $_SERVER['SERVER_NAME'];
+               }
+               $com = sprintf( "<!-- Served by %s in %01.2f secs. -->",
+                 $hostname, $elapsed );
                return $com;
        }
 
@@ -484,7 +518,7 @@ class OutputPage {
                $this->returnToMain();          # Flip back to the main page after 10 seconds.
        }
 
-       function databaseError( $fname, &$conn )
+       function databaseError( $fname, $sql, $error, $errno )
        {
                global $wgUser, $wgCommandLineMode;
 
@@ -499,10 +533,10 @@ class OutputPage {
                        $msg = wfMsgNoDB( "dberrortext" );
                }
 
-               $msg = str_replace( "$1", htmlspecialchars( $conn->lastQuery() ), $msg );
+               $msg = str_replace( "$1", htmlspecialchars( $sql ), $msg );
                $msg = str_replace( "$2", htmlspecialchars( $fname ), $msg );
-               $msg = str_replace( "$3", $conn->lastErrno(), $msg );
-               $msg = str_replace( "$4", htmlspecialchars( $conn->lastError() ), $msg );
+               $msg = str_replace( "$3", $errno, $msg );
+               $msg = str_replace( "$4", htmlspecialchars( $error ), $msg );
                
                if ( $wgCommandLineMode || !is_object( $wgUser )) {
                        print "$msg\n";
@@ -584,6 +618,9 @@ class OutputPage {
                $this->fatalError( wfMsg( "filenotfound", $name ) );
        }
 
+       // return from error messages or notes
+       //   auto:      automatically redirect the user after 10 seconds
+       //   returnto:  page title to return to. Default is Main Page.
        function returnToMain( $auto = true, $returnto = NULL )
        {
                global $wgUser, $wgOut, $wgRequest;
@@ -664,6 +701,7 @@ class OutputPage {
 
                $sk = $wgUser->getSkin();
                $ret .= $sk->getHeadScripts();
+               $ret .= $this->mScripts;
                $ret .= $sk->getUserStyles();
 
                $ret .= "</head>\n";