various authorities fixes
authorGalen Charlton <galen.charlton@liblime.com>
Mon, 12 Nov 2007 23:13:43 +0000 (17:13 -0600)
committerJoshua Ferraro <jmf@liblime.com>
Tue, 13 Nov 2007 00:32:22 +0000 (18:32 -0600)
* 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 <crc@liblime.com>
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
C4/AuthoritiesMarc.pm
cataloguing/addbiblio.pl
koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tmpl

index 65cede5..92c7faf 100644 (file)
@@ -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.= '<p><div class="label">'.$seeheading.'</div></p>' 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.= "&nbsp;&nbsp;&nbsp;".$field->as_string()."<br />";
-              $seeheading.= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>see:</i> ".$seeheading."<br />";
+              $seeheading.= "<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>used for/see from:</i> ".$field->as_string();
           } #See Also
           foreach my $field ($record->field('5..')) {
-              $altheading.= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>see also:</i> ".$field->as_string()."<br />";
-              $altheading.= "&nbsp;&nbsp;&nbsp;".$field->as_string()."<br />";
-              $altheading.= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>see also:</i> ".$altheading."<br />";
+              $altheading.= "<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>see also:</i> ".$field->as_string();
           }
+          $summary .= ": ";
           $summary.=$heading.$seeheading.$altheading;
       }
   }
index 08e404d..394290b 100755 (executable)
@@ -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);
       }
     }  
   }
index 4ce5be0..40da2e1 100644 (file)
@@ -64,7 +64,7 @@ function searchauthority() {
       <td><a href="detail.pl?authid=<!-- TMPL_VAR NAME="authid" -->"><!-- TMPL_VAR NAME="summary" --></a></td>
   <!-- TMPL_UNLESS name="isEDITORS" -->
       <td>
-        <a href="../catalogue/search.pl?type=intranet&amp;op=do_search&amp;q=an=<!--TMPL_VAR Name="authid" -->" class="button"><!-- TMPL_VAR NAME="used" --> biblio(s)</a>
+        <a href="../catalogue/search.pl?type=intranet&amp;op=do_search&amp;idx=an&amp;q=<!--TMPL_VAR Name="authid" -->" class="button"><!-- TMPL_VAR NAME="used" --> biblio(s)</a>
       </td>
   <!-- /TMPL_UNLESS -->
       <td>