Merge "Enable autocompletion for Special:ListUsers"
[lhc/web/wiklou.git] / includes / AjaxResponse.php
index 41cbd24..6c2efc2 100644 (file)
@@ -70,16 +70,23 @@ class AjaxResponse {
         */
        private $mText;
 
+       /**
+        * @var Config
+        */
+       private $mConfig;
+
        /**
         * @param string|null $text
+        * @param Config|null $config
         */
-       function __construct( $text = null ) {
+       function __construct( $text = null, Config $config = null ) {
                $this->mCacheDuration = null;
                $this->mVary = null;
+               $this->mConfig = $config ?: ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
 
                $this->mDisabled = false;
                $this->mText = '';
-               $this->mResponseCode = '200 OK';
+               $this->mResponseCode = 200;
                $this->mLastModified = false;
                $this->mContentType = 'application/x-wiki';
 
@@ -150,19 +157,21 @@ class AjaxResponse {
         * Construct the header and output it
         */
        function sendHeaders() {
-               global $wgUseSquid, $wgUseESI;
-
                if ( $this->mResponseCode ) {
-                       $n = preg_replace( '/^ *(\d+)/', '\1', $this->mResponseCode );
-                       header( "Status: " . $this->mResponseCode, true, (int)$n );
+                       // For back-compat, it is supported that mResponseCode be a string like " 200 OK"
+                       // (with leading space and the status message after). Cast response code to an integer
+                       // to take advantage of PHP's conversion rules which will turn "  200 OK" into 200.
+                       // http://php.net/string#language.types.string.conversion
+                       $n = intval( trim( $this->mResponseCode ) );
+                       HttpStatus::header( $n );
                }
 
-               header ( "Content-Type: " . $this->mContentType );
+               header( "Content-Type: " . $this->mContentType );
 
                if ( $this->mLastModified ) {
-                       header ( "Last-Modified: " . $this->mLastModified );
+                       header( "Last-Modified: " . $this->mLastModified );
                } else {
-                       header ( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
+                       header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
                }
 
                if ( $this->mCacheDuration ) {
@@ -170,12 +179,12 @@ class AjaxResponse {
                        # and tell the client to always check with the squid. Otherwise,
                        # tell the client to use a cached copy, without a way to purge it.
 
-                       if ( $wgUseSquid ) {
+                       if ( $this->mConfig->get( 'UseSquid' ) ) {
                                # Expect explicit purge of the proxy cache, but require end user agents
                                # to revalidate against the proxy on each visit.
                                # Surrogate-Control controls our Squid, Cache-Control downstream caches
 
-                               if ( $wgUseESI ) {
+                               if ( $this->mConfig->get( 'UseESI' ) ) {
                                        header( 'Surrogate-Control: max-age=' . $this->mCacheDuration . ', content="ESI/1.0"' );
                                        header( 'Cache-Control: s-maxage=0, must-revalidate, max-age=0' );
                                } else {
@@ -184,20 +193,20 @@ class AjaxResponse {
 
                        } else {
                                # Let the client do the caching. Cache is not purged.
-                               header ( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $this->mCacheDuration ) . " GMT" );
-                               header ( "Cache-Control: s-maxage={$this->mCacheDuration}," .
+                               header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $this->mCacheDuration ) . " GMT" );
+                               header( "Cache-Control: s-maxage={$this->mCacheDuration}," .
                                        "public,max-age={$this->mCacheDuration}" );
                        }
 
                } else {
                        # always expired, always modified
-                       header ( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );    // Date in the past
-                       header ( "Cache-Control: no-cache, must-revalidate" );  // HTTP/1.1
-                       header ( "Pragma: no-cache" );                          // HTTP/1.0
+                       header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );    // Date in the past
+                       header( "Cache-Control: no-cache, must-revalidate" );  // HTTP/1.1
+                       header( "Pragma: no-cache" );                          // HTTP/1.0
                }
 
                if ( $this->mVary ) {
-                       header ( "Vary: " . $this->mVary );
+                       header( "Vary: " . $this->mVary );
                }
        }
 
@@ -241,7 +250,7 @@ class AjaxResponse {
                                $ismodsince >= $wgCacheEpoch
                        ) {
                                ini_set( 'zlib.output_compression', 0 );
-                               $this->setResponseCode( "304 Not Modified" );
+                               $this->setResponseCode( 304 );
                                $this->disable();
                                $this->mLastModified = $lastmod;