[LON-CAPA-cvs] cvs: loncom /interface lonnavmaps.pm
raeburn
raeburn at source.lon-capa.org
Tue Dec 20 17:41:31 EST 2011
raeburn Tue Dec 20 22:41:31 2011 EDT
Modified files:
/loncom/interface lonnavmaps.pm
Log:
- More information about reserving slots for items with access controlled by slots.
- Distinguish two types of "future" schedulable slots on Course Contents page:
(a) reservation available now; (b) reservation available in the future.
- &get_future_slots() moved to loncommon.pm
- $future_slots variable eliminated (&lonnet::get_reservable_slots() used instead.
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.472 loncom/interface/lonnavmaps.pm:1.473
--- loncom/interface/lonnavmaps.pm:1.472 Sun Dec 18 17:15:03 2011
+++ loncom/interface/lonnavmaps.pm Tue Dec 20 22:41:31 2011
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.472 2011/12/18 17:15:03 raeburn Exp $
+# $Id: lonnavmaps.pm,v 1.473 2011/12/20 22:41:31 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
@@ -542,9 +542,6 @@
# is not yet done and due in less than 24 hours
my $hurryUpColor = "#FF0000";
-my $future_slots_checked = 0;
-my $future_slots = 0;
-
sub addToFilter {
my $hashIn = shift;
my $addition = shift;
@@ -5090,12 +5087,13 @@
}
# Otherwise, it's untried and open
- return OPEN;
+ return OPEN;
}
sub check_for_slot {
my $self = shift;
my $part = shift;
+ my $symb = $self->symb();
my ($use_slots,$available,$availablestudent) = $self->slot_control($part);
if (($use_slots ne '') && ($use_slots !~ /^\s*no\s*$/i)) {
my @slots = (split(/:/,$availablestudent),split(/:/,$available));
@@ -5103,53 +5101,49 @@
my $cdom=$env{'course.'.$cid.'.domain'};
my $cnum=$env{'course.'.$cid.'.num'};
my $now = time;
+ my $num_usable_slots = 0;
if (@slots > 0) {
my %slots=&Apache::lonnet::get('slots',[@slots],$cdom,$cnum);
if (&Apache::lonnet::error(%slots)) {
return (UNKNOWN);
}
- my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots);
+ my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots,'starttime');
my ($checkedin,$checkedinslot);
foreach my $slot_name (@sorted_slots) {
- next if (!defined($slots{$slot_name}) ||
- !ref($slots{$slot_name}));
+ next if (!defined($slots{$slot_name}) || !ref($slots{$slot_name}));
my $end = $slots{$slot_name}->{'endtime'};
my $start = $slots{$slot_name}->{'starttime'};
my $ip = $slots{$slot_name}->{'ip'};
if ($self->simpleStatus() == OPEN) {
- my $startreserve = $slots{$slot_name}->{'startreserve'};
- my $endreserve = $slots{$slot_name}->{'endreserve'};
my @proctors;
if ($slots{$slot_name}->{'proctor'} ne '') {
@proctors = split(',',$slots{$slot_name}->{'proctor'});
}
if ($end > $now) {
- ($checkedin,$checkedinslot) = $self->checkedin();
- if ($startreserve < $now) {
- if ($start > $now) {
- return (RESERVED_LATER,$start,$slot_name);
- } else {
- if ($ip ne '') {
- if (!&Apache::loncommon::check_ip_acc($ip)) {
- return (RESERVED_LOCATION,$ip,$slot_name);
- }
- }
- if (@proctors > 0) {
- unless ((grep(/^\Q$checkedin\E/, at proctors)) &&
- ($checkedinslot eq $slot_name)) {
- return (NEEDS_CHECKIN,undef,$slot_name);
- }
+ if ($start > $now) {
+ return (RESERVED_LATER,$start,$slot_name);
+ } else {
+ if ($ip ne '') {
+ if (!&Apache::loncommon::check_ip_acc($ip)) {
+ return (RESERVED_LOCATION,$ip,$slot_name);
}
- return (RESERVED,$end,$slot_name);
}
- } else {
- if ($start > $now) {
- if (!$endreserve || $endreserve > $now) {
- return (RESERVABLE,$startreserve,$slot_name);
+ my @proctors;
+ if ($slots{$slot_name}->{'proctor'} ne '') {
+ @proctors = split(',',$slots{$slot_name}->{'proctor'});
+ }
+ if (@proctors > 0) {
+ ($checkedin,$checkedinslot) = $self->checkedin();
+ unless ((grep(/^\Q$checkedin\E/, at proctors)) &&
+ ($checkedinslot eq $slot_name)) {
+ return (NEEDS_CHECKIN,undef,$slot_name);
}
}
+ return (RESERVED,$end,$slot_name);
}
}
+ } elsif ($end > $now) {
+ $num_usable_slots ++;
}
}
my ($is_correct,$got_grade);
@@ -5170,32 +5164,33 @@
return (CORRECT);
}
}
- return(NOT_IN_A_SLOT);
- } else {
- if (!$future_slots_checked) {
- $future_slots = &get_future_slots($cdom,$cnum,$now);
- $future_slots_checked = 1;
- }
- if ($future_slots) {
+ if ($num_usable_slots) {
return(NOT_IN_A_SLOT);
}
- return(NOTRESERVABLE);
}
- }
- return;
-}
-
-sub get_future_slots {
- my ($cdom,$cnum,$now) = @_;
- my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum);
- my $future_slots = 0;
- foreach my $slot (keys(%slots)) {
- if (($slots{$slot}->{'starttime'} > $now) &&
- ($slots{$slot}->{'endtime'} > $now)) {
- $future_slots ++;
+ my $reservable = &Apache::lonnet::get_reservable_slots($cnum,$cdom,$env{'user.name'},
+ $env{'user.domain'});
+ if (ref($reservable) eq 'HASH') {
+ if ((ref($reservable->{'now_order'}) eq 'ARRAY') && (ref($reservable->{'now'}) eq 'HASH')) {
+ foreach my $slot (@{$reservable->{'now_order'}}) {
+ if (($reservable->{'now'}{$slot}{'symb'} eq '') ||
+ ($reservable->{'now'}{$slot}{'symb'} eq $symb)) {
+ return(RESERVABLE,$reservable->{'now'}{$slot}{'endreserve'});
+ }
+ }
+ }
+ if ((ref($reservable->{'future_order'}) eq 'ARRAY') && (ref($reservable->{'future'}) eq 'HASH')) {
+ foreach my $slot (reverse (@{$reservable->{'future_order'}})) {
+ if (($reservable->{'future'}{$slot}{'symb'} eq '') ||
+ ($reservable->{'future'}{$slot}{'symb'} eq $symb)) {
+ return(RESERVABLE_LATER,$reservable->{'future'}{$slot}{'startreserve'});
+ }
+ }
+ }
}
+ return(NOTRESERVABLE);
}
- return $future_slots;
+ return;
}
sub CLOSED { return 23; }
More information about the LON-CAPA-cvs
mailing list