From fa480ea4f3e9a8f9db32d9fe06399766cf02ff84 Mon Sep 17 00:00:00 2001
From: Galen Charlton
Date: Mon, 12 Nov 2007 17:13:43 -0600
Subject: [PATCH] various authorities fixes
* improve generation of summaries for MARC21 authorities
* fix search syntax for link to display bibs linked to a given authority
* in addbiblio.pl's BiblioAddAuthorities, check all headings, not just the first of each tag
Signed-off-by: Chris Cormack
Signed-off-by: Joshua Ferraro
---
C4/AuthoritiesMarc.pm | 20 +++++++++++++------
cataloguing/addbiblio.pl | 16 +++++++--------
.../modules/authorities/searchresultlist.tmpl | 2 +-
3 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm
index 65cede5b44..92c7fafe67 100644
--- a/C4/AuthoritiesMarc.pm
+++ b/C4/AuthoritiesMarc.pm
@@ -791,7 +791,12 @@ sub BuildSummary{
my @fields = $record->fields();
my $reported_tag;
# if the library has a summary defined, use it. Otherwise, build a standard one
- if ($summary) {
+ # FIXME - it appears that the summary field in the authority frameworks
+ # can work as a display template. However, this doesn't
+ # suit the MARC21 version, so for now the "templating"
+ # feature will be enabled only for UNIMARC for backwards
+ # compatibility.
+ if ($summary and C4::Context->preference('marcflavour') eq 'UNIMARC') {
my @fields = $record->fields();
# $reported_tag = '$9'.$result[$counter];
foreach my $field (@fields) {
@@ -868,7 +873,12 @@ sub BuildSummary{
$summary.= ''.$seeheading.'
' if ($seeheading);
} else {
# construct MARC21 summary
+ # FIXME - looping over 1XX is questionable
+ # since MARC21 authority should have only one 1XX
foreach my $field ($record->field('1..')) {
+ next if "152" eq $field->tag(); # FIXME - 152 is not a good tag to use
+ # in MARC21 -- purely local tags really ought to be
+ # 9XX
if ($record->field('100')) {
$heading.= $field->as_string('abcdefghjklmnopqrstvxyz68');
} elsif ($record->field('110')) {
@@ -902,14 +912,12 @@ sub BuildSummary{
}
} #See From
foreach my $field ($record->field('4..')) {
- $seeheading.= " ".$field->as_string()."
";
- $seeheading.= " see: ".$seeheading."
";
+ $seeheading.= "
used for/see from: ".$field->as_string();
} #See Also
foreach my $field ($record->field('5..')) {
- $altheading.= " see also: ".$field->as_string()."
";
- $altheading.= " ".$field->as_string()."
";
- $altheading.= " see also: ".$altheading."
";
+ $altheading.= "
see also: ".$field->as_string();
}
+ $summary .= ": ";
$summary.=$heading.$seeheading.$altheading;
}
}
diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl
index 08e404d0e2..394290bc99 100755
--- a/cataloguing/addbiblio.pl
+++ b/cataloguing/addbiblio.pl
@@ -662,18 +662,18 @@ AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|);
$query->execute($frameworkcode);
my ($countcreated,$countlinked);
while (my $data=$query->fetchrow_hashref){
- if ($record->field($data->{tagfield})){
- next if ($record->subfield($data->{tagfield},'3')||$record->subfield($data->{tagfield},'9'));
+ foreach my $field ($record->field($data->{tagfield})){
+ next if ($field->subfield('3')||$field->subfield('9'));
# No authorities id in the tag.
# Search if there is any authorities to link to.
my $query='at='.$data->{authtypecode}.' ';
- map {$query.= " and he,ext=".$_->[1] if ($_->[0]=~/[A-z]/)} $record->field($data->{tagfield})->subfields();
+ map {$query.= " and he,ext=".$_->[1] if ($_->[0]=~/[A-z]/)} $field->subfields();
warn $query;
my ($error,$results)=SimpleSearch($query,"authorityserver");
# there is only 1 result
if (scalar(@$results)==1) {
my $marcrecord = MARC::File::USMARC::decode($results->[0]);
- $record->field($data->{tagfield})->add_subfields('9'=>$marcrecord->field('001')->data);
+ $field->add_subfields('9'=>$marcrecord->field('001')->data);
$countlinked++;
}elsif (scalar(@$results)>1) {
#More than One result
@@ -687,12 +687,12 @@ AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|);
###NOTICE : This can be a problem. We should also look into other types and rejected forms.
my $authtypedata=GetAuthType($data->{authtypecode});
my $marcrecordauth=MARC::Record->new();
- my $field=MARC::Field->new($authtypedata->{auth_tag_to_report},'','',"a"=>"".$record->subfield($data->{tagfield},'a'));
- map { $field->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )} $record->field($data->{tagfield})->subfields();
- $marcrecordauth->insert_fields_ordered($field);
+ my $authfield=MARC::Field->new($authtypedata->{auth_tag_to_report},'','',"a"=>"".$field->subfield('a'));
+ map { $authfield->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )} $field->subfields();
+ $marcrecordauth->insert_fields_ordered($authfield);
my $authid=AddAuthority($marcrecordauth,'',$data->{authtypecode});
$countcreated++;
- $record->field($data->{tagfield})->add_subfields('9'=>$authid);
+ $field->add_subfields('9'=>$authid);
}
}
}
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tmpl
index 4ce5be085b..40da2e1f40 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tmpl
@@ -64,7 +64,7 @@ function searchauthority() {
"> |
- " class="button"> biblio(s)
+ " class="button"> biblio(s)
|
--
2.39.5
|