X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fmedia%2FSvgHandler.php;h=e3057f4537838b028ae483cbc5b1a1a55c7c106e;hb=2a6469dbd1aaa7656bb7b18031da38d952af268f;hp=9085421af8ee0c61a2120031182163551735053b;hpb=399d9c24a85b7e108ccfc51140af225c458f00b9;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/media/SvgHandler.php b/includes/media/SvgHandler.php index 9085421af8..e3057f4537 100644 --- a/includes/media/SvgHandler.php +++ b/includes/media/SvgHandler.php @@ -136,6 +136,16 @@ class SvgHandler extends ImageHandler { 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 * @@ -160,11 +170,27 @@ class SvgHandler extends ImageHandler { * @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 ) { @@ -181,8 +207,15 @@ class SvgHandler extends ImageHandler { $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; } /** @@ -201,7 +234,7 @@ class SvgHandler extends ImageHandler { $clientHeight = $params['height']; $physicalWidth = $params['physicalWidth']; $physicalHeight = $params['physicalHeight']; - $lang = isset( $params['lang'] ) ? $params['lang'] : $this->getDefaultRenderLanguage( $image ); + $lang = $this->getLanguageFromParams( $params ); if ( $flags & self::TRANSFORM_LATER ) { return new ThumbnailImage( $image, $dstUrl, $dstPath, $params ); @@ -291,12 +324,16 @@ class SvgHandler extends ImageHandler { 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 @@ -527,8 +564,9 @@ class SvgHandler extends ImageHandler { */ 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;