Move wfThumbIsStandard() to GlobalFunctions and add tests
Change-Id: Ife9c011a476a4022cd72d433497944cbd7258e67
This commit is contained in:
parent
320a237e80
commit
39ac4fa5a4
3 changed files with 148 additions and 60 deletions
|
|
@ -4198,3 +4198,64 @@ function wfIsConfiguredProxy( $ip ) {
|
|||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
60
thumb.php
60
thumb.php
|
|
@ -424,66 +424,6 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath
|
|||
return array( $thumb, $errorHtml );
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in a new issue