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

raeburn raeburn at source.lon-capa.org
Tue Dec 20 17:46:06 EST 2011


raeburn		Tue Dec 20 22:46:06 2011 EDT

  Modified files:              
    /loncom/homework	lonhomework.pm 
  Log:
  - &check_slot_access() can return additional statuses: RESERVABLE, RESERVABLE_LATER.
    NOTRESERVABLE.
  
  
Index: loncom/homework/lonhomework.pm
diff -u loncom/homework/lonhomework.pm:1.333 loncom/homework/lonhomework.pm:1.334
--- loncom/homework/lonhomework.pm:1.333	Thu Dec 15 01:21:28 2011
+++ loncom/homework/lonhomework.pm	Tue Dec 20 22:46:06 2011
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Homework handler
 #
-# $Id: lonhomework.pm,v 1.333 2011/12/15 01:21:28 raeburn Exp $
+# $Id: lonhomework.pm,v 1.334 2011/12/20 22:46:06 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -246,20 +246,24 @@
 #    }
     my $slotstatus='NOT_IN_A_SLOT';
     my ($returned_slot,$slot_name);
+    my $now = time;
+    my $num_usable_slots = 0;
     foreach my $slot (@slots) {
 	$slot =~ s/(^\s*|\s*$)//g;
 	&Apache::lonxml::debug("getting $slot");
 	my %slot=&Apache::lonnet::get_slot($slot);
 	&Apache::lonhomework::showhash(%slot);
-	if ($slot{'starttime'} < time &&
-	    $slot{'endtime'} > time &&
+        next if ($slot{'endtime'} < $now);
+        $num_usable_slots ++;
+	if ($slot{'starttime'} < $now &&
+	    $slot{'endtime'} > $now &&
 	    &Apache::loncommon::check_ip_acc($slot{'ip'})) {
 	    &Apache::lonxml::debug("$slot is good");
 	    $slotstatus='NEEDS_CHECKIN';
 	    $returned_slot=\%slot;
 	    $slot_name=$slot;
 	    last;
-	}
+        } 
     }
     if ($slotstatus eq 'NEEDS_CHECKIN' &&
 	&proctor_checked_in($slot_name,$returned_slot,$type)) {
@@ -299,11 +303,36 @@
     # However, the problem is not closed, and potentially, another slot might be
     # used to gain access to it to work on it, until the due date is reached, and the
     # problem then becomes CLOSED.  Therefore return the slotstatus - 
-    # (which will be NOT_IN_SLOT).
-    if (!defined($slot_name)
-	&& $checkedin 
-	&& $type eq 'problem') {
-        return ($slotstatus);
+    # (which will be one of: NOT_IN_A_SLOT, RESERVABLE, RESERVABLE_LATER, or NOTRESERVABLE.
+    if (!defined($slot_name) && $type eq 'problem') {
+        if ($slotstatus eq 'NOT_IN_A_SLOT') {
+            if (!$num_usable_slots) {
+                if ($env{'request.course.id'}) {
+                    my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+                    my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+                    my ($symb)=&Apache::lonnet::whichuser();
+                    $slotstatus = 'NOTRESERVABLE';
+                    my ($reservable_now_order,$reservable_now,$reservable_future_order,
+                        $reservable_future) = 
+                        &Apache::loncommon::get_future_slots($cnum,$cdom,$now,$symb);
+                    if ((ref($reservable_now_order) eq 'ARRAY') && (ref($reservable_now) eq 'HASH')) {
+                        if (@{$reservable_now_order} > 0) {
+                            $slotstatus = 'RESERVABLE';
+                            $datemsg = $reservable_now->{$reservable_now_order->[-1]}{'endreserve'};
+                        }
+                    }
+                    unless ($slotstatus eq 'RESERVABLE') {
+                        if ((ref($reservable_future_order) eq 'ARRAY') && (ref($reservable_future) eq 'HASH')) {
+                            if (@{$reservable_future_order} > 0) {
+                                $slotstatus = 'RESERVABLE_LATER';
+                                $datemsg = $reservable_future->{$reservable_future_order->[0]}{'startreserve'};
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return ($slotstatus,$datemsg);
     }
 
     if ($slotstatus eq 'NOT_IN_A_SLOT' 




More information about the LON-CAPA-cvs mailing list