X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2Fmedia%2FSvgHandler.php;h=b7745df9bcc9db374c9ce70cbba00fdde7a3ddab;hb=c1c3302286deb92f3eb81a39b5ee61f8c413f5ad;hp=a9c7b4fe899c360210953a8ea0936591455c8ff7;hpb=85724779efcb5e70bf6c6f8867fa4d6dc957c566;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/media/SvgHandler.php b/includes/media/SvgHandler.php index a9c7b4fe89..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 ); @@ -366,7 +399,7 @@ class SvgHandler extends ImageHandler { } } - function getThumbType( $ext, $mime, $params = null ) { + public function getThumbType( $ext, $mime, $params = null ) { return [ 'png', 'image/png' ]; } @@ -379,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() ); @@ -405,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 ); @@ -436,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; @@ -460,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' => [] @@ -531,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; @@ -560,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'];