[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);