return null;
}
+ /**
+ * Determines render language from image parameters
+ *
+ * @param array $params
+ * @return string
+ */
+ protected function getLanguageFromParams( array $params ) {
+ return $params['lang'] ?? $params['targetlang'] ?? 'en';
+ }
+
/**
* What language to render file in if none selected
*
* @param array &$params
* @return bool
*/
- function normaliseParams( $image, &$params ) {
- global $wgSVGMaxSize;
- if ( !parent::normaliseParams( $image, $params ) ) {
- return false;
+ public function normaliseParams( $image, &$params ) {
+ if ( parent::normaliseParams( $image, $params ) ) {
+ $params = $this->normaliseParamsInternal( $image, $params );
+ return true;
}
+
+ return false;
+ }
+
+ /**
+ * Code taken out of normaliseParams() for testability
+ *
+ * @since 1.33
+ *
+ * @param File $image
+ * @param array $params
+ * @return array Modified $params
+ */
+ protected function normaliseParamsInternal( $image, $params ) {
+ global $wgSVGMaxSize;
+
# Don't make an image bigger than wgMaxSVGSize on the smaller side
if ( $params['physicalWidth'] <= $params['physicalHeight'] ) {
if ( $params['physicalWidth'] > $wgSVGMaxSize ) {
$params['physicalHeight'] = $wgSVGMaxSize;
}
}
+ // To prevent the proliferation of thumbnails in languages not present in SVGs, unless
+ // explicitly forced by user.
+ if ( isset( $params['targetlang'] ) ) {
+ if ( !$image->getMatchedLanguage( $params['targetlang'] ) ) {
+ unset( $params['targetlang'] );
+ }
+ }
- return true;
+ return $params;
}
/**
$clientHeight = $params['height'];
$physicalWidth = $params['physicalWidth'];
$physicalHeight = $params['physicalHeight'];
- $lang = $params['lang'] ?? $this->getDefaultRenderLanguage( $image );
+ $lang = $this->getLanguageFromParams( $params );
if ( $flags & self::TRANSFORM_LATER ) {
return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
if ( is_array( $wgSVGConverters[$wgSVGConverter] ) ) {
// This is a PHP callable
$func = $wgSVGConverters[$wgSVGConverter][0];
- $args = array_merge( [ $srcPath, $dstPath, $width, $height, $lang ],
- array_slice( $wgSVGConverters[$wgSVGConverter], 1 ) );
if ( !is_callable( $func ) ) {
throw new MWException( "$func is not callable" );
}
- $err = call_user_func_array( $func, $args );
+ $err = $func( $srcPath,
+ $dstPath,
+ $width,
+ $height,
+ $lang,
+ ...array_slice( $wgSVGConverters[$wgSVGConverter], 1 )
+ );
$retval = (bool)$err;
} else {
// External command
*/
public function makeParamString( $params ) {
$lang = '';
- if ( isset( $params['lang'] ) && $params['lang'] !== 'en' ) {
- $lang = 'lang' . strtolower( $params['lang'] ) . '-';
+ $code = $this->getLanguageFromParams( $params );
+ if ( $code !== 'en' ) {
+ $lang = 'lang' . strtolower( $code ) . '-';
}
if ( !isset( $params['width'] ) ) {
return false;