Bug 3462: Links in authorities should be hyperlinks

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>
This commit is contained in:
Jared Camins-Esakov 2012-05-30 16:29:54 -04:00 committed by Paul Poulain
parent bc05b5d163
commit 4f043f3f77
5 changed files with 77 additions and 39 deletions

View 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..')) {

View 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)
@ -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 %]</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 %]

View 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>

View 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)
@ -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 %]</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 %]

View 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>