Koha/opac/opac-ISBDdetail.pl
Mark Tompsett e191bb02bf Bug 10584 - Hide OPAC biblio details if all items are hidden
If there are items for a given biblio number, and they are all
hidden, then biblio needs to be hidden. If the biblio needs to
be hidden, it immediately redirects to a 404.pl page, just as
if the biblionumber does not exist.

Arrays used to represent all the items were relocated and used,
added if they didn't exist. Arrays representing the hidden
items were relocated and used if they existed, added if they
didn't exist.

Upon debugging the opac-MARCdetail.pl modification, it was
discovered the reason getHiddenItems was failing was because
'use YAML qw/Load/;' was not mentioned in C4::Items, and other
libraries were triggering the loading of YAML to compensate
for opac-detail.pl and opac-ISBDdetail.pl files.

Signed-off-by: Mason James <mtj@kohaaloha.com>
Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
2013-09-18 15:31:04 +00:00

210 lines
6.5 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2000-2002 Katipo Communications
# parts copyright 2010 BibLibre
#
# 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 2 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=head1 NAME
opac-ISBDdetail.pl - script to show a biblio in ISBD format
=head1 DESCRIPTION
This script needs a biblionumber as parameter
It shows the biblio
The template is in <templates_dir>/catalogue/ISBDdetail.tmpl.
this template must be divided into 11 "tabs".
The first 10 tabs present the biblio, the 11th one presents
the items attached to the biblio
=head1 FUNCTIONS
=cut
use strict;
use warnings;
use C4::Auth;
use C4::Context;
use C4::Output;
use CGI;
use MARC::Record;
use C4::Biblio;
use C4::Items;
use C4::Acquisition;
use C4::Review;
use C4::Serials; # uses getsubscriptionfrom biblionumber
use C4::Koha;
use C4::Members; # GetMember
my $query = CGI->new();
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "opac-ISBDdetail.tmpl",
query => $query,
type => "opac",
authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ),
debug => 1,
}
);
my $biblionumber = $query->param('biblionumber');
$biblionumber = int($biblionumber);
# get biblionumbers stored in the cart
my @cart_list;
if($query->cookie("bib_list")){
my $cart_list = $query->cookie("bib_list");
@cart_list = split(/\//, $cart_list);
if ( grep {$_ eq $biblionumber} @cart_list) {
$template->param( incart => 1 );
}
}
$template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') );
$template->param( 'ItemsIssued' => CountItemsIssued( $biblionumber ) );
my $marcflavour = C4::Context->preference("marcflavour");
my @items = GetItemsInfo($biblionumber);
if (scalar @items >= 1) {
my @hiddenitems = GetHiddenItemnumbers(@items);
if (scalar @hiddenitems == scalar @items ) {
print $query->redirect("/cgi-bin/koha/errors/404.pl"); # escape early
exit;
}
}
my $record = GetMarcBiblio($biblionumber);
if ( ! $record ) {
print $query->redirect("/cgi-bin/koha/errors/404.pl");
exit;
}
# some useful variables for enhanced content;
# in each case, we're grabbing the first value we find in
# the record and normalizing it
my $upc = GetNormalizedUPC($record,$marcflavour);
my $ean = GetNormalizedEAN($record,$marcflavour);
my $oclc = GetNormalizedOCLCNumber($record,$marcflavour);
my $isbn = GetNormalizedISBN(undef,$record,$marcflavour);
my $content_identifier_exists;
if ( $isbn or $ean or $oclc or $upc ) {
$content_identifier_exists = 1;
}
$template->param(
normalized_upc => $upc,
normalized_ean => $ean,
normalized_oclc => $oclc,
normalized_isbn => $isbn,
content_identifier_exists => $content_identifier_exists,
);
#coping with subscriptions
my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber);
my $dbh = C4::Context->dbh;
my $dat = TransformMarcToKoha( $dbh, $record );
my @subscriptions = GetSubscriptions( $dat->{title}, $dat->{issn}, undef, $biblionumber );
my @subs;
foreach my $subscription (@subscriptions) {
my %cell;
my $serials_to_display;
$cell{subscriptionid} = $subscription->{subscriptionid};
$cell{subscriptionnotes} = $subscription->{notes};
$cell{branchcode} = $subscription->{branchcode};
#get the three latest serials.
$serials_to_display = $subscription->{opacdisplaycount};
$serials_to_display = C4::Context->preference('OPACSerialIssueDisplayCount') unless $serials_to_display;
$cell{opacdisplaycount} = $serials_to_display;
$cell{latestserials} =
GetLatestSerials( $subscription->{subscriptionid}, $serials_to_display );
push @subs, \%cell;
}
$template->param(
subscriptions => \@subs,
subscriptionsnumber => $subscriptionsnumber,
);
my $norequests = 1;
my $res = GetISBDView($biblionumber, "opac");
my $itemtypes = GetItemTypes();
for my $itm (@items) {
$norequests = 0
if ( (not $itm->{'withdrawn'} )
&& (not $itm->{'itemlost'} )
&& ($itm->{'itemnotforloan'}<0 || not $itm->{'itemnotforloan'} )
&& (not $itemtypes->{$itm->{'itype'}}->{notforloan} )
&& ($itm->{'itemnumber'} ) );
}
my $reviews = getreviews( $biblionumber, 1 );
foreach ( @$reviews ) {
my $borrower_number_review = $_->{borrowernumber};
my $borrowerData = GetMember('borrowernumber' =>$borrower_number_review);
# setting some borrower info into this hash
$_->{title} = $borrowerData->{'title'};
$_->{surname} = $borrowerData->{'surname'};
$_->{firstname} = $borrowerData->{'firstname'};
}
$template->param(
RequestOnOpac => C4::Context->preference("RequestOnOpac"),
AllowOnShelfHolds => C4::Context->preference('AllowOnShelfHolds'),
norequests => $norequests,
ISBD => $res,
biblionumber => $biblionumber,
reviews => $reviews,
);
#Export options
my $OpacExportOptions=C4::Context->preference("OpacExportOptions");
my @export_options = split(/\|/,$OpacExportOptions);
$template->{VARS}->{'export_options'} = \@export_options;
#Search for title in links
my $marccontrolnumber = GetMarcControlnumber ($record, $marcflavour);
my $marcissns = GetMarcISSN ( $record, $marcflavour );
my $issn = $marcissns->[0] || '';
if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){
$dat->{title} =~ s/\/+$//; # remove trailing slash
$dat->{title} =~ s/\s+$//; # remove trailing space
$search_for_title = parametrized_url(
$search_for_title,
{
TITLE => $dat->{title},
AUTHOR => $dat->{author},
ISBN => $isbn,
ISSN => $issn,
CONTROLNUMBER => $marccontrolnumber,
BIBLIONUMBER => $biblionumber,
}
);
$template->param('OPACSearchForTitleIn' => $search_for_title);
}
output_html_with_http_headers $query, $cookie, $template->output;