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

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 20 Jun 2006 05:10:01 -0000


albertel		Tue Jun 20 01:10:01 2006 EDT

  Modified files:              
    /loncom/homework	lonhomework.pm 
  Log:
  - multipart problems work correctly now
  - handles 'student never did any work' in a correct manner now
  
  
Index: loncom/homework/lonhomework.pm
diff -u loncom/homework/lonhomework.pm:1.251 loncom/homework/lonhomework.pm:1.252
--- loncom/homework/lonhomework.pm:1.251	Mon Jun 19 23:33:55 2006
+++ loncom/homework/lonhomework.pm	Tue Jun 20 01:10:00 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Homework handler
 #
-# $Id: lonhomework.pm,v 1.251 2006/06/20 03:33:55 albertel Exp $
+# $Id: lonhomework.pm,v 1.252 2006/06/20 05:10:00 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -244,7 +244,7 @@
     # does it pass normal muster
     my ($status,$datemsg)=&check_access($id);
     
-    my $useslots = &Apache::lonnet::EXT("resource.$id.useslots");
+    my $useslots = &Apache::lonnet::EXT("resource.0.useslots");
     if ($useslots ne 'resource' && $useslots ne 'map' 
 	&& $useslots ne 'map_map') {
 	return ($status,$datemsg);
@@ -269,8 +269,8 @@
     }
 
     my @slots=
-	(split(':',&Apache::lonnet::EXT("resource.$id.availablestudent")),
-	 split(':',&Apache::lonnet::EXT("resource.$id.available")));
+	(split(':',&Apache::lonnet::EXT("resource.0.availablestudent")),
+	 split(':',&Apache::lonnet::EXT("resource.0.available")));
 
 #    if (!@slots) {
 #	return ($status,$datemsg);
@@ -310,8 +310,10 @@
 	$checkedin =
 	    $Apache::lonhomework::history{"resource.$version.0.checkedin"};
     } elsif ($type eq 'problem') {
-	$got_grade = 1;
-	$checkedin = $Apache::lonhomework::history{"resource.0.checkedin"};
+	$got_grade  = 1;
+	$checkedin  = $Apache::lonhomework::history{"resource.0.checkedin"};
+	$is_correct =
+	    ($Apache::lonhomework::history{"resource.0.solved"} =~/^correct_/);
     }
     
     &Apache::lonxml::debug(" slot is $slotstatus checkedin ($checkedin) got_grade ($got_grade) is_correct ($is_correct)");
@@ -324,6 +326,14 @@
 	return ('WAITING_FOR_GRADE');
     }
 
+    # no slot is currently open, and has been checked in for this version
+    # previous slot is therefore CLOSED, so therefore the problem is
+    if (!defined($slot_name)
+	&& $checkedin 
+	&& $type eq 'problem') {
+	return ('CLOSED',$datemsg);
+    }
+
     if ($slotstatus eq 'NOT_IN_A_SLOT' 
 	&& $checkedin ) {