Diff for /loncom/homework/lonhomework.pm between versions 1.367 and 1.370

version 1.367, 2017/01/05 19:39:31 version 1.370, 2018/01/31 15:28:28
Line 190  sub proctor_checked_in { Line 190  sub proctor_checked_in {
     if ($type eq 'Task') {      if ($type eq 'Task') {
  my $version=$Apache::lonhomework::history{'resource.0.version'};   my $version=$Apache::lonhomework::history{'resource.0.version'};
  $key ="resource.$version.0.checkedin";   $key ="resource.$version.0.checkedin";
     } elsif ($type eq 'problem') {      } elsif (($type eq 'problem') || ($type eq 'tool')) {
  $key ='resource.0.checkedin';   $key ='resource.0.checkedin';
     }      }
     # backward compatability, used to be username@domain,       # backward compatability, used to be username@domain, 
Line 205  sub proctor_checked_in { Line 205  sub proctor_checked_in {
     return 1;      return 1;
  }   }
     }      }
       
     return 0;      return 0;
 }  }
   
Line 214  sub check_slot_access { Line 213  sub check_slot_access {
   
     # does it pass normal muster      # does it pass normal muster
     my ($status,$datemsg)=&check_access($id,$symb);      my ($status,$datemsg)=&check_access($id,$symb);
       
     my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb);      my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb);
     if ($useslots ne 'resource' && $useslots ne 'map'       if ($useslots ne 'resource' && $useslots ne 'map' 
  && $useslots ne 'map_map') {   && $useslots ne 'map_map') {
Line 350  sub check_slot_access { Line 349  sub check_slot_access {
  $is_correct =     $is_correct =  
     ($Apache::lonhomework::history{"resource.$version.0.status"} eq 'pass'      ($Apache::lonhomework::history{"resource.$version.0.status"} eq 'pass'
      || $Apache::lonhomework::history{"resource.0.solved"} =~ /^correct_/ );       || $Apache::lonhomework::history{"resource.0.solved"} =~ /^correct_/ );
     } elsif ($type eq 'problem') {      } elsif (($type eq 'problem') || ($type eq 'tool')) {
         if ((ref($partlist) eq 'ARRAY') && (@{$partlist} > 0)) {          if ((ref($partlist) eq 'ARRAY') && (@{$partlist} > 0)) {
             my ($numcorrect,$numgraded) = (0,0);              my ($numcorrect,$numgraded) = (0,0);
             foreach my $part (@{$partlist}) {              foreach my $part (@{$partlist}) {
Line 410  sub check_slot_access { Line 409  sub check_slot_access {
     # used to gain access to it to work on it, until the due date is reached, and the      # 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 -       # problem then becomes CLOSED.  Therefore return the slotstatus - 
     # (which will be one of: NOT_IN_A_SLOT, RESERVABLE, RESERVABLE_LATER, or NOTRESERVABLE).      # (which will be one of: NOT_IN_A_SLOT, RESERVABLE, RESERVABLE_LATER, or NOTRESERVABLE).
     if (!defined($slot_name) && $type eq 'problem') {  
       if (!defined($slot_name) && (($type eq 'problem') || ($type eq 'tool'))) {
         if ($slotstatus eq 'NOT_IN_A_SLOT') {          if ($slotstatus eq 'NOT_IN_A_SLOT') {
             if (!$num_usable_slots) {              if (!$num_usable_slots) {
                 if ($env{'request.course.id'}) {                  ($slotstatus,$datemsg) = &check_reservable_slot($slotstatus,$symb,$now,$checkedin,
                     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};                                                                  $consumed_uniq);
                     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
                     unless ($symb) {  
                         ($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) {  
                             if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) {  
                                 $slotstatus = 'RESERVABLE';  
                                 $datemsg = $reservable_now->{$reservable_now_order->[-1]}{'endreserve'};  
                             } else {  
                                 my ($uniqstart,$uniqend,$useslot);  
                                 if (ref($consumed_uniq) eq 'ARRAY') {  
                                     ($uniqstart,$uniqend)=@{$consumed_uniq};  
                                 }  
                                 foreach my $slot (reverse(@{$reservable_now_order})) {  
                                     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  ));  
                                     }  
                                     $useslot = $slot;  
                                     last;  
                                 }  
                                 if ($useslot) {  
                                     $slotstatus = 'RESERVABLE';  
                                     $datemsg = $reservable_now->{$useslot}{'endreserve'};  
                                 }  
                             }  
                         }  
                     }  
                     unless ($slotstatus eq 'RESERVABLE') {  
                         if ((ref($reservable_future_order) eq 'ARRAY') && (ref($reservable_future) eq 'HASH')) {  
                             if (@{$reservable_future_order} > 0) {  
                                 if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) {  
                                     $slotstatus = 'RESERVABLE_LATER';  
                                     $datemsg = $reservable_future->{$reservable_future_order->[0]}{'startreserve'};  
                                 } else {  
                                     my ($uniqstart,$uniqend,$useslot);  
                                     if (ref($consumed_uniq) eq 'ARRAY') {  
                                         ($uniqstart,$uniqend)=@{$consumed_uniq};  
                                     }  
                                     foreach my $slot (@{$reservable_future_order}) {  
                                         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  ));  
                                         }  
                                         $useslot = $slot;  
                                         last;  
                                     }  
                                     if ($useslot) {  
                                         $slotstatus = 'RESERVABLE_LATER';  
                                         $datemsg = $reservable_future->{$useslot}{'startreserve'};  
                                     }  
                                 }  
                             }  
                         }  
                     }  
                 }  
             }              }
         }          }
         return ($slotstatus,$datemsg);          return ($slotstatus,$datemsg);
Line 501  sub check_slot_access { Line 436  sub check_slot_access {
     }      }
   
     if (($is_correct) && ($blockip ne 'answer')) {      if (($is_correct) && ($blockip ne 'answer')) {
  if ($type eq 'problem') {   if (($type eq 'problem') || ($type eq 'tool')) {
     return ($status);      return ($status);
  }   }
  return ('SHOW_ANSWER');   return ('SHOW_ANSWER');
Line 515  sub check_slot_access { Line 450  sub check_slot_access {
     return ($slotstatus,$datemsg,$slot_name,$returned_slot,$ipused);      return ($slotstatus,$datemsg,$slot_name,$returned_slot,$ipused);
 }  }
   
   sub check_reservable_slot {
       my ($slotstatus,$symb,$now,$checkedin,$consumed_uniq) = @_;
       my $datemsg;
       if ($slotstatus eq 'NOT_IN_A_SLOT') {
           if ($env{'request.course.id'}) {
               my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
               my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
               unless ($symb) {
                   ($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) {
                       if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) {
                           $slotstatus = 'RESERVABLE';
                           $datemsg = $reservable_now->{$reservable_now_order->[-1]}{'endreserve'};
                       } else {
                           my ($uniqstart,$uniqend,$useslot);
                           if (ref($consumed_uniq) eq 'ARRAY') {
                               ($uniqstart,$uniqend)=@{$consumed_uniq};
                           }
                           foreach my $slot (reverse(@{$reservable_now_order})) {
                               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  ));
                               }
                               $useslot = $slot;
                               last;
                           }
                           if ($useslot) {
                               $slotstatus = 'RESERVABLE';
                               $datemsg = $reservable_now->{$useslot}{'endreserve'};
                           }
                       }
                   }
               }
               unless ($slotstatus eq 'RESERVABLE') {
                   if ((ref($reservable_future_order) eq 'ARRAY') && (ref($reservable_future) eq 'HASH')) {
                       if (@{$reservable_future_order} > 0) {
                           if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) {
                               $slotstatus = 'RESERVABLE_LATER';
                               $datemsg = $reservable_future->{$reservable_future_order->[0]}{'startreserve'};
                           } else {
                               my ($uniqstart,$uniqend,$useslot);
                               if (ref($consumed_uniq) eq 'ARRAY') {
                                   ($uniqstart,$uniqend)=@{$consumed_uniq};
                               }
                               foreach my $slot (@{$reservable_future_order}) {
                                   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  ));
                                   }
                                   $useslot = $slot;
                                   last;
                               }
                               if ($useslot) {
                                   $slotstatus = 'RESERVABLE_LATER';
                                   $datemsg = $reservable_future->{$useslot}{'startreserve'};
                               }
                           }
                       }
                   }
               }
           }
       }
       return ($slotstatus,$datemsg);
   }
   
 # JB, 9/24/2002: Any changes in this function may require a change  # JB, 9/24/2002: Any changes in this function may require a change
 # in lonnavmaps::resource::getDateStatus.  # in lonnavmaps::resource::getDateStatus.
 sub check_access {  sub check_access {
Line 1825  sub helpmenu_datastructure { Line 1835  sub helpmenu_datastructure {
  my $title = $helpers->[$count]->[1];   my $title = $helpers->[$count]->[1];
  my $width = $helpers->[$count]->[2];   my $width = $helpers->[$count]->[2];
                 my $height = $helpers->[$count]->[3];                  my $height = $helpers->[$count]->[3];
                   if ($width eq '') {
                       $width = 500;
                   }
                   if ($height eq '') {
                       $height = 600;
                   }
  my $href = &HTML::Entities::encode("javascript:openMyModal('/adm/help/$filename',$width,$height,'yes');");   my $href = &HTML::Entities::encode("javascript:openMyModal('/adm/help/$filename',$width,$height,'yes');");
  push @{$help_structure}, [$href, $title, undef];   push @{$help_structure}, [$href, $title, undef];
  }   }

Removed from v.1.367  
changed lines
  Added in v.1.370


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>