Aaron Schulz has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/130781

Change subject: Made wfThumbIsStandard() aware of the width/height scaling 
choice by handlers
......................................................................

Made wfThumbIsStandard() aware of the width/height scaling choice by handlers

* Generally, either the height or width is used for each description page
  link when using $wgImageLimits. This depends on the $wgImageLimits values
  and the file dimensions. Description page links should better pass the
  wfThumbIsStandard() method now, and thus have weaker rate-limiting.

Change-Id: Id1c3b0fc57f8ed3c14929a1a1661842a069b805d
---
M thumb.php
1 file changed, 36 insertions(+), 22 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/81/130781/1

diff --git a/thumb.php b/thumb.php
index b0310c8..3d49a43 100644
--- a/thumb.php
+++ b/thumb.php
@@ -430,9 +430,9 @@
  * 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 +441,44 @@
 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;
                }
        }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/130781
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id1c3b0fc57f8ed3c14929a1a1661842a069b805d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <asch...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to