<?php
/**
+ * Exif metadata reader
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
$this->makeFlatExifTags();
$this->debugFile( $this->basename, __FUNCTION__, true );
- wfSuppressWarnings();
- $data = exif_read_data( $this->file );
- wfRestoreWarnings();
+ if( function_exists( 'exif_read_data' ) ) {
+ wfSuppressWarnings();
+ $data = exif_read_data( $this->file );
+ wfRestoreWarnings();
+ } else {
+ throw new MWException( "Internal error: exif_read_data not present. \$wgShowEXIF may be incorrectly set or not checked by an extension." );
+ }
/**
* exif_read_data() will return false on invalid input, such as
* when somebody uploads a file called something.jpeg
* @param $fname String:
* @param $action Mixed: , default NULL.
*/
- function debug( $in, $fname, $action = NULL ) {
+ function debug( $in, $fname, $action = null ) {
if ( !$this->log ) {
return;
}
* @param $exif Array: the Exif data to format ( as returned by
* Exif::getFilteredData() )
*/
- function FormatExif( $exif ) {
+ function __construct( $exif ) {
$this->mExif = $exif;
}
$this->formatNum( $val ) );
break;
+ // Do not transform fields with pure text.
+ // For some languages the formatNum() conversion results to wrong output like
+ // foo,bar@example,com or foo٫bar@example٫com
+ case 'ImageDescription':
+ case 'Artist':
+ case 'Copyright':
+ $tags[$tag] = htmlspecialchars( $val );
+ break;
default:
$tags[$tag] = $this->formatNum( $val );
break;
* @return mixed A floating point number or whatever we were fed
*/
function formatNum( $num ) {
+ global $wgLang;
+
$m = array();
if ( preg_match( '/^(\d+)\/(\d+)$/', $num, $m ) )
- return $m[2] != 0 ? $m[1] / $m[2] : $num;
+ return $wgLang->formatNum( $m[2] != 0 ? $m[1] / $m[2] : $num );
else
- return $num;
+ return $wgLang->formatNum( $num );
}
/**
$gcd = $this->gcd( $numerator, $denominator );
if( $gcd != 0 ) {
// 0 shouldn't happen! ;)
- return $numerator / $gcd . '/' . $denominator / $gcd;
+ return $this->formatNum( $numerator / $gcd ) . '/' . $this->formatNum( $denominator / $gcd );
}
}
return $this->formatNum( $num );
return $a;
}
}
-
-/**
- * MW 1.6 compatibility
- */
-define( 'MW_EXIF_BYTE', Exif::BYTE );
-define( 'MW_EXIF_ASCII', Exif::ASCII );
-define( 'MW_EXIF_SHORT', Exif::SHORT );
-define( 'MW_EXIF_LONG', Exif::LONG );
-define( 'MW_EXIF_RATIONAL', Exif::RATIONAL );
-define( 'MW_EXIF_UNDEFINED', Exif::UNDEFINED );
-define( 'MW_EXIF_SLONG', Exif::SLONG );
-define( 'MW_EXIF_SRATIONAL', Exif::SRATIONAL );