API: Fix imageinfo iiurlheight on audio files
authorBrad Jorsch <bjorsch@wikimedia.org>
Fri, 21 Jun 2013 15:46:29 +0000 (11:46 -0400)
committerBrad Jorsch <bjorsch@wikimedia.org>
Mon, 24 Jun 2013 16:12:52 +0000 (12:12 -0400)
When iiurlheight is given without iiurlwidth, we want to limit the
thumbnail by just the height. MediaWiki's file classes don't really
support this, though, so we pass the image's full width as the limiting
width to achieve the same effect.

However, this fails for audio files where $file->getWidth() returns 0,
but we can still get a thumbnail of a placeholder image. In that
situation, we should just choose an arbitrary non-zero limiting width.

Change-Id: I4318a06a96265d39e39e90cc706d49a1c3b6e8e3

includes/api/ApiQueryImageInfo.php

index 4849f40..fedf860 100644 (file)
@@ -231,10 +231,18 @@ class ApiQueryImageInfo extends ApiQueryBase {
         * @return Array of parameters for transform.
         */
        protected function mergeThumbParams( $image, $thumbParams, $otherParams ) {
+               global $wgThumbLimits;
 
                if ( !isset( $thumbParams['width'] ) && isset( $thumbParams['height'] ) ) {
-                       // Populate the width with the image's width, so only the height restriction applies
-                       $thumbParams['width'] = $image->getWidth();
+                       // We want to limit only by height in this situation, so pass the
+                       // image's full width as the limiting width. But some file types
+                       // don't have a width of their own, so pick something arbitrary so
+                       // thumbnailing the default icon works.
+                       if ( $image->getWidth() <= 0 ) {
+                               $thumbParams['width'] = max( $wgThumbLimits );
+                       } else {
+                               $thumbParams['width'] = $image->getWidth();
+                       }
                }
 
                if ( !$otherParams ) {