Bug 26992: Fix serial issue and related items deletion on serial collection page
[srvgit] / virtualshelves / downloadshelf.pl
index 156e261..c6cb31f 100755 (executable)
@@ -17,8 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
-use strict;
-use warnings;
+use Modern::Perl;
 
 use CGI qw ( -utf8 );
 use Encode qw(encode);
@@ -27,22 +26,20 @@ use C4::Auth;
 use C4::Biblio;
 use C4::Items;
 use C4::Output;
-use C4::VirtualShelves;
 use C4::Record;
 use C4::Ris;
-use C4::Csv;
 
+use Koha::CsvProfiles;
 use Koha::Virtualshelves;
 
 use utf8;
-my $query = new CGI;
+my $query = CGI->new;
 
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user (
     {
         template_name   => "virtualshelves/downloadshelf.tt",
         query           => $query,
         type            => "intranet",
-        authnotrequired => 0,
         flagsrequired   => { catalogue => 1 },
     }
 );
@@ -54,7 +51,6 @@ my @messages;
 
 if ($shelfid && $format) {
 
-    my ($items, $totitems)  = GetShelfContents($shelfid);
     my $marcflavour         = C4::Context->preference('marcflavour');
     my $output='';
 
@@ -62,18 +58,21 @@ if ($shelfid && $format) {
     if ( $shelf ) {
         if ( $shelf->can_be_viewed( $loggedinuser ) ) {
 
+            my $contents = $shelf->get_contents;
             # CSV
             if ($format =~ /^\d+$/) {
                 my @biblios;
-                foreach (@$items) {
-                    push @biblios, $_->{biblionumber};
+                while ( my $content = $contents->next ) {
+                    push @biblios, $content->biblionumber;
                 }
                 $output = marc2csv(\@biblios, $format);
             }
             else { #Other formats
-                foreach my $biblio (@$items) {
-                    my $biblionumber = $biblio->{biblionumber};
-                    my $record = GetMarcBiblio($biblionumber, 1);
+                while ( my $content = $contents->next ) {
+                    my $biblionumber = $content->biblionumber;
+                    my $record = GetMarcBiblio({
+                        biblionumber => $biblionumber,
+                        embed_items  => 1 });
                     if ($format eq 'iso2709') {
                         $output .= $record->as_usmarc();
                     }
@@ -85,6 +84,10 @@ if ($shelfid && $format) {
                     }
                 }
             }
+
+            # If it was a CSV export we change the format after the export so the file extension is fine
+            $format = "csv" if ($format =~ m/^\d+$/);
+
             print $query->header(
             -type => 'application/octet-stream',
             -'Content-Transfer-Encoding' => 'binary',
@@ -97,12 +100,9 @@ if ($shelfid && $format) {
     } else {
         push @messages, { type => 'error', code => 'does_not_exist' };
     }
-
-    # If it was a CSV export we change the format after the export so the file extension is fine
-    $format = "csv" if ($format =~ m/^\d+$/);
 }
 else {
-    $template->param(csv_profiles => GetCsvProfilesLoop('marc'));
+    $template->param(csv_profiles => [ Koha::CsvProfiles->search({ type => 'marc', used_for => 'export_records' }) ]);
     $template->param(shelfid => $shelfid); 
 }
 $template->param( messages => \@messages );