[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