Merge "Limit the Title backlink cache to two instances."
[lhc/web/wiklou.git] / thumb.php
index 9cfdae4..8fc868d 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -25,7 +25,7 @@ define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        require( 'core/includes/WebStart.php' );
 } else {
-       require( dirname( __FILE__ ) . '/includes/WebStart.php' );
+       require( __DIR__ . '/includes/WebStart.php' );
 }
 
 // Don't use fancy mime detection, just check the file extension for jpg/gif/png
@@ -129,13 +129,13 @@ function wfStreamThumb( array $params ) {
                // Format is <timestamp>!<name>
                $bits = explode( '!', $fileName, 2 );
                if ( count( $bits ) != 2 ) {
-                       wfThumbError( 404, wfMsg( 'badtitletext' ) );
+                       wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
                        wfProfileOut( __METHOD__ );
                        return;
                }
                $title = Title::makeTitleSafe( NS_FILE, $bits[1] );
                if ( !$title ) {
-                       wfThumbError( 404, wfMsg( 'badtitletext' ) );
+                       wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
                        wfProfileOut( __METHOD__ );
                        return;
                }
@@ -147,7 +147,7 @@ function wfStreamThumb( array $params ) {
                // Get the name without the timestamp so hash paths are correctly computed
                $title = Title::makeTitleSafe( NS_FILE, isset( $bits[1] ) ? $bits[1] : $fileName );
                if ( !$title ) {
-                       wfThumbError( 404, wfMsg( 'badtitletext' ) );
+                       wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
                        wfProfileOut( __METHOD__ );
                        return;
                }
@@ -172,7 +172,7 @@ function wfStreamThumb( array $params ) {
 
        // Check the source file storage path
        if ( !$img ) {
-               wfThumbError( 404, wfMsg( 'badtitletext' ) );
+               wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
                wfProfileOut( __METHOD__ );
                return;
        }
@@ -205,27 +205,34 @@ function wfStreamThumb( array $params ) {
                }
        }
 
+       $thumbName = $img->thumbName( $params );
+       if ( !strlen( $thumbName ) ) { // invalid params?
+               wfThumbError( 400, 'The specified thumbnail parameters are not valid.' );
+               wfProfileOut( __METHOD__ );
+               return;
+       }
+
+       $disposition = $img->getThumbDisposition( $thumbName );
+       $headers[] = "Content-Disposition: $disposition";
+
        // Stream the file if it exists already...
        try {
-               $thumbName = $img->thumbName( $params );
-               if ( strlen( $thumbName ) ) { // valid params?
-                       // For 404 handled thumbnails, we only use the the base name of the URI
-                       // for the thumb params and the parent directory for the source file name.
-                       // Check that the zone relative path matches up so squid caches won't pick
-                       // up thumbs that would not be purged on source file deletion (bug 34231).
-                       if ( isset( $params['rel404'] ) // thumbnail was handled via 404
-                               && urldecode( $params['rel404'] ) !== $img->getThumbRel( $thumbName ) )
-                       {
-                               wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
-                               wfProfileOut( __METHOD__ );
-                               return;
-                       }
-                       $thumbPath = $img->getThumbPath( $thumbName );
-                       if ( $img->getRepo()->fileExists( $thumbPath ) ) {
-                               $img->getRepo()->streamFile( $thumbPath, $headers );
-                               wfProfileOut( __METHOD__ );
-                               return;
-                       }
+               // For 404 handled thumbnails, we only use the the base name of the URI
+               // for the thumb params and the parent directory for the source file name.
+               // Check that the zone relative path matches up so squid caches won't pick
+               // up thumbs that would not be purged on source file deletion (bug 34231).
+               if ( isset( $params['rel404'] ) // thumbnail was handled via 404
+                       && urldecode( $params['rel404'] ) !== $img->getThumbRel( $thumbName ) )
+               {
+                       wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
+               $thumbPath = $img->getThumbPath( $thumbName );
+               if ( $img->getRepo()->fileExists( $thumbPath ) ) {
+                       $img->getRepo()->streamFile( $thumbPath, $headers );
+                       wfProfileOut( __METHOD__ );
+                       return;
                }
        } catch ( MWException $e ) {
                wfThumbError( 500, $e->getHTML() );
@@ -243,15 +250,16 @@ function wfStreamThumb( array $params ) {
 
        // Check for thumbnail generation errors...
        $errorMsg = false;
+       $msg = wfMessage( 'thumbnail_error' );
        if ( !$thumb ) {
-               $errorMsg = wfMsgHtml( 'thumbnail_error', 'File::transform() returned false' );
+               $errorMsg = $msg->rawParams( 'File::transform() returned false' )->escaped();
        } elseif ( $thumb->isError() ) {
                $errorMsg = $thumb->getHtmlMsg();
        } elseif ( !$thumb->hasFile() ) {
-               $errorMsg = wfMsgHtml( 'thumbnail_error', 'No path supplied in thumbnail object' );
+               $errorMsg = $msg->rawParams( 'No path supplied in thumbnail object' )->escaped();
        } elseif ( $thumb->fileIsSource() ) {
-               $errorMsg = wfMsgHtml( 'thumbnail_error',
-                       'Image was not scaled, is the requested width bigger than the source?' );
+               $errorMsg = $msg->
+                       rawParams( 'Image was not scaled, is the requested width bigger than the source?' )->escaped();
        }
 
        if ( $errorMsg !== false ) {