[LON-CAPA-cvs] cvs: loncom(version_2_11_X) /interface lonnavmaps.pm
raeburn
raeburn at source.lon-capa.org
Sat Aug 6 19:22:30 EDT 2016
raeburn Sat Aug 6 23:22:30 2016 EDT
Modified files: (Branch: version_2_11_X)
/loncom/interface lonnavmaps.pm
Log:
- For 2.11
- Backport 1.522
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.509.2.1 loncom/interface/lonnavmaps.pm:1.509.2.2
--- loncom/interface/lonnavmaps.pm:1.509.2.1 Fri Aug 5 22:13:46 2016
+++ loncom/interface/lonnavmaps.pm Sat Aug 6 23:22:30 2016
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.509.2.1 2016/08/05 22:13:46 raeburn Exp $
+# $Id: lonnavmaps.pm,v 1.509.2.2 2016/08/06 23:22:30 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
@@ -5411,13 +5411,13 @@
my $cnum=$env{'course.'.$cid.'.num'};
my $now = time;
my $num_usable_slots = 0;
+ my ($checkedin,$checkedinslot,%consumed_uniq,%slots);
if (@slots > 0) {
- my %slots=&Apache::lonnet::get('slots',[@slots],$cdom,$cnum);
+ %slots=&Apache::lonnet::get('slots',[@slots],$cdom,$cnum);
if (&Apache::lonnet::error(%slots)) {
return (UNKNOWN);
}
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}));
my $end = $slots{$slot_name}->{'endtime'};
@@ -5451,19 +5451,30 @@
$num_usable_slots ++;
}
}
- my ($is_correct,$got_grade);
+ my ($is_correct,$wait_for_grade);
if ($self->is_task()) {
my $taskstatus = $self->taskstatus();
$is_correct = (($taskstatus eq 'pass') ||
($self->solved() =~ /^correct_/));
- $got_grade = ($taskstatus =~ /^(?:pass|fail)$/);
+ unless ($taskstatus =~ /^(?:pass|fail)$/) {
+ $wait_for_grade = 1;
+ }
} else {
- $got_grade = 1;
- $is_correct = ($self->solved() =~ /^correct_/);
+ unless ($self->completable()) {
+ $wait_for_grade = 1;
+ }
+ unless (($self->problemstatus($part) eq 'no') ||
+ ($self->problemstatus($part) eq 'no_feedback_ever')) {
+ $is_correct = ($self->solved($part) =~ /^correct_/);
+ $wait_for_grade = 0;
+ }
}
($checkedin,$checkedinslot) = $self->checkedin();
if ($checkedin) {
- if (!$got_grade) {
+ if (ref($slots{$checkedinslot}) eq 'HASH') {
+ $consumed_uniq{$checkedinslot} = $slots{$checkedinslot}{'uniqueperiod'};
+ }
+ if ($wait_for_grade) {
return (WAITING_FOR_GRADE);
} elsif ($is_correct) {
return (CORRECT);
@@ -5478,16 +5489,46 @@
if (ref($reservable) eq 'HASH') {
if ((ref($reservable->{'now_order'}) eq 'ARRAY') && (ref($reservable->{'now'}) eq 'HASH')) {
foreach my $slot (reverse (@{$reservable->{'now_order'}})) {
+ my $canuse;
if (($reservable->{'now'}{$slot}{'symb'} eq '') ||
($reservable->{'now'}{$slot}{'symb'} eq $symb)) {
+ $canuse = 1;
+ }
+ if ($canuse) {
+ if ($checkedin) {
+ if (ref($consumed_uniq{$checkedinslot}) eq 'ARRAY') {
+ my ($uniqstart,$uniqend)=@{$consumed_uniq{$checkedinslot}};
+ if ($reservable->{'now'}{$slot}{'uniqueperiod'} =~ /^(\d+),(\d+)$/) {
+ my ($new_uniq_start,$new_uniq_end) = ($1,$2);
+ next if (!
+ ($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) ||
+ ($uniqstart > $new_uniq_end && $uniqend > $new_uniq_end ));
+ }
+ }
+ }
return(RESERVABLE,$reservable->{'now'}{$slot}{'endreserve'});
}
}
}
if ((ref($reservable->{'future_order'}) eq 'ARRAY') && (ref($reservable->{'future'}) eq 'HASH')) {
foreach my $slot (@{$reservable->{'future_order'}}) {
+ my $canuse;
if (($reservable->{'future'}{$slot}{'symb'} eq '') ||
($reservable->{'future'}{$slot}{'symb'} eq $symb)) {
+ $canuse = 1;
+ }
+ if ($canuse) {
+ if ($checkedin) {
+ if (ref($consumed_uniq{$checkedinslot}) eq 'ARRAY') {
+ my ($uniqstart,$uniqend)=@{$consumed_uniq{$checkedinslot}};
+ if ($reservable->{'future'}{$slot}{'uniqueperiod'} =~ /^(\d+),(\d+)$/) {
+ my ($new_uniq_start,$new_uniq_end) = ($1,$2);
+ next if (!
+ ($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) ||
+ ($uniqstart > $new_uniq_end && $uniqend > $new_uniq_end ));
+ }
+ }
+ }
return(RESERVABLE_LATER,$reservable->{'future'}{$slot}{'startreserve'});
}
}
More information about the LON-CAPA-cvs
mailing list