#!/usr/bin/perl
# Copyright 2000-2002 Katipo Communications
+# Copyright 2010 BibLibre
#
# This file is part of Koha.
#
use C4::Members;
use C4::VirtualShelves;
use C4::XSLT;
+use C4::ShelfBrowser;
BEGIN {
if (C4::Context->preference('BakerTaylorEnabled')) {
template_name => "opac-detail.tmpl",
query => $query,
type => "opac",
- authnotrequired => 1,
+ authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ),
flagsrequired => { borrow => 1 },
}
);
#coping with subscriptions
my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber);
-my @subscriptions = GetSubscriptions( $dat->{title}, $dat->{issn}, $biblionumber );
+my @subscriptions = GetSubscriptions( undef, undef, $biblionumber );
my @subs;
$dat->{'serial'}=1 if $subscriptionsnumber;
my $dbh = C4::Context->dbh;
my $marcflavour = C4::Context->preference("marcflavour");
my $marcnotesarray = GetMarcNotes ($record,$marcflavour);
+my $marcisbnsarray = GetMarcISBN ($record,$marcflavour);
my $marcauthorsarray = GetMarcAuthors ($record,$marcflavour);
my $marcsubjctsarray = GetMarcSubjects($record,$marcflavour);
my $marcseriesarray = GetMarcSeries ($record,$marcflavour);
if (C4::Context->preference("OPACShelfBrowser")) {
# pick the first itemnumber unless one was selected by the user
my $starting_itemnumber = $query->param('shelfbrowse_itemnumber'); # || $items[0]->{itemnumber};
- $template->param( OpenOPACShelfBrowser => 1) if $starting_itemnumber;
- # find the right cn_sort value for this item
- my ($starting_cn_sort, $starting_homebranch, $starting_location);
- my $sth_get_cn_sort = $dbh->prepare("SELECT cn_sort,homebranch,location from items where itemnumber=?");
- $sth_get_cn_sort->execute($starting_itemnumber);
- while (my $result = $sth_get_cn_sort->fetchrow_hashref()) {
- $starting_cn_sort = $result->{'cn_sort'};
- $starting_homebranch->{code} = $result->{'homebranch'};
- $starting_homebranch->{description} = $branches->{$result->{'homebranch'}}{branchname};
- $starting_location->{code} = $result->{'location'};
- $starting_location->{description} = GetAuthorisedValueDesc('','', $result->{'location'} ,'','','LOC', 'opac');
-
- }
-
- ## List of Previous Items
- # order by cn_sort, which should include everything we need for ordering purposes (though not
- # for limits, those need to be handled separately
- my $sth_shelfbrowse_previous;
- if (defined $starting_location->{code}) {
- $sth_shelfbrowse_previous = $dbh->prepare("
- SELECT *
- FROM items
- WHERE
- ((cn_sort = ? AND itemnumber < ?) OR cn_sort < ?) AND
- homebranch = ? AND location = ?
- ORDER BY cn_sort DESC, itemnumber LIMIT 3
- ");
- $sth_shelfbrowse_previous->execute($starting_cn_sort, $starting_itemnumber, $starting_cn_sort, $starting_homebranch->{code}, $starting_location->{code});
- } else {
- $sth_shelfbrowse_previous = $dbh->prepare("
- SELECT *
- FROM items
- WHERE
- ((cn_sort = ? AND itemnumber < ?) OR cn_sort < ?) AND
- homebranch = ?
- ORDER BY cn_sort DESC, itemnumber LIMIT 3
- ");
- $sth_shelfbrowse_previous->execute($starting_cn_sort, $starting_itemnumber, $starting_cn_sort, $starting_homebranch->{code});
- }
- my @previous_items;
- while (my $this_item = $sth_shelfbrowse_previous->fetchrow_hashref()) {
- my $sth_get_biblio = $dbh->prepare("SELECT biblio.*,biblioitems.isbn AS isbn FROM biblio LEFT JOIN biblioitems ON biblio.biblionumber=biblioitems.biblionumber WHERE biblio.biblionumber=?");
- $sth_get_biblio->execute($this_item->{biblionumber});
- while (my $this_biblio = $sth_get_biblio->fetchrow_hashref()) {
- $this_item->{'title'} = $this_biblio->{'title'};
- my $this_record = GetMarcBiblio($this_biblio->{'biblionumber'});
- $this_item->{'browser_normalized_upc'} = GetNormalizedUPC($this_record,$marcflavour);
- $this_item->{'browser_normalized_oclc'} = GetNormalizedOCLCNumber($this_record,$marcflavour);
- $this_item->{'browser_normalized_isbn'} = GetNormalizedISBN(undef,$this_record,$marcflavour);
- }
- unshift @previous_items, $this_item;
- }
-
- ## List of Next Items; this also intentionally catches the current item
- my $sth_shelfbrowse_next;
- if (defined $starting_location->{code}) {
- $sth_shelfbrowse_next = $dbh->prepare("
- SELECT *
- FROM items
- WHERE
- ((cn_sort = ? AND itemnumber >= ?) OR cn_sort > ?) AND
- homebranch = ? AND location = ?
- ORDER BY cn_sort, itemnumber LIMIT 3
- ");
- $sth_shelfbrowse_next->execute($starting_cn_sort, $starting_itemnumber, $starting_cn_sort, $starting_homebranch->{code}, $starting_location->{code});
- } else {
- $sth_shelfbrowse_next = $dbh->prepare("
- SELECT *
- FROM items
- WHERE
- ((cn_sort = ? AND itemnumber >= ?) OR cn_sort > ?) AND
- homebranch = ?
- ORDER BY cn_sort, itemnumber LIMIT 3
- ");
- $sth_shelfbrowse_next->execute($starting_cn_sort, $starting_itemnumber, $starting_cn_sort, $starting_homebranch->{code});
- }
- my @next_items;
- while (my $this_item = $sth_shelfbrowse_next->fetchrow_hashref()) {
- my $sth_get_biblio = $dbh->prepare("SELECT biblio.*,biblioitems.isbn AS isbn FROM biblio LEFT JOIN biblioitems ON biblio.biblionumber=biblioitems.biblionumber WHERE biblio.biblionumber=?");
- $sth_get_biblio->execute($this_item->{biblionumber});
- while (my $this_biblio = $sth_get_biblio->fetchrow_hashref()) {
- $this_item->{'title'} = $this_biblio->{'title'};
- my $this_record = GetMarcBiblio($this_biblio->{'biblionumber'});
- $this_item->{'browser_normalized_upc'} = GetNormalizedUPC($this_record,$marcflavour);
- $this_item->{'browser_normalized_oclc'} = GetNormalizedOCLCNumber($this_record,$marcflavour);
- $this_item->{'browser_normalized_isbn'} = GetNormalizedISBN(undef,$this_record,$marcflavour);
- }
- push @next_items, $this_item;
+ if (defined($starting_itemnumber)) {
+ $template->param( OpenOPACShelfBrowser => 1) if $starting_itemnumber;
+ my $nearby = GetNearbyItems($starting_itemnumber,3);
+
+ $template->param(
+ starting_homebranch => $nearby->{starting_homebranch}->{description},
+ starting_location => $nearby->{starting_location}->{description},
+ starting_ccode => $nearby->{starting_ccode}->{description},
+ starting_itemnumber => $nearby->{starting_itemnumber},
+ shelfbrowser_prev_itemnumber => $nearby->{prev_itemnumber},
+ shelfbrowser_next_itemnumber => $nearby->{next_itemnumber},
+ shelfbrowser_prev_biblionumber => $nearby->{prev_biblionumber},
+ shelfbrowser_next_biblionumber => $nearby->{next_biblionumber},
+ PREVIOUS_SHELF_BROWSE => $nearby->{prev},
+ NEXT_SHELF_BROWSE => $nearby->{next},
+ );
}
-
- # alas, these won't auto-vivify, see http://www.perlmonks.org/?node_id=508481
- my $shelfbrowser_next_itemnumber = $next_items[-1]->{itemnumber} if @next_items;
- my $shelfbrowser_next_biblionumber = $next_items[-1]->{biblionumber} if @next_items;
-
- $template->param(
- starting_homebranch => $starting_homebranch->{description},
- starting_location => $starting_location->{description},
- starting_itemnumber => $starting_itemnumber,
- shelfbrowser_prev_itemnumber => (@previous_items ? $previous_items[0]->{itemnumber} : 0),
- shelfbrowser_next_itemnumber => $shelfbrowser_next_itemnumber,
- shelfbrowser_prev_biblionumber => (@previous_items ? $previous_items[0]->{biblionumber} : 0),
- shelfbrowser_next_biblionumber => $shelfbrowser_next_biblionumber,
- PREVIOUS_SHELF_BROWSE => \@previous_items,
- NEXT_SHELF_BROWSE => \@next_items,
- );
}
if (C4::Context->preference("BakerTaylorEnabled")) {