[LON-CAPA-cvs] cvs: loncom /interface printout.pl

raeburn raeburn at source.lon-capa.org
Sun Nov 12 11:23:04 EST 2017


raeburn		Sun Nov 12 16:23:04 2017 EDT

  Modified files:              
    /loncom/interface	printout.pl 
  Log:
  - Replace use of system("zip -r ...") with use of Archive::Zip.
    LONCAPA-prerequisites will need perl-Archive-Zip to be added.
  
  
Index: loncom/interface/printout.pl
diff -u loncom/interface/printout.pl:1.165 loncom/interface/printout.pl:1.166
--- loncom/interface/printout.pl:1.165	Sun Nov 12 15:41:45 2017
+++ loncom/interface/printout.pl	Sun Nov 12 16:23:03 2017
@@ -1,7 +1,7 @@
 #!/usr/bin/perl
 # CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc.
 #
-# $Id: printout.pl,v 1.165 2017/11/12 15:41:45 raeburn Exp $
+# $Id: printout.pl,v 1.166 2017/11/12 16:23:03 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -41,6 +41,7 @@
 use LONCAPA::Enrollment;
 use LONCAPA::Configuration;
 use LONCAPA;
+use Archive::Zip qw( :ERROR_CODES );
 
 use strict;
 
@@ -597,26 +598,46 @@
          .'</p>';
   }
 }
+if ($advanced_role) { &Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); }
 print "<br />";
 if ($number_of_files>1) {
+    print('<p>'.&mt('Zip Output:')."\n");
+    my %zip_prog_state;
+    if ($advanced_role) { %zip_prog_state=&Apache::lonhtmlcommon::Create_PrgWin('',$number_of_files); }
     my $zipfile=$texfile[0];
     $zipfile=~s/\.tex/\.zip/;
-    my $statement="zip $zipfile";
+    my $zip = Archive::Zip->new();
+    my $counter = 0;
     foreach my $file (@texfile) {
-	$file=~s/\.tex/.\pdf/;
-	$statement.=' '.$file; 
+        $file=~s/\.tex/.\pdf/;
+        my $dest=$file;
+        $dest=~s{^\Q$perlvar{'lonPrtDir'}\E}{prtspool};
+        $zip->addFile($file,$dest);
+        $dest=~s/^prtspool//;
+        $counter ++;
+        if ($advanced_role) {
+            &Apache::lonhtmlcommon::Update_PrgWin('',\%zip_prog_state,
+                                                  &mt('[_1] added to zip archive ([_2] of [_3]',
+                                                  $dest,$counter,$number_of_files));
+        }
+    }
+    if ($advanced_role) {
+        &Apache::lonhtmlcommon::Update_PrgWin('',\%zip_prog_state,&mt('Writing zip file'));
     }
-    print('<p>'.&mt('Zip Output:')."\n<pre>\n");
-    system($statement);
-    print("</pre></p>\n");
-    $zipfile=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
-    print
-        '<p>'
-       .&mt('A [_1]ZIP file[_2] of all the PDF files is ready for download.',
-            '<a href="'.$zipfile.'">','</a>')
-       .'</p>';
+    if ($zip->writeToFileNamed($zipfile) == AZ_OK) {
+        $zipfile=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
+        print
+            '<p>'
+           .&mt('A [_1]ZIP file[_2] of all the PDF files is ready for download.',
+                '<a href="'.$zipfile.'">','</a>')
+           .'</p>';
+    } else {
+        print '<p class="LC_error">'.
+              &mt('An error occurred creating a ZIP file of all the PDF files').
+             '</p>';
+    }
+    if ($advanced_role) { &Apache::lonhtmlcommon::Close_PrgWin('',\%zip_prog_state); }
 }
-if ($advanced_role) { &Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); }
 print(&Apache::loncommon::end_page());
 my $done;
 




More information about the LON-CAPA-cvs mailing list