Bug 3462: Links in authorities should be hyperlinks
authorJared Camins-Esakov <jcamins@cpbibliography.com>
Wed, 30 May 2012 20:29:54 +0000 (16:29 -0400)
committerPaul Poulain <paul.poulain@biblibre.com>
Thu, 13 Sep 2012 14:53:50 +0000 (16:53 +0200)
Make see also links in both the OPAC and authority module search results
into hyperlinks and not just textual strings.

To test:
1. Do a search for an authority that will bring up a heading with a
   see also reference in the staff client and the OPAC.
2. Confirm that the see also references listed in the search results
   are now hyperlinks, which work.

Also quiets an unnecessary warning about an uninitialized value.

Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
Rebased 26 July 2012

Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
Rebased on master 1 August 2012

Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
Rebased on master 6 August 2012

Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
Rebased on master 11 September 2012

Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Patch works nicely and is a great improvement.

Tests:
- Checked links for existing and non existing "see alsos" give correct
  search results
- Verified links show up for all "see alsos" in a result list
- Verified links are properly linked with the correct names
- Checked logs don't show errors

Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
C4/AuthoritiesMarc.pm
koha-tmpl/intranet-tmpl/prog/en/includes/authorities-search-results.inc
koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt
koha-tmpl/opac-tmpl/prog/en/includes/authorities-search-results.inc
koha-tmpl/opac-tmpl/prog/en/modules/opac-authoritiessearchresultlist.tt

index ba3c41b..a4954ed 100644 (file)
@@ -945,7 +945,7 @@ sub BuildSummary {
         $summary{type} = $authref->{authtypetext};
         $summary{summary} = $authref->{summary};
     }
-    my $marc21subfields = 'abcdfghjklmnopqrstuvxyz';
+    my $marc21subfields = 'abcdfghjklmnopqrstuvxyz68';
     my %marc21controlrefs = ( 'a' => 'earlier',
         'b' => 'later',
         'd' => 'acronym',
@@ -1023,11 +1023,29 @@ sub BuildSummary {
 # see :
         foreach my $field ($record->field('5..')) {
             if (($field->subfield('5')) && ($field->subfield('a')) && ($field->subfield('5') eq 'g')) {
-                push @seealso, { $field->as_string('abcdefgjxyz'), type => 'broader', field => $field->tag() };
+                push @seealso, {
+                    heading => $field->as_string('abcdefgjxyz'),
+                    type => 'broader',
+                    field => $field->tag(),
+                    search => $field->as_string('abcdefgjxyz'),
+                    authid => $field->subfield('9')
+                };
             } elsif (($field->subfield('5')) && ($field->as_string) && ($field->subfield('5') eq 'h')){
-                push @seealso, { heading => $field->as_string('abcdefgjxyz'), type => 'narrower', field => $field->tag() };
+                push @seealso, {
+                    heading => $field->as_string('abcdefgjxyz'),
+                    type => 'narrower',
+                    field => $field->tag(),
+                    search => $field->as_string('abcdefgjxyz'),
+                    authid => $field->subfield('9')
+                };
             } elsif ($field->subfield('a')) {
-                push @seealso, { heading => $field->as_string('abcdefgxyz'), type => 'seealso', field => $field->tag() };
+                push @seealso, {
+                    heading => $field->as_string('abcdefgxyz'),
+                    type => 'seealso',
+                    field => $field->tag(),
+                    search => $field->as_string('abcdefgjxyz'),
+                    authid => $field->subfield('9')
+                };
             }
         }
 # // form
@@ -1079,28 +1097,40 @@ sub BuildSummary {
         }
         foreach my $field ($record->field('4..')) { #See From
             my $type = 'seefrom';
-            $type = $marc21controlrefs{substr $field->subfield('w'), 0, 1} if ($field->subfield('w'));
+            $type = ($marc21controlrefs{substr $field->subfield('w'), 0, 1} || '') if ($field->subfield('w'));
             if ($type eq 'notapplicable') {
                 $type = substr $field->subfield('w'), 2, 1;
                 $type = 'earlier' if $type && $type ne 'n';
             }
             if ($type eq 'subfi') {
-                push @seefrom, { heading => $field->as_string($marc21subfields), type => $field->subfield('i'), field => $field->tag() };
+                push @seefrom, { heading => $field->as_string($marc21subfields), type => ($field->subfield('i') || ''), field => $field->tag() };
             } else {
                 push @seefrom, { heading => $field->as_string($marc21subfields), type => $type, field => $field->tag() };
             }
         }
         foreach my $field ($record->field('5..')) { #See Also
             my $type = 'seealso';
-            $type = $marc21controlrefs{substr $field->subfield('w'), 0, 1} if ($field->subfield('w'));
+            $type = ($marc21controlrefs{substr $field->subfield('w'), 0, 1} || '') if ($field->subfield('w'));
             if ($type eq 'notapplicable') {
                 $type = substr $field->subfield('w'), 2, 1;
                 $type = 'earlier' if $type && $type ne 'n';
             }
             if ($type eq 'subfi') {
-                push @seealso, { heading => $field->as_string($marc21subfields), type => $field->subfield('i'), field => $field->tag() };
+                push @seealso, {
+                    heading => $field->as_string($marc21subfields),
+                    type => $field->subfield('i'),
+                    field => $field->tag(),
+                    search => $field->as_string($marc21subfields) || '',
+                    authid => $field->subfield('9') || ''
+                };
             } else {
-                push @seealso, { heading => $field->as_string($marc21subfields), type => $type, field => $field->tag() };
+                push @seealso, {
+                    heading => $field->as_string($marc21subfields),
+                    type => $type,
+                    field => $field->tag(),
+                    search => $field->as_string($marc21subfields) || '',
+                    authid => $field->subfield('9') || ''
+                };
             }
         }
         foreach my $field ($record->field('6..')) {
index 3defe48..cd99443 100644 (file)
@@ -2,19 +2,22 @@
     [% IF marcflavour == 'UNIMARC' %]
         [% SWITCH type %]
         [% CASE 'broader' %]
-            <span class="BT">[% heading %]</span> --
+            <span class="BT">[% heading | html %]</span> --
         [% CASE 'narrower' %]
-            <span class="NT">[% heading %]</span> --
+            <span class="NT">[% heading | html %]</span> --
         [% CASE 'narrower' %]
-            <span class="NT">[% heading %]</span> --
+            <span class="NT">[% heading | html %]</span> --
         [% CASE 'seefrom' %]
-            <span class="UF">[% heading %]</span> --
+            <span class="UF">[% heading | html %]</span> --
         [% CASE 'seealso' %]
-            <span class="RT">[% heading %]</span> --
+            <span class="RT">[% heading | html %]</span> --
         [% END %]
     [% ELSE %]
-        [% IF ( label ) %]<span class="label">[% label %]</span>[% END %]
-        <span class="heading">[% heading %]</span>
+        [% IF ( label ) %]<span class="label">[% label | html %]</span>[% END %]
+        <span class="heading">
+        [% IF ( linkpath && search ) %]<a href="[% link | url %][% search | url %]">[% heading | html %]</a>
+        [% ELSE %][% heading | html %][% END %]
+        </span>
         [% UNLESS ( type=='seefrom' || type=='seealso' ) %]<span class="type">[% SWITCH type %]
         [% CASE 'earlier' %](Earlier heading)
         [% CASE 'later' %](Later heading)
         [% CASE 'musical' %](Musical composition)
         [% CASE 'broader' %](Broader heading)
         [% CASE 'narrower' %](Narrower heading)
-        [% CASE %]([% type %])
+        [% CASE 'parent' %](Immediate parent body)
+        [% CASE %]([% type | html %])
         [% END %]</span>[% END %]
     [% END %]
 [% END %]
 [% BLOCK authresult %]
-    [% IF ( summary.summary ) %][% summary.summary %]:[% END %]
+    [% IF ( summary.summary ) %][% summary.summary | html %]:[% END %]
     [% UNLESS ( summary.summaryonly ) %]
         [% FOREACH authorize IN summary.authorized %]
-            <span class="authorizedheading">[% authorize.heading %]</span>
+            <span class="authorizedheading">[% authorize.heading | html %]</span>
         [% END %]
         [% IF ( marcflavour == 'UNIMARC' ) %]
             [% FOREACH note IN summary.notes %]
-                <span class="note">[% note %]</span>
+                <span class="note">[% note | html %]</span>
             [% END %]
             [% FOREACH seefro IN summary.seefrom %]
-                [% PROCESS showreference heading=seefro.heading label="" type=seefro.type %]
+                [% PROCESS showreference heading=seefro.heading label="" type=seefro.type search='' %]
             [% END %]
         [% ELSE %]
             [% IF ( summary.seefrom ) %]
                 [% FOREACH seefro IN summary.seefrom %]
                     <div class="seefrom authref">
-                    [% PROCESS showreference heading=seefro.heading label="used for/see from:" type=seefro.type %]
+                    [% PROCESS showreference heading=seefro.heading label="used for/see from:" type=seefro.type search='' %]
                     </div>
                 [% END %]
             [% END %]
             [% IF ( summary.seealso ) %]
                 [% FOREACH seeals IN summary.seealso %]
                     <div class="seealso authref">
-                    [% PROCESS showreference heading=seeals.heading label="see also:" type=seeals.type %]
+                    [% PROCESS showreference heading=seeals.heading label="see also:" type=seeals.type linkpath=link search=seeals.search %]
                     </div>
                 [% END %]
             [% END %]
index 6ac139a..c6035ef 100644 (file)
@@ -66,7 +66,7 @@ function searchauthority() {
     [% ELSE %]
     <tr>
     [% END %]
-      <td>[% PROCESS authresult summary=resul.summary %]</td>
+      <td>[% PROCESS authresult summary=resul.summary link="/cgi-bin/koha/authorities/authorities-home.pl?op=do_search&type=intranet&marclist=any&operator=contains&orderby=HeadingAsc&value=" %]</td>
       <td><a href="detail.pl?authid=[% resul.authid %]">Details</a></td>
   [% UNLESS ( resul.isEDITORS ) %]
       <td>
index 3defe48..cd99443 100644 (file)
@@ -2,19 +2,22 @@
     [% IF marcflavour == 'UNIMARC' %]
         [% SWITCH type %]
         [% CASE 'broader' %]
-            <span class="BT">[% heading %]</span> --
+            <span class="BT">[% heading | html %]</span> --
         [% CASE 'narrower' %]
-            <span class="NT">[% heading %]</span> --
+            <span class="NT">[% heading | html %]</span> --
         [% CASE 'narrower' %]
-            <span class="NT">[% heading %]</span> --
+            <span class="NT">[% heading | html %]</span> --
         [% CASE 'seefrom' %]
-            <span class="UF">[% heading %]</span> --
+            <span class="UF">[% heading | html %]</span> --
         [% CASE 'seealso' %]
-            <span class="RT">[% heading %]</span> --
+            <span class="RT">[% heading | html %]</span> --
         [% END %]
     [% ELSE %]
-        [% IF ( label ) %]<span class="label">[% label %]</span>[% END %]
-        <span class="heading">[% heading %]</span>
+        [% IF ( label ) %]<span class="label">[% label | html %]</span>[% END %]
+        <span class="heading">
+        [% IF ( linkpath && search ) %]<a href="[% link | url %][% search | url %]">[% heading | html %]</a>
+        [% ELSE %][% heading | html %][% END %]
+        </span>
         [% UNLESS ( type=='seefrom' || type=='seealso' ) %]<span class="type">[% SWITCH type %]
         [% CASE 'earlier' %](Earlier heading)
         [% CASE 'later' %](Later heading)
         [% CASE 'musical' %](Musical composition)
         [% CASE 'broader' %](Broader heading)
         [% CASE 'narrower' %](Narrower heading)
-        [% CASE %]([% type %])
+        [% CASE 'parent' %](Immediate parent body)
+        [% CASE %]([% type | html %])
         [% END %]</span>[% END %]
     [% END %]
 [% END %]
 [% BLOCK authresult %]
-    [% IF ( summary.summary ) %][% summary.summary %]:[% END %]
+    [% IF ( summary.summary ) %][% summary.summary | html %]:[% END %]
     [% UNLESS ( summary.summaryonly ) %]
         [% FOREACH authorize IN summary.authorized %]
-            <span class="authorizedheading">[% authorize.heading %]</span>
+            <span class="authorizedheading">[% authorize.heading | html %]</span>
         [% END %]
         [% IF ( marcflavour == 'UNIMARC' ) %]
             [% FOREACH note IN summary.notes %]
-                <span class="note">[% note %]</span>
+                <span class="note">[% note | html %]</span>
             [% END %]
             [% FOREACH seefro IN summary.seefrom %]
-                [% PROCESS showreference heading=seefro.heading label="" type=seefro.type %]
+                [% PROCESS showreference heading=seefro.heading label="" type=seefro.type search='' %]
             [% END %]
         [% ELSE %]
             [% IF ( summary.seefrom ) %]
                 [% FOREACH seefro IN summary.seefrom %]
                     <div class="seefrom authref">
-                    [% PROCESS showreference heading=seefro.heading label="used for/see from:" type=seefro.type %]
+                    [% PROCESS showreference heading=seefro.heading label="used for/see from:" type=seefro.type search='' %]
                     </div>
                 [% END %]
             [% END %]
             [% IF ( summary.seealso ) %]
                 [% FOREACH seeals IN summary.seealso %]
                     <div class="seealso authref">
-                    [% PROCESS showreference heading=seeals.heading label="see also:" type=seeals.type %]
+                    [% PROCESS showreference heading=seeals.heading label="see also:" type=seeals.type linkpath=link search=seeals.search %]
                     </div>
                 [% END %]
             [% END %]
index 2f0f3a0..96fa3e0 100644 (file)
@@ -57,7 +57,7 @@
             [% ELSE %]
                 <tr>
             [% END %]
-                    <td>[% PROCESS authresult summary=resul.summary %]</td>
+                    <td>[% PROCESS authresult summary=resul.summary link="/cgi-bin/koha/opac-authorities-home.pl?op=do_search&type=opac&operatorc=contains&marclistc=mainentry&and_orc=and&orderby=HeadingAsc&valuec=" %]</td>
                     <td>[% resul.authtype %]</td>
                                        [% UNLESS ( resul.isEDITORS ) %]
                                                <td>