X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fmedia%2FSvgHandler.php;h=b7745df9bcc9db374c9ce70cbba00fdde7a3ddab;hb=8022558024f5f9cf5383beb49937a75348982ca8;hp=a589dbf3fbb0ab37b5c5abff16366dd6556d04c7;hpb=708f51c2c60b970549f463776faa38318fd11d21;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/media/SvgHandler.php b/includes/media/SvgHandler.php index a589dbf3fb..b7745df9bc 100644 --- a/includes/media/SvgHandler.php +++ b/includes/media/SvgHandler.php @@ -41,7 +41,7 @@ class SvgHandler extends ImageHandler { 'title' => 'ObjectName', ]; - function isEnabled() { + public function isEnabled() { global $wgSVGConverters, $wgSVGConverter; if ( !isset( $wgSVGConverters[$wgSVGConverter] ) ) { wfDebug( "\$wgSVGConverter is invalid, disabling SVG rendering.\n" ); @@ -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 = $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 @@ -362,7 +399,7 @@ class SvgHandler extends ImageHandler { } } - function getThumbType( $ext, $mime, $params = null ) { + public function getThumbType( $ext, $mime, $params = null ) { return [ 'png', 'image/png' ]; } @@ -375,7 +412,7 @@ class SvgHandler extends ImageHandler { * @param File $file * @return string */ - function getLongDesc( $file ) { + public function getLongDesc( $file ) { global $wgLang; $metadata = $this->unpackMetadata( $file->getMetadata() ); @@ -401,7 +438,7 @@ class SvgHandler extends ImageHandler { * @param string $filename * @return string Serialised metadata */ - function getMetadata( $file, $filename ) { + public function getMetadata( $file, $filename ) { $metadata = [ 'version' => self::SVG_METADATA_VERSION ]; try { $metadata += SVGMetadataExtractor::getMetadata( $filename ); @@ -432,7 +469,7 @@ class SvgHandler extends ImageHandler { return 'parsed-svg'; } - function isMetadataValid( $image, $metadata ) { + public function isMetadataValid( $image, $metadata ) { $meta = $this->unpackMetadata( $metadata ); if ( $meta === false ) { return self::METADATA_BAD; @@ -456,7 +493,7 @@ class SvgHandler extends ImageHandler { * @param bool|IContextSource $context Context to use (optional) * @return array|bool */ - function formatMetadata( $file, $context = false ) { + public function formatMetadata( $file, $context = false ) { $result = [ 'visible' => [], 'collapsed' => [] @@ -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; @@ -556,7 +594,7 @@ class SvgHandler extends ImageHandler { * @param array $params * @return array */ - function getScriptParams( $params ) { + protected function getScriptParams( $params ) { $scriptParams = [ 'width' => $params['width'] ]; if ( isset( $params['lang'] ) ) { $scriptParams['lang'] = $params['lang'];