version 1.39, 2011/12/21 21:25:40
|
version 1.41, 2017/11/05 18:19:41
|
Line 31 use LONCAPA::loncgi;
|
Line 31 use LONCAPA::loncgi;
|
use File::Path; |
use File::Path; |
use File::Basename; |
use File::Basename; |
use File::Copy; |
use File::Copy; |
|
use Archive::Zip qw( :ERROR_CODES ); |
use Apache::lonhtmlcommon(); |
use Apache::lonhtmlcommon(); |
use Apache::lonnavmaps(); |
use Apache::lonnavmaps(); |
use Apache::loncommon(); |
use Apache::loncommon(); |
Line 38 use Apache::lonlocal;
|
Line 39 use Apache::lonlocal;
|
use Apache::lonmsg(); |
use Apache::lonmsg(); |
use Apache::lonnet; |
use Apache::lonnet; |
use LONCAPA::Enrollment; |
use LONCAPA::Enrollment; |
|
use LONCAPA; |
use strict; |
use strict; |
|
|
sub is_flat { |
sub is_flat { |
Line 74 sub get_part_resp_path {
|
Line 76 sub get_part_resp_path {
|
$|=1; |
$|=1; |
&Apache::lonlocal::get_language_handle(); |
&Apache::lonlocal::get_language_handle(); |
&Apache::loncommon::content_type(undef,'text/html'); |
&Apache::loncommon::content_type(undef,'text/html'); |
|
my ($nocookie,$identifier,$unique_path,$scope,$unique_user); |
if (! &LONCAPA::loncgi::check_cookie_and_load_env()) { |
if (! &LONCAPA::loncgi::check_cookie_and_load_env()) { |
print(&LONCAPA::loncgi::missing_cookie_msg()); |
print(&LONCAPA::loncgi::missing_cookie_msg()); |
return; |
$nocookie = 1; |
} |
} |
|
|
my $identifier = $ENV{'QUERY_STRING'}; |
unless ($nocookie) { |
my $unique_path = $identifier.time(); |
$scope = $env{'request.course.id'}; |
print(&Apache::loncommon::start_page('Multiple Downloads')); |
if ($env{'request.course.sec'}) { |
|
$scope .= '/'.$env{'request.course.sec'}; |
|
} |
my $scope = $env{'request.course.id'}; |
if ($ENV{'QUERY_STRING'} =~ /^\d+_\d+_\d+$/) { |
if ($env{'request.course.sec'}) { |
$identifier = $ENV{'QUERY_STRING'}; |
$scope .= '/'.$env{'request.course.sec'}; |
$unique_path = $identifier.time(); |
|
} |
|
if (($env{'user.name'} =~ /^$LONCAPA::match_username$/) && |
|
($env{'user.domain'} =~ /^$LONCAPA::match_domain$/)) { |
|
$unique_user = $env{'user.name'}.':'.$env{'user.domain'}; |
|
} |
|
print(&Apache::loncommon::start_page('Multiple Downloads')); |
} |
} |
if (&Apache::lonnet::allowed('vgr',$scope) eq 'F') { |
if ($scope eq '') { |
|
print(&mt('Invalid course context: you need to reselect your course role.')); |
|
} elsif ($identifier eq '') { |
|
unless ($nocookie) { |
|
if (&Apache::lonnet::allowed('vgr',$scope) eq 'F') { |
|
print(&mt('Invalid query string; unable to download submissions.')); |
|
} else { |
|
print(&mt('You are not authorized to download student submissions.')); |
|
} |
|
} |
|
} elsif ($unique_user eq '') { |
|
unless ($nocookie) { |
|
if (&Apache::lonnet::allowed('vgr',$scope) eq 'F') { |
|
print(&mt('Characters in your username and/or domain prevent download of submissions.')); |
|
} else { |
|
print(&mt('You are not authorized to download student submissions.')); |
|
} |
|
} |
|
} elsif (&Apache::lonnet::allowed('vgr',$scope) eq 'F') { |
my $symb = $env{'cgi.'.$identifier.'.symb'}; |
my $symb = $env{'cgi.'.$identifier.'.symb'}; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $res = $navmap->getBySymb($symb); |
my $res = $navmap->getBySymb($symb); |
Line 96 if (&Apache::lonnet::allowed('vgr',$scop
|
Line 123 if (&Apache::lonnet::allowed('vgr',$scop
|
my ($flat_part, $flat_resp) = &is_flat($partlist, $res); |
my ($flat_part, $flat_resp) = &is_flat($partlist, $res); |
my ($zipout) = ($symb =~ /^.*\/(.+)\.problem$/); |
my ($zipout) = ($symb =~ /^.*\/(.+)\.problem$/); |
$zipout =~ s/\s/_/g; |
$zipout =~ s/\s/_/g; |
|
$zipout =~ s/[^\w.\-]+//g; |
$zipout .= "$identifier.zip"; |
$zipout .= "$identifier.zip"; |
my $courseid = $env{'request.course.id'}; |
my $courseid = $env{'request.course.id'}; |
my @stuchecked = split(/\n/,$env{'cgi.'.$identifier.'.students'}); |
my @stuchecked = split(/\n/,$env{'cgi.'.$identifier.'.students'}); |
Line 103 if (&Apache::lonnet::allowed('vgr',$scop
|
Line 131 if (&Apache::lonnet::allowed('vgr',$scop
|
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('',$number_of_students); |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('',$number_of_students); |
my @parts = split(/\n/,$env{'cgi.'.$identifier.'.parts'}); |
my @parts = split(/\n/,$env{'cgi.'.$identifier.'.parts'}); |
my $doc_zip_root = $Apache::lonnet::perlvar{'lonZipDir'}; |
my $doc_zip_root = $Apache::lonnet::perlvar{'lonZipDir'}; |
my $uname = $env{'user.name'}; |
my $manifest; |
my $udom = $env{'user.domain'}; |
unless (-d "$doc_zip_root/zipdir/$unique_user/$unique_path") { |
my $unique_user = $uname.":".$udom; |
&File::Path::mkpath($doc_zip_root."/zipdir/$unique_user/$unique_path",0,0700); |
&mkpath($doc_zip_root."/zipdir/$unique_user/$unique_path",0,0700); |
} |
if (!open(MANIFEST, ">$doc_zip_root/zipdir/$unique_user/$unique_path/manifest.txt")) { |
if (open(MANIFEST, ">$doc_zip_root/zipdir/$unique_user/$unique_path/manifest.txt")) { |
|
$manifest = 1; |
|
print MANIFEST (&mt("Zip file generated on [_1]",&Apache::lonlocal::locallocaltime(time()))."\n"); |
|
print MANIFEST (&mt("Course: [_1]",$env{"course.$courseid.description"})."\n"); |
|
print MANIFEST (&mt("Problem: [_1]",$res->compTitle)."\n"); |
|
print MANIFEST (&mt("Files contained in this zip:")."\n"); |
|
} else { |
&Apache::lonnet::logthis("Problem making manifest"); |
&Apache::lonnet::logthis("Problem making manifest"); |
} |
} |
print MANIFEST (&mt("Zip file generated on [_1]",&Apache::lonlocal::locallocaltime(time()))."\n"); |
|
print MANIFEST (&mt("Course: [_1]",$env{"course.$courseid.description"})."\n"); |
|
print MANIFEST (&mt("Problem: [_1]",$res->compTitle)."\n"); |
|
print MANIFEST (&mt("Files contained in this zip:")."\n"); |
|
my $file_problem = 0; |
my $file_problem = 0; |
my $current_student = 0; |
my $current_student = 0; |
foreach my $stu (@stuchecked) { |
foreach my $stu (@stuchecked) { |
Line 123 if (&Apache::lonnet::allowed('vgr',$scop
|
Line 153 if (&Apache::lonnet::allowed('vgr',$scop
|
my ($stuname,$studom,$fullname) = split(/:/,$stu); |
my ($stuname,$studom,$fullname) = split(/:/,$stu); |
my %record = &Apache::lonnet::restore($symb,$courseid,$studom,$stuname); |
my %record = &Apache::lonnet::restore($symb,$courseid,$studom,$stuname); |
my $port_url = '/uploaded/'.$studom.'/'.$stuname.'/portfolio'; |
my $port_url = '/uploaded/'.$studom.'/'.$stuname.'/portfolio'; |
print MANIFEST ($fullname."\n"); |
if ($manifest) { |
|
print MANIFEST ($fullname."\n"); |
|
} |
|
|
my $submission_count = 0; |
my $submission_count = 0; |
foreach my $partid (@$partlist) { |
foreach my $partid (@$partlist) { |
my @ids = $res->responseIds($partid); |
my @ids = $res->responseIds($partid); |
foreach my $respid (@ids) { |
foreach my $respid (@ids) { |
my $part_resp_path = &get_part_resp_path($flat_part,$flat_resp, $partid, $respid); |
my $part_resp_path = &get_part_resp_path($flat_part,$flat_resp, $partid, $respid); |
&mkpath($doc_zip_root."/zipdir/$unique_user/$unique_path/$stuname/$part_resp_path",0,0700); |
&File::Path::mkpath($doc_zip_root."/zipdir/$unique_user/$unique_path/$stuname/$part_resp_path",0,0700); |
foreach my $origin ('portfiles','uploadedurl') { |
foreach my $origin ('portfiles','uploadedurl') { |
my @files; |
my @files; |
if ($record{"resource.$partid.$respid.$origin"} ne '') { |
if ($record{"resource.$partid.$respid.$origin"} ne '') { |
Line 145 if (&Apache::lonnet::allowed('vgr',$scop
|
Line 177 if (&Apache::lonnet::allowed('vgr',$scop
|
$file = $port_url.$file; |
$file = $port_url.$file; |
} |
} |
my ($file_name_only) = ($file =~ m{.*/([^/]+)$}); |
my ($file_name_only) = ($file =~ m{.*/([^/]+)$}); |
print MANIFEST ("\t$file_name_only (".&mt("Part [_1]",$partid). |
if ($manifest) { |
") (".&mt("Response [_1]",$respid).")"."\n"); |
print MANIFEST ("\t$file_name_only (".&mt("Part [_1]",$partid). |
|
") (".&mt("Response [_1]",$respid).")"."\n"); |
|
} |
$submission_count ++; |
$submission_count ++; |
&Apache::lonnet::repcopy($file); |
&Apache::lonnet::repcopy($file); |
my $source = &Apache::lonnet::filelocation("",$file); |
my $source = &Apache::lonnet::filelocation("",$file); |
Line 170 if (&Apache::lonnet::allowed('vgr',$scop
|
Line 204 if (&Apache::lonnet::allowed('vgr',$scop
|
} |
} |
} |
} |
} |
} |
if (!$submission_count) { |
if ((!$submission_count) && ($manifest)) { |
print MANIFEST ("\t".&mt("No Files Submitted")."\n"); |
print MANIFEST ("\t".&mt("No Files Submitted")."\n"); |
} |
} |
} |
} |
|
if ($manifest) { |
&mkpath($doc_zip_root."/zipout/$unique_user",0,0700); |
close(MANIFEST); |
my $statement; |
} |
if (! -e "$doc_zip_root/zipout/$unique_user/$zipout") { |
my $madezip; |
$statement = "cd $doc_zip_root/zipdir/$unique_user/$unique_path\n"; |
unless (-d "$doc_zip_root/zipout/$unique_user") { |
$statement .= "zip -r $doc_zip_root/zipout/$unique_user/$zipout * > /dev/null"; |
&File::Path::mkpath($doc_zip_root."/zipout/$unique_user",0,0700); |
system($statement); |
} |
} else { |
if ((-d "$doc_zip_root/zipout/$unique_user") && |
# should happen only if user reloads page |
(-d "$doc_zip_root/zipdir/$unique_user/$unique_path")) { |
&Apache::lonnet::logthis("$zipout is already there"); |
if (!-e "$doc_zip_root/zipout/$unique_user/$zipout") { |
|
my $zip = Archive::Zip->new(); |
|
$zip->addTree("$doc_zip_root/zipdir/$unique_user/$unique_path"); |
|
if ($zip->writeToFileNamed("$doc_zip_root/zipout/$unique_user/$zipout") == AZ_OK) { |
|
$madezip = 1; |
|
} |
|
} else { |
|
$madezip = 1; |
|
# should happen only if user reloads page |
|
&Apache::lonnet::logthis("$zipout is already there"); |
|
} |
|
&File::Path::remove_tree("$doc_zip_root/zipdir/$unique_user/$unique_path",{ safe => 1, }); |
} |
} |
$statement = "rm -rf $doc_zip_root/zipdir/$unique_user/$unique_path"; |
|
system($statement); |
|
&Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); |
&Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); |
print('<p><a href="/zipspool/zipout/'.$unique_user.'/'.$zipout.'">'. |
if ($madezip) { |
&mt("Click to download").'</a></p><br />'); |
print('<p><a href="/zipspool/zipout/'.$unique_user.'/'.$zipout.'">'. |
close(MANIFEST); |
&mt("Click to download").'</a></p><br />'); |
|
} else { |
|
print('<p class="LC_error">'. |
|
&mt('Failed to create zip archive of student submissions'). |
|
'</p>'); |
|
} |
} else { |
} else { |
print(&mt('You are not authorized to download student submissions.')); |
print('<p class="LC_error">'. |
|
&mt('You are not authorized to download student submissions.'). |
|
'</p>'); |
|
} |
|
unless ($nocookie) { |
|
print(&Apache::loncommon::end_page()); |
} |
} |
1; |
1; |
__END__; |
__END__; |