--- loncom/interface/multidownload.pl 2007/04/27 22:16:22 1.17 +++ loncom/interface/multidownload.pl 2007/04/30 22:47:28 1.23 @@ -2,7 +2,7 @@ # CGI-script to allow download of all essay submissions of # multiple students. # -# $Id: multidownload.pl,v 1.17 2007/04/27 22:16:22 banghart Exp $ +# $Id: multidownload.pl,v 1.23 2007/04/30 22:47:28 banghart Exp $ # # Copyright Michigan State University Board of Trustees # @@ -34,7 +34,6 @@ use File::Basename; use File::Copy; use IO::File; use Apache::lonhtmlcommon(); -use Apache::grades; use Apache::lonnavmaps; use Apache::lonnet; use Apache::loncommon(); @@ -70,64 +69,76 @@ if ($env{'request.course.sec'}) { } if (&Apache::lonnet::allowed('vgr',$scope) eq 'F') { my $symb = $env{'cgi.'.$identifier.'.symb'}; - my $navmap = Apache::lonnavmaps::navmap->new(); my $res = $navmap->getBySymb($symb); - &Apache::lonnet::logthis("$navmap is navmap"); - + my $partlist = $res->parts(); my ($zipout) = ($symb =~ /^.*\/(.+)\.problem$/); $zipout =~ s/\s/_/g; - $zipout .= ".zip"; + $zipout .= "$identifier.zip"; my $courseid = $env{'request.course.id'}; my @stuchecked = split(/\n/,$env{'cgi.'.$identifier.'.students'}); my @parts = split(/\n/,$env{'cgi.'.$identifier.'.parts'}); - my ($partlist,$handgrade,$responseType) = &Apache::grades::response_type($symb); - my @part_response_id = &Apache::grades::flatten_responseType($responseType); my $doc_zip_root = $Apache::lonnet::perlvar{'lonZipDir'}; -# my ($partlist,$handgrade,$responseType) = &Apache::grades::response_type($symb); my $uname = $env{'user.name'}; my $udom = $env{'user.domain'}; my $unique_user = $uname.":".$udom; &mkpath($doc_zip_root."/zipdir/$unique_user/$unique_path",0,0700); + if (!open MANIFEST, ">$doc_zip_root/zipdir/$unique_user/$unique_path/manifest.txt") { + &Apache::lonnet::logthis("Problem making manifest"); + } + print MANIFEST "Files contained in this zip:\n"; my $file_problem = 0; foreach my $stu (@stuchecked) { my %files_saved; my ($stuname,$studom,$fullname) = split(/:/,$stu); my %record = &Apache::lonnet::restore($symb,$courseid,$studom,$stuname); - foreach my $part (@part_response_id) { - my ($partid,$respid) = @{$part}; - &mkpath($doc_zip_root."/zipdir/$unique_user/$unique_path/$stuname/part$partid/resp$respid",0,0700); - my $files = &Apache::grades::get_submitted_files($studom,$stuname,$partid,$respid,\%record); - foreach my $file (@$files) { - my ($file_name_only) = ($file =~ /^.*\/(.+$)/); - &Apache::lonnet::repcopy($file); - my $source = &Apache::lonnet::filelocation("",$file); - my $destination = "$doc_zip_root/zipdir/$unique_user/$unique_path/$stuname/part$partid/resp$respid/$file_name_only"; - if (exists($files_saved{$destination})) { - # file has already been saved once - my ($file_name,$file_ext) = ($destination =~ /(^.*)(\..+$)/); - $destination = $file_name.$files_saved{$destination}.$file_ext; - $files_saved{$destination} ++; - } - $files_saved{$destination}++; - if (!©($source,$destination)) { - if (!$file_problem) { - print &mt("Unable to create:
"); - $file_problem = 1; + my $file_url = '/uploaded/'.$studom.'/'.$stuname.'/portfolio'; + print MANIFEST $fullname."\n"; + foreach my $partid (@$partlist) { + my @ids = $res->responseIds($partid); + foreach my $respid(@ids) { + &mkpath($doc_zip_root."/zipdir/$unique_user/$unique_path/$stuname/part$partid/resp$respid",0,0700); + foreach my $file (split(',',$record{"resource.$partid.$respid.portfiles"})) { + $file = $file_url.$file; + my ($file_name_only) = ($file =~ /^.*\/(.+$)/); + print MANIFEST "\t$file_name_only \n"; + &Apache::lonnet::repcopy($file); + my $source = &Apache::lonnet::filelocation("",$file); + my $destination = "$doc_zip_root/zipdir/$unique_user/$unique_path/$stuname/part$partid/resp$respid/$file_name_only"; + if (exists($files_saved{$destination})) { + # file has already been saved once + my ($file_name,$file_ext) = ($destination =~ /(^.*)(\..+$)/); + $destination = $file_name.$files_saved{$destination}.$file_ext; + $files_saved{$destination} ++; + } + $files_saved{$destination}++; + if (!©($source,$destination)) { + if (!$file_problem) { + print &mt("Unable to create:
"); + $file_problem = 1; + } + print ("$stuname/part$partid/resp$respid/$file_name_only
"); } - print ("$stuname/part$partid/resp$respid/$file_name_only
"); } } } } + &mkpath($doc_zip_root."/zipout/$unique_user",0,0700); - my $statement = "cd $doc_zip_root/zipdir/$unique_user/$unique_path\n"; - $statement .= "zip -r $doc_zip_root/zipout/$unique_user/$zipout * > /dev/null"; - system($statement); + my $statement; + if (! -e "$doc_zip_root/zipout/$unique_user/$zipout") { + $statement = "cd $doc_zip_root/zipdir/$unique_user/$unique_path\n"; + $statement .= "zip -r $doc_zip_root/zipout/$unique_user/$zipout * > /dev/null"; + system($statement); + } else { + # should happen only if user reloads page + &Apache::lonnet::logthis("$zipout is already there"); + } $statement = "rm -rf $doc_zip_root/zipdir/$unique_user/$unique_path"; system($statement); print(''. &mt("Click to download").'
'); + close MANIFEST; } else { print(&mt('You are not authorized to download student submissions.')); } 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.