[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