Merge "Do not require iiurlwidth when getting thumbnails."

This commit is contained in:
jenkins-bot 2014-09-18 17:48:00 +00:00 committed by Gerrit Code Review
commit 3e0056ef43
2 changed files with 43 additions and 7 deletions

View file

@ -268,6 +268,7 @@ production.
deprecated in favor of cmstarthexsortkey and cmendhexsortkey.
* (bug 63326) Add blockedtimestamp field to output of blockinfo property for
the list=allusers and list=users modules.
* prop=imageinfo no longer requires iiurlwidth to be set when using iiurlparam.
=== Action API internal changes in 1.24 ===
* Methods for handling continuation are added to ApiResult, so actions other

View file

@ -237,9 +237,11 @@ class ApiQueryImageInfo extends ApiQueryBase {
$scale = array();
$scale['height'] = $params['urlheight'];
} else {
$scale = null;
if ( $params['urlparam'] ) {
$this->dieUsage( "{$p}urlparam requires {$p}urlwidth", "urlparam_no_width" );
// Audio files might not have a width/height.
$scale = array();
} else {
$scale = null;
}
}
@ -256,6 +258,10 @@ class ApiQueryImageInfo extends ApiQueryBase {
* @return array Array of parameters for transform.
*/
protected function mergeThumbParams( $image, $thumbParams, $otherParams ) {
if ( $thumbParams === null ) {
// No scaling requested
return null;
}
if ( !isset( $thumbParams['width'] ) && isset( $thumbParams['height'] ) ) {
// 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
@ -269,6 +275,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
}
if ( !$otherParams ) {
$this->checkParameterNormalise( $image, $thumbParams );
return $thumbParams;
}
$p = $this->getModulePrefix();
@ -289,11 +296,11 @@ class ApiQueryImageInfo extends ApiQueryBase {
// handlers.
$this->setWarning( "Could not parse {$p}urlparam for " . $image->getName()
. '. Using only width and height' );
$this->checkParameterNormalise( $image, $thumbParams );
return $thumbParams;
}
if ( isset( $paramList['width'] ) ) {
if ( isset( $paramList['width'] ) && isset( $thumbParams['width'] ) ) {
if ( intval( $paramList['width'] ) != intval( $thumbParams['width'] ) ) {
$this->setWarning( "Ignoring width value set in {$p}urlparam ({$paramList['width']}) "
. "in favor of width value derived from {$p}urlwidth/{$p}urlheight "
@ -307,7 +314,33 @@ class ApiQueryImageInfo extends ApiQueryBase {
}
}
return $thumbParams + $paramList;
$finalParams = $thumbParams + $paramList;
$this->checkParameterNormalise( $image, $finalParams );
return $finalParams;
}
/**
* Verify that the final image parameters can be normalised.
*
* This doesn't use the normalised parameters, since $file->transform
* expects the pre-normalised parameters, but doing the normalisation
* allows us to catch certain error conditions early (such as missing
* required parameter).
*
* @param $image File
* @param $finalParams array List of parameters to transform image with
*/
protected function checkParameterNormalise( $image, $finalParams ) {
$h = $image->getHandler();
if ( !$h ) {
return;
}
// Note: normaliseParams modifies the array in place, but we aren't interested
// in the actual normalised version, only if we can actually normalise them,
// so we use the functions scope to throw away the normalisations.
if ( !$h->normaliseParams( $image, $finalParams ) ) {
$this->dieUsage( "Could not normalise image parameters for " . $image->getName(), "urlparamnormal" );
}
}
/**
@ -723,8 +756,10 @@ class ApiQueryImageInfo extends ApiQueryBase {
'no more than ' . self::TRANSFORM_LIMIT . ' scaled images will be returned.'
),
'urlheight' => "Similar to {$p}urlwidth.",
'urlparam' => array( "A handler specific parameter string. For example, pdf's ",
"might use 'page15-100px'. {$p}urlwidth must be used and be consistent with {$p}urlparam" ),
'urlparam' => array(
"A handler specific parameter string. For example, pdf's ",
"might use 'page15-100px'."
),
'limit' => 'How many image revisions to return per image',
'start' => 'Timestamp to start listing from',
'end' => 'Timestamp to stop listing at',