X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=thumb.php;h=d7bf45338241431d3324fcb90102453dd8db240d;hb=10da99d18d9f90d144ffbbf204124b71bcf7c628;hp=b0310c82e2a74c8b3663bef06bfa655ecea3fd0e;hpb=5c2f1dc5c099d1e98f720ad35b6ae77aaef3620a;p=lhc%2Fweb%2Fwiklou.git diff --git a/thumb.php b/thumb.php index b0310c82e2..d7bf453382 100644 --- a/thumb.php +++ b/thumb.php @@ -116,6 +116,10 @@ function wfStreamThumb( array $params ) { $params['width'] = $params['w']; unset( $params['w'] ); } + if ( isset( $params['width'] ) && substr( $params['width'], -2 ) == 'px' ) { + // strip the px (pixel) suffix, if found + $params['width'] = substr( $width, 0, strlen( $width ) - 2 ); + } if ( isset( $params['p'] ) ) { $params['page'] = $params['p']; } @@ -394,7 +398,7 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath // If the worker that finished made this thumbnail then use it. // Otherwise, it probably made a different thumbnail for this file. return $file->getRepo()->fileExists( $thumbPath ) - ? $file->transform( $params ) + ? $file->transform( $params, File::RENDER_NOW ) : false; // retry once more in exclusive mode }, 'fallback' => function() { @@ -430,9 +434,9 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath * links to on file description pages and possibly parser output. * * $params is considered non-standard if they involve a non-standard - * width or any parameter aside from width and page number. The number - * of possible files with standard parameters is far less than that of all - * possible combinations; rate-limiting for them can thus be more generious. + * width or any non-default parameters aside from width and page number. + * The number of possible files with standard parameters is far less than + * that of all combinations; rate-limiting for them can thus be more generious. * * @param File $file * @param array $params @@ -441,30 +445,44 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath function wfThumbIsStandard( File $file, array $params ) { global $wgThumbLimits, $wgImageLimits; - if ( isset( $params['width'] ) ) { - $widths = $wgThumbLimits; + $handler = $file->getHandler(); + if ( !$handler || !isset( $params['width'] ) ) { + return false; + } + + $basicParams = array(); + if ( isset( $params['page'] ) ) { + $basicParams['page'] = $params['page']; + } + + // Check if the width matches one of $wgThumbLimits + if ( in_array( $params['width'], $wgThumbLimits ) ) { + $normalParams = $basicParams + array( 'width' => $params['width'] ); + // Append any default values to the map (e.g. "lossy", "lossless", ...) + $handler->normaliseParams( $file, $normalParams ); + } else { + // If not, then check if the width matchs one of $wgImageLimits + $match = false; foreach ( $wgImageLimits as $pair ) { - $widths[] = $pair[0]; + $normalParams = $basicParams + array( 'width' => $pair[0], 'height' => $pair[1] ); + // Decide whether the thumbnail should be scaled on width or height. + // Also append any default values to the map (e.g. "lossy", "lossless", ...) + $handler->normaliseParams( $file, $normalParams ); + // Check if this standard thumbnail size maps to the given width + if ( $normalParams['width'] == $params['width'] ) { + $match = true; + break; + } } - if ( !in_array( $params['width'], $widths ) ) { - return false; + if ( !$match ) { + return false; // not standard for description pages } } - $handler = $file->getHandler(); - if ( $handler ) { - // Standard thumbnails use a standard width and any page number - $normalParams = array( 'width' => $params['width'] ); - if ( isset( $params['page'] ) ) { - $normalParams['page'] = $params['page']; - } - // Append any default values to the map (e.g. "lossy", "lossless", "seek"...) - $handler->normaliseParams( $file, $normalParams ); - // Check that the given values for non-page, non-width, params are just defaults - foreach ( $params as $key => $value ) { - if ( !isset( $normalParams[$key] ) || $normalParams[$key] !== $value ) { - return false; - } + // Check that the given values for non-page, non-width, params are just defaults + foreach ( $params as $key => $value ) { + if ( !isset( $normalParams[$key] ) || $normalParams[$key] != $value ) { + return false; } }