Ignore:
Timestamp:
Oct 26, 2010, 10:48:08 AM (14 years ago)
Author:
grum
Message:

Fix many bugs
bug:1894, bug:1898, bug:1911, bug:1863, bug:1955, bug:1956, bug:1925

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/AMetaData/JpegMetaData/Readers/IptcReader.class.php

    r6949 r7399  
    217217      /* for each entries, convert value to human readable tag value
    218218       *
    219        * build a special 'keywords' tag made as an array from all iptc 'keywords' (0x0219) tags found
     219       * repeatable values are stored in arrays
     220       *
     221       * for Subject Reference tags (0x020C), made derived tags (0x020Cnn)
    220222       */
    221       $keywordsTag=null;
     223      $repeatableTags=array();
    222224      foreach($this->entries as $key => $tag)
    223225      {
    224226        $this->setTagProperties($tag);
    225         if($tag->getId()==0x0219)
    226         {
    227           if(is_null($keywordsTag))
    228           {
    229             $keywordsTag=new Tag(
    230               0x0219,
    231               array($tag->getValue()),
    232               $tag->getName(),
    233               array($tag->getLabel()),
    234               "",
    235               $tag->isKnown(),
    236               $tag->isImplemented(),
    237               $tag->isTranslatable(),
    238               $tag->getSchema()
    239             );
    240           }
    241           else
    242           {
    243             $keywordsTag->setValue(array_merge($keywordsTag->getValue(), array($tag->getValue())));
    244             $keywordsTag->setLabel(array_merge($keywordsTag->getLabel(), array($tag->getLabel())));
    245           }
    246         }
    247       }
    248       if(!is_null($keywordsTag))
     227
     228        $list=array();
     229
     230        if($tag->getId()==0x020C)
     231        {
     232          $tmpValues=explode(':', $tag->getValue());
     233          $tmpLabels=explode(':', $tag->getLabel());
     234
     235          $list=array(
     236            array(
     237              'id' => 0x020C,
     238              'value' => $tag->getValue(),
     239              'label' => $tag->getLabel(),
     240            ),
     241            array(
     242              'id' => 0x020C00,
     243              'value' => isset($tmpValues[0])?$tmpValues[0]:'',
     244              'label' => isset($tmpLabels[0])?$tmpLabels[0]:'',
     245            ),
     246            array(
     247              'id' => 0x020C01,
     248              'value' => isset($tmpValues[1])?$tmpValues[1]:'',
     249              'label' => isset($tmpLabels[1])?$tmpLabels[1]:'',
     250            ),
     251            array(
     252              'id' => 0x020C02,
     253              'value' => isset($tmpValues[2])?$tmpValues[2]:'',
     254              'label' => isset($tmpLabels[2])?$tmpLabels[2]:'',
     255            ),
     256            array(
     257              'id' => 0x020C03,
     258              'value' => isset($tmpValues[3])?$tmpValues[3]:'',
     259              'label' => isset($tmpLabels[3])?$tmpLabels[3]:'',
     260            ),
     261            array(
     262              'id' => 0x020C04,
     263              'value' => isset($tmpValues[4])?$tmpValues[4]:'',
     264              'label' => isset($tmpLabels[4])?$tmpLabels[4]:'',
     265            )
     266          );
     267        }
     268        else
     269        {
     270          $list=array(
     271            array(
     272              'id' => $tag->getId(),
     273              'value' => $tag->getValue(),
     274              'label' => $tag->getLabel(),
     275            )
     276          );
     277        }
     278
     279
     280        foreach($list as $tagItem)
     281        {
     282          $tagDef=$this->tagDef->getTagById($tagItem['id']);
     283
     284          if($tagDef['repeatable'])
     285          {
     286            if(!array_key_exists($tagItem['id'], $repeatableTags))
     287            {
     288              $repeatableTags[$tagItem['id']]=new Tag(
     289                $tagItem['id'],
     290                array($tagItem['value']),
     291                $tagDef['tagName'],
     292                array($tagItem['label']),
     293                "",
     294                $tag->isKnown(),
     295                $tagDef['implemented'],
     296                $tagDef['translatable'],
     297                $tag->getSchema()
     298              );
     299            }
     300            else
     301            {
     302              $repeatableTags[$tagItem['id']]->setValue(array_merge($repeatableTags[$tagItem['id']]->getValue(), array($tagItem['value'])));
     303              $repeatableTags[$tagItem['id']]->setLabel(array_merge($repeatableTags[$tagItem['id']]->getLabel(), array($tagItem['label'])));
     304            }
     305          }
     306          unset($tagDef);
     307        }
     308        unset($tagId);
     309      }
     310      foreach($repeatableTags as $key => $tag)
    249311      {
    250312        /*
    251313         * IPTC 'keywords' is stored like XMP 'xmp.dc:subject' (as a 'seq')
    252314         */
    253         $keywordsTag->setValue(
     315        $repeatableTags[$key]->setValue(
    254316          array(
    255317            'type' => 'seq',
    256             'values' => $keywordsTag->getValue()
     318            'values' => $repeatableTags[$key]->getValue()
    257319          )
    258320        );
    259321
    260         $keywordsTag->setLabel(
     322        $repeatableTags[$key]->setLabel(
    261323          array(
    262324            'type' => 'seq',
    263             'values' => $keywordsTag->getLabel()
     325            'values' => $repeatableTags[$key]->getLabel()
    264326          )
    265327        );
    266         $this->entries[]=$keywordsTag;
    267         unset($keywordsTag);
    268       }
     328        $this->entries[]=$repeatableTags[$key];
     329        unset($repeatableTags[$key]);
     330      }
     331      unset($repeatableTags);
    269332    }
    270333
     
    330393        case 0x0205: // 2:05  - Title
    331394        case 0x0207: // 2:07  - Edit Status
     395        case 0x020C: // 2:12 - Subject Reference
    332396        case 0x020F: // 2:15  - Category
    333397        case 0x0214: // 2:20  - Supplemental Category
     
    359423        case 0x0114: // 1:20  - File Format
    360424          $tag=$this->tagDef->getTagById(0x0114);
    361           $returned=$tag['tagValues.special'][ConvertData::toUShort($values, BYTE_ORDER_BIG_ENDIAN)];
     425          $tmpValue=ConvertData::toUShort($values, BYTE_ORDER_BIG_ENDIAN);
     426          if(array_key_exists($tmpValue, $tag['tagValues.special']))
     427          {
     428            $returned=$tag['tagValues.special'][$tmpValue];
     429          }
     430          else
     431          {
     432            $returned='Unknown file format : '.ConvertData::toHexDump($tmpValue, ByteType::USHORT);
     433          }
    362434          unset($tag);
    363435          break;
Note: See TracChangeset for help on using the changeset viewer.