X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=catalogue%2FMARCdetail.pl;h=7ddbbd40ddedeabcf861f06d6405fde2ce38b3da;hb=9d6d641d1f8b77271800f43bc027b651f9aea52b;hp=2b967df2e68588ec1171568c9aaa60c289f123e0;hpb=f941dc341a25cd6110ed4e4d212ca9a094773297;p=srvgit diff --git a/catalogue/MARCdetail.pl b/catalogue/MARCdetail.pl index 2b967df2e6..7ddbbd40dd 100755 --- a/catalogue/MARCdetail.pl +++ b/catalogue/MARCdetail.pl @@ -5,18 +5,18 @@ # # 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 2 of the License, or (at your option) any later -# version. +# 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. +# 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, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . =head1 NAME @@ -33,7 +33,7 @@ This script needs a biblionumber as parameter It shows the biblio in a (nice) MARC format depending on MARC parameters tables. -The template is in /catalogue/MARCdetail.tmpl. +The template is in /catalogue/MARCdetail.tt. this template must be divided into 11 "tabs". The first 10 tabs present the biblio, the 11th one presents @@ -43,28 +43,38 @@ the items attached to the biblio =cut -use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; +use CGI qw ( -utf8 ); +use HTML::Entities; -use C4::Auth; +use C4::Auth qw( get_template_and_user ); use C4::Context; -use C4::Output; -use CGI; +use C4::Output qw( output_html_with_http_headers ); use C4::Koha; -use MARC::Record; -use C4::Biblio; -use C4::Items; -use C4::Acquisition; -use C4::Members; # to use GetMember -use C4::Serials; #uses getsubscriptionsfrombiblionumber GetSubscriptionsFromBiblionumber -use C4::Search; # enabled_staff_search_views +use C4::Biblio qw( + GetAuthorisedValueDesc + GetBiblioData + GetFrameworkCode + GetMarcBiblio + GetMarcFromKohaField + GetMarcStructure +); +use C4::Serials qw( CountSubscriptionFromBiblionumber GetSubscription GetSubscriptionsFromBiblionumber ); +use C4::Search qw( z3950_search_args enabled_staff_search_views ); + +use Koha::Biblios; +use Koha::BiblioFrameworks; +use Koha::Patrons; +use Koha::DateUtils qw( output_pref ); +use Koha::Virtualshelves; +use List::MoreUtils qw( uniq ); -my $query = new CGI; +my $query = CGI->new; my $dbh = C4::Context->dbh; my $biblionumber = $query->param('biblionumber'); -my $frameworkcode = $query->param('frameworkcode'); -$frameworkcode = GetFrameworkCode( $biblionumber ) unless ($frameworkcode); +$biblionumber = HTML::Entities::encode($biblionumber); +my $frameworkcode = $query->param('frameworkcode') // GetFrameworkCode( $biblionumber ); my $popup = $query->param('popup') ; # if set to 1, then don't insert links, it's just to show the biblio @@ -73,17 +83,16 @@ my $subscriptionid = $query->param('subscriptionid'); # open template my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "catalogue/MARCdetail.tmpl", + template_name => "catalogue/MARCdetail.tt", query => $query, type => "intranet", - authnotrequired => 0, flagsrequired => { catalogue => 1 }, - debug => 1, } ); -my $record = GetMarcBiblio($biblionumber, 1); -$template->param( ocoins => GetCOinSBiblio($record) ); +my $record = GetMarcBiblio({ + biblionumber => $biblionumber, + embed_items => 1 }); if ( not defined $record ) { # biblionumber invalid -> report and exit @@ -94,42 +103,42 @@ if ( not defined $record ) { exit; } +my $biblio_object = Koha::Biblios->find( $biblionumber ); # FIXME Should replace $biblio my $tagslib = &GetMarcStructure(1,$frameworkcode); my $biblio = GetBiblioData($biblionumber); if($query->cookie("holdfor")){ - my $holdfor_patron = GetMember('borrowernumber' => $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'}, + holdfor_surname => $holdfor_patron->surname, + holdfor_firstname => $holdfor_patron->firstname, + holdfor_cardnumber => $holdfor_patron->cardnumber, ); } +if( $query->cookie("searchToOrder") ){ + my ( $basketno, $vendorid ) = split( /\//, $query->cookie("searchToOrder") ); + $template->param( + searchtoorder_basketno => $basketno, + searchtoorder_vendorid => $vendorid + ); +} + +$template->param( ocoins => $biblio_object->get_coins ); + #count of item linked -my $itemcount = GetItemsCount($biblionumber); +my $itemcount = $biblio_object->items->count; $template->param( count => $itemcount, bibliotitle => $biblio->{title}, ); -# Getting the list of all frameworks -# get framework list -my $frameworks = getframeworks; -my @frameworkcodeloop; -foreach my $thisframeworkcode ( keys %$frameworks ) { - my %row = ( - value => $thisframeworkcode, - frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'}, - ); - if ($frameworkcode eq $thisframeworkcode){ - $row{'selected'}= 1; - } - push @frameworkcodeloop, \%row; -} -$template->param( frameworkcodeloop => \@frameworkcodeloop, ); +my $frameworks = Koha::BiblioFrameworks->search( {}, { order_by => ['frameworktext'] } ); +$template->param( + frameworks => $frameworks, + frameworkcode => $frameworkcode, +); # fill arrays my @loop_data = (); -my $tag; # loop through each tab 0 through 9 for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) { @@ -149,7 +158,8 @@ for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) { $subfield_data{marc_tag} = '000'; push( @subfields_data, \%subfield_data ); my %tag_data; - $tag_data{tag} = '000 -' . $tagslib->{'000'}->{lib}; + $tag_data{tag} = '000'; + $tag_data{tag_desc} = $tagslib->{'000'}->{lib}; my @tmp = @subfields_data; $tag_data{subfield} = \@tmp; push( @loop_data, \%tag_data ); @@ -236,12 +246,9 @@ for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) { $tag_data{tag} = $tagslib->{ $fields[$x_i]->tag() }->{lib}; } else { - $tag_data{tag} = - $fields[$x_i]->tag() - . ' ' - . C4::Koha::display_marc_indicators($fields[$x_i]) - . ' - ' - . $tagslib->{ $fields[$x_i]->tag() }->{lib}; + $tag_data{tag} = $fields[$x_i]->tag(); + $tag_data{tag_ind} = C4::Koha::display_marc_indicators($fields[$x_i]); + $tag_data{tag_desc} = $tagslib->{ $fields[$x_i]->tag() }->{lib}; } } my @tmp = @subfields_data; @@ -261,55 +268,54 @@ for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) { my @fields = $record->fields(); my %witness ; #---- stores the list of subfields used at least once, with the "meaning" of the code -my @big_array; -my $norequests = 1; +my @item_subfield_codes; +my @item_loop; + foreach my $field (@fields) { next if ( $field->tag() < 10 ); my @subf = $field->subfields; - my %this_row; + my $item; # loop through each subfield for my $i ( 0 .. $#subf ) { next if ( $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{tab} ne 10 ); next if ( $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{hidden} =~ /-7|-4|-3|-2|2|3|5|8/); + + push @item_subfield_codes, $subf[$i][0]; $witness{ $subf[$i][0] } = $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{lib}; - $this_row{ $subf[$i][0] } = GetAuthorisedValueDesc( $field->tag(), - $subf[$i][0], $subf[$i][1], '', $tagslib) || $subf[$i][1]; - $norequests = 0 if $subf[$i][1] ==0 and $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{kohafield} eq 'items.notforloan'; - } - if (%this_row) { - push( @big_array, \%this_row ); - } -} -my ($holdingbrtagf,$holdingbrtagsubf) = &GetMarcFromKohaField("items.holdingbranch",$frameworkcode); -@big_array = sort {$a->{$holdingbrtagsubf} cmp $b->{$holdingbrtagsubf}} @big_array; + # Allow repeatables (BZ 13574) + if( $item->{$subf[$i][0]}) { + $item->{$subf[$i][0]} .= ' | '; + } else { + $item->{$subf[$i][0]} = q{}; + } + if( $tagslib->{$field->tag()}->{$subf[$i][0]}->{isurl} ) { + $item->{$subf[$i][0]} .= "$subf[$i][1]"; + } else { + $item->{ $subf[$i][0] } .= GetAuthorisedValueDesc( $field->tag(), $subf[$i][0], $subf[$i][1], '', $tagslib) || $subf[$i][1]; + } -#fill big_row with missing datas -foreach my $subfield_code ( keys(%witness) ) { - for ( my $i = 0 ; $i <= $#big_array ; $i++ ) { - $big_array[$i]{$subfield_code} = " " - unless ( $big_array[$i]{$subfield_code} ); + my $kohafield = $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{kohafield}; + $item->{ $subf[$i][0] } = output_pref( { str => $item->{ $subf[$i][0] }, dateonly => 1 } ) + if grep { $kohafield eq $_ } + qw( items.dateaccessioned items.onloan items.datelastseen items.datelastborrowed items.replacementpricedate ); } + push @item_loop, $item if $item; } -# now, construct template ! -my @item_value_loop; -my @header_value_loop; -for ( my $i = 0 ; $i <= $#big_array ; $i++ ) { - my $items_data; - foreach my $subfield_code ( keys(%witness) ) { - $items_data .= "" . $big_array[$i]{$subfield_code} . ""; +my ($holdingbrtagf,$holdingbrtagsubf) = &GetMarcFromKohaField( "items.holdingbranch" ); +@item_loop = sort {$a->{$holdingbrtagsubf} cmp $b->{$holdingbrtagsubf}} @item_loop; + +@item_subfield_codes = uniq @item_subfield_codes; +# fill item info +my @item_header_loop; +for my $subfield_code ( @item_subfield_codes ) { + push @item_header_loop, $witness{$subfield_code}; + for my $item_data ( @item_loop ) { + $item_data->{$subfield_code} ||= " " } - my %row_data; - $row_data{item_value} = $items_data; - push( @item_value_loop, \%row_data ); -} -foreach my $subfield_code ( keys(%witness) ) { - my %header_value; - $header_value{header_value} = $witness{$subfield_code}; - push( @header_value_loop, \%header_value ); } my $subscriptionscount = CountSubscriptionFromBiblionumber($biblionumber); @@ -323,16 +329,53 @@ if ($subscriptionscount) { ); } +# get biblionumbers stored in the cart +my @cart_list; + +if($query->cookie("intranet_bib_list")){ + my $cart_list = $query->cookie("intranet_bib_list"); + @cart_list = split(/\//, $cart_list); + if ( grep {$_ eq $biblionumber} @cart_list) { + $template->param( incart => 1 ); + } +} + +my $some_private_shelves = Koha::Virtualshelves->get_some_shelves( + { + borrowernumber => $loggedinuser, + add_allowed => 1, + category => 1, + } +); +my $some_public_shelves = Koha::Virtualshelves->get_some_shelves( + { + borrowernumber => $loggedinuser, + add_allowed => 1, + category => 2, + } +); + + +$template->param( + add_to_some_private_shelves => $some_private_shelves, + add_to_some_public_shelves => $some_public_shelves, +); + $template->param ( - norequests => $norequests, - item_loop => \@item_value_loop, - item_header_loop => \@header_value_loop, + item_loop => \@item_loop, + item_header_loop => \@item_header_loop, + item_subfield_codes => \@item_subfield_codes, biblionumber => $biblionumber, popup => $popup, hide_marc => C4::Context->preference('hide_marc'), marcview => 1, z3950_search_params => C4::Search::z3950_search_args($biblio), C4::Search::enabled_staff_search_views, + searchid => scalar $query->param('searchid'), + biblio => $biblio_object, + loggedinuser => $loggedinuser, ); +$template->param( holdcount => $biblio_object->holds->count ); + output_html_with_http_headers $query, $cookie, $template->output;