Brion VIBBER has submitted this change and it was merged.
Change subject: Move wfThumbIsStandard() to GlobalFunctions and add tests
......................................................................
Move wfThumbIsStandard() to GlobalFunctions and add tests
Change-Id: Ife9c011a476a4022cd72d433497944cbd7258e67
---
M includes/GlobalFunctions.php
A tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php
M thumb.php
3 files changed, 148 insertions(+), 60 deletions(-)
Approvals:
Brion VIBBER: Looks good to me, approved
jenkins-bot: Verified
diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php
index 2025e17..0495864 100644
--- a/includes/GlobalFunctions.php
+++ b/includes/GlobalFunctions.php
@@ -4198,3 +4198,64 @@
wfDeprecated( __METHOD__, '1.24' );
return IP::isConfiguredProxy( $ip );
}
+
+/**
+ * Returns true if these thumbnail parameters match one that MediaWiki
+ * requests from file description pages and/or parser output.
+ *
+ * $params is considered non-standard if they involve a non-standard
+ * 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
+ * @return bool
+ * @since 1.24 Moved from thumb.php to GlobalFunctions in 1.25
+ */
+function wfThumbIsStandard( File $file, array $params ) {
+ global $wgThumbLimits, $wgImageLimits;
+
+ $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 ) {
+ $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 ( !$match ) {
+ return false; // not standard for description pages
+ }
+ }
+
+ // 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;
+ }
+ }
+
+ return true;
+}
diff --git a/tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php
b/tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php
new file mode 100644
index 0000000..dc1dea1
--- /dev/null
+++ b/tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * @group GlobalFunctions
+ * @covers ::wfThumbIsStandard
+ */
+class WfThumbIsStandardTest extends MediaWikiTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( array(
+ 'wgThumbLimits' => array(
+ 100,
+ 400
+ ),
+ 'wgImageLimits' => array(
+ array( 300, 225 ),
+ array( 800, 600 ),
+ ),
+ 'wgMediaHandlers' => array(
+ 'unknown/unknown' => 'MockBitmapHandler',
+ ),
+ ) );
+ }
+
+ public static function provideThumbParams() {
+ return array(
+ // Thumb limits
+ array(
+ 'Standard thumb width',
+ true,
+ array( 'width' => 100 ),
+ ),
+ array(
+ 'Standard thumb width',
+ true,
+ array( 'width' => 400 ),
+ ),
+ array(
+ 'Non-standard thumb width',
+ false,
+ array( 'width' => 300 ),
+ ),
+ // Image limits
+ // Note: Image limits are measured as pairs. Individual
values
+ // may be non-standard based on the aspect ratio.
+ array(
+ 'Standard image width/height pair',
+ true,
+ array( 'width' => 250, 'height' => 225 ),
+ ),
+ array(
+ 'Standard image width/height pair',
+ true,
+ array( 'width' => 667, 'height' => 600 ),
+ ),
+ array(
+ 'Standard image width where image does not fit
aspect ratio',
+ false,
+ array( 'width' => 300 ),
+ ),
+ array(
+ 'Implicit width from image width/height pair
aspect ratio fit',
+ true,
+ // 2000x1800 fit inside 300x225 makes w=250
+ array( 'width' => 250 ),
+ ),
+ array(
+ 'Height-only is always non-standard',
+ false,
+ array( 'height' => 225 ),
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider provideThumbParams
+ */
+ public function testIsStandard( $message, $expected, $params ) {
+ $this->assertSame(
+ $expected,
+ wfThumbIsStandard( new FakeDimensionFile( array( 2000,
1800 ) ), $params ),
+ $message
+ );
+ }
+}
diff --git a/thumb.php b/thumb.php
index 7352dc4..5ab181d 100644
--- a/thumb.php
+++ b/thumb.php
@@ -425,66 +425,6 @@
}
/**
- * Returns true if this thumbnail is one that MediaWiki generates
- * links to on file description pages and possibly parser output.
- *
- * $params is considered non-standard if they involve a non-standard
- * 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
- * @return bool
- */
-function wfThumbIsStandard( File $file, array $params ) {
- global $wgThumbLimits, $wgImageLimits;
-
- $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 ) {
- $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 ( !$match ) {
- return false; // not standard for description pages
- }
- }
-
- // 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;
- }
- }
-
- return true;
-}
-
-/**
* Convert pathinfo type parameter, into normal request parameters
*
* So for example, if the request was redirected from
--
To view, visit https://gerrit.wikimedia.org/r/188621
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ife9c011a476a4022cd72d433497944cbd7258e67
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Krinkle <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits