X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=catalogue%2Fdetail.pl;h=48bd79987962c14abbc17200011d38529d7bd38d;hb=73edf936ae9be2a704389896e5ad316eb8cf96ec;hp=dd5d1830e6dd3ea82f5c309fe2414a2035377ba6;hpb=e87fa069dc3d10284a2bd31b7c7913132fed5d06;p=koha-ffzg.git diff --git a/catalogue/detail.pl b/catalogue/detail.pl index dd5d1830e6..48bd799879 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -20,33 +20,46 @@ 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::Koha; -use C4::Serials; #uses getsubscriptionfrom biblionumber -use C4::Output; -use C4::Biblio; -use C4::Items; -use C4::Circulation; +use C4::Koha qw( + GetAuthorisedValues + getitemtypeimagelocation + GetNormalizedEAN + GetNormalizedISBN + GetNormalizedOCLCNumber + GetNormalizedUPC +); +use C4::Serials qw( CountSubscriptionFromBiblionumber SearchSubscriptions GetLatestSerials ); +use C4::Output qw( output_html_with_http_headers ); +use C4::Biblio qw( GetBiblioData GetFrameworkCode ); +use C4::Items qw( GetAnalyticsCount ); use C4::Reserves; -use C4::Serials; -use C4::XISBN qw(get_xisbns); -use C4::External::Amazon; -use C4::Search; # enabled_staff_search_views -use C4::Tags qw(get_tags); -use C4::XSLT; -use C4::Images; -use Koha::DateUtils; +use C4::Serials qw( CountSubscriptionFromBiblionumber SearchSubscriptions GetLatestSerials ); +use C4::XISBN qw( get_xisbns ); +use C4::External::Amazon qw( get_amazon_tld ); +use C4::Search qw( z3950_search_args enabled_staff_search_views new_record_from_zebra ); +use C4::Tags qw( get_tags ); +use C4::XSLT qw( XSLTParse4Display ); +use Koha::DateUtils qw( format_sqldatetime ); use C4::HTML5Media; -use C4::CourseReserves qw(GetItemCourseReservesInfo); -use C4::Acquisition qw(GetOrdersByBiblionumber); +use C4::CourseReserves qw( GetItemCourseReservesInfo ); use Koha::AuthorisedValues; use Koha::Biblios; +use Koha::Biblio::ItemGroup::Items; +use Koha::Biblio::ItemGroups; +use Koha::CoverImages; +use Koha::DateUtils; +use Koha::Illrequests; use Koha::Items; use Koha::ItemTypes; use Koha::Patrons; use Koha::Virtualshelves; use Koha::Plugins; +use Koha::Recalls; +use Koha::SearchEngine::Search; +use Koha::SearchEngine::QueryBuilder; +use Koha::Serial::Items; my $query = CGI->new(); @@ -57,28 +70,27 @@ my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user( template_name => 'catalogue/detail.tt', query => $query, type => "intranet", - authnotrequired => 0, flagsrequired => { catalogue => 1 }, } ); # Determine if we should be offering any enhancement plugin buttons -if ( C4::Context->preference('UseKohaPlugins') && - C4::Context->config('enable_plugins') ) { - # Only pass plugins that can offer a toolbar button - my @plugins = Koha::Plugins->new()->GetPlugins({ - method => 'intranet_catalog_biblio_enhancements_toolbar_button' - }); - $template->param( - plugins => \@plugins - ); +if ( C4::Context->config('enable_plugins') ) { + # Only pass plugins that can offer a toolbar button + my @plugins = Koha::Plugins->new()->GetPlugins({ + method => 'intranet_catalog_biblio_enhancements_toolbar_button' + }); + $template->param( + plugins => \@plugins, + ); } my $biblionumber = $query->param('biblionumber'); $biblionumber = HTML::Entities::encode($biblionumber); -my $record = GetMarcBiblio({ biblionumber => $biblionumber }); +my $biblio = Koha::Biblios->find( $biblionumber ); +$template->param( 'biblio', $biblio ); -if ( not defined $record ) { +unless ( $biblio ) { # biblionumber invalid -> report and exit $template->param( unknownbiblionumber => 1, biblionumber => $biblionumber ); @@ -86,14 +98,66 @@ if ( not defined $record ) { exit; } -if($query->cookie("holdfor")){ +my $marc_record = eval { $biblio->metadata->record }; +my $invalid_marc_record = $@ || !$marc_record; +if ($invalid_marc_record) { + $template->param( decoding_error => $@ ); + my $marc_xml = C4::Charset::StripNonXmlChars( $biblio->metadata->metadata ); + + $marc_record = eval { + MARC::Record::new_from_xml( $marc_xml, 'UTF-8', + C4::Context->preference('marcflavour') ); + }; +} + +my $op = $query->param('op') || q{}; +if ( $op eq 'set_item_group' ) { + my $item_group_id = $query->param('item_group_id'); + my @itemnumbers = $query->multi_param('itemnumber'); + + foreach my $item_id (@itemnumbers) { + my $item_group_item = Koha::Biblio::ItemGroup::Items->find( { item_id => $item_id } ); + + if ($item_group_item) { + $item_group_item->item_group_id($item_group_id); + } + else { + $item_group_item = Koha::Biblio::ItemGroup::Item->new( + { + item_id => $item_id, + item_group_id => $item_group_id, + } + ); + } + + $item_group_item->store(); + } +} +elsif ( $op eq 'unset_item_group' ) { + my $item_group_id = $query->param('item_group_id'); + my @itemnumbers = $query->multi_param('itemnumber'); + + foreach my $item_id (@itemnumbers) { + my $item_group_item = Koha::Biblio::ItemGroup::Items->find( { item_id => $item_id } ); + $item_group_item->delete() if $item_group_item; + } +} + +if($query->cookie("holdfor")){ my $holdfor_patron = Koha::Patrons->find( $query->cookie("holdfor") ); + if ( $holdfor_patron ) { + $template->param( + holdfor => $query->cookie("holdfor"), + holdfor_patron => $holdfor_patron, + ); + } +} + +if($query->cookie("searchToOrder")){ + my ( $basketno, $vendorid ) = split( /\//, $query->cookie("searchToOrder") ); $template->param( - # FIXME Should pass the patron object - holdfor => $query->cookie("holdfor"), - holdfor_surname => $holdfor_patron->surname, - holdfor_firstname => $holdfor_patron->firstname, - holdfor_cardnumber => $holdfor_patron->cardnumber, + searchtoorder_basketno => $basketno, + searchtoorder_vendorid => $vendorid ); } @@ -101,70 +165,57 @@ my $fw = GetFrameworkCode($biblionumber); my $showallitems = $query->param('showallitems'); my $marcflavour = C4::Context->preference("marcflavour"); -# XSLT processing of some stuff -my $xslfile = C4::Context->preference('XSLTDetailsDisplay'); -my $lang = $xslfile ? C4::Languages::getlanguage() : undef; -my $sysxml = $xslfile ? C4::XSLT::get_xslt_sysprefs() : undef; - -if ( $xslfile ) { - $template->param( - XSLTDetailsDisplay => '1', - XSLTBloc => XSLTParse4Display( - $biblionumber, $record, "XSLTDetailsDisplay", - 1, undef, $sysxml, $xslfile, $lang - ) - ); -} - $template->param( 'SpineLabelShowPrintOnBibDetails' => C4::Context->preference("SpineLabelShowPrintOnBibDetails") ); -$template->param( ocoins => GetCOinSBiblio($record) ); + +$template->param( ocoins => !$invalid_marc_record ? $biblio->get_coins : undef ); # 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($marc_record,$marcflavour); +my $ean = GetNormalizedEAN($marc_record,$marcflavour); +my $oclc = GetNormalizedOCLCNumber($marc_record,$marcflavour); +my $isbn = GetNormalizedISBN(undef,$marc_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, + content_identifier_exists => $content_identifier_exists, ); -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); -my $marcurlsarray = GetMarcUrls ($record,$marcflavour); -my $marchostsarray = GetMarcHosts($record,$marcflavour); -my $subtitle = GetRecordValue('subtitle', $record, $fw); - -my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search->unblessed } }; - -my $dbh = C4::Context->dbh; - -my @all_items = GetItemsInfo( $biblionumber ); +my $itemtypes = { map { $_->itemtype => $_ } @{ Koha::ItemTypes->search_with_localization->as_list } }; +my $all_items = $biblio->items->search_ordered; my @items; my $patron = Koha::Patrons->find( $borrowernumber ); -for my $itm (@all_items) { - push @items, $itm unless ( $itm->{itemlost} && $patron->category->hidelostitems && !$showallitems); +while ( my $item = $all_items->next ) { + push @items, $item + unless $item->itemlost + && $patron->category->hidelostitems + && !$showallitems; } # flag indicating existence of at least one item linked via a host record my $hostrecords; # adding items linked via host biblios -my @hostitems = GetHostItemsInfo($record); -if (@hostitems){ - $hostrecords =1; - push (@items,@hostitems); +my $hostitems = $biblio->host_items; +if ( $hostitems->count ) { + $hostrecords = 1; + push @items, $hostitems->as_list; } my $dat = &GetBiblioData($biblionumber); +#is biblio a collection and are bundles enabled +my $leader = $marc_record->leader(); +$dat->{bundlesEnabled} = ( ( substr( $leader, 7, 1 ) eq 'c' ) + && C4::Context->preference('BundleNotLoanValue') ) ? 1 : 0; + #coping with subscriptions my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber); my @subscriptions = SearchSubscriptions({ biblionumber => $biblionumber, orderby => 'title' }); @@ -172,7 +223,7 @@ my @subs; foreach my $subscription (@subscriptions) { my %cell; - my $serials_to_display; + my $serials_to_display; $cell{subscriptionid} = $subscription->{subscriptionid}; $cell{subscriptionnotes} = $subscription->{internalnotes}; $cell{missinglist} = $subscription->{missinglist}; @@ -180,16 +231,61 @@ foreach my $subscription (@subscriptions) { $cell{branchcode} = $subscription->{branchcode}; $cell{hasalert} = $subscription->{hasalert}; $cell{callnumber} = $subscription->{callnumber}; + $cell{location} = $subscription->{location}; $cell{closed} = $subscription->{closed}; #get the three latest serials. - $serials_to_display = $subscription->{staffdisplaycount}; - $serials_to_display = C4::Context->preference('StaffSerialIssueDisplayCount') unless $serials_to_display; - $cell{staffdisplaycount} = $serials_to_display; + $serials_to_display = $subscription->{staffdisplaycount}; + $serials_to_display = C4::Context->preference('StaffSerialIssueDisplayCount') unless $serials_to_display; + $cell{staffdisplaycount} = $serials_to_display; $cell{latestserials} = GetLatestSerials( $subscription->{subscriptionid}, $serials_to_display ); push @subs, \%cell; } +# Get component parts details +my $showcomp = C4::Context->preference('ShowComponentRecords'); +my $show_analytics; +if ( $showcomp eq 'both' || $showcomp eq 'staff' ) { + if ( my $components = !$invalid_marc_record ? $biblio->get_marc_components(C4::Context->preference('MaxComponentRecords')) : undef ) { + $show_analytics = 1 if @{$components}; # just show link when having results + $template->param( analytics_error => 1 ) if grep { $_->message eq 'component_search' } @{$biblio->object_messages}; + my $parts; + for my $part ( @{$components} ) { + $part = C4::Search::new_record_from_zebra( 'biblioserver', $part ); + my $id = Koha::SearchEngine::Search::extract_biblionumber( $part ); + + push @{$parts}, + XSLTParse4Display( + { + biblionumber => $id, + record => $part, + xsl_syspref => "XSLTResultsDisplay", + fix_amps => 1, + } + ); + } + $template->param( ComponentParts => $parts ); + my ( $comp_query, $comp_query_str, $comp_sort ) = $biblio->get_components_query; + my $cpq = $comp_query_str . "&sort_by=" . $comp_sort; + $template->param( ComponentPartsQuery => $cpq ); + } +} else { # check if we should show analytics anyway + $show_analytics = 1 if !$invalid_marc_record && @{$biblio->get_marc_components(1)}; # count matters here, results does not + $template->param( analytics_error => 1 ) if grep { $_->message eq 'component_search' } @{$biblio->object_messages}; +} + +# XSLT processing of some stuff +my $xslt_variables = { show_analytics_link => $show_analytics }; +$template->param( + XSLTDetailsDisplay => '1', + XSLTBloc => XSLTParse4Display({ + biblionumber => $biblionumber, + record => $marc_record, + xsl_syspref => "XSLTDetailsDisplay", + fix_amps => 1, + xslt_variables => $xslt_variables, + }), +); # Get acquisition details if ( C4::Context->preference('AcquisitionDetails') ) { @@ -206,13 +302,27 @@ if ( C4::Context->preference('AcquisitionDetails') ) { ); } +if ( C4::Context->preference('suggestion') ) { + my $suggestions = Koha::Suggestions->search( + { + biblionumber => $biblionumber, + archived => 0, + }, + { + order_by => { -desc => 'suggesteddate' } + } + ); + my $nb_archived_suggestions = Koha::Suggestions->search({ biblionumber => $biblionumber, archived => 1 })->count; + $template->param( suggestions => $suggestions, nb_archived_suggestions => $nb_archived_suggestions ); +} + if ( defined $dat->{'itemtype'} ) { - $dat->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $dat->{itemtype} }{imageurl} ); + $dat->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $dat->{itemtype} }->imageurl ); } -$dat->{'count'} = scalar @all_items + @hostitems; -$dat->{'showncount'} = scalar @items + @hostitems; -$dat->{'hiddencount'} = scalar @all_items + @hostitems - scalar @items; +$dat->{'count'} = $all_items->count + $hostitems->count; +$dat->{'showncount'} = scalar @items + $hostitems->count; +$dat->{'hiddencount'} = $all_items->count + $hostitems->count - scalar @items; my $shelflocations = { map { $_->{authorised_value} => $_->{lib} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => $fw, kohafield => 'items.location' } ) }; @@ -221,7 +331,6 @@ my $collections = my $copynumbers = { map { $_->{authorised_value} => $_->{lib} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => $fw, kohafield => 'items.copynumber' } ) }; my (@itemloop, @otheritemloop, %itemfields); -my $norequests = 1; my $mss = Koha::MarcSubfieldStructures->search({ frameworkcode => $fw, kohafield => 'items.itemlost', authorised_value => [ -and => {'!=' => undef }, {'!=' => ''}] }); if ( $mss->count ) { @@ -254,111 +363,136 @@ if ($currentbranch and C4::Context->preference('SeparateHoldings')) { $template->param(SeparateHoldings => 1); } my $separatebranch = C4::Context->preference('SeparateHoldingsBranch') || 'homebranch'; -foreach my $item (@items) { - my $itembranchcode = $item->{$separatebranch}; - - # can place holds defaults to yes - $norequests = 0 unless ( ( $item->{'notforloan'} > 0 ) || ( $item->{'itemnotforloan'} > 0 ) ); +my ( $itemloop_has_images, $otheritemloop_has_images ); - $item->{imageurl} = defined $item->{itype} ? getitemtypeimagelocation('intranet', $itemtypes->{ $item->{itype} }{imageurl}) - : ''; +foreach my $item (@items) { + my $itembranchcode = $item->$separatebranch; - $item->{datedue} = format_sqldatetime($item->{datedue}); + my $item_info = $item->unblessed; + $item_info->{itemtype} = $itemtypes->{$item->effective_itemtype}; #get shelf location and collection code description if they are authorised value. # same thing for copy number - my $shelfcode = $item->{'location'}; - $item->{'location'} = $shelflocations->{$shelfcode} if ( defined( $shelfcode ) && defined($shelflocations) && exists( $shelflocations->{$shelfcode} ) ); - my $ccode = $item->{'ccode'}; - $item->{'ccode'} = $collections->{$ccode} if ( defined( $ccode ) && defined($collections) && exists( $collections->{$ccode} ) ); - my $copynumber = $item->{'copynumber'}; - $item->{'copynumber'} = $copynumbers->{$copynumber} if ( defined($copynumber) && defined($copynumbers) && exists( $copynumbers->{$copynumber} ) ); - foreach (qw(ccode enumchron copynumber stocknumber itemnotes itemnotes_nonpublic uri)) { - $itemfields{$_} = 1 if ( $item->{$_} ); + my $shelfcode = $item->location; + $item_info->{'location'} = $shelflocations->{$shelfcode} if ( defined( $shelfcode ) && defined($shelflocations) && exists( $shelflocations->{$shelfcode} ) ); + my $ccode = $item->ccode; + $item_info->{'ccode'} = $collections->{$ccode} if ( defined( $ccode ) && defined($collections) && exists( $collections->{$ccode} ) ); + my $copynumber = $item->copynumber; + $item_info->{'copynumber'} = $copynumbers->{$copynumber} if ( defined($copynumber) && defined($copynumbers) && exists( $copynumbers->{$copynumber} ) ); + foreach (qw(ccode enumchron copynumber stocknumber itemnotes itemnotes_nonpublic uri )) { + $itemfields{$_} = 1 if $item->$_; } + # FIXME The following must be Koha::Item->serial + my $serial_item = Koha::Serial::Items->find($item->itemnumber); + if ( $serial_item ) { + $item_info->{serial} = $serial_item; + $itemfields{publisheddate} = 1; + } + + $item_info->{object} = $item; + # checking for holds - my $item_object = Koha::Items->find( $item->{itemnumber} ); - my $holds = $item_object->current_holds; + my $holds = $item->current_holds; if ( my $first_hold = $holds->next ) { - my $patron = Koha::Patrons->find( $first_hold->borrowernumber ); - $item->{backgroundcolor} = 'reserved'; - $item->{reservedate} = $first_hold->reservedate; - $item->{ReservedFor} = $patron, - $item->{ExpectedAtLibrary} = $first_hold->branchcode; - # Check waiting status - $item->{waitingdate} = $first_hold->waitingdate; + $item_info->{first_hold} = $first_hold; } - if ( my $checkout = $item_object->checkout ) { - $item->{CheckedOutFor} = $checkout->patron; - } + $item_info->{checkout} = $item->checkout; - # Check the transit status - my ( $transfertwhen, $transfertfrom, $transfertto ) = GetTransfers($item->{itemnumber}); - if ( defined( $transfertwhen ) && ( $transfertwhen ne '' ) ) { - $item->{transfertwhen} = $transfertwhen; - $item->{transfertfrom} = $transfertfrom; - $item->{transfertto} = $transfertto; - $item->{nocancel} = 1; + # Check the transit status + my $transfer = $item->get_transfer; + if ( $transfer ) { + $item_info->{transfer} = $transfer; } foreach my $f (qw( itemnotes )) { - if ($item->{$f}) { - $item->{$f} =~ s|\n|
|g; + if ($item_info->{$f}) { + $item_info->{$f} =~ s|\n|
|g; $itemfields{$f} = 1; } } #item has a host number if its biblio number does not match the current bib - if ($item->{biblionumber} ne $biblionumber){ - $item->{hostbiblionumber} = $item->{biblionumber}; - $item->{hosttitle} = GetBiblioData($item->{biblionumber})->{title}; + if ($item->biblionumber ne $biblionumber){ + $item_info->{hostbiblionumber} = $item->biblionumber; + $item_info->{hosttitle} = $item->biblio->title; } - + if ( $analyze ) { # count if item is used in analytical bibliorecords # The 'countanalytics' flag is only used in the templates if analyze is set - my $countanalytics = C4::Context->preference('EasyAnalyticalRecords') ? GetAnalyticsCount($item->{itemnumber}) : 0; + my $countanalytics = GetAnalyticsCount( $item->itemnumber ); if ($countanalytics > 0){ $analytics_flag=1; - $item->{countanalytics} = $countanalytics; + $item_info->{countanalytics} = $countanalytics; } } - if (defined($item->{'materials'}) && $item->{'materials'} =~ /\S/){ + if (defined($item->materials) && $item->materials =~ /\S/){ $materials_flag = 1; - if (defined $materials_map{ $item->{materials} }) { - $item->{materials} = $materials_map{ $item->{materials} }; + if (defined $materials_map{ $item->materials }) { + $item_info->{materials} = $materials_map{ $item->materials }; } } if ( C4::Context->preference('UseCourseReserves') ) { - $item->{'course_reserves'} = GetItemCourseReservesInfo( itemnumber => $item->{'itemnumber'} ); + $item_info->{'course_reserves'} = GetItemCourseReservesInfo( itemnumber => $item->itemnumber ); + } + + $item_info->{can_be_edited} = $patron->can_edit_items_from( $item->homebranch ); + + if ( C4::Context->preference("LocalCoverImages") == 1 ) { + $item_info->{cover_images} = $item->cover_images; + } + + if ( C4::Context->preference('UseRecalls') ) { + $item_info->{recall} = $item->recall; } if ( C4::Context->preference('IndependentBranches') ) { my $userenv = C4::Context->userenv(); if ( not C4::Context->IsSuperLibrarian() - and $userenv->{branch} ne $item->{homebranch} ) { - $item->{cannot_be_edited} = 1; + and $userenv->{branch} ne $item->homebranch ) { + $item_info->{cannot_be_edited} = 1; + $item_info->{not_same_branch} = 1; } } - if ($currentbranch and $currentbranch ne "NO_LIBRARY_SET" - and C4::Context->preference('SeparateHoldings')) { + if ( $item->is_bundle ) { + $item_info->{bundled} = + $item->bundle_items->search( { itemlost => { '!=' => 0 } } ) + ->count; + $item_info->{bundled_lost} = + $item->bundle_items->search( { itemlost => 0 } )->count; + $item_info->{is_bundle} = 1; + } + + if ($item->in_bundle) { + $item_info->{bundle_host} = $item->bundle_host; + } + + if ($currentbranch and C4::Context->preference('SeparateHoldings')) { if ($itembranchcode and $itembranchcode eq $currentbranch) { - push @itemloop, $item; + push @itemloop, $item_info; + $itemloop_has_images++ if $item->cover_images->count; } else { - push @otheritemloop, $item; + push @otheritemloop, $item_info; + $otheritemloop_has_images++ if $item->cover_images->count; } } else { - push @itemloop, $item; + push @itemloop, $item_info; + $itemloop_has_images++ if $item->cover_images->count; } } +$template->param( + itemloop_has_images => $itemloop_has_images, + otheritemloop_has_images => $otheritemloop_has_images, +); + # Display only one tab if one items list is empty if (scalar(@itemloop) == 0 || scalar(@otheritemloop) == 0) { $template->param(SeparateHoldings => 0); @@ -367,29 +501,43 @@ if (scalar(@itemloop) == 0 || scalar(@otheritemloop) == 0) { } } -$template->param( norequests => $norequests ); +my $some_private_shelves = Koha::Virtualshelves->get_some_shelves( + { + borrowernumber => $borrowernumber, + add_allowed => 1, + public => 0, + } +); +my $some_public_shelves = Koha::Virtualshelves->get_some_shelves( + { + borrowernumber => $borrowernumber, + add_allowed => 1, + public => 1, + } +); + + $template->param( - MARCNOTES => $marcnotesarray, - MARCSUBJCTS => $marcsubjctsarray, - MARCAUTHORS => $marcauthorsarray, - MARCSERIES => $marcseriesarray, - MARCURLS => $marcurlsarray, - MARCISBNS => $marcisbnsarray, - MARCHOSTS => $marchostsarray, - subtitle => $subtitle, - itemdata_ccode => $itemfields{ccode}, - itemdata_enumchron => $itemfields{enumchron}, - itemdata_uri => $itemfields{uri}, - itemdata_copynumber => $itemfields{copynumber}, - itemdata_stocknumber => $itemfields{stocknumber}, - volinfo => $itemfields{enumchron}, - itemdata_itemnotes => $itemfields{itemnotes}, - itemdata_nonpublicnotes => $itemfields{itemnotes_nonpublic}, - z3950_search_params => C4::Search::z3950_search_args($dat), - hostrecords => $hostrecords, - analytics_flag => $analytics_flag, - C4::Search::enabled_staff_search_views, - materials => $materials_flag, + add_to_some_private_shelves => $some_private_shelves, + add_to_some_public_shelves => $some_public_shelves, +); + +$template->param( + MARCNOTES => !$invalid_marc_record ? $biblio->get_marc_notes() : undef, + itemdata_ccode => $itemfields{ccode}, + itemdata_enumchron => $itemfields{enumchron}, + itemdata_uri => $itemfields{uri}, + itemdata_copynumber => $itemfields{copynumber}, + itemdata_stocknumber => $itemfields{stocknumber}, + itemdata_publisheddate => $itemfields{publisheddate}, + volinfo => $itemfields{enumchron}, + itemdata_itemnotes => $itemfields{itemnotes}, + itemdata_nonpublicnotes => $itemfields{itemnotes_nonpublic}, + z3950_search_params => C4::Search::z3950_search_args($dat), + hostrecords => $hostrecords, + analytics_flag => $analytics_flag, + C4::Search::enabled_staff_search_views, + materials => $materials_flag, ); if (C4::Context->preference("AlternateHoldingsField") && scalar @items == 0) { @@ -397,7 +545,7 @@ if (C4::Context->preference("AlternateHoldingsField") && scalar @items == 0) { my $subfields = substr $fieldspec, 3; my $holdingsep = C4::Context->preference("AlternateHoldingsSeparator") || ' '; my @alternateholdingsinfo = (); - my @holdingsfields = $record->field(substr $fieldspec, 0, 3); + my @holdingsfields = $marc_record->field(substr $fieldspec, 0, 3); for my $field (@holdingsfields) { my %holding = ( holding => '' ); @@ -438,15 +586,13 @@ $template->param( searchid => scalar $query->param('searchid'), ); -# $debug and $template->param(debug_display => 1); - # Lists if (C4::Context->preference("virtualshelves") ) { my $shelves = Koha::Virtualshelves->search( { biblionumber => $biblionumber, - category => 2, + public => 1, }, { join => 'virtualshelfcontents', @@ -459,24 +605,27 @@ if (C4::Context->preference("virtualshelves") ) { if (C4::Context->preference("FRBRizeEditions")==1) { eval { $template->param( - XISBNS => scalar get_xisbns($isbn) + XISBNS => scalar get_xisbns($isbn, $biblionumber) ); }; if ($@) { warn "XISBN Failed $@"; } } if ( C4::Context->preference("LocalCoverImages") == 1 ) { - my @images = ListImagesForBiblio($biblionumber); - $template->{VARS}->{localimages} = \@images; + my $images = $biblio->cover_images; + $template->param( + localimages => $biblio->cover_images->search( + {}, { order_by => [ \"COALESCE(itemnumber, 0, 1)", 'timestamp' ] } + ), + ); } # HTML5 Media if ( (C4::Context->preference("HTML5MediaEnabled") eq 'both') or (C4::Context->preference("HTML5MediaEnabled") eq 'staff') ) { - $template->param( C4::HTML5Media->gethtml5media($record)); + $template->param( C4::HTML5Media->gethtml5media($marc_record)); } # Displaying tags - my $tag_quantity; if (C4::Context->preference('TagsEnabled') and $tag_quantity = C4::Context->preference('TagsShowOnDetail')) { $template->param( @@ -488,10 +637,16 @@ if (C4::Context->preference('TagsEnabled') and $tag_quantity = C4::Context->pref } #we only need to pass the number of holds to the template -my $biblio = Koha::Biblios->find( $biblionumber ); my $holds = $biblio->holds; $template->param( holdcount => $holds->count ); +# Check if there are any ILL requests connected to the biblio +my $illrequests = + C4::Context->preference('ILLModule') + ? Koha::Illrequests->search( { biblio_id => $biblionumber } ) + : []; +$template->param( illrequests => $illrequests ); + my $StaffDetailItemSelection = C4::Context->preference('StaffDetailItemSelection'); if ($StaffDetailItemSelection) { # Only enable item selection if user can execute at least one action @@ -511,35 +666,24 @@ if ($StaffDetailItemSelection) { } } -my @allorders_using_biblio = GetOrdersByBiblionumber ($biblionumber); -my @deletedorders_using_biblio; -my @orders_using_biblio; -my @baskets_orders; -my @baskets_deletedorders; +# get biblionumbers stored in the cart +my @cart_list; -foreach my $myorder (@allorders_using_biblio) { - my $basket = $myorder->{'basketno'}; - if ((defined $myorder->{'datecancellationprinted'}) and ($myorder->{'datecancellationprinted'} ne '0000-00-00') ){ - push @deletedorders_using_biblio, $myorder; - unless (grep(/^$basket$/, @baskets_deletedorders)){ - push @baskets_deletedorders,$myorder->{'basketno'}; - } - } - else { - push @orders_using_biblio, $myorder; - unless (grep(/^$basket$/, @baskets_orders)){ - push @baskets_orders,$myorder->{'basketno'}; - } +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 $count_orders_using_biblio = scalar @orders_using_biblio ; -$template->param (countorders => $count_orders_using_biblio); +if ( C4::Context->preference('UseCourseReserves') ) { + my $course_reserves = GetItemCourseReservesInfo( biblionumber => $biblionumber ); + $template->param( course_reserves => $course_reserves ); +} -my $count_deletedorders_using_biblio = scalar @deletedorders_using_biblio ; -$template->param (countdeletedorders => $count_deletedorders_using_biblio); +$template->param(found1 => scalar $query->param('found1') ); -$template->param (basketsorders => \@baskets_orders); -$template->param (basketsdeletedorders => \@baskets_deletedorders); +$template->param(biblio => $biblio); output_html_with_http_headers $query, $cookie, $template->output;