* @file
* @ingroup Media
*/
+use Wikimedia\ScopedCallback;
/**
* Handler for SVG images.
* 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;
}
}
- function mustRender( $file ) {
+ public function mustRender( $file ) {
return true;
}
*/
public function getAvailableLanguages( File $file ) {
$metadata = $file->getMetadata();
- $langList = array();
+ $langList = [];
if ( $metadata ) {
$metadata = $this->unpackMetadata( $metadata );
if ( isset( $metadata['translations'] ) ) {
$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();
return new MediaTransformError( 'thumbnail_error',
$params['width'], $params['height'],
- wfMessage( 'filemissing' )->text()
+ wfMessage( 'filemissing' )
);
}
// https://git.gnome.org/browse/librsvg/commit/?id=f01aded72c38f0e18bc7ff67dee800e380251c8e
$tmpDir = wfTempDir() . '/svg_' . wfRandomString( 24 );
$lnPath = "$tmpDir/" . basename( $srcPath );
- $ok = mkdir( $tmpDir, 0771 ) && symlink( $srcPath, $lnPath );
+ $ok = mkdir( $tmpDir, 0771 );
+ if ( !$ok ) {
+ wfDebugLog( 'thumbnail',
+ sprintf( 'Thumbnail failed on %s: could not create temporary directory %s',
+ wfHostname(), $tmpDir ) );
+ return new MediaTransformError( 'thumbnail_error',
+ $params['width'], $params['height'],
+ wfMessage( 'thumbnail-temp-create' )->text()
+ );
+ }
+ $ok = symlink( $srcPath, $lnPath );
/** @noinspection PhpUnusedLocalVariableInspection */
$cleaner = new ScopedCallback( function () use ( $tmpDir, $lnPath ) {
MediaWiki\suppressWarnings();
wfHostname(), $lnPath, $srcPath ) );
return new MediaTransformError( 'thumbnail_error',
$params['width'], $params['height'],
- wfMessage( 'thumbnail-temp-create' )->text()
+ wfMessage( 'thumbnail-temp-create' )
);
}
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" );
} 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;
}
}
/**
- * @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' ];
}
/**
}
/**
- * @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" );
}
}
protected function visibleMetadataFields() {
- $fields = array( 'objectname', 'imagedescription' );
+ $fields = [ 'objectname', 'imagedescription' ];
return $fields;
}
* @return array|bool
*/
function formatMetadata( $file, $context = false ) {
- $result = array(
- 'visible' => array(),
- 'collapsed' => array()
- );
+ $result = [
+ 'visible' => [],
+ 'collapsed' => []
+ ];
$metadata = $file->getMetadata();
if ( !$metadata ) {
return false;
* @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;
* @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'] );
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' ];
}
/**
* @return array
*/
function getScriptParams( $params ) {
- $scriptParams = array( 'width' => $params['width'] );
+ $scriptParams = [ 'width' => $params['width'] ];
if ( isset( $params['lang'] ) ) {
$scriptParams['lang'] = $params['lang'];
}
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' ) {