--- loncom/homework/grades.pm	2006/03/19 21:29:50	1.335
+++ loncom/homework/grades.pm	2006/03/24 18:05:47	1.340
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.335 2006/03/19 21:29:50 albertel Exp $
+# $Id: grades.pm,v 1.340 2006/03/24 18:05:47 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -209,7 +209,8 @@ sub get_order {
 #--- Currently filters option/rank/radiobutton/match/essay/Task
 #        response types only.
 sub cleanRecord {
-    my ($answer,$response,$symb,$partid,$respid,$record,$order,$version) = @_;
+    my ($answer,$response,$symb,$partid,$respid,$record,$order,$version,
+	$uname,$udom) = @_;
     my $grayFont = '<font color="#999999">';
     if ($response =~ /^(option|rank)$/) {
 	my %answer=&Apache::lonnet::str2hash($answer);
@@ -293,7 +294,7 @@ sub cleanRecord {
     } elsif ( $response eq 'Task') {
 	if ( $answer eq 'SUBMITTED') {
 	    my $files = $record->{$version."resource.$respid.$partid.bridgetask.portfiles"};
-	    my $result = &Apache::bridgetask::file_list($files);
+	    my $result = &Apache::bridgetask::file_list($files,$uname,$udom);
 	    return $result;
 	} elsif ( grep(/^\Q$version\E.*?\.instance$/, keys(%{$record})) ) {
 	    my @matches = grep(/^\Q$version\E.*?\.instance$/,
@@ -2272,16 +2273,15 @@ sub saveHandGrade {
     my $usec = &Apache::lonnet::getsection($domain,$stuname,
 					   $env{'request.course.id'});
     if (!&canmodify($usec)) { return('not_allowed'); }
-    my %record     = &Apache::lonnet::restore($symb,$env{'request.course.id'},$domain,$stuname);
+    my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},$domain,$stuname);
     my @parts_graded;
     my %newrecord  = ();
     my ($pts,$wgt) = ('','');
     my %aggregate = ();
     my $aggregateflag = 0;
-
     my @parts = split(/:/,$env{'form.partlist'.$newflg});
     foreach my $new_part (@parts) {
-	#collaborator may vary for different parts
+	#collaborator ($submi may vary for different parts
 	if ($submitter && $new_part ne $part) { next; }
 	my $dropMenu = $env{'form.GD_SEL'.$newflg.'_'.$new_part};
 	if ($dropMenu eq 'excused') {
@@ -2349,32 +2349,8 @@ sub saveHandGrade {
 	    }
 	    $newrecord{'resource.'.$new_part.'.regrader'}=
 		"$env{'user.name'}:$env{'user.domain'}";
+            &handback_files($request,$symb,$stuname,$domain,$newflg,$new_part,\%newrecord);
 	}
-	my ($partlist,$handgrade,$responseType) = &response_type($symb);
-	foreach my $part_resp (sort(keys(%$handgrade))) {
-	    my ($part_id, $resp_id) = split(/_/,$part_resp);
-            if (($env{'form.'.$newflg.'_'.$part_resp.'_returndoc1'}) && ($new_part == $part_id)) {
-                # if multiple files are uploaded names will be 'returndoc2','returndoc3'
-                my $file_counter = 1;
-                while ($env{'form.'.$newflg.'_'.$part_resp.'_returndoc'.$file_counter}) {
-                    my $fname=$env{'form.'.$newflg.'_'.$part_resp.'_returndoc'.$file_counter.'.filename'};
-                    $newrecord{"resource.$new_part.$resp_id.handback"} = $env{'form.returndocorig'.$file_counter};
-                    # set the filename to match the submitted file name
-                    $env{'form.'.$newflg.'_'.$part_resp.'_returndoc1.filename'} = $env{'form.'.$newflg.'_'.$part_resp.'_origdoc'.$file_counter};
-                    my $result=&Apache::lonnet::userfileupload($newflg.'_'.$part_resp.'_returndoc'.$file_counter,'',
-	        	 'portfolio',undef,undef,undef,$stuname,$domain);
-                   if ($result !~ m|^/uploaded/|) {
-                        $request->print('<font color="red"> An errror occured ('.$result.
-	                    ') while trying to upload '.&display_file().'</font><br />');
-	                # $request->print(&done('Back'));
-	            }
-                    $request->print("<br />".$fname." will be the uploaded file name");
-                    $request->print("<font color=\"red\">Will upload document</font>".$env{'form.'.$newflg.'_'.$part_resp.'_origdoc'.$file_counter});
-                    $file_counter++;
-                }
-            }
-        }
-	
 	# unless problem has been graded, set flag to version the submitted files
 	unless ($record{'resource.'.$new_part.'.solved'} =~ /^correct_/  || 
 	        $record{'resource.'.$new_part.'.solved'} eq 'incorrect_by_override' ||
@@ -2392,7 +2368,6 @@ sub saveHandGrade {
         }
 	&Apache::lonnet::cstore(\%newrecord,$symb,
 				$env{'request.course.id'},$domain,$stuname);
-	
 	my @ungraded_parts;
 	foreach my $part (@parts) {
 	    if ( !defined($record{'resource.'.$part.'.awarded'})
@@ -2412,6 +2387,46 @@ sub saveHandGrade {
     return ('',$pts,$wgt);
 }
 
+sub handback_files {
+    my ($request,$symb,$stuname,$domain,$newflg,$new_part,$newrecord) = @_;
+    my $portfolio_root = &Apache::loncommon::propath($domain,
+						 $stuname).
+						'/userfiles/portfolio';
+	my ($partlist,$handgrade,$responseType) = &response_type($symb);
+        foreach my $part_resp (sort(keys(%$handgrade))) {
+            my ($part_id, $resp_id) = split(/_/,$part_resp);
+            if (($env{'form.'.$newflg.'_'.$part_resp.'_returndoc1'}) && ($new_part == $part_id)) {
+                # if multiple files are uploaded names will be 'returndoc2','returndoc3'
+                my $file_counter = 1;
+                while ($env{'form.'.$newflg.'_'.$part_resp.'_returndoc'.$file_counter}) {
+                    my $fname=$env{'form.'.$newflg.'_'.$part_resp.'_returndoc'.$file_counter.'.filename'};
+                    my ($directory,$answer_file) = 
+                        ($env{'form.'.$newflg.'_'.$part_resp.'_origdoc'.$file_counter} =~ /^(.*?)([^\/]*)$/);
+                    my ($answer_name,$answer_ver,$answer_ext) =
+		        &file_name_version_ext($answer_file);
+		    my @dir_list = &Apache::lonnet::dirlist($directory,$domain,$stuname,$portfolio_root);
+		    my $version = &get_next_version($answer_name, $answer_ext, \@dir_list);
+		    my $new_answer = &version_selected_portfile($domain, $stuname, $directory, $answer_file, $version);
+                    $$newrecord{"resource.$new_part.$resp_id.handback"} = $new_answer;
+
+                    # set the filename to match the submitted file name
+                    $env{'form.'.$newflg.'_'.$part_resp.'_returndoc1.filename'} = $env{'form.'.$newflg.'_'.$part_resp.'_origdoc'.$file_counter};
+                    my $result=&Apache::lonnet::userfileupload($newflg.'_'.$part_resp.'_returndoc'.$file_counter,'',
+            	    'portfolio',undef,undef,undef,$stuname,$domain);
+                    if ($result !~ m|^/uploaded/|) {
+                        $request->print('<font color="red"> An errror occured ('.$result.
+                        ') while trying to upload '.&display_file().'</font><br />');
+                    # $request->print(&done('Back'));
+                    }
+                    $request->print("<br />".$fname." will be the uploaded file name");
+                    $request->print("<font color=\"red\">Will upload document </font>".$env{'form.'.$newflg.'_'.$part_resp.'_origdoc'.$file_counter});
+                    $file_counter++;
+                }
+            }
+        }
+    return;
+}
+
 sub get_submitted_files {
     my ($udom,$uname,$partid,$respid,$record) = @_;
     my @files;
@@ -3938,7 +3953,7 @@ sub displaySubByDates {
 			    &get_order($partid,$responseId,$symb,$uname,$udom);
 		    }
 		    $displaySub[0].='</b>&nbsp; '.
-			&cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:").'<br />';
+			&cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom).'<br />';
 		}
 	    }
 	    if (exists($$record{"$where.$partid.checkedin"})) {
@@ -5970,19 +5985,14 @@ sub handler {
 
 sub send_header {
     my ($request)= @_;
-    $request->print(&Apache::lontexconvert::header());
-#  $request->print("
-#<script>
-#remotewindow=open('','homeworkremote');
-#remotewindow.close();
-#</script>"); 
-    $request->print(&Apache::loncommon::bodytag('Grading'));
+    &Apache::lontexconvert::init_tth();
+    $request->print(&Apache::loncommon::start_page('Grading'));
     $request->rflush();
 }
 
 sub send_footer {
     my ($request)= @_;
-    $request->print('</body></html>');
+    $request->print(&Apache::loncommon::end_page());
 }
 
 1;