package Koha::Plugin::MarcFieldValues; use Modern::Perl; use MARC::Field; use MARC::Record; use base qw(Koha::Plugins::Base); our $VERSION = 1.00; our $metadata = { name => 'MarcFieldValues', author => 'M. de Rooy', class => 'Koha::Plugin::MarcFieldValues', description => 'Convert MARC fields from plain text', date_authored => '2017-08-08', date_updated => '2017-08-08', minimum_version => '16.11', maximum_version => undef, version => $VERSION, input_format => 'MARC field/value pairs in plain text', }; =head1 METHODS =head2 new Create new object =cut sub new { my ( $class, $args ) = @_; $args->{'metadata'} = $metadata; my $self = $class->SUPER::new($args); return $self; } =head2 to_marc Create string of MARC blobs from plain text lines in the form: field [,ind1|,ind2|,subcode] = value Example: 003 = OrgCode 100,a = Author 245,ind2 = 0 245,a = Title =cut sub to_marc { my ( $self, $args ) = @_; # $args->{data} contains text to convert to MARC my $retval = ''; my @records = split /\r?\n\r?\n/, $args->{data}; foreach my $rec ( @records ) { my @lines = split /\r?\n/, $rec; my $marc = MARC::Record->new; my $inds = {}; my $fldcount = 0; foreach my $line ( @lines ) { # each line is of the form field [,ind1|,ind2|,subcode] = value my @temp = split /\s*=\s*/, $line, 2; next if @temp < 2; $temp[0] =~ s/^\s*//; $temp[1] =~ s/\s*$//; my $value = $temp[1]; @temp = split /\s*,\s*/, $temp[0]; if( @temp > 1 && $temp[1] =~ /ind[12]/ ) { $inds->{$temp[0]}->{$temp[1]} = substr($value, 0, 1); next; } $fldcount++; $marc->append_fields( MARC::Field->new( $temp[0], $temp[0] < 10 ? () : ( ( $inds->{$temp[0]} ? $inds->{$temp[0]}->{ind1} // '' : '', $inds->{$temp[0]} ? $inds->{$temp[0]}->{ind2} // '' : ''), substr( $temp[1], 0, 1 ) ), $value, )); } $retval .= $marc->as_usmarc if $fldcount; } return $retval; } 1;