--- loncom/homework/bridgetask.pm	2005/04/07 06:56:21	1.11
+++ loncom/homework/bridgetask.pm	2005/04/29 21:22:33	1.13
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # definition of tags that give a structure to a document
 #
-# $Id: bridgetask.pm,v 1.11 2005/04/07 06:56:21 albertel Exp $
+# $Id: bridgetask.pm,v 1.13 2005/04/29 21:22:33 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -82,12 +82,19 @@ sub add_previous_version_button {
     return $result;
 }
 
+sub add_grading_button {
+    my $result;
+    $result.=' <input type="submit" name="gradeasubmission" value="'.
+	&mt("Get a submission to grade").'" />';
+    $result.='<input type="hidden" name="grade_target" value="webgrade" />';
+    return $result;
+}
+
 sub start_Task {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
 
     &Apache::structuretags::initialize_storage();
     &Apache::lonhomework::showhash(%Apache::lonhomework::history);
-
     my ($status,$accessmsg,$slot);
     $Apache::lonhomework::parsing_a_task=1;
     #should get back a <html> or the neccesary stuff to start XML/MathML
@@ -96,6 +103,12 @@ sub start_Task {
 
     if ($target eq 'web') {
 	$body_tag_start.=&add_previous_version_button();
+	if ($Apache::lonhomework::modifygrades) {
+	    $body_tag_start.='<form name="gradesubmission" method="POST" action="';
+	    my $uri=$env{'request.uri'};
+	    if ($env{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); }
+	    $body_tag_start.=$uri.'">'.&add_grading_button()."</form>";
+	}
     }
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
 	$target eq 'tex') {
@@ -159,6 +172,9 @@ sub start_Task {
 		}
 	    }
 	}
+    } elsif ($target eq 'webgrade') {
+	$result.=$head_tag_start.$body_tag_start.$form_tag_start.
+	    'Yahoo!';
     } else {
 	# page_start returned a starting result, delete it if we don't need it
 	$result = '';
@@ -171,7 +187,7 @@ sub end_Task {
     my $result='';
     my $status=$Apache::inputtags::status['-1'];
     if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
-	$target eq 'tex') {
+	$target eq 'tex' || $target eq 'webgrade') {
 	if (
 	    (($target eq 'web') && ($env{'request.state'} ne 'construct')) ||
 	    ($target eq 'answer') || ($target eq 'tex')
@@ -184,11 +200,14 @@ sub end_Task {
 							  "</table>";
 		    $result.=&Apache::inputtags::gradestatus('0');
 		}
+	    } 
+	    if ($target eq 'web' || $target eq 'webgrade') {
 		$result.=&Apache::lonxml::xmlend().'</html>';
 	    }
 	}
 	if ($target eq 'grade') {
-	    &Apache::essayresponse::file_submission('0','bridgetask','portfiles','SUBMITTED');
+	    my $award='SUBMITTED';
+	    &Apache::essayresponse::file_submission('0','bridgetask','portfiles',$award);
 	    if ($Apache::lonhomework::results{"resource.0.bridgetask.portfiles"}) {
 		$Apache::lonhomework::results{"resource.0.tries"}=
 		    1+$Apache::lonhomework::history{"resource.0.tries"};
@@ -209,6 +228,8 @@ sub start_ClosingParagraph {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;
     if ($target eq 'web') {
+    } elsif ($target eq 'webgrade') {
+	&Apache::lonxml::startredirection();
     }
     return $result;
 }
@@ -217,6 +238,8 @@ sub end_ClosingParagraph {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;
     if ($target eq 'web') {
+    } elsif ($target eq 'webgrade') {
+	&Apache::lonxml::endredirection();
     }
     return $result;
 }
@@ -232,21 +255,29 @@ sub start_Dimension {
     return '';
 }
 
+sub get_instance {
+    #FIXME just grabbing the first one for now, need
+    #to randomly pick one until all have been seen
+    #then start repicking
+    &Apache::response::pushrandomnumber();
+    my @order=&Math::Random::random_permutation(@{$dimension{'instances'}});
+    return $order[0];
+}
+
 sub end_Dimension {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;
     if ($target eq 'web') {
-	#FIXME just grabbing the first one for now, need
-	#to randomly pick one until all have been seen
-	#then start repicking
-	&Apache::response::pushrandomnumber();
-	my @order=&Math::Random::random_permutation(@{$dimension{'instances'}});
-	my $instance=$order[0];
+	my $instance=&get_instance();
 	$result=$dimension{'intro'}.$dimension{$instance.'.text'};
-	#FIXME: don't show the criteria yet
-	#foreach my $id (@{$dimension{$instance.'.criterias'}}) {
-	#    $result.=$dimension{$instance.'.criteria.'.$id};
-	#}
+    } elsif ($target eq 'webgrade') {
+	my $instance=&get_instance();
+	$result.='<table>';
+	foreach my $id (@{$dimension{$instance.'.criterias'}}) {
+	    $result.='<tr><td>'.
+		$dimension{$instance.'.criteria.'.$id}.'</td></tr>';
+	}
+	$result.='</table>';
     }
     return $result;
 }
@@ -254,8 +285,8 @@ sub end_Dimension {
 sub start_IntroParagraph {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;
-    if ($target eq 'web') {
-	if ($tagstack->[-2] eq 'Dimension') {
+    if ($target eq 'web' || $target eq 'webgrade') {
+	if ($tagstack->[-2] eq 'Dimension' || $target eq 'webgrade') {
 	    &Apache::lonxml::startredirection();
 	}
     }
@@ -265,8 +296,8 @@ sub start_IntroParagraph {
 sub end_IntroParagraph {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;
-    if ($target eq 'web') {
-	if ($tagstack->[-2] eq 'Dimension') {
+    if ($target eq 'web' || $target eq 'webgrade') {
+	if ($tagstack->[-2] eq 'Dimension' || $target eq 'webgrade') {
 	    $dimension{'intro'}=&Apache::lonxml::endredirection();
 	}
     }
@@ -288,7 +319,7 @@ sub end_Instance {
 
 sub start_InstanceText {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
-    if ($target eq 'web') {
+    if ($target eq 'web' || $target eq 'webgrade') {
 	&Apache::lonxml::startredirection();
     }
     return '';
@@ -297,7 +328,7 @@ sub start_InstanceText {
 sub end_InstanceText {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $instance_id=$Apache::bridgetask::instance[-1];
-    if ($target eq 'web') {
+    if ($target eq 'web' || $target eq 'webgrade') {
 	$dimension{$instance_id.'.text'}=&Apache::lonxml::endredirection();
     }
     return '';
@@ -305,7 +336,7 @@ sub end_InstanceText {
 
 sub start_Criteria {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
-    if ($target eq 'web') {
+    if ($target eq 'web' || $target eq 'webgrade') {
 	&Apache::lonxml::startredirection();
     }
     return '';
@@ -314,7 +345,7 @@ sub start_Criteria {
 sub end_Criteria {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $instance_id=$Apache::bridgetask::instance[-1];
-    if ($target eq 'web') {
+    if ($target eq 'web' || $target eq 'webgrade') {
 	my $criteria=&Apache::lonxml::endredirection();
 	my $id=$Apache::lonxml::curdepth;
 	$dimension{$instance_id.'.criteria.'.$id}=$criteria;