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.2