- $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},
+ );