Bug 5529 Absence or Presence of lists not being reliably returned
[koha.git] / C4 / VirtualShelves / Page.pm
index 1ce360e..df7054e 100644 (file)
@@ -31,9 +31,11 @@ use C4::Auth qw/get_session/;
 use C4::Members;
 use C4::Output;
 use C4::Dates qw/format_date/;
+use C4::Tags qw(get_tags);
 use Exporter;
 use Data::Dumper;
 use C4::Csv;
+use C4::XSLT;
 
 use vars qw($debug @EXPORT @ISA $VERSION);
 
@@ -61,6 +63,7 @@ sub shelfpage ($$$$$) {
     my $itemoff     = ( $query->param('itemoff')  ? $query->param('itemoff')  : 1 );
     my $displaymode = ( $query->param('display')  ? $query->param('display')  : 'publicshelves' );
     my ( $shelflimit, $shelfoffset, $shelveslimit, $shelvesoffset );
+    my $marcflavour = C4::Context->preference("marcflavour");
 
     $shelflimit = ( $type eq 'opac' ? C4::Context->preference('OPACnumSearchResults') : C4::Context->preference('numSearchResults') );
     $shelflimit = $shelflimit || 20;
@@ -177,19 +180,20 @@ sub shelfpage ($$$$$) {
             # explicitly fetch this shelf
             my ($shelfnumber2,$shelfname,$owner,$category,$sorton) = GetShelf($shelfnumber);
 
+            $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') );
+            if (C4::Context->preference('TagsEnabled')) {
+                $template->param(TagsEnabled => 1);
+                    foreach (qw(TagsShowOnList TagsInputOnList)) {
+                    C4::Context->preference($_) and $template->param($_ => 1);
+                }
+            }
             #check that the user can view the shelf
             if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'view' ) ) {
                 my $items;
                 my $authorsort;
                 my $yearsort;
-                my $sortfield;
-                if ( $query->param('sortfield')) {
-                   $sortfield = $query->param('sortfield');
-                } elsif ($sorton) {
-                   $sortfield = $sorton;
-                } else {
-                   $sortfield = 'title';
-                }
+                my $tag_quantity;
+                my $sortfield = ( $query->param('sortfield') ? $query->param('sortfield') : 'title' );
                 if ( $sortfield eq 'author' ) {
                     $authorsort = 'author';
                 }
@@ -198,7 +202,11 @@ sub shelfpage ($$$$$) {
                 }
                 ( $items, $totitems ) = GetShelfContents( $shelfnumber, $shelflimit, $shelfoffset );
                 for my $this_item (@$items) {
-                    my $record = GetMarcBiblio( $this_item->{'biblionumber'} );
+                    my $biblionumber = $this_item->{'biblionumber'};
+                    my $record = GetMarcBiblio($biblionumber);
+                    $this_item->{XSLTBloc} =
+                        XSLTParse4Display($biblionumber, $record, 'Results', 'opac')
+                            if C4::Context->preference("OPACXSLTResultsDisplay");
 
                     # the virtualshelfcontents table does not store these columns nor are they retrieved from the items
                     # and itemtypes tables, so I'm commenting them out for now to quiet the log -crn
@@ -208,11 +216,22 @@ sub shelfpage ($$$$$) {
                     $this_item->{'imageurl'}  = getitemtypeinfo( $this_item->{'itemtype'} )->{'imageurl'};
                     $this_item->{'coins'}     = GetCOinSBiblio( $this_item->{'biblionumber'} );
                     $this_item->{'subtitle'} = GetRecordValue('subtitle', $record, GetFrameworkCode($this_item->{'biblionumber'}));
-
+                    $this_item->{'normalized_upc'}  = GetNormalizedUPC(       $record,$marcflavour);
+                    $this_item->{'normalized_ean'}  = GetNormalizedEAN(       $record,$marcflavour);
+                    $this_item->{'normalized_oclc'} = GetNormalizedOCLCNumber($record,$marcflavour);
+                    $this_item->{'normalized_isbn'} = GetNormalizedISBN(undef,$record,$marcflavour);
                     # Getting items infos for location display
-                    my @items_infos = &GetItemsInfo( $this_item->{'biblionumber'}, $type );
+                    my @items_infos = &GetItemsLocationInfo( $this_item->{'biblionumber'});
+                    $this_item->{'itemsissued'} = CountItemsIssued( $this_item->{'biblionumber'} );
                     $this_item->{'ITEM_RESULTS'} = \@items_infos;
 
+                    if (C4::Context->preference('TagsEnabled') and $tag_quantity = C4::Context->preference('TagsShowOnList')) {
+                        $this_item->{'TagLoop'} = get_tags({
+                            biblionumber=>$this_item->{'biblionumber'}, approved=>1, 'sort'=>'-weight',
+                            limit=>$tag_quantity
+                            });
+                    }
+
                 }
                 push @paramsloop, { display => 'privateshelves' } if $category == 1;
                 $showadd = 1;
@@ -265,7 +284,7 @@ sub shelfpage ($$$$$) {
                 if ( my $count = scalar @$contents ) {
                     unless ( scalar grep { /^CONFIRM-$number$/ } $query->param() ) {
                         if ( defined $shelflist->{$number} ) {
-                            push( @paramsloop, { need_confirm => $shelflist->{$number}->{shelfname}, count => $count } );
+                            push( @paramsloop, { need_confirm => $shelflist->{$number}->{shelfname}, count => $count, single => ($count eq 1 ? 1:0) } );
                             $shelflist->{$number}->{confirm} = $number;
                         } else {
                             push( @paramsloop, { need_confirm => $privshelflist->{$number}->{shelfname}, count => $count } );
@@ -374,18 +393,18 @@ sub shelfpage ($$$$$) {
 
     if ( defined $barshelves ) {
         $template->param(
-            barshelves     => scalar( @{ $barshelves->[0] } ),
-            barshelvesloop => $barshelves->[0],
+            barshelves     => scalar( @{ $barshelves } ),
+            barshelvesloop => $barshelves,
         );
-        $template->param( bartotal => $total->{'bartotal'}, ) if ( $total->{'bartotal'} > scalar( @{ $barshelves->[0] } ) );
+        $template->param( bartotal => $total->{'bartotal'}, ) if ( $total->{'bartotal'} > scalar( @{ $barshelves } ) );
     }
 
     if ( defined $pubshelves ) {
         $template->param(
-            pubshelves     => scalar( @{ $pubshelves->[0] } ),
-            pubshelvesloop => $pubshelves->[0],
+            pubshelves     => scalar( @{ $pubshelves } ),
+            pubshelvesloop => $pubshelves,
         );
-        $template->param( pubtotal => $total->{'pubtotal'}, ) if ( $total->{'pubtotal'} > scalar( @{ $pubshelves->[0] } ) );
+        $template->param( pubtotal => $total->{'pubtotal'}, ) if ( $total->{'pubtotal'} > scalar( @{ $pubshelves } ) );
     }
 
     output_html_with_http_headers $query, $cookie, $template->output;