Ejemplo n.º 1
0
 /**
  * @param Records $records
  *
  * @return Collection
  */
 private function convertRecord(Records $records)
 {
     $records = array_map(function (MarcRecord $item) {
         $record = new Record($item->getLeader());
         $fields = $item->getFields();
         foreach ($fields as $field) {
             if ($field instanceof \File_MARC_Control_Field) {
                 $record->setControlField($this->convertControlField($field));
             } elseif ($field instanceof \File_MARC_Data_Field) {
                 $record->addDataField($this->convertDataField($field));
             } else {
                 throw new \InvalidArgumentException('Unknown Field Type');
             }
         }
         return $record;
     }, iterator_to_array($records));
     $collection = new Collection($records);
     return $collection;
 }
Ejemplo n.º 2
0
 private function convertRecord(Record $record)
 {
     $records = $record->toArray();
     $offset = 0;
     $fields = array_merge($records['subfield'], $records['datafield']);
     $content = [];
     $directory = [];
     foreach ($fields as $field) {
         $result = $field instanceof ControlField ? $this->convertControlField($field) : $this->convertDataField($field);
         $content[] = $result;
         $length = strlen($result);
         $entry = sprintf("%03s%04d%05d", $field->getTag(), $length, $offset);
         $directory[] = $entry;
         $offset += $length;
     }
     $base = File_MARC::LEADER_LEN + count($directory) * File_MARC::DIRECTORY_ENTRY_LEN + 1;
     $total = $base + $offset + 1;
     $record->setLeaderLength($total, $base);
     return $record->getLeader() . implode($directory) . File_MARC::END_OF_FIELD . implode($content) . File_MARC::END_OF_RECORD;
 }