From 645266fe3e1befe84b800b4f78a3b208fa8943d4 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Tue, 1 Nov 2016 15:08:38 -0400 Subject: [PATCH] Fix MediaTransformError message handling Give access to the raw Message instead of only to the HTML or text in the RequestContext language. Pass Message objects instead of strings from calling ->text() as the parameters of Messages so if the outer Message's language is changed things get parsed sensibly. Change-Id: Ibd6c1217b6fed839c888b66e02900f8e21ed3e6b --- includes/filerepo/file/File.php | 2 +- includes/media/Bitmap.php | 2 +- includes/media/DjVu.php | 4 +-- includes/media/Jpeg.php | 2 +- includes/media/MediaTransformOutput.php | 36 +++++++++---------- includes/media/SVG.php | 8 ++--- .../media/TransformationalImageHandler.php | 6 ++-- 7 files changed, 29 insertions(+), 31 deletions(-) diff --git a/includes/filerepo/file/File.php b/includes/filerepo/file/File.php index c1d5573b68..9188cd9140 100644 --- a/includes/filerepo/file/File.php +++ b/includes/filerepo/file/File.php @@ -1018,7 +1018,7 @@ abstract class File implements IDBAccessObject { return $handler->getTransform( $this, $thumbPath, $thumbUrl, $params ); } else { return new MediaTransformError( 'thumbnail_error', - $params['width'], 0, wfMessage( 'thumbnail-dest-create' )->text() ); + $params['width'], 0, wfMessage( 'thumbnail-dest-create' ) ); } } diff --git a/includes/media/Bitmap.php b/includes/media/Bitmap.php index c86eabdec0..ac0564d2e8 100644 --- a/includes/media/Bitmap.php +++ b/includes/media/Bitmap.php @@ -541,7 +541,7 @@ class BitmapHandler extends TransformationalImageHandler { * @param array $params Rotate parameters. * 'rotation' clockwise rotation in degrees, allowed are multiples of 90 * @since 1.21 - * @return bool + * @return bool|MediaTransformError */ public function rotate( $file, $params ) { global $wgImageMagickConvertCommand; diff --git a/includes/media/DjVu.php b/includes/media/DjVu.php index 18f75ece66..a852215ca8 100644 --- a/includes/media/DjVu.php +++ b/includes/media/DjVu.php @@ -170,7 +170,7 @@ class DjVuHandler extends ImageHandler { 'thumbnail_error', $width, $height, - wfMessage( 'thumbnail_dest_directory' )->text() + wfMessage( 'thumbnail_dest_directory' ) ); } @@ -197,7 +197,7 @@ class DjVuHandler extends ImageHandler { return new MediaTransformError( 'thumbnail_error', $params['width'], $params['height'], - wfMessage( 'filemissing' )->text() + wfMessage( 'filemissing' ) ); } diff --git a/includes/media/Jpeg.php b/includes/media/Jpeg.php index b8b6f6c987..6c857a8565 100644 --- a/includes/media/Jpeg.php +++ b/includes/media/Jpeg.php @@ -130,7 +130,7 @@ class JpegHandler extends ExifBitmapHandler { * @param array $params Rotate parameters. * 'rotation' clockwise rotation in degrees, allowed are multiples of 90 * @since 1.21 - * @return bool + * @return bool|MediaTransformError */ public function rotate( $file, $params ) { global $wgJpegTran; diff --git a/includes/media/MediaTransformOutput.php b/includes/media/MediaTransformOutput.php index 46b96745fa..5366c4fa44 100644 --- a/includes/media/MediaTransformOutput.php +++ b/includes/media/MediaTransformOutput.php @@ -439,19 +439,12 @@ class ThumbnailImage extends MediaTransformOutput { * @ingroup Media */ class MediaTransformError extends MediaTransformOutput { - /** @var string HTML formatted version of the error */ - private $htmlMsg; - - /** @var string Plain text formatted version of the error */ - private $textMsg; + /** @var Message */ + private $msg; function __construct( $msg, $width, $height /*, ... */ ) { $args = array_slice( func_get_args(), 3 ); - $htmlArgs = array_map( 'htmlspecialchars', $args ); - $htmlArgs = array_map( 'nl2br', $htmlArgs ); - - $this->htmlMsg = wfMessage( $msg )->rawParams( $htmlArgs )->escaped(); - $this->textMsg = wfMessage( $msg )->rawParams( $htmlArgs )->text(); + $this->msg = wfMessage( $msg )->params( $args ); $this->width = intval( $width ); $this->height = intval( $height ); $this->url = false; @@ -461,16 +454,20 @@ class MediaTransformError extends MediaTransformOutput { function toHtml( $options = [] ) { return "
width}px; height: {$this->height}px; display:inline-block;\">" . - $this->htmlMsg . + $this->getHtmlMsg() . "
"; } function toText() { - return $this->textMsg; + return $this->msg->text(); } function getHtmlMsg() { - return $this->htmlMsg; + return $this->msg->escaped(); + } + + function getMsg() { + return $this->msg; } function isError() { @@ -492,7 +489,8 @@ class TransformParameterError extends MediaTransformError { parent::__construct( 'thumbnail_error', max( isset( $params['width'] ) ? $params['width'] : 0, 120 ), max( isset( $params['height'] ) ? $params['height'] : 0, 120 ), - wfMessage( 'thumbnail_invalid_params' )->text() ); + wfMessage( 'thumbnail_invalid_params' ) + ); } function getHttpStatusCode() { @@ -509,15 +507,15 @@ class TransformParameterError extends MediaTransformError { class TransformTooBigImageAreaError extends MediaTransformError { function __construct( $params, $maxImageArea ) { $msg = wfMessage( 'thumbnail_toobigimagearea' ); + $msg->rawParams( + $msg->getLanguage()->formatComputingNumbers( $maxImageArea, 1000, "size-$1pixel" ) + ); parent::__construct( 'thumbnail_error', max( isset( $params['width'] ) ? $params['width'] : 0, 120 ), max( isset( $params['height'] ) ? $params['height'] : 0, 120 ), - $msg->rawParams( - $msg->getLanguage()->formatComputingNumbers( - $maxImageArea, 1000, "size-$1pixel" ) - )->text() - ); + $msg + ); } function getHttpStatusCode() { diff --git a/includes/media/SVG.php b/includes/media/SVG.php index f3b33ace35..0cea6d899f 100644 --- a/includes/media/SVG.php +++ b/includes/media/SVG.php @@ -178,14 +178,14 @@ class SvgHandler extends ImageHandler { $metadata = $this->unpackMetadata( $image->getMetadata() ); if ( isset( $metadata['error'] ) ) { // sanity check - $err = wfMessage( 'svg-long-error', $metadata['error']['message'] )->text(); + $err = wfMessage( 'svg-long-error', $metadata['error']['message'] ); return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, $err ); } if ( !wfMkdirParents( dirname( $dstPath ), null, __METHOD__ ) ) { return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, - wfMessage( 'thumbnail_dest_directory' )->text() ); + wfMessage( 'thumbnail_dest_directory' ) ); } $srcPath = $image->getLocalRefPath(); @@ -196,7 +196,7 @@ class SvgHandler extends ImageHandler { return new MediaTransformError( 'thumbnail_error', $params['width'], $params['height'], - wfMessage( 'filemissing' )->text() + wfMessage( 'filemissing' ) ); } @@ -219,7 +219,7 @@ class SvgHandler extends ImageHandler { wfHostname(), $lnPath, $srcPath ) ); return new MediaTransformError( 'thumbnail_error', $params['width'], $params['height'], - wfMessage( 'thumbnail-temp-create' )->text() + wfMessage( 'thumbnail-temp-create' ) ); } diff --git a/includes/media/TransformationalImageHandler.php b/includes/media/TransformationalImageHandler.php index e33c27e99d..60aec45729 100644 --- a/includes/media/TransformationalImageHandler.php +++ b/includes/media/TransformationalImageHandler.php @@ -217,7 +217,7 @@ abstract class TransformationalImageHandler extends ImageHandler { return new MediaTransformError( 'thumbnail_error', $scalerParams['clientWidth'], $scalerParams['clientHeight'], - wfMessage( 'filemissing' )->text() + wfMessage( 'filemissing' ) ); } @@ -267,7 +267,7 @@ abstract class TransformationalImageHandler extends ImageHandler { # Thumbnail was zero-byte and had to be removed return new MediaTransformError( 'thumbnail_error', $scalerParams['clientWidth'], $scalerParams['clientHeight'], - wfMessage( 'unknown-error' )->text() + wfMessage( 'unknown-error' ) ); } elseif ( $mto ) { return $mto; @@ -565,7 +565,7 @@ abstract class TransformationalImageHandler extends ImageHandler { * @param array $params Rotate parameters. * 'rotation' clockwise rotation in degrees, allowed are multiples of 90 * @since 1.24 Is non-static. From 1.21 it was static - * @return bool + * @return bool|MediaTransformError */ public function rotate( $file, $params ) { return new MediaTransformError( 'thumbnail_error', 0, 0, -- 2.20.1