30 public static function parse( $rawData ) {
31 $parsed = iptcparse( $rawData );
33 if ( !is_array( $parsed ) ) {
39 if ( isset( $parsed[
'1#090'] ) && isset( $parsed[
'1#090'][0] ) ) {
47 unset( $parsed[
'1#090'] );
50 foreach ( $parsed as $tag => $val ) {
51 if ( isset( $val[0] ) && trim( $val[0] ) ==
'' ) {
52 wfDebugLog(
'iptc',
"IPTC tag $tag had only whitespace as its value." );
57 $data[
'ImageDescription'] = self::convIPTC( $val, $c );
60 $data[
'Copyright'] = self::convIPTC( $val, $c );
70 $bylines = self::convIPTC( $val, $c );
71 if ( isset( $parsed[
'2#085'] ) ) {
72 $titles = self::convIPTC( $parsed[
'2#085'], $c );
77 $titleCount = count( $titles );
78 for ( $i = 0; $i < $titleCount; $i++ ) {
79 if ( isset( $bylines[$i] ) ) {
82 $bylines[$i] = $titles[$i] .
', ' . $bylines[$i];
85 $data[
'Artist'] = $bylines;
88 $data[
'Keywords'] = self::convIPTC( $val, $c );
91 $data[
'CountryDest'] = self::convIPTC( $val, $c );
94 $data[
'ProvinceOrStateDest'] = self::convIPTC( $val, $c );
97 $data[
'CityDest'] = self::convIPTC( $val, $c );
100 $data[
'SublocationDest'] = self::convIPTC( $val, $c );
103 $data[
'ObjectName'] = self::convIPTC( $val, $c );
106 $data[
'SpecialInstructions'] = self::convIPTC( $val, $c );
109 $data[
'Headline'] = self::convIPTC( $val, $c );
114 $data[
'Credit'] = self::convIPTC( $val, $c );
120 $data[
'Source'] = self::convIPTC( $val, $c );
124 $data[
'EditStatus'] = self::convIPTC( $val, $c );
127 $data[
'iimCategory'] = self::convIPTC( $val, $c );
130 $data[
'iimSupplementalCategory'] = self::convIPTC( $val, $c );
133 $data[
'Urgency'] = self::convIPTC( $val, $c );
138 $data[
'FixtureIdentifier'] = self::convIPTC( $val, $c );
144 $data[
'LocationDestCode'] = self::convIPTC( $val, $c );
149 $data[
'LocationDest'] = self::convIPTC( $val, $c );
155 $software = self::convIPTC( $val, $c );
157 if ( count( $software ) !== 1 ) {
161 wfDebugLog(
'iptc',
'IPTC: Wrong count on 2:65 Software field' );
165 if ( isset( $parsed[
'2#070'] ) ) {
167 $softwareVersion = self::convIPTC( $parsed[
'2#070'], $c );
168 unset( $parsed[
'2#070'] );
169 $data[
'Software'] = [ [ $software[0], $softwareVersion[0] ] ];
171 $data[
'Software'] = $software;
177 $data[
'ObjectCycle'] = self::convIPTC( $val, $c );
185 $data[
'CountryCodeDest'] = self::convIPTC( $val, $c );
192 $data[
'OriginalTransmissionRef'] = self::convIPTC( $val, $c );
195 $data[
'Contact'] = self::convIPTC( $val, $c );
202 $data[
'Writer'] = self::convIPTC( $val, $c );
205 $data[
'LanguageCode'] = self::convIPTC( $val, $c );
215 $time = $parsed[
'2#060'] ?? [];
216 $timestamp = self::timeHelper( $val, $time, $c );
218 $data[
'DateTimeOriginal'] = $timestamp;
225 $time = $parsed[
'2#063'] ?? [];
226 $timestamp = self::timeHelper( $val, $time, $c );
228 $data[
'DateTimeDigitized'] = $timestamp;
234 $time = $parsed[
'2#035'] ?? [];
235 $timestamp = self::timeHelper( $val, $time, $c );
237 $data[
'DateTimeReleased'] = $timestamp;
243 $time = $parsed[
'2#038'] ?? [];
244 $timestamp = self::timeHelper( $val, $time, $c );
246 $data[
'DateTimeExpires'] = $timestamp;
254 if ( strlen( $val[0] ) === 2 ) {
256 $versionValue = ord( substr( $val[0], 0, 1 ) ) * 256;
257 $versionValue += ord( substr( $val[0], 1, 1 ) );
258 $data[
'iimVersion'] = $versionValue;
272 $con = self::convIPTC( $val, $c );
273 if ( strlen( $con[0] ) < 5 ) {
279 $extracted = substr( $con[0], 4 );
280 $data[
'IntellectualGenre'] = $extracted;
288 $codes = self::convIPTC( $val, $c );
289 foreach ( $codes as $ic ) {
290 $fields = explode(
':', $ic, 3 );
292 if ( count( $fields ) < 2 || $fields[0] !==
'IPTC' ) {
294 .
'Invalid 2:12 - ' . $ic );
297 $data[
'SubjectNewsCode'] = $fields[1];
316 wfDebugLog(
'iptc',
"Unsupported iptc tag: $tag. Value: " . implode(
',', $val ) );