X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-detail.pl;h=f2308347a2805b4d15fbd80ce453aa272f62b00c;hb=700de9664d0e9016845d12916905e458cab9dbd4;hp=03bd8a4ea34ec1f7409bcc4ddd137197189a6010;hpb=baec90aae9359709abc9c18f8b2de0f446bf194a;p=koha_fer diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index 03bd8a4ea3..f2308347a2 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -1,6 +1,7 @@ #!/usr/bin/perl # Copyright 2000-2002 Katipo Communications +# Copyright 2010 BibLibre # # This file is part of Koha. # @@ -39,6 +40,10 @@ use C4::Review; use C4::Members; use C4::VirtualShelves; use C4::XSLT; +use C4::ShelfBrowser; +use C4::Charset; +use MARC::Record; +use MARC::Field; BEGIN { if (C4::Context->preference('BakerTaylorEnabled')) { @@ -53,7 +58,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-detail.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, } ); @@ -69,6 +74,9 @@ if ( ! $record ) { exit; } $template->param( biblionumber => $biblionumber ); + +SetUTF8Flag($record); + # XSLT processing of some stuff if (C4::Context->preference("OPACXSLTDetailsDisplay") ) { $template->param( 'XSLTBloc' => XSLTParse4Display($biblionumber, $record, 'Detail', 'opac') ); @@ -100,7 +108,7 @@ my $collections = GetKohaAuthorisedValues('items.ccode',$dat->{'frameworkcode'} #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; @@ -210,7 +218,6 @@ my $subtitle = GetRecordValue('subtitle', $record, GetFrameworkCode($bib MARCAUTHORS => $marcauthorsarray, MARCSERIES => $marcseriesarray, MARCURLS => $marcurlsarray, - MARCISBNS => $marcisbnsarray, norequests => $norequests, RequestOnOpac => C4::Context->preference("RequestOnOpac"), itemdata_ccode => $itemfields{ccode}, @@ -222,6 +229,33 @@ my $subtitle = GetRecordValue('subtitle', $record, GetFrameworkCode($bib subtitle => $subtitle, ); +if (C4::Context->preference("AlternateHoldingsField") && scalar @items == 0) { + my $fieldspec = C4::Context->preference("AlternateHoldingsField"); + my $subfields = substr $fieldspec, 3; + my $holdingsep = C4::Context->preference("AlternateHoldingsSeparator") || ' '; + my @alternateholdingsinfo = (); + my @holdingsfields = $record->field(substr $fieldspec, 0, 3); + + for my $field (@holdingsfields) { + my %holding = ( holding => '' ); + my $havesubfield = 0; + for my $subfield ($field->subfields()) { + if ((index $subfields, $$subfield[0]) >= 0) { + $holding{'holding'} .= $holdingsep if (length $holding{'holding'} > 0); + $holding{'holding'} .= $$subfield[1]; + $havesubfield++; + } + } + if ($havesubfield) { + push(@alternateholdingsinfo, \%holding); + } + } + + $template->param( + ALTERNATEHOLDINGS => \@alternateholdingsinfo, + ); +} + foreach ( keys %{$dat} ) { $template->param( "$_" => defined $dat->{$_} ? $dat->{$_} : '' ); } @@ -446,111 +480,23 @@ if ( C4::Context->preference("Babeltheque") ) { 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")) {