Merge "Added a separate error message for mkdir failures"
[lhc/web/wiklou.git] / includes / media / SVG.php
index 457137b..1bc722c 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Media
  */
+use Wikimedia\ScopedCallback;
 
 /**
  * Handler for SVG images.
@@ -33,12 +34,12 @@ class SvgHandler extends ImageHandler {
         *  to the commonly used exif tags. This allows messages
         *  to be reused, and consistent tag names for {{#formatmetadata:..}}
         */
-       private static $metaConversion = array(
+       private static $metaConversion = [
                'originalwidth' => 'ImageWidth',
                'originalheight' => 'ImageLength',
                'description' => 'ImageDescription',
                'title' => 'ObjectName',
-       );
+       ];
 
        function isEnabled() {
                global $wgSVGConverters, $wgSVGConverter;
@@ -51,7 +52,7 @@ class SvgHandler extends ImageHandler {
                }
        }
 
-       function mustRender( $file ) {
+       public function mustRender( $file ) {
                return true;
        }
 
@@ -90,7 +91,7 @@ class SvgHandler extends ImageHandler {
         */
        public function getAvailableLanguages( File $file ) {
                $metadata = $file->getMetadata();
-               $langList = array();
+               $langList = [];
                if ( $metadata ) {
                        $metadata = $this->unpackMetadata( $metadata );
                        if ( isset( $metadata['translations'] ) ) {
@@ -177,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();
@@ -195,7 +196,7 @@ class SvgHandler extends ImageHandler {
 
                        return new MediaTransformError( 'thumbnail_error',
                                $params['width'], $params['height'],
-                               wfMessage( 'filemissing' )->text()
+                               wfMessage( 'filemissing' )
                        );
                }
 
@@ -228,7 +229,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' )
                        );
                }
 
@@ -259,7 +260,7 @@ class SvgHandler extends ImageHandler {
                        if ( is_array( $wgSVGConverters[$wgSVGConverter] ) ) {
                                // This is a PHP callable
                                $func = $wgSVGConverters[$wgSVGConverter][0];
-                               $args = array_merge( array( $srcPath, $dstPath, $width, $height, $lang ),
+                               $args = array_merge( [ $srcPath, $dstPath, $width, $height, $lang ],
                                        array_slice( $wgSVGConverters[$wgSVGConverter], 1 ) );
                                if ( !is_callable( $func ) ) {
                                        throw new MWException( "$func is not callable" );
@@ -269,16 +270,16 @@ class SvgHandler extends ImageHandler {
                        } else {
                                // External command
                                $cmd = str_replace(
-                                       array( '$path/', '$width', '$height', '$input', '$output' ),
-                                       array( $wgSVGConverterPath ? wfEscapeShellArg( "$wgSVGConverterPath/" ) : "",
+                                       [ '$path/', '$width', '$height', '$input', '$output' ],
+                                       [ $wgSVGConverterPath ? wfEscapeShellArg( "$wgSVGConverterPath/" ) : "",
                                                intval( $width ),
                                                intval( $height ),
                                                wfEscapeShellArg( $srcPath ),
-                                               wfEscapeShellArg( $dstPath ) ),
+                                               wfEscapeShellArg( $dstPath ) ],
                                        $wgSVGConverters[$wgSVGConverter]
                                );
 
-                               $env = array();
+                               $env = [];
                                if ( $lang !== false ) {
                                        $env['LANG'] = $lang;
                                }
@@ -311,27 +312,27 @@ class SvgHandler extends ImageHandler {
        }
 
        /**
-        * @param File $file
+        * @param File|FSFile $file
         * @param string $path Unused
         * @param bool|array $metadata
         * @return array
         */
        function getImageSize( $file, $path, $metadata = false ) {
-               if ( $metadata === false ) {
+               if ( $metadata === false && $file instanceof File ) {
                        $metadata = $file->getMetadata();
                }
                $metadata = $this->unpackMetadata( $metadata );
 
                if ( isset( $metadata['width'] ) && isset( $metadata['height'] ) ) {
-                       return array( $metadata['width'], $metadata['height'], 'SVG',
-                               "width=\"{$metadata['width']}\" height=\"{$metadata['height']}\"" );
+                       return [ $metadata['width'], $metadata['height'], 'SVG',
+                               "width=\"{$metadata['width']}\" height=\"{$metadata['height']}\"" ];
                } else { // error
-                       return array( 0, 0, 'SVG', "width=\"0\" height=\"0\"" );
+                       return [ 0, 0, 'SVG', "width=\"0\" height=\"0\"" ];
                }
        }
 
        function getThumbType( $ext, $mime, $params = null ) {
-               return array( 'png', 'image/png' );
+               return [ 'png', 'image/png' ];
        }
 
        /**
@@ -365,20 +366,20 @@ class SvgHandler extends ImageHandler {
        }
 
        /**
-        * @param File $file
+        * @param File|FSFile $file
         * @param string $filename
         * @return string Serialised metadata
         */
        function getMetadata( $file, $filename ) {
-               $metadata = array( 'version' => self::SVG_METADATA_VERSION );
+               $metadata = [ 'version' => self::SVG_METADATA_VERSION ];
                try {
                        $metadata += SVGMetadataExtractor::getMetadata( $filename );
                } catch ( Exception $e ) { // @todo SVG specific exceptions
                        // File not found, broken, etc.
-                       $metadata['error'] = array(
+                       $metadata['error'] = [
                                'message' => $e->getMessage(),
                                'code' => $e->getCode()
-                       );
+                       ];
                        wfDebug( __METHOD__ . ': ' . $e->getMessage() . "\n" );
                }
 
@@ -414,7 +415,7 @@ class SvgHandler extends ImageHandler {
        }
 
        protected function visibleMetadataFields() {
-               $fields = array( 'objectname', 'imagedescription' );
+               $fields = [ 'objectname', 'imagedescription' ];
 
                return $fields;
        }
@@ -425,10 +426,10 @@ class SvgHandler extends ImageHandler {
         * @return array|bool
         */
        function formatMetadata( $file, $context = false ) {
-               $result = array(
-                       'visible' => array(),
-                       'collapsed' => array()
-               );
+               $result = [
+                       'visible' => [],
+                       'collapsed' => []
+               ];
                $metadata = $file->getMetadata();
                if ( !$metadata ) {
                        return false;
@@ -472,13 +473,13 @@ class SvgHandler extends ImageHandler {
         * @param mixed $value Parameter value
         * @return bool Validity
         */
-       function validateParam( $name, $value ) {
-               if ( in_array( $name, array( 'width', 'height' ) ) ) {
+       public function validateParam( $name, $value ) {
+               if ( in_array( $name, [ 'width', 'height' ] ) ) {
                        // Reject negative heights, widths
                        return ( $value > 0 );
                } elseif ( $name == 'lang' ) {
                        // Validate $code
-                       if ( $value === '' || !Language::isValidBuiltinCode( $value ) ) {
+                       if ( $value === '' || !Language::isValidBuiltInCode( $value ) ) {
                                wfDebug( "Invalid user language code\n" );
 
                                return false;
@@ -495,7 +496,7 @@ class SvgHandler extends ImageHandler {
         * @param array $params Name=>value pairs of parameters
         * @return string Filename to use
         */
-       function makeParamString( $params ) {
+       public function makeParamString( $params ) {
                $lang = '';
                if ( isset( $params['lang'] ) && $params['lang'] !== 'en' ) {
                        $params['lang'] = strtolower( $params['lang'] );
@@ -508,19 +509,19 @@ class SvgHandler extends ImageHandler {
                return "$lang{$params['width']}px";
        }
 
-       function parseParamString( $str ) {
+       public function parseParamString( $str ) {
                $m = false;
                if ( preg_match( '/^lang([a-z]+(?:-[a-z]+)*)-(\d+)px$/', $str, $m ) ) {
-                       return array( 'width' => array_pop( $m ), 'lang' => $m[1] );
+                       return [ 'width' => array_pop( $m ), 'lang' => $m[1] ];
                } elseif ( preg_match( '/^(\d+)px$/', $str, $m ) ) {
-                       return array( 'width' => $m[1], 'lang' => 'en' );
+                       return [ 'width' => $m[1], 'lang' => 'en' ];
                } else {
                        return false;
                }
        }
 
-       function getParamMap() {
-               return array( 'img_lang' => 'lang', 'img_width' => 'width' );
+       public function getParamMap() {
+               return [ 'img_lang' => 'lang', 'img_width' => 'width' ];
        }
 
        /**
@@ -528,7 +529,7 @@ class SvgHandler extends ImageHandler {
         * @return array
         */
        function getScriptParams( $params ) {
-               $scriptParams = array( 'width' => $params['width'] );
+               $scriptParams = [ 'width' => $params['width'] ];
                if ( isset( $params['lang'] ) ) {
                        $scriptParams['lang'] = $params['lang'];
                }
@@ -539,13 +540,13 @@ class SvgHandler extends ImageHandler {
        public function getCommonMetaArray( File $file ) {
                $metadata = $file->getMetadata();
                if ( !$metadata ) {
-                       return array();
+                       return [];
                }
                $metadata = $this->unpackMetadata( $metadata );
                if ( !$metadata || isset( $metadata['error'] ) ) {
-                       return array();
+                       return [];
                }
-               $stdMetadata = array();
+               $stdMetadata = [];
                foreach ( $metadata as $name => $value ) {
                        $tag = strtolower( $name );
                        if ( $tag === 'originalwidth' || $tag === 'originalheight' ) {