Bug 6199 - allow bulkmarkimport.pl to remove duplicate barcodes
[koha_gimpoz] / C4 / VirtualShelves / Page.pm
index bbe89e8..1727389 100644 (file)
@@ -56,15 +56,26 @@ sub shelfpage ($$$$$) {
     ( $pages{$type} ) or $type = 'opac';
     $query            or die "No query";
     $template         or die "No template";
-    $template->param( { loggedinuser => $loggedinuser } );
+    $template->param(  loggedinuser => $loggedinuser  );
+    my $edit;
+    my $shelves;
     my @paramsloop;
     my $totitems;
     my $shelfoff    = ( $query->param('shelfoff') ? $query->param('shelfoff') : 1 );
+    $template->{VARS}->{'shelfoff'} = $shelfoff;
     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");
 
+    # get biblionumbers stored in the cart
+    my @cart_list;
+    my $cart_cookie = ( $type eq 'opac' ? "bib_list" : "intranet_bib_list" );
+    if($query->cookie($cart_cookie)){
+        my $cart_list = $query->cookie($cart_cookie);
+        @cart_list = split(/\//, $cart_list);
+    }
+
     $shelflimit = ( $type eq 'opac' ? C4::Context->preference('OPACnumSearchResults') : C4::Context->preference('numSearchResults') );
     $shelflimit = $shelflimit || 20;
     $shelfoffset   = ( $itemoff - 1 ) * $shelflimit;     # Sets the offset to begin retrieving items at
@@ -86,7 +97,6 @@ sub shelfpage ($$$$$) {
 
     # the format of this is unindented for ease of diff comparison to the old script
     # Note: do not mistake the assignment statements below for comparisons!
-
     if ( $query->param('modifyshelfcontents') ) {
         my ( $shelfnumber, $barcode, $item, $biblio );
         if ( $shelfnumber = $query->param('viewshelf') ) {
@@ -158,13 +168,23 @@ sub shelfpage ($$$$$) {
                 };
 
                 ModShelf( $shelfnumber, $shelf );
+                if($displaymode eq "viewshelf"){
+                    print $query->redirect( $pages{$type}->{redirect} . "?viewshelf=$shelfnumber" );
+                } elsif($displaymode eq "publicshelves"){
+                    print $query->redirect( $pages{$type}->{redirect} );
+                } else {
+                    print $query->redirect( $pages{$type}->{redirect} . "?display=privateshelves" );
+                }
+                exit;
 
             } elsif ( $op eq 'modif' ) {
                 my ( $shelfnumber2, $shelfname, $owner, $category, $sortfield ) = GetShelf($shelfnumber);
                 my $member = GetMember( 'borrowernumber' => $owner );
                 my $ownername = defined($member) ? $member->{firstname} . " " . $member->{surname} : '';
+                $edit = 1;
                 $template->param(
                     edit                => 1,
+                    display             => $displaymode,
                     shelfnumber         => $shelfnumber2,
                     shelfname           => $shelfname,
                     owner               => $owner,
@@ -206,7 +226,7 @@ sub shelfpage ($$$$$) {
                     my $record = GetMarcBiblio($biblionumber);
                     $this_item->{XSLTBloc} =
                         XSLTParse4Display($biblionumber, $record, 'Results', 'opac')
-                            if C4::Context->preference("OPACXSLTResultsDisplay");
+                            if C4::Context->preference("OPACXSLTResultsDisplay") && $type eq 'opac';
 
                     # 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
@@ -214,7 +234,7 @@ sub shelfpage ($$$$$) {
                     #$this_item->{'description'} = $itemtypes->{ $this_item->{itemtype} }->{'description'};
                     $this_item->{'dateadded'} = format_date( $this_item->{'dateadded'} );
                     $this_item->{'imageurl'}  = getitemtypeinfo( $this_item->{'itemtype'} )->{'imageurl'};
-                    $this_item->{'coins'}     = GetCOinSBiblio( $this_item->{'biblionumber'} );
+                    $this_item->{'coins'}     = GetCOinSBiblio( $record );
                     $this_item->{'subtitle'} = GetRecordValue('subtitle', $record, GetFrameworkCode($this_item->{'biblionumber'}));
                     $this_item->{'normalized_upc'}  = GetNormalizedUPC(       $record,$marcflavour);
                     $this_item->{'normalized_ean'}  = GetNormalizedEAN(       $record,$marcflavour);
@@ -224,6 +244,9 @@ sub shelfpage ($$$$$) {
                     my @items_infos = &GetItemsLocationInfo( $this_item->{'biblionumber'});
                     $this_item->{'itemsissued'} = CountItemsIssued( $this_item->{'biblionumber'} );
                     $this_item->{'ITEM_RESULTS'} = \@items_infos;
+                    if ( grep {$_ eq $biblionumber} @cart_list) {
+                        $this_item->{'incart'} = 1;
+                    }
 
                     if (C4::Context->preference('TagsEnabled') and $tag_quantity = C4::Context->preference('TagsShowOnList')) {
                         $this_item->{'TagLoop'} = get_tags({
@@ -238,13 +261,15 @@ sub shelfpage ($$$$$) {
                 my $i = 0;
                 my $manageshelf = ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' );
                 $template->param(
-                    shelfname   => $shelfname,
-                    shelfnumber => $shelfnumber,
-                    viewshelf   => $shelfnumber,
-                    authorsort  => $authorsort,
-                    yearsort    => $yearsort,
-                    manageshelf => $manageshelf,
-                    itemsloop   => $items,
+                    shelfname           => $shelfname,
+                    shelfnumber         => $shelfnumber,
+                    viewshelf           => $shelfnumber,
+                    authorsort          => $authorsort,
+                    yearsort            => $yearsort,
+                    manageshelf         => $manageshelf,
+                    "category$category" => 1,
+                    category            => $category,
+                    itemsloop           => $items,
                 );
             } else {
                 push @paramsloop, { nopermission => $shelfnumber };
@@ -312,7 +337,10 @@ sub shelfpage ($$$$$) {
                 $stay = 0;
             }
             $showadd = 1;
-            $stay and $template->param( shelves => 1 );
+            if ($stay){
+                $template->param( shelves => 1 );
+                $shelves = 1;
+            }
             last SWITCH;
         }
     }
@@ -332,11 +360,12 @@ sub shelfpage ($$$$$) {
         my $owner     = $shelflist->{$element}->{'owner'};
         my $canmanage = ShelfPossibleAction( $loggedinuser, $element, 'manage' );
         my $sortfield = $shelflist->{$element}->{'sortfield'};
-        if ( $sortfield eq 'author' ) {
-            $shelflist->{$element}->{"authorsort"} = 'author';
-        }
-        if ( $sortfield eq 'year' ) {
-            $shelflist->{$element}->{"yearsort"} = 'year';
+        if ( $sortfield ){
+            if ( $sortfield eq 'author' ) {
+                $shelflist->{$element}->{"authorsort"} = 'author';
+            } elsif ( $sortfield eq 'year' ) {
+                $shelflist->{$element}->{"yearsort"} = 'year';
+            }
         }
         $shelflist->{$element}->{"viewcategory$category"} = 1;
         $shelflist->{$element}->{manageshelf} = $canmanage;
@@ -359,11 +388,11 @@ sub shelfpage ($$$$$) {
         $qhash{$_} = $query->param($_) if $query->param($_);
     }
     ( scalar keys %qhash ) and $url .= '?' . join '&', map { "$_=$qhash{$_}" } keys %qhash;
-    if ( $query->param('viewshelf') ) {
-        $template->param( { pagination_bar => pagination_bar( $url, ( int( $totitems / $shelflimit ) ) + ( ( $totitems % $shelflimit ) > 0 ? 1 : 0 ), $itemoff, "itemoff" ) } );
-    } else {
+    if ( $shelfnumber && $totitems ) {
+        $template->param(  pagination_bar => pagination_bar( $url, ( int( $totitems / $shelflimit ) ) + ( ( $totitems % $shelflimit ) > 0 ? 1 : 0 ), $itemoff, "itemoff" )  );
+    } elsif ( $totshelves ) {
         $template->param(
-            { pagination_bar => pagination_bar( $url, ( int( $totshelves / $shelveslimit ) ) + ( ( $totshelves % $shelveslimit ) > 0 ? 1 : 0 ), $shelfoff, "shelfoff" ) } );
+             pagination_bar => pagination_bar( $url, ( int( $totshelves / $shelveslimit ) ) + ( ( $totshelves % $shelveslimit ) > 0 ? 1 : 0 ), $shelfoff, "shelfoff" )  );
     }
     $template->param(
         shelveslooppriv                                                    => \@shelveslooppriv,
@@ -373,13 +402,13 @@ sub shelfpage ($$$$$) {
         "BiblioDefaultView" . C4::Context->preference("BiblioDefaultView") => 1,
         csv_profiles                                                       => GetCsvProfilesLoop()
     );
-    if (   $template->param('viewshelf')
-        or $template->param('shelves')
-        or $template->param('edit') ) {
+    if (   $shelfnumber
+        or $shelves
+        or $edit ) {
         $template->param( vseflag => 1 );
     }
-    if ($template->param('shelves') or    # note: this part looks duplicative, but is intentional
-        $template->param('edit')
+    if ($shelves or    # note: this part looks duplicative, but is intentional
+        $edit
       ) {
         $template->param( seflag => 1 );
     }
@@ -393,18 +422,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;