From fad7f51d9b0d842e746f35e97d3629a997958170 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. Bug 3462: quiet warn Quiets an unnecessary warning about an uninitialized value. 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 Signed-off-by: Jared Camins-Esakov Rebased 26 July 2012 Signed-off-by: Jared Camins-Esakov Rebased on master 1 August 2012 --- 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 90c253a..98602c1 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', @@ -1032,11 +1032,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 @@ -1088,28 +1106,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 92314b1..27c198f 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 %] + [% authorize | 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 038959f..362a33a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt @@ -64,7 +64,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