Koha/opac/opac-authoritiesdetail.pl
Jonathan Druart a4c3455b8c Bug 15550: Fix authority search and detail at the OPAC
The author of Bug 15381 (me!) has mismatch the objects he was
manipulating and forgotten to update a template.
for the opac-aythorities-home, the variable is named authority_types,
not authtypesloop.
In opac-authoritiesdetail.pl, the $record is a MARC::Record and there is
no authtypecode method. We need to retrieve the authtypecode using
the new Koha::Authorities module.

Test plan:
Search for authorities at the OPAC and click on the detail link to go to
the detail page.
Without this patch, you will get errors.
With this patch, the errors should have gone and everything should work
as before bug 15381.

Signed-off-by: Hector Castro <hector.hecaxmmx@gmail.com>
Works as described. Pull down for choosing the auth_type displayed again

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Brendan Gallagher brendan@bywatersolutions.com
2016-01-23 18:34:06 +00:00

172 lines
5.4 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2000-2002 Katipo Communications
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
=head1 NAME
opac-authoritiesdetail.pl : script to show an authority in MARC format
=head1 SYNOPSIS
=cut
=head1 DESCRIPTION
This script needs an authid
It shows the authority in a (nice) MARC format depending on authority MARC
parameters tables.
=head1 FUNCTIONS
=cut
use strict;
use warnings;
use C4::AuthoritiesMarc;
use C4::Auth;
use C4::Context;
use C4::Output;
use CGI qw ( -utf8 );
use MARC::Record;
use C4::Koha;
use Koha::Authorities;
use Koha::Authority::Types;
my $query = new CGI;
my $dbh = C4::Context->dbh;
my $display_hierarchy = C4::Context->preference("AuthDisplayHierarchy");
my $show_marc = $query->param('marc');
# open template
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => $show_marc ? "opac-auth-MARCdetail.tt" : "opac-auth-detail.tt",
query => $query,
type => "opac",
authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ),
debug => 1,
}
);
my $authid = $query->param('authid');
$authid = int($authid);
my $record = GetAuthority( $authid );
if ( ! $record ) {
print $query->redirect("/cgi-bin/koha/errors/404.pl"); # escape early
exit;
}
my $authority = Koha::Authorities->find( $authid );
my $authtypecode = $authority->authtypecode;
if ($display_hierarchy){
$template->{VARS}->{'displayhierarchy'} = $display_hierarchy;
$template->{VARS}->{'loophierarchies'} = GenerateHierarchy($authid);
}
my $count = CountUsage($authid);
my $authority_types = Koha::Authority::Types->search( {}, { order_by => ['authtypecode'] } );
$template->param(
authority_types => $authority_types,
authtypetext => $authority_types->find($authtypecode)->authtypetext,
authid => $authid,
count => $count,
);
# find the marc field/subfield used in biblio by this authority
if ($show_marc) {
my $tagslib = &GetTagsLabels( 0, $authtypecode );
my $sth =
$dbh->prepare(
"select distinct tagfield from marc_subfield_structure where authtypecode=?"
);
$sth->execute($authtypecode);
my $biblio_fields;
while ( my ($tagfield) = $sth->fetchrow ) {
$biblio_fields .= $tagfield . "9,";
}
chop $biblio_fields;
# fill arrays
my @loop_data = ();
my $tag;
# loop through each tag
my @fields = $record->fields();
foreach my $field (@fields) {
my @subfields_data;
# skip UNIMARC fields <200, they are useless for a patron
next if C4::Context->preference('marcflavour') eq 'UNIMARC' && $field->tag() <200;
# if tag <10, there's no subfield, use the "@" trick
if ( $field->tag() < 10 ) {
next if ( $tagslib->{ $field->tag() }->{'@'}->{hidden} );
my %subfield_data;
$subfield_data{marc_lib} = $tagslib->{ $field->tag() }->{'@'}->{lib};
$subfield_data{marc_value} = $field->data();
$subfield_data{marc_subfield} = '@';
$subfield_data{marc_tag} = $field->tag();
push( @subfields_data, \%subfield_data );
}
elsif ( C4::Context->preference('marcflavour') eq 'MARC21' && $field->tag() eq 667 ) {
# tagfield 667 is a nonpublic general note in MARC21, which shouldn't be shown in the OPAC
}
else {
my @subf = $field->subfields;
# loop through each subfield
for my $i ( 0 .. $#subf ) {
$subf[$i][0] = "@" unless defined $subf[$i][0];
next if ( $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{hidden} );
# skip useless subfields (for patrons)
next if $subf[$i][0] =~ /7|8|9/;
my %subfield_data;
$subfield_data{marc_lib} =
$tagslib->{ $field->tag() }->{ $subf[$i][0] }->{lib};
$subfield_data{marc_subfield} = $subf[$i][0];
$subfield_data{marc_tag} = $field->tag();
$subfield_data{isurl} = $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{isurl};
$subfield_data{marc_value} = $subf[$i][1];
push( @subfields_data, \%subfield_data );
}
}
if ( $#subfields_data >= 0 ) {
my %tag_data;
$tag_data{tag} =
$field->tag()
. ' '
. C4::Koha::display_marc_indicators($field)
. ' - ' . $tagslib->{ $field->tag() }->{lib};
$tag_data{subfield} = \@subfields_data;
push( @loop_data, \%tag_data );
}
}
$template->param( "Tab0XX" => \@loop_data );
} else {
my $summary = BuildSummary($record, $authid, $authtypecode);
$template->{VARS}->{'summary'} = $summary;
}
output_html_with_http_headers $query, $cookie, $template->output;