[LON-CAPA-cvs] cvs: loncom /interface multidownload.pl
banghart
lon-capa-cvs-allow@mail.lon-capa.org
Sat, 05 May 2007 18:51:49 -0000
banghart Sat May 5 14:51:49 2007 EDT
Modified files:
/loncom/interface multidownload.pl
Log:
Create directory hierarchy as needed based on problem parts and
responses.
Index: loncom/interface/multidownload.pl
diff -u loncom/interface/multidownload.pl:1.24 loncom/interface/multidownload.pl:1.25
--- loncom/interface/multidownload.pl:1.24 Sat May 5 13:26:27 2007
+++ loncom/interface/multidownload.pl Sat May 5 14:51:49 2007
@@ -2,7 +2,7 @@
# CGI-script to allow download of all essay submissions of
# multiple students.
#
-# $Id: multidownload.pl,v 1.24 2007/05/05 17:26:27 banghart Exp $
+# $Id: multidownload.pl,v 1.25 2007/05/05 18:51:49 banghart Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -43,6 +43,33 @@
use LONCAPA::Enrollment;
use strict;
+sub is_flat {
+ my ($partlist, $res) = @_;
+ my $flat_part = 1;
+ my $flat_resp = 1;
+ if (scalar(@$partlist) > 1) {
+ $flat_part = 0;
+ }
+ foreach my $partid (@$partlist) {
+ my @ids = $res->responseIds($partid);
+ if (scalar(@ids) > 1 ) {
+ $flat_resp = 0;
+ }
+ }
+ return ($flat_part, $flat_resp);
+}
+sub get_part_resp_path {
+ my ($flat_part, $flat_resp, $part_id, $resp_id) = @_;
+ my $part_resp_path = "";
+ if (!$flat_part) {
+ $part_resp_path = "part$part_id/";
+ }
+ if (!$flat_resp) {
+ $part_resp_path .= "resp$resp_id/";
+ }
+ $part_resp_path =~ s/\/^//;
+ return('/'.$part_resp_path);
+}
$|=1;
if (! &LONCAPA::loncgi::check_cookie_and_load_env()) {
print <<END;
@@ -72,6 +99,7 @@
my $navmap = Apache::lonnavmaps::navmap->new();
my $res = $navmap->getBySymb($symb);
my $partlist = $res->parts();
+ my ($flat_part, $flat_resp) = &is_flat($partlist, $res);
my ($zipout) = ($symb =~ /^.*\/(.+)\.problem$/);
$zipout =~ s/\s/_/g;
$zipout .= "$identifier.zip";
@@ -94,17 +122,20 @@
my %record = &Apache::lonnet::restore($symb,$courseid,$studom,$stuname);
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);
+ 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);
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";
+
+ my $destination = "$doc_zip_root/zipdir/$unique_user/$unique_path/$stuname$part_resp_path/$file_name_only";
if (exists($files_saved{$destination})) {
# file has already been saved once
my ($file_name,$file_ext) = ($destination =~ /(^.*)(\..+$)/);
@@ -122,6 +153,7 @@
}
}
}
+
}
&mkpath($doc_zip_root."/zipout/$unique_user",0,0700);