X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;ds=sidebyside;f=opac%2Fopac-ISBDdetail.pl;h=b3b29deea72afa91b651db90dfa6b81ace4176a5;hb=241c8cc03d02b78de731f5312d53c1641dec0d2a;hp=d6aba31f9613d1d567fb0387f62d8ca351f48bc9;hpb=5e4e10c4ca558180137bf5a4ff5a68495efa0ec7;p=koha-ffzg.git diff --git a/opac/opac-ISBDdetail.pl b/opac/opac-ISBDdetail.pl index d6aba31f96..b3b29deea7 100755 --- a/opac/opac-ISBDdetail.pl +++ b/opac/opac-ISBDdetail.pl @@ -41,109 +41,109 @@ the items attached to the biblio use Modern::Perl; -use C4::Auth; +use C4::Auth qw( get_template_and_user ); use C4::Context; -use C4::Output; +use C4::Output qw( parametrized_url output_html_with_http_headers ); use CGI qw ( -utf8 ); -use MARC::Record; -use C4::Biblio; -use C4::Items; +use C4::Biblio qw( + CountItemsIssued + GetISBDView + GetMarcControlnumber + GetMarcISSN + TransformMarcToKoha +); use C4::Reserves; -use C4::Acquisition; -use C4::Serials; # uses getsubscriptionfrom biblionumber -use C4::Koha; -use Koha::IssuingRules; -use Koha::Items; +use C4::Serials qw( CountSubscriptionFromBiblionumber SearchSubscriptions GetLatestSerials ); +use C4::Koha qw( + GetNormalizedEAN + GetNormalizedISBN + GetNormalizedOCLCNumber + GetNormalizedUPC +); +use Koha::CirculationRules; use Koha::ItemTypes; use Koha::Patrons; use Koha::RecordProcessor; use Koha::Biblios; +use Koha::Util::MARC; my $query = CGI->new(); +my $biblionumber = $query->param('biblionumber'); +my $biblio; +$biblio = Koha::Biblios->find( $biblionumber, { prefetch => [ 'metadata', 'items' ] } ) if $biblionumber; +if( !$biblio ) { + print $query->redirect('/cgi-bin/koha/errors/404.pl'); + exit; +} + +#open template my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { template_name => "opac-ISBDdetail.tt", 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 -if(my $cart_list = $query->cookie("bib_list")){ - my @cart_list = split(/\//, $cart_list); - if ( grep {$_ eq $biblionumber} @cart_list) { - $template->param( incart => 1 ); - } -} - -my $marcflavour = C4::Context->preference("marcflavour"); +my $patron = Koha::Patrons->find($loggedinuser); -my @items = GetItemsInfo($biblionumber); -if (scalar @items >= 1) { - my $borcat; - if ( C4::Context->preference('OpacHiddenItemsExceptions') ) { - - # we need to fetch the borrower info here, so we can pass the category - my $borrower = GetMember( borrowernumber => $borrowernumber ); - $borcat = $borrower->{categorycode}; - } +my $opachiddenitems_rules = C4::Context->yaml_preference('OpacHiddenItems'); - my @hiddenitems = GetHiddenItemnumbers( { items => \@items, borcat => $borcat }); - - if (scalar @hiddenitems == scalar @items ) { - print $query->redirect("/cgi-bin/koha/errors/404.pl"); # escape early +unless ( $patron and $patron->category->override_hidden_items ) { + # only skip this check if there's a logged in user + # and its category overrides OpacHiddenItems + if ( $biblio->hidden_in_opac({ rules => $opachiddenitems_rules }) ) { + print $query->redirect('/cgi-bin/koha/errors/404.pl'); # escape early exit; } } -my $record = GetMarcBiblio({ - biblionumber => $biblionumber, - embed_items => 1 }); -if ( ! $record ) { - print $query->redirect("/cgi-bin/koha/errors/404.pl"); - exit; -} +my $record = $biblio->metadata->record; +my @items = $biblio->items->filter_by_visible_in_opac({ patron => $patron })->as_list; -my $biblio = Koha::Biblios->find( $biblionumber ); - -my $framework = GetFrameworkCode( $biblionumber ); -my $record_processor = Koha::RecordProcessor->new({ - filters => 'ViewPolicy', - options => { - interface => 'opac', - frameworkcode => $framework +my $record_processor = Koha::RecordProcessor->new( + { filters => [ 'EmbedItems', 'ViewPolicy' ], + options => { + interface => 'opac', + frameworkcode => $biblio->frameworkcode, + items => \@items + } } -}); +); $record_processor->process($record); +# get biblionumbers stored in the cart +if(my $cart_list = $query->cookie("bib_list")){ + my @cart_list = split(/\//, $cart_list); + if ( grep {$_ eq $biblionumber} @cart_list) { + $template->param( incart => 1 ); + } +} + +my $marcflavour = C4::Context->preference("marcflavour"); # 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 $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, + 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( $record ); +my $dat = TransformMarcToKoha({ record => $record }); my @subscriptions = SearchSubscriptions({ biblionumber => $biblionumber, orderby => 'title' }); my @subs; @@ -168,27 +168,17 @@ $template->param( subscriptionsnumber => $subscriptionsnumber, ); -my $norequests = 1; my $allow_onshelf_holds; my $res = GetISBDView({ 'record' => $record, 'template' => 'opac', - 'framework' => $framework + 'framework' => $biblio->frameworkcode }); -my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } }; -my $patron = Koha::Patrons->find( $loggedinuser ); -for my $itm (@items) { - my $item = Koha::Items->find( $itm->{itemnumber} ); - $norequests = 0 - if $norequests - && !$itm->{'withdrawn'} - && !$itm->{'itemlost'} - && ($itm->{'itemnotforloan'}<0 || not $itm->{'itemnotforloan'}) - && !$itemtypes->{$itm->{'itype'}}->{notforloan} - && $itm->{'itemnumber'}; - - $allow_onshelf_holds = Koha::IssuingRules->get_onshelfholds_policy( { item => $item, patron => $patron } ) +my $items = $biblio->items; +while ( my $item = $items->next ) { + + $allow_onshelf_holds = Koha::CirculationRules->get_onshelfholds_policy( { item => $item, patron => $patron } ) unless $allow_onshelf_holds; } @@ -196,8 +186,9 @@ if( $allow_onshelf_holds || CountItemsIssued($biblionumber) || $biblio->has_item $template->param( ReservableItems => 1 ); } +my $norequests = ! $items->filter_by_for_hold->count; + $template->param( - RequestOnOpac => C4::Context->preference("RequestOnOpac"), norequests => $norequests, ISBD => $res, biblio => $biblio, @@ -211,6 +202,7 @@ 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 + my $oclc_no = Koha::Util::MARC::oclc_number( $record ); $search_for_title = parametrized_url( $search_for_title, { @@ -220,15 +212,19 @@ if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ ISSN => $issn, CONTROLNUMBER => $marccontrolnumber, BIBLIONUMBER => $biblionumber, + OCLC_NO => $oclc_no, } ); $template->param('OPACSearchForTitleIn' => $search_for_title); } if( C4::Context->preference('ArticleRequests') ) { + my $itemtype = Koha::ItemTypes->find($biblio->itemtype); my $artreqpossible = $patron ? $biblio->can_article_request( $patron ) - : Koha::ItemTypes->find($biblio->itemtype)->may_article_request; + : $itemtype + ? $itemtype->may_article_request + : q{}; $template->param( artreqpossible => $artreqpossible ); }