MediaWiki  REL1_24
FormatMetadata Class Reference

Format Image metadata values into a human readable form. More...

Inheritance diagram for FormatMetadata:
Collaboration diagram for FormatMetadata:

List of all members.

Public Member Functions

 collapseContactInfo ($vals)
 Format the contact info field into a single value.
 fetchExtendedMetadata (File $file)
 Get an array of extended metadata.
 flattenArrayReal ($vals, $type= 'ul', $noHtml=false)
 A function to collapse multivalued tags into a single value.
 makeFormattedData ($tags)
 Numbers given by Exif user agents are often magical, that is they should be replaced by a detailed explanation depending on their value which most of the time are plain integers.
 setSingleLanguage ($val)
 Trigger only outputting single language for multilanguage fields.

Static Public Member Functions

static flattenArray ($vals, $type= 'ul', $noHtml=false, $context=false)
 Flatten an array, using the user language for any messages.
static flattenArrayContentLang ($vals, $type= 'ul', $noHtml=false, $context=false)
 Flatten an array, using the content language for any messages.
static getFormattedData ($tags, $context=false)
 Numbers given by Exif user agents are often magical, that is they should be replaced by a detailed explanation depending on their value which most of the time are plain integers.
static getVisibleFields ()
 Get a list of fields that are visible by default.

Protected Member Functions

 getExtendedMetadataFromFile (File $file)
 Get file-based metadata in standardized format.
 getExtendedMetadataFromHook (File $file, array $extendedMetadata, &$maxCacheTime)
 Get additional metadata from hooks in standardized format.
 getPriorityLanguages ()
 Returns a list of languages (first is best) to use when formatting multilang fields, based on user and site preferences.
 resolveMultilangMetadata (&$metadata)
 Takes an array returned by the getExtendedMetadata* functions, and resolves multi-language values in it.
 resolveMultilangValue ($value)
 Turns an XMP-style multilang array into a single value.
 sanitizeArrayForXml (&$arr)
 Makes sure the given array is a valid API response fragment (can be transformed into XML)
 sanitizeKeyForXml ($key)
 Turns a string into a valid XML identifier.

Protected Attributes

bool $singleLang = false
 Only output a single language for multi-language fields.

Private Member Functions

 convertNewsCode ($val)
 Fetch the human readable version of a news code.
 exifMsg ($tag, $val, $arg=null, $arg2=null)
 Convenience function for getFormattedData()
 formatCoords ($coord, $type)
 Format a coordinate value, convert numbers from floating point into degree minute second representation.
 formatFraction ($num)
 Format a rational number, reducing fractions.
 formatNum ($num, $round=false)
 Format a number, convert numbers from fractions into floating point numbers, joins arrays of numbers with commas.
 gcd ($a, $b)
 Calculate the greatest common divisor of two integers.
 langItem ($value, $lang, $default=false, $noHtml=false)
 Helper function for creating lists of translations.

Detailed Description

Format Image metadata values into a human readable form.

Note lots of these messages use the prefix 'exif' even though they may not be exif properties. For example 'exif-ImageDescription' can be the Exif ImageDescription, or it could be the iptc-iim caption property, or it could be the xmp dc:description property. This is because these messages should be independent of how the data is stored, sine the user doesn't care if the description is stored in xmp, exif, etc only that its a description. (Additionally many of these properties are merged together following the MWG standard, such that for example, exif properties override XMP properties that mean the same thing if there is a conflict).

It should perhaps use a prefix like 'metadata' instead, but there is already a large number of messages using the 'exif' prefix.

Since:
1.23 the class extends ContextSource and various formerly-public internal methods are private

Definition at line 49 of file FormatMetadata.php.


Member Function Documentation

Format the contact info field into a single value.

This function might be called from JpegHandler::convertMetadataVersion which is why it is public.

Parameters:
array$valsArray with fields of the ContactInfo struct defined in the IPTC4XMP spec. Or potentially an array with one element that is a free form text value from the older iptc iim 1:118 prop.
Returns:
string HTML-ish looking wikitext
Since:
1.23 no longer static

Definition at line 1455 of file FormatMetadata.php.

Referenced by ExifBitmapHandler\convertMetadataVersion().

FormatMetadata::convertNewsCode ( val) [private]

Fetch the human readable version of a news code.

A news code is an 8 digit code. The first two digits are a general classification, so we just translate that.

Note, leading 0's are significant, so this is a string, not an int.

Parameters:
string$valThe 8 digit news code.
Returns:
string The human readable form

Definition at line 1337 of file FormatMetadata.php.

FormatMetadata::exifMsg ( tag,
val,
arg = null,
arg2 = null 
) [private]

Convenience function for getFormattedData()

Parameters:
string$tagThe tag name to pass on
string$valThe value of the tag
string$argAn argument to pass ($1)
string$arg2A 2nd argument to pass ($2)
Returns:
string The text content of "exif-$tag-$val" message in lower case

Definition at line 1229 of file FormatMetadata.php.

Get an array of extended metadata.

(See the imageinfo API for format.)

Parameters:
File$fileFile to use
Returns:
array [<property name>=""> => ['value' =>

]], or [] on error

Since:
1.23

Definition at line 1594 of file FormatMetadata.php.

static FormatMetadata::flattenArray ( vals,
type = 'ul',
noHtml = false,
context = false 
) [static]

Flatten an array, using the user language for any messages.

Parameters:
array$valsArray of values
string$typeType of array (either lang, ul, ol). lang = language assoc array with keys being the lang code ul = unordered list, ol = ordered list type can also come from the '_type' member of $vals.
bool$noHtmlIf to avoid returning anything resembling HTML. (Ugly hack for backwards compatibility with old MediaWiki).
bool | IContextSource$context
Returns:
string Single value (in wiki-syntax).

Definition at line 1018 of file FormatMetadata.php.

Referenced by FormatMetadataTest\testFlattenArray().

static FormatMetadata::flattenArrayContentLang ( vals,
type = 'ul',
noHtml = false,
context = false 
) [static]

Flatten an array, using the content language for any messages.

Parameters:
array$valsArray of values
string$typeType of array (either lang, ul, ol). lang = language assoc array with keys being the lang code ul = unordered list, ol = ordered list type can also come from the '_type' member of $vals.
bool$noHtmlIf to avoid returning anything resembling HTML. (Ugly hack for backwards compatibility with old MediaWiki).
bool | IContextSource$context
Returns:
string Single value (in wiki-syntax).
Since:
1.23

Definition at line 990 of file FormatMetadata.php.

FormatMetadata::flattenArrayReal ( vals,
type = 'ul',
noHtml = false 
)

A function to collapse multivalued tags into a single value.

This turns an array of (for example) authors into a bulleted list.

This is public on the basis it might be useful outside of this class.

Parameters:
array$valsArray of values
string$typeType of array (either lang, ul, ol). lang = language assoc array with keys being the lang code ul = unordered list, ol = ordered list type can also come from the '_type' member of $vals.
bool$noHtmlIf to avoid returning anything resembling HTML. (Ugly hack for backwards compatibility with old mediawiki).
Returns:
string Single value (in wiki-syntax).
Since:
1.23

Definition at line 1043 of file FormatMetadata.php.

FormatMetadata::formatCoords ( coord,
type 
) [private]

Format a coordinate value, convert numbers from floating point into degree minute second representation.

Parameters:
int$coordDegrees, minutes and seconds
string$typeLatitude or longitude (for if its a NWS or E)
Returns:
mixed A floating point number or whatever we were fed

Definition at line 1412 of file FormatMetadata.php.

FormatMetadata::formatFraction ( num) [private]

Format a rational number, reducing fractions.

Parameters:
mixed$numThe value to format
Returns:
mixed A floating point number or whatever we were fed

Definition at line 1283 of file FormatMetadata.php.

FormatMetadata::formatNum ( num,
round = false 
) [private]

Format a number, convert numbers from fractions into floating point numbers, joins arrays of numbers with commas.

Parameters:
mixed$numThe value to format
float | int | bool$roundDigits to round to or false.
Returns:
mixed A floating point number or whatever we were fed

Definition at line 1247 of file FormatMetadata.php.

FormatMetadata::gcd ( a,
b 
) [private]

Calculate the greatest common divisor of two integers.

Parameters:
int$aNumerator
int$bDenominator
Returns:
int

Definition at line 1305 of file FormatMetadata.php.

Get file-based metadata in standardized format.

Note that for a remote file, this might return metadata supplied by extensions.

Parameters:
File$fileFile to use
Returns:
array [<property name>=""> => ['value' =>

]], or [] on error

Since:
1.23

Definition at line 1649 of file FormatMetadata.php.

FormatMetadata::getExtendedMetadataFromHook ( File file,
array extendedMetadata,
&$  maxCacheTime 
) [protected]

Get additional metadata from hooks in standardized format.

Parameters:
File$fileFile to use
array$extendedMetadata
int$maxCacheTimeHook handlers might use this parameter to override cache time
Returns:
array [<property name>=""> => ['value' =>

]], or [] on error

Since:
1.23

Definition at line 1713 of file FormatMetadata.php.

static FormatMetadata::getFormattedData ( tags,
context = false 
) [static]

Numbers given by Exif user agents are often magical, that is they should be replaced by a detailed explanation depending on their value which most of the time are plain integers.

This function formats Exif (and other metadata) values into human readable form.

This is the usual entry point for this class.

Parameters:
array$tagsThe Exif data to format ( as returned by Exif::getFilteredData() or BitmapMetadataHandler )
bool | IContextSource$contextContext to use (optional)
Returns:
array

Definition at line 79 of file FormatMetadata.php.

Referenced by MediaHandler\formatMetadataHelper().

Returns a list of languages (first is best) to use when formatting multilang fields, based on user and site preferences.

Returns:
array
Since:
1.23

Definition at line 1860 of file FormatMetadata.php.

static FormatMetadata::getVisibleFields ( ) [static]

Get a list of fields that are visible by default.

Returns:
array
Since:
1.23

Definition at line 1573 of file FormatMetadata.php.

Referenced by MediaHandler\visibleMetadataFields().

FormatMetadata::langItem ( value,
lang,
default = false,
noHtml = false 
) [private]

Helper function for creating lists of translations.

Parameters:
string$valueValue (this is not escaped)
string$langLang code of item or false
bool$defaultIf it is default value.
bool$noHtmlIf to avoid html (for back-compat)
Exceptions:
MWException
Returns:
string Language item (Note: despite how this looks, this is treated as wikitext, not as HTML).

Definition at line 1166 of file FormatMetadata.php.

Numbers given by Exif user agents are often magical, that is they should be replaced by a detailed explanation depending on their value which most of the time are plain integers.

This function formats Exif (and other metadata) values into human readable form.

Parameters:
array$tagsThe Exif data to format ( as returned by Exif::getFilteredData() or BitmapMetadataHandler )
Returns:
array
Since:
1.23

Definition at line 99 of file FormatMetadata.php.

FormatMetadata::resolveMultilangMetadata ( &$  metadata) [protected]

Takes an array returned by the getExtendedMetadata* functions, and resolves multi-language values in it.

Parameters:
array$metadata
Since:
1.23

Definition at line 1784 of file FormatMetadata.php.

FormatMetadata::resolveMultilangValue ( value) [protected]

Turns an XMP-style multilang array into a single value.

If the value is not a multilang array, it is returned unchanged. See mediawiki.org/wiki/Manual:File_metadata_handling::Multi-language_array_format

Parameters:
mixed$value
Returns:
mixed Value in best language, null if there were no languages at all
Since:
1.23

Definition at line 1746 of file FormatMetadata.php.

FormatMetadata::sanitizeArrayForXml ( &$  arr) [protected]

Makes sure the given array is a valid API response fragment (can be transformed into XML)

Parameters:
array$arr

Definition at line 1800 of file FormatMetadata.php.

FormatMetadata::sanitizeKeyForXml ( key) [protected]

Turns a string into a valid XML identifier.

Used to ensure that keys of an associative array in the API response do not break the XML formatter.

Parameters:
string$key
Returns:
string
Since:
1.23

Definition at line 1834 of file FormatMetadata.php.

Trigger only outputting single language for multilanguage fields.

Parameters:
bool$val
Since:
1.23

Definition at line 62 of file FormatMetadata.php.

Referenced by ApiQueryImageInfo\getInfo().


Member Data Documentation

bool FormatMetadata::$singleLang = false [protected]

Only output a single language for multi-language fields.

Since:
1.23

Definition at line 54 of file FormatMetadata.php.


The documentation for this class was generated from the following file: