Bug 10853: All existing routing to get a CSV should return a MARC csv
[srvgit] / C4 / VirtualShelves / Page.pm
index 125a1e6..259e12d 100644 (file)
@@ -44,7 +44,7 @@ use constant VIRTUALSHELVES_COUNT => 20;
 use vars qw($debug @EXPORT @ISA $VERSION);
 
 BEGIN {
-    $VERSION = 1.01;
+    $VERSION = 3.07.00.049;
     @ISA     = qw(Exporter);
     @EXPORT  = qw(&shelfpage);
     $debug   = $ENV{DEBUG} || 0;
@@ -185,8 +185,11 @@ sub shelfpage {
                         last SWITCH;
                 }
                 my $shelf = {
-                    'shelfname' => $query->param('shelfname'),
-                    'sortfield' => $query->param('sortfield'),
+                    shelfname          => $query->param('shelfname'),
+                    sortfield          => $query->param('sortfield'),
+                    allow_add          => $query->param('allow_add'),
+                    allow_delete_own   => $query->param('allow_delete_own'),
+                    allow_delete_other => $query->param('allow_delete_other'),
                 };
                 if($query->param('category')) { #optional
                     $shelf->{category}= $query->param('category');
@@ -207,11 +210,10 @@ sub shelfpage {
             }
         #Editing a shelf
         elsif ( $op eq 'modif' ) {
-                my ( $shelfnumber2, $shelfname, $owner, $category, $sortfield ) = GetShelf($shelfnumber);
+                my ( $shelfnumber2, $shelfname, $owner, $category, $sortfield, $allow_add, $allow_delete_own, $allow_delete_other) = GetShelf($shelfnumber);
                 my $member = GetMember( 'borrowernumber' => $owner );
                 my $ownername = defined($member) ? $member->{firstname} . " " . $member->{surname} : '';
                 $edit = 1;
-                $sortfield='' unless $sortfield;
                 $template->param(
                     edit                => 1,
                     display             => $displaymode,
@@ -221,7 +223,10 @@ sub shelfpage {
                     ownername           => $ownername,
                     "category$category" => 1,
                     category            => $category,
-                    "sort_$sortfield"   => 1,
+                    sortfield           => $sortfield,
+                    allow_add           => $allow_add,
+                    allow_delete_own    => $allow_delete_own,
+                    allow_delete_other  => $allow_delete_other,
                 );
             }
             last SWITCH;
@@ -232,7 +237,10 @@ sub shelfpage {
             # explicitly fetch this shelf
             my ($shelfnumber2,$shelfname,$owner,$category,$sorton) = GetShelf($shelfnumber);
 
-            $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') );
+            $template->param(
+                'AllowOnShelfHolds'     => C4::Context->preference('AllowOnShelfHolds'),
+                'DisplayMultiPlaceHold' => C4::Context->preference('DisplayMultiPlaceHold'),
+            );
             if (C4::Context->preference('TagsEnabled')) {
                 $template->param(TagsEnabled => 1);
                     foreach (qw(TagsShowOnList TagsInputOnList)) {
@@ -242,36 +250,37 @@ sub shelfpage {
             #check that the user can view the shelf
             if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'view' ) ) {
                 my $items;
-                my $authorsort;
-                my $yearsort;
                 my $tag_quantity;
-                my $sortfield = ( $query->param('sortfield') ? $query->param('sortfield') : 'title' );
-                if ( $sortfield eq 'author' ) {
-                    $authorsort = 'author';
-                }
-                if ( $sortfield eq 'year' ) {
-                    $yearsort = 'year';
-                }
-                ( $items, $totitems ) = GetShelfContents( $shelfnumber, $shelflimit, $shelfoffset );
+                my $sortfield = ( $sorton ? $sorton : 'title' );
+                $sortfield = $query->param('sort') || $sortfield; ## Passed in sorting overrides default sorting
+                my $direction = $query->param('direction') || 'asc';
+                $template->param(
+                    sort      => $sortfield,
+                    direction => $direction,
+                );
+                ( $items, $totitems ) = GetShelfContents( $shelfnumber, $shelflimit, $shelfoffset, $sortfield, $direction );
                 for my $this_item (@$items) {
                     my $biblionumber = $this_item->{'biblionumber'};
                     my $record = GetMarcBiblio($biblionumber);
-                    $this_item->{XSLTBloc} =
-                        XSLTParse4Display($biblionumber, $record, 'Results', 'opac')
-                            if C4::Context->preference("OPACXSLTResultsDisplay") && $type eq 'opac';
+                    if (C4::Context->preference("OPACXSLTResultsDisplay") && $type eq 'opac') {
+                        $this_item->{XSLTBloc} = XSLTParse4Display($biblionumber, $record, "OPACXSLTResultsDisplay");
+                    } elsif (C4::Context->preference("XSLTResultsDisplay") && $type eq 'intranet') {
+                        $this_item->{XSLTBloc} = XSLTParse4Display($biblionumber, $record, "XSLTResultsDisplay");
+                    }
 
                     # 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
                     #$this_item->{imageurl} = $imgdir."/".$itemtypes->{ $this_item->{itemtype}  }->{'imageurl'};
                     #$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->{'imageurl'}  = getitemtypeinfo( $this_item->{'itemtype'}, $type )->{'imageurl'};
                     $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);
                     $this_item->{'normalized_oclc'} = GetNormalizedOCLCNumber($record,$marcflavour);
                     $this_item->{'normalized_isbn'} = GetNormalizedISBN(undef,$record,$marcflavour);
+                    if(!defined($this_item->{'size'})) { $this_item->{'size'} = "" }; #TT has problems with size
                     # Getting items infos for location display
                     my @items_infos = &GetItemsLocationInfo( $this_item->{'biblionumber'});
                     $this_item->{'itemsissued'} = CountItemsIssued( $this_item->{'biblionumber'} );
@@ -288,6 +297,17 @@ sub shelfpage {
                     }
 
                 }
+                if($type eq 'intranet'){
+                    # Build drop-down list for 'Add To:' menu...
+                    my ($totalref, $pubshelves, $barshelves)=
+                    C4::VirtualShelves::GetSomeShelfNames($loggedinuser,'COMBO',1);
+                    $template->param(
+                        addbarshelves     => $totalref->{bartotal},
+                        addbarshelvesloop => $barshelves,
+                        addpubshelves     => $totalref->{pubtotal},
+                        addpubshelvesloop => $pubshelves,
+                    );
+                }
                 push @paramsloop, { display => 'privateshelves' } if $category == 1;
                 $showadd = 1;
                 my $i = 0;
@@ -296,8 +316,7 @@ sub shelfpage {
                     shelfname           => $shelfname,
                     shelfnumber         => $shelfnumber,
                     viewshelf           => $shelfnumber,
-                    authorsort          => $authorsort,
-                    yearsort            => $yearsort,
+                    sortfield           => $sortfield,
                     manageshelf         => $manageshelf,
                     allowremovingitems  => ShelfPossibleAction( $loggedinuser, $shelfnumber, 'delete'),
                     allowaddingitem     => ShelfPossibleAction( $loggedinuser, $shelfnumber, 'add'),
@@ -322,7 +341,11 @@ sub shelfpage {
                 my $shelfnumber = AddShelf( {
                     shelfname => $newshelf,
                     sortfield => $query->param('sortfield'),
-                    category => $query->param('category') },
+                    category => $query->param('category'),
+                    allow_add => $query->param('allow_add'),
+                    allow_delete_own => $query->param('allow_delete_own'),
+                    allow_delete_other => $query->param('allow_delete_other'),
+                    },
                     $query->param('owner') );
                 $stay = 1;
                 if ( $shelfnumber == -1 ) {    #shelf already exists.
@@ -402,14 +425,6 @@ sub shelfpage {
         my $category  = $shelflist->{$element}->{'category'};
         my $owner     = $shelflist->{$element}->{'owner'}||0;
         my $canmanage = ShelfPossibleAction( $loggedinuser, $element, 'manage' );
-        my $sortfield = $shelflist->{$element}->{'sortfield'};
-        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;
         if($canmanage || ($loggedinuser && $owner==$loggedinuser)) {
@@ -427,7 +442,7 @@ sub shelfpage {
 
     my $url = $type eq 'opac' ? "/cgi-bin/koha/opac-shelves.pl" : "/cgi-bin/koha/virtualshelves/shelves.pl";
     my %qhash = ();
-    foreach (qw(display viewshelf sortfield)) {
+    foreach (qw(display viewshelf sortfield sort direction)) {
         $qhash{$_} = $query->param($_) if $query->param($_);
     }
     ( scalar keys %qhash ) and $url .= '?' . join '&', map { "$_=$qhash{$_}" } keys %qhash;
@@ -443,7 +458,7 @@ sub shelfpage {
         shelvesloopall                                                     => [ ( @shelvesloop, @shelveslooppriv ) ],
         numberCanManage                                                    => $numberCanManage,
         "BiblioDefaultView" . C4::Context->preference("BiblioDefaultView") => 1,
-        csv_profiles                                                       => GetCsvProfilesLoop()
+        csv_profiles                                                       => GetCsvProfilesLoop('marc')
     );
     if (   $shelfnumber
         or $shelves
@@ -454,6 +469,9 @@ sub shelfpage {
         $edit
       ) {
         $template->param( seflag => 1 );
+        #This hack is just another argument for refactoring this script one day
+        #At this point you are adding or editing a list; if you add, then you add a private list (by default) with permissions as below; if you edit, do not pass these permissions, they must come from the database
+        $template->param( allow_add => 0, allow_delete_own => 1, allow_delete_other => 0) unless $shelfnumber;
     }
 
 #Next call updates the shelves for the Lists button.