Biblio.pm - restored after duplicate application of

Signed-off-by: Chris Cormack <crc@liblime.com>
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
This commit is contained in:
Galen Charlton 2007-10-30 19:07:27 -05:00 committed by Joshua Ferraro
parent 5841954b36
commit b5e18fe431

View file

@ -26,9 +26,6 @@ use MARC::Record;
use MARC::File::USMARC;
use MARC::File::XML;
use ZOOM;
use Data::Dumper;
use C4::Koha;
use C4::Dates qw/format_date/;
use C4::Log; # logaction
@ -2359,58 +2356,70 @@ sub TransformHtmlToMarc {
sub TransformMarcToKoha {
my ( $dbh, $record, $frameworkcode, $table ) = @_;
my $result;
# sometimes we only want to return the items data
# hmm this was just added, ill tidy this up too later
if ($table eq 'items') {
my $sth = $dbh->prepare("SHOW COLUMNS FROM items");
$sth->execute();
while ( (my $field) = $sth->fetchrow ) {
$result = &TransformMarcToKohaOneField( "items", $field, $record, $result, $frameworkcode );
}
return $result;
# sometimes we only want to return the items data
if ($table eq 'items') {
my $sth = $dbh->prepare("SHOW COLUMNS FROM items");
$sth->execute();
while ( (my $field) = $sth->fetchrow ) {
my $value = get_koha_field_from_marc($table,$field,$record,$frameworkcode);
my $key = _disambiguate($table, $field);
if ($result->{$key}) {
$result->{$key} .= " | " . $value;
} else {
$result->{$key} = $value;
}
}
return $result;
} else {
my @tables = ('biblio','biblioitems','items');
foreach my $table (@tables){
my $sth2 = $dbh->prepare("SHOW COLUMNS from $table");
$sth2->execute;
while (my ($field) = $sth2->fetchrow){
# FIXME use of _disambiguate is a temporary hack
# $result->{_disambiguate($table, $field)} = get_koha_field_from_marc($table,$field,$record,$frameworkcode);
my $value = get_koha_field_from_marc($table,$field,$record,$frameworkcode);
my $key = _disambiguate($table, $field);
if ($result->{$key}) {
# FIXME - hack to not bring in duplicates of the same value
unless (($key eq "biblionumber" or $key eq "biblioitemnumber") and ($value eq "")) {
$result->{$key} .= " | " . $value;
}
} else {
$result->{$key} = $value;
}
}
$sth2->finish();
}
# modify copyrightdate to keep only the 1st year found
my $temp = $result->{'copyrightdate'};
$temp =~ m/c(\d\d\d\d)/; # search cYYYY first
if ( $1 > 0 ) {
$result->{'copyrightdate'} = $1;
}
else { # if no cYYYY, get the 1st date.
$temp =~ m/(\d\d\d\d)/;
$result->{'copyrightdate'} = $1;
}
# modify publicationyear to keep only the 1st year found
$temp = $result->{'publicationyear'};
$temp =~ m/c(\d\d\d\d)/; # search cYYYY first
if ( $1 > 0 ) {
$result->{'publicationyear'} = $1;
}
else { # if no cYYYY, get the 1st date.
$temp =~ m/(\d\d\d\d)/;
$result->{'publicationyear'} = $1;
}
return $result;
}
else {
my @tables = ('biblio','biblioitems','items');
foreach my $table (@tables){
my $sth2 = $dbh->prepare("SHOW COLUMNS from $table");
$sth2->execute;
while (my ($field) = $sth2->fetchrow){
# id like to do this, it will break lots of other places, but doing it will stop the namespace clashes
# $result->{$table.'.'.$field} = get_kohafield_from_marc($table,$field,$record,$frameworkcode);
# so for now doing this\
$result = TransformMarcToKohaOneField( $table, $field, $record, $result, $frameworkcode );
}
}
# not sure about this stuff, will revisit
#
# modify copyrightdate to keep only the 1st year found
my $temp = $result->{'copyrightdate'};
$temp =~ m/c(\d\d\d\d)/; # search cYYYY first
if ( $1 > 0 ) {
$result->{'copyrightdate'} = $1;
}
else { # if no cYYYY, get the 1st date.
$temp =~ m/(\d\d\d\d)/;
$result->{'copyrightdate'} = $1;
}
# modify publicationyear to keep only the 1st year found
$temp = $result->{'publicationyear'};
$temp =~ m/c(\d\d\d\d)/; # search cYYYY first
if ( $1 > 0 ) {
$result->{'publicationyear'} = $1;
}
else { # if no cYYYY, get the 1st date.
$temp =~ m/(\d\d\d\d)/;
$result->{'publicationyear'} = $1;
}
return $result;
}
}
=head2 _disambiguate
=over 4
@ -2454,12 +2463,23 @@ sub _disambiguate {
}
# sub to replace TransformMarcToKohaOneField
=head2 get_koha_field_from_marc
sub get_kohafield_from_marc {
my ($koha_table,$koha_field,$record,$frameworkcode) = @_;
my ( $tagfield, $subfield ) = GetMarcFromKohaField( $koha_table.'.'.$koha_field, $frameworkcode );
my $kohafield;
=over 4
$result->{_disambiguate($table, $field)} = get_koha_field_from_marc($table,$field,$record,$frameworkcode);
Internal function to map data from the MARC record to a specific non-MARC field.
FIXME: this is meant to replace TransformMarcToKohaOneField after more testing.
=back
=cut
sub get_koha_field_from_marc {
my ($koha_table,$koha_column,$record,$frameworkcode) = @_;
my ( $tagfield, $subfield ) = GetMarcFromKohaField( $koha_table.'.'.$koha_column, $frameworkcode );
my $kohafield;
foreach my $field ( $record->field($tagfield) ) {
if ( $field->tag() < 10 ) {
if ( $kohafield ) {
@ -2488,7 +2508,7 @@ sub get_kohafield_from_marc {
}
}
return $kohafield;
}
}
=head2 TransformMarcToKohaOneField