[LON-CAPA-cvs] cvs: loncom /homework bridgetask.pm lonhomework.pm

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 10 May 2005 20:29:26 -0000


This is a MIME encoded message

--albertel1115756966
Content-Type: text/plain

albertel		Tue May 10 16:29:26 2005 EDT

  Modified files:              
    /loncom/homework	lonhomework.pm bridgetask.pm 
  Log:
  - properly detect state of 'in grading queue' and show info screen
  - properly detect state of graded and show criteria and pass/failed status
  - grade things correctly
  
  
  
--albertel1115756966
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20050510162926.txt"

Index: loncom/homework/lonhomework.pm
diff -u loncom/homework/lonhomework.pm:1.206 loncom/homework/lonhomework.pm:1.207
--- loncom/homework/lonhomework.pm:1.206	Mon May  2 20:05:41 2005
+++ loncom/homework/lonhomework.pm	Tue May 10 16:29:26 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Homework handler
 #
-# $Id: lonhomework.pm,v 1.206 2005/05/03 00:05:41 albertel Exp $
+# $Id: lonhomework.pm,v 1.207 2005/05/10 20:29:26 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -85,13 +85,11 @@
 	    return ($env{'form.grade_target'});
 	} elsif ( defined($env{'form.grade_target'}  ) 
 		  && ($Apache::lonhomework::viewgrades eq 'F' )) {
-	    if ($env{'form.grade_target'} eq 'webgrade') {
-		if ($Apache::lonhomework::modifygrades eq 'F' ) {
-		    return ($env{'form.grade_target'});
-		}
-	    } else {
-		return ($env{'form.grade_target'});
-	    }
+	    return ($env{'form.grade_target'});
+	}
+	if ($env{'form.webgrade'} &&
+	    $Apache::lonhomework::modifygrades eq 'F') {
+	    return ('grade','webgrade');
 	}
 	if ( defined($env{'form.submitted'}) &&
 	     ( !defined($env{'form.resetdata'})) &&
@@ -168,10 +166,12 @@
 }
 
 sub proctor_checked_in {
-    my ($slot)=@_;
+    my ($slot_name,$slot)=@_;
     my @allowed=split(",",$slot->{'proctor'});
     foreach my $possible (@allowed) { 
-	if ($Apache::lonhomework::history{'resource.checkedin'} eq $possible) {
+	if ($Apache::lonhomework::history{'resource.checkedin'} eq $possible &&
+	    $Apache::lonhomework::history{'resource.checkedin.slot'} eq 
+	        $slot_name ) {
 	    return 1;
 	}
     }
@@ -226,7 +226,8 @@
 }
 
 sub check_task_access {
-    #does it pass normal muster
+    # does it pass normal muster
+    # yes we really do want the default args passing
     my ($status,$datemsg)=&check_access;
     if ($status eq 'SHOW_ANSWER' ||
 	$status eq 'CLOSED' ||
@@ -239,6 +240,12 @@
 	return ($status,$datemsg);
     }
     
+    if ($Apache::lonhomework::history{'resource.checkedin'}) {
+	if ($Apache::lonhomework::history{'resource.status'} eq 'pass' ||
+	    $Apache::lonhomework::history{'resource.status'} eq 'fail') {
+	    return ('SHOW_ANSWER');
+	}
+    }
     my ($id)=@_;
     my @slots=split(':',&Apache::lonnet::EXT("resource.$id.available"));
 #    if (!@slots) {
@@ -246,7 +253,7 @@
 #    }
     my $slotstatus='NOT_IN_A_SLOT';
     my ($returned_slot,$slot_name);
-    foreach my $slot (@slots) {
+    foreach my $slot (sort(@slots)) {
 	&Apache::lonxml::debug("getting $slot");
 	my %slot=&Apache::lonnet::get_slot($slot);
 	&Apache::lonhomework::showhash(%slot);
@@ -261,10 +268,14 @@
 	}
     }
     if ($slotstatus eq 'NEEDS_CHECKIN' &&
-	&proctor_checked_in($returned_slot)) {
+	&proctor_checked_in($slot_name,$returned_slot)) {
 	&Apache::lonxml::debug("protoctor checked in");
 	$slotstatus='CAN_ANSWER';
     }
+    if ( ($slotstatus eq 'NOT_IN_A_SLOT' || $slotstatus eq 'NEEDS_CHECKIN') && 
+	$Apache::lonhomework::history{'resource.checkedin'}) {
+	return ('WAITING_FOR_GRADE');
+    }
     return ($slotstatus,$datemsg,$slot_name,$returned_slot);
 }
 
Index: loncom/homework/bridgetask.pm
diff -u loncom/homework/bridgetask.pm:1.21 loncom/homework/bridgetask.pm:1.22
--- loncom/homework/bridgetask.pm:1.21	Tue May 10 12:44:35 2005
+++ loncom/homework/bridgetask.pm	Tue May 10 16:29:26 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # definition of tags that give a structure to a document
 #
-# $Id: bridgetask.pm,v 1.21 2005/05/10 16:44:35 albertel Exp $
+# $Id: bridgetask.pm,v 1.22 2005/05/10 20:29:26 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -59,7 +59,7 @@
 }
 
 sub proctor_check_auth {
-    my ($slot)=@_;
+    my ($slot_name,$slot)=@_;
     my $user=$env{'form.proctorname'};
     my $domain=$env{'form.proctordomain'};
     
@@ -71,6 +71,8 @@
 	    if ($authhost ne 'no_host') {
 		$Apache::lonhomework::results{'resource.checkedin'}=
 		    $user.'@'.$domain;
+		$Apache::lonhomework::results{'resource.checkedin.slot'}=
+		    $slot_name;
 		return 1;
 	    }
 	}
@@ -94,6 +96,10 @@
     return $result;
 }
 
+sub add_request_another_attempt_button {
+    
+}
+
 sub start_Task {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
 
@@ -132,6 +138,7 @@
 	    ( $status eq 'UNAVAILABLE') ||
 	    ( $status eq 'NOT_IN_A_SLOT') ||
 	    ( $status eq 'NEEDS_CHECKIN') ||
+	    ( $status eq 'WAITING_FOR_GRADE') ||
 	    ( $status eq 'INVALID_ACCESS')) {
 	    my $bodytext=&Apache::lonxml::get_all_text("/task",$parser);
 	    if ( $target eq "web" ) {
@@ -144,6 +151,8 @@
 		} elsif ($status eq 'NEEDS_CHECKIN') {
 		    $msg.='<h1>'.&mt('You need the Proctor to validate you.').
 			'</h1>'.&proctor_validation_screen($slot);
+		} elsif ($status eq 'WAITING_FOR_GRADE') {
+		    $msg.='<h1>'.&mt('Your submission is in the grading queue.').'</h1>';
 		} elsif ($status ne 'NOT_YET_VIEWED') {
 		    $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';
 		}
@@ -158,12 +167,15 @@
 		} else {
 		    $result.=&mt('Problem is not open to be viewed. It')." $accessmsg \\vskip 0 mm ";
 		}
-	    } elsif ($target eq 'grade') {
+	    } elsif ($target eq 'grade' && !$env{'form.webgrade'}) {
 		if ($status eq 'NEEDS_CHECKIN') {
-		    if (&proctor_check_auth($slot)) {
+		    if (&proctor_check_auth($slot_name,$slot)) {
 			#FIXME immeadiatly add this to the grading queue
                         #      with slot->{'endtime'} for when grading can 
                         #      begin on this resource
+			# FIXME I think the above is done by default,
+                        #        need to check that
+                        #        failure doesn't do this.
  		    }
 		}
 	    }
@@ -179,6 +191,13 @@
 			'" value="'.$env{"form.grade_$field"}.'" />'."\n";
 		}
 	    }
+	    if ($Apache::lonhomework::history{'resource.status'} eq 'fail') {
+		$result.='<h1><font color="red">'.&mt('Did not pass').'</font></h1>';
+		$result.=&request_another_attempt_button();
+	    }
+	    if ($Apache::lonhomework::history{'resource.status'} eq 'pass') {
+		$result.='<h1><font color="green">'.&mt('Passed').'</font></h1>';
+	    }
 	}
     } elsif ( ($target eq 'grade' && $env{'form.webgrade'}) ||
 	      $target eq 'webgrade') {
@@ -577,10 +596,31 @@
 	my $instance=&get_instance();
 	if ($target eq 'web') {
 	    $result=$dimension{'intro'}.$dimension{$instance.'.text'};
+	    if ($Apache::lonhomework::history{'resource.status'} eq 'pass' ||
+		$Apache::lonhomework::history{'resource.status'} eq 'fail') {
+		foreach my $id (@{$dimension{$instance.'.criterias'}}) {
+		    my $status=$Apache::lonhomework::history{"resource.$dim_id.$instance.$id.status"};
+		    my $comment=$Apache::lonhomework::history{"resource.$dim_id.$instance.$id.comment"};
+		    $result.='<table border="1"><tr><td>';
+		    if ($status eq 'fail') {
+			$result.='<font color="red">'.&mt('Did not pass').'</font>';
+		    } elsif ($status eq 'pass') {
+			$result.='<font color="green">'.&mt('Passed').'</font>';
+		    } else {
+			&Apache::lonxml::error("Student viewing a graded bridgetask was show a status of $status");
+		    }
+		    $result.='</td></tr><tr><td>';
+		    if ($Apache::lonhomework::history{"resource.$dim_id.$instance.$id.comment"}) {
+			$result.=&mt('Comment from grader: ').$Apache::lonhomework::history{"resource.$dim_id.$instance.$id.comment"}.'</td></tr><tr><td>';
+		    }
+		    $result.=$dimension{$instance.'.criteria.'.$id}.
+			'</td></tr></table>';
+		}
+	    }
 	} elsif ($target eq 'webgrade') {
 	    foreach my $id (@{$dimension{$instance.'.criterias'}}) {
 		my $link='criteria_'.$instance.'_'.$id;
-		my $status=$Apache::lonhomework::history{'resource.'.$instance.'.'.$id.'.status'};
+		my $status=$Apache::lonhomework::history{"resource.$dim_id.$instance.$id.status"};
 		$result.='<tr><td width="100%" valign="top">'.
 		    '<a name="'.$link.'" />'.
 		    '<a name="next_'.$last_link.'" />'.
@@ -588,7 +628,7 @@
 		    #$dimension{$instance.'.criteria.'.$id}.
 		    '</td>'.
 		    '<td><nobr>Additional Comment for Student</nobr> <br />'.
-		    '<textarea style="width:100%" rows="8" width="25" wrap="hard" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode($Apache::lonhomework::history{'resource.'.$instance.'.'.$id.'.comment'}).'</textarea>'.
+		    '<textarea style="width:100%" rows="8" width="25" wrap="hard" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode($Apache::lonhomework::history{"resource.$dim_id.$instance.$id.comment"}).'</textarea>'.
 		    '</td>'.
 		    '<td>'.
 		    '<nobr><label><input type="radio" name="HWVAL_'.$link.'" value="ungraded" '.($status eq 'ungraded' || !$status ? 'checked="checked"':'').'/>Ungraded</label></nobr><br />'.
@@ -602,16 +642,27 @@
 		    '<input type="submit" name="next" value="'.
 		    &mt('Done').'" /> '.
 		    '</td></tr>';
+		$result.='<tr><td colspan="4">';
+		my (undef,undef,$udom,$uname) = &Apache::lonxml::whichuser();
+		my $file_url = '/uploaded/'.$udom.'/'.$uname.'/portfolio';
+		foreach my $partial_file (split(',',$Apache::lonhomework::history{"resource.0.bridgetask.portfiles"})) {
+		    my $file=$file_url.$partial_file;
+		    &Apache::lonnet::allowuploaded('/adm/bridgetask',$file);
+		    $result.='<a href="'.$file.'" target="lonGRDs"><img src="'.
+			&Apache::loncommon::icon($file).'" border=0"> '.$file.
+			'</a>';
+		}
+		$result.='</td></tr>';
 		$last_link=$link;
 	    }
-	} elsif ($target eq 'grade') {
+	} elsif ($target eq 'grade' && $env{'form.webgrade'}) {
 	    my $optional_passed=0;
 	    my $mandatory_failed=0;
 	    my $ungraded=0;
 	    my $review=0;
 	    foreach my $id (@{$dimension{$instance.'.criterias'}}) {
-		my $status=$Apache::lonhomework::results{'resource.'.$instance.'.'.$id.'.status'}=$env{'form.HWVAL_criteria_'.$instance.'_'.$id};
-		$Apache::lonhomework::results{'resource.'.$instance.'.'.$id.'.comment'}=$env{'form.HWVAL_comment_criteria_'.$instance.'_'.$id};
+		my $status=$Apache::lonhomework::results{"resource.$dim_id.$instance.$id.status"}=$env{'form.HWVAL_criteria_'.$instance.'_'.$id};
+		$Apache::lonhomework::results{"resource.$dim_id.$instance.$id.comment"}=$env{'form.HWVAL_comment_criteria_'.$instance.'_'.$id};
 		my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N');
 		if ($status eq 'pass') {
 		    if (!$mandatory) { $optional_passed++; }
@@ -622,7 +673,7 @@
 		} elsif ($status eq 'ungraded') {
 		    $ungraded++;
 		} else {
-		    &Apache::lonxml::error("got wierd status --$status--");
+		    &Apache::lonxml::error("got weird status --$status--");
 		}
 	    }
 	    if ($optional_passed < $dimension{$instance.'.optionalrequired'}) {
@@ -630,13 +681,17 @@
 	    }
 	    &Apache::lonxml::debug("all instance ".join(':',@{$dimension{$instance.'.criterias'}})." results -> m_f $mandatory_failed o_p $optional_passed u $ungraded r $review");
 	    if ($review) {
-		$Apache::lonhomework::results{'resource.'.$dim_id.'.status'}='review';
+		$Apache::lonhomework::results{"resource.$dim_id.status"}=
+		    'review';
 	    } elsif ($ungraded) {
-		$Apache::lonhomework::results{'resource.'.$dim_id.'.status'}='ungraded';
+		$Apache::lonhomework::results{"resource.$dim_id.status"}=
+		    'ungraded';
 	    } elsif ($mandatory_failed) {
-		$Apache::lonhomework::results{'resource.'.$dim_id.'.status'}='fail';
+		$Apache::lonhomework::results{"resource.$dim_id.status"}=
+		    'fail';
 	    } else {
-		$Apache::lonhomework::results{'resource.'.$dim_id.'.status'}='pass';
+		$Apache::lonhomework::results{"resource.$dim_id.status"}=
+		    'pass';
 	    }
 	}
 	return $result;

--albertel1115756966--