Koha/catalogue/ISBDdetail.pl
Josef Moravec d99d32d033 Bug 8995: (follow-up) Add tests, move open_url/coins routines to Koha namespace
Test plan:
1) Ensure the COinS span tag is still included on this pages. You need
to look into html source and search for span tag with class 'Z3988',
   which has COinS string in title.
   Staff client:
       catalogue -> ISBDdetail
       catalogue -> MARCdetail
       catalogue -> detail
       virtualshelves -> shelves
    OPAC (you should have COinSinOPACResults system preference enabled):
        opac detail
        opac search
        opac shelves
2) Run tests:
prove t/Biblio.t t/db_dependent/Biblio.t t/db_dependent/Koha/Biblio.t

Signed-off-by: Magnus Enger <magnus@libriotech.no>
Tested with all 9 current patches. Works as advertised, including
OPACURLOpenInNewWindow. If a record has no items, no OpenURL link
is displayed. All the suggested tests pass. I did not test with
XSLT turned off.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
2019-04-29 15:34:10 +00:00

177 lines
5.1 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
ISBDdetail.pl : script to show a biblio in ISBD format
=head1 SYNOPSIS
=cut
=head1 DESCRIPTION
This script needs a biblionumber as parameter
=head1 FUNCTIONS
=cut
use Modern::Perl;
use HTML::Entities;
use C4::Auth;
use C4::Context;
use C4::Output;
use CGI qw ( -utf8 );
use C4::Koha;
use C4::Biblio;
use C4::Items;
use C4::Serials; # CountSubscriptionFromBiblionumber
use C4::Search; # enabled_staff_search_views
use C4::Acquisition qw(GetOrdersByBiblionumber);
use Koha::Biblios;
use Koha::Patrons;
use Koha::RecordProcessor;
my $query = new CGI;
my $dbh = C4::Context->dbh;
my $biblionumber = $query->param('biblionumber');
$biblionumber = HTML::Entities::encode($biblionumber);
# open template
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "catalogue/ISBDdetail.tt",
query => $query,
type => "intranet",
authnotrequired => 0,
flagsrequired => { catalogue => 1 },
}
);
if ( not defined $biblionumber ) {
# biblionumber invalid -> report and exit
$template->param( unknownbiblionumber => 1,
biblionumber => $biblionumber
);
output_html_with_http_headers $query, $cookie, $template->output;
exit;
}
my $record = GetMarcBiblio({
biblionumber => $biblionumber,
embed_items => 1 });
if ( not defined $record ) {
# biblionumber invalid -> report and exit
$template->param( unknownbiblionumber => 1,
biblionumber => $biblionumber
);
output_html_with_http_headers $query, $cookie, $template->output;
exit;
}
my $biblio = Koha::Biblios->find( $biblionumber );
my $framework = GetFrameworkCode( $biblionumber );
my $record_processor = Koha::RecordProcessor->new({
filters => 'ViewPolicy',
options => {
interface => 'intranet',
frameworkcode => 'ACQ'
},
});
$record_processor->process($record);
my $res = GetISBDView({
'record' => $record,
'template' => 'intranet',
'framework' => $framework,
});
if($query->cookie("holdfor")){
my $holdfor_patron = Koha::Patrons->find( $query->cookie("holdfor") );
$template->param(
holdfor => $query->cookie("holdfor"),
holdfor_surname => $holdfor_patron->surname,
holdfor_firstname => $holdfor_patron->firstname,
holdfor_cardnumber => $holdfor_patron->cardnumber,
);
}
# count of item linked with biblio
my $itemcount = $biblio->items->count;
$template->param( count => $itemcount);
my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber);
if ($subscriptionsnumber) {
my $subscriptions = GetSubscriptionsFromBiblionumber($biblionumber);
my $subscriptiontitle = $subscriptions->[0]{'bibliotitle'};
$template->param(
subscriptionsnumber => $subscriptionsnumber,
subscriptiontitle => $subscriptiontitle,
);
}
$template->param (
ISBD => $res,
biblionumber => $biblionumber,
isbdview => 1,
z3950_search_params => C4::Search::z3950_search_args(GetBiblioData($biblionumber)),
ocoins => $biblio->get_coins,
C4::Search::enabled_staff_search_views,
searchid => scalar $query->param('searchid'),
);
my @allorders_using_biblio = GetOrdersByBiblionumber ($biblionumber);
my @deletedorders_using_biblio;
my @orders_using_biblio;
my @baskets_orders;
my @baskets_deletedorders;
foreach my $myorder (@allorders_using_biblio) {
my $basket = $myorder->{'basketno'};
if ((defined $myorder->{'datecancellationprinted'}) and ($myorder->{'datecancellationprinted'} ne '0000-00-00') ){
push @deletedorders_using_biblio, $myorder;
unless (grep(/^$basket$/, @baskets_deletedorders)){
push @baskets_deletedorders,$myorder->{'basketno'};
}
}
else {
push @orders_using_biblio, $myorder;
unless (grep(/^$basket$/, @baskets_orders)){
push @baskets_orders,$myorder->{'basketno'};
}
}
}
my $count_orders_using_biblio = scalar @orders_using_biblio ;
$template->param (countorders => $count_orders_using_biblio);
my $count_deletedorders_using_biblio = scalar @deletedorders_using_biblio ;
$template->param (countdeletedorders => $count_deletedorders_using_biblio);
my $holds = $biblio->holds;
$template->param( holdcount => $holds->count );
output_html_with_http_headers $query, $cookie, $template->output;