--- loncom/homework/essayresponse.pm	2008/12/09 00:23:22	1.93
+++ loncom/homework/essayresponse.pm	2008/12/22 14:55:28	1.96
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # essay (ungraded) style responses
 #
-# $Id: essayresponse.pm,v 1.93 2008/12/09 00:23:22 raeburn Exp $
+# $Id: essayresponse.pm,v 1.96 2008/12/22 14:55:28 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -203,6 +203,7 @@ sub end_essayresponse {
 
 	if ($target eq 'analyze') {
             $Apache::lonhomework::analyze{"$part.$id.type"} = 'essayresponse';
+            push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id");
 	    &Apache::lonhomework::set_bubble_lines();
 	}
     }
@@ -318,12 +319,13 @@ sub file_submission {
                     if ($which eq 'filename') {
                         &delete_form_items($jspart,$id);
                     }
+                } else {
+                    push(@accepted_files,$file);
                 }
             } else {
                 push(@accepted_files,$file);
             }
         }
-	my $uploadedfiletypes= &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes");
         $Apache::lonhomework::results{"resource.$part.$id.$which"}=join(',',@accepted_files);
         if (($$award eq 'INVALID_FILETYPE') || ($award eq 'EXCESS_FILESIZE')) {
             return;
@@ -331,8 +333,8 @@ sub file_submission {
 	if (ref($uploadedflag)) {
 	    $$uploadedflag=1;
 	}
+        my ($symb,$crsid,$domain,$name)=&Apache::lonnet::whichuser();
 	if ($which eq 'portfiles') {
-	    my ($symb,$crsid,$domain,$name)=&Apache::lonnet::whichuser();
 	    &Apache::lonnet::unmark_as_readonly($domain,$name,[$symb,$crsid]);
 	    &Apache::lonnet::mark_as_readonly($domain,$name,\@submitted_files,[$symb,$crsid]);
 	    &Apache::lonnet::clear_selected_files($name);
@@ -340,9 +342,39 @@ sub file_submission {
 	if ($which eq 'filename') {
 	    $Apache::lonhomework::results{"resource.$part.$id.uploadedfile"}=
 		$files;
+            my $cleanpart = $part;
+            $cleanpart =~ s/\W/_/g;
+            my $cleanid = $id;
+            $cleanid =~ s/\W/_/g;
+            my ($map,$resid,$res)=&Apache::lonnet::decode_symb($symb);
+            my $container;
+            if ($map =~ /^uploaded/) {
+                (my $prefix,$container) = ($map =~ m{^uploaded/[^/]+/[^/]+/(default|supplemental)_?([^.]*)\.(?:sequence|page)$});
+                if (length($container) > 10) {
+                    $container = substr($container,-10,10);
+                }
+                if ($container ne '') {
+                    $container = $prefix.'_'.$container;
+                } else {
+                    $container = $prefix;
+                } 
+            } else {
+                ($container) = ($map =~ m{(.+)\.(?:sequence|page)$});
+                $container =~ s/\W/_/g;
+                if (length($container) > 255) {
+                    $container = substr($container,0,254);
+                }
+            }
+            my $subdir = 'essayresponse';
+            my %crsdesc = &Apache::lonnet::coursedescription($crsid);
+            foreach my $item ($crsdesc{'domain'},$crsdesc{'num'},$container,$resid,$cleanpart,$cleanid) {
+                if ($item ne '') {
+                    $subdir .= '/'.$item;
+                }
+            }
 	    $Apache::lonhomework::results{"resource.$part.$id.uploadedurl"}=
 		&Apache::lonnet::userfileupload('HWFILE'.$jspart.'_'.$id,undef,
-						'essayresponse');
+						$subdir);
             &Apache::lonnet::delenv($env{'form.HWFILE'.$jspart.'_'.$id});
 	}
     } elsif ($which eq 'portfiles' &&