From 2253672617bab98bc59a8338a734445075792524 Mon Sep 17 00:00:00 2001 From: Jared Camins-Esakov Date: Wed, 30 May 2012 16:29:54 -0400 Subject: [PATCH] Bug 3462: Links in authorities should be hyperlinks Content-Type: text/plain; charset="UTF-8" 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 Rebased 26 July 2012 Signed-off-by: Jared Camins-Esakov Rebased on master 1 August 2012 Signed-off-by: Jared Camins-Esakov Rebased on master 6 August 2012 Signed-off-by: Katrin Fischer 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 --- C4/AuthoritiesMarc.pm | 48 ++++++++++++++++---- .../en/includes/authorities-search-results.inc | 32 +++++++------ .../en/modules/authorities/searchresultlist.tt | 2 +- .../en/includes/authorities-search-results.inc | 32 +++++++------ .../en/modules/opac-authoritiessearchresultlist.tt | 2 +- opac/opac-authorities-home.pl | 4 +- 6 files changed, 79 insertions(+), 41 deletions(-) diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm index 21ebd94..d686596 100644 --- a/C4/AuthoritiesMarc.pm +++ b/C4/AuthoritiesMarc.pm @@ -952,7 +952,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', @@ -1030,11 +1030,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 @@ -1086,28 +1104,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..')) { diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/authorities-search-results.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/authorities-search-results.inc index 3defe48..cd99443 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/authorities-search-results.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/authorities-search-results.inc @@ -2,19 +2,22 @@ [% IF marcflavour == 'UNIMARC' %] [% SWITCH type %] [% CASE 'broader' %] - [% heading %] -- + [% heading | html %] -- [% CASE 'narrower' %] - [% heading %] -- + [% heading | html %] -- [% CASE 'narrower' %] - [% heading %] -- + [% heading | html %] -- [% CASE 'seefrom' %] - [% heading %] -- + [% heading | html %] -- [% CASE 'seealso' %] - [% heading %] -- + [% heading | html %] -- [% END %] [% ELSE %] - [% IF ( label ) %][% label %][% END %] - [% heading %] + [% IF ( label ) %][% label | html %][% END %] + + [% IF ( linkpath && search ) %][% heading | html %] + [% ELSE %][% heading | html %][% END %] + [% UNLESS ( type=='seefrom' || type=='seealso' ) %][% SWITCH type %] [% CASE 'earlier' %](Earlier heading) [% CASE 'later' %](Later heading) @@ -22,35 +25,36 @@ [% CASE 'musical' %](Musical composition) [% CASE 'broader' %](Broader heading) [% CASE 'narrower' %](Narrower heading) - [% CASE %]([% type %]) + [% CASE 'parent' %](Immediate parent body) + [% CASE %]([% type | html %]) [% END %][% 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 %] - [% authorize.heading %] + [% authorize.heading | html %] [% END %] [% IF ( marcflavour == 'UNIMARC' ) %] [% FOREACH note IN summary.notes %] - [% note %] + [% note | html %] [% 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 %]
- [% 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='' %]
[% END %] [% END %] [% IF ( summary.seealso ) %] [% FOREACH seeals IN summary.seealso %]
- [% 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 %]
[% END %] [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt index 6ac139a..c6035ef 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt @@ -66,7 +66,7 @@ function searchauthority() { [% ELSE %] [% END %] - [% PROCESS authresult summary=resul.summary %] + [% 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=" %] Details [% UNLESS ( resul.isEDITORS ) %] diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/authorities-search-results.inc b/koha-tmpl/opac-tmpl/prog/en/includes/authorities-search-results.inc index 3defe48..cd99443 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/authorities-search-results.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/authorities-search-results.inc @@ -2,19 +2,22 @@ [% IF marcflavour == 'UNIMARC' %] [% SWITCH type %] [% CASE 'broader' %] - [% heading %] -- + [% heading | html %] -- [% CASE 'narrower' %] - [% heading %] -- + [% heading | html %] -- [% CASE 'narrower' %] - [% heading %] -- + [% heading | html %] -- [% CASE 'seefrom' %] - [% heading %] -- + [% heading | html %] -- [% CASE 'seealso' %] - [% heading %] -- + [% heading | html %] -- [% END %] [% ELSE %] - [% IF ( label ) %][% label %][% END %] - [% heading %] + [% IF ( label ) %][% label | html %][% END %] + + [% IF ( linkpath && search ) %][% heading | html %] + [% ELSE %][% heading | html %][% END %] + [% UNLESS ( type=='seefrom' || type=='seealso' ) %][% SWITCH type %] [% CASE 'earlier' %](Earlier heading) [% CASE 'later' %](Later heading) @@ -22,35 +25,36 @@ [% CASE 'musical' %](Musical composition) [% CASE 'broader' %](Broader heading) [% CASE 'narrower' %](Narrower heading) - [% CASE %]([% type %]) + [% CASE 'parent' %](Immediate parent body) + [% CASE %]([% type | html %]) [% END %][% 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 %] - [% authorize.heading %] + [% authorize.heading | html %] [% END %] [% IF ( marcflavour == 'UNIMARC' ) %] [% FOREACH note IN summary.notes %] - [% note %] + [% note | html %] [% 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 %]
- [% 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='' %]
[% END %] [% END %] [% IF ( summary.seealso ) %] [% FOREACH seeals IN summary.seealso %]
- [% 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 %]
[% END %] [% END %] diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-authoritiessearchresultlist.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-authoritiessearchresultlist.tt index 2f0f3a0..96fa3e0 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-authoritiessearchresultlist.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-authoritiessearchresultlist.tt @@ -57,7 +57,7 @@ [% ELSE %] [% END %] - [% PROCESS authresult summary=resul.summary %] + [% 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=" %] [% resul.authtype %] [% UNLESS ( resul.isEDITORS ) %] diff --git a/opac/opac-authorities-home.pl b/opac/opac-authorities-home.pl index 4e9f9ab..b6d8df6 100755 --- a/opac/opac-authorities-home.pl +++ b/opac/opac-authorities-home.pl @@ -58,10 +58,10 @@ foreach my $thisauthtype ( } if ( $op eq "do_search" ) { - my @marclist = ($query->param('marclista'),$query->param('marclistb'),$query->param('marclistc')); + my @marclist = ($query->param('marclista') || '',$query->param('marclistb') || '',$query->param('marclistc') || 'mainentry'); my @and_or = ($query->param('and_ora'),$query->param('and_orb'),$query->param('and_orc')); my @excluding = ($query->param('excludinga'),$query->param('excludingb'),$query->param('excludingc'),); - my @operator = ($query->param('operatora'),$query->param('operatorb'),$query->param('operatorc')); + my @operator = ($query->param('operatora') || '',$query->param('operatorb') || '',$query->param('operatorc')); my $orderby = $query->param('orderby'); my @value = ($query->param('valuea') || "",$query->param('valueb') || "",$query->param('valuec') || "",); -- 1.7.2.5