Diff for /loncom/interface/lonnavmaps.pm between versions 1.509.2.6 and 1.512

version 1.509.2.6, 2018/04/29 15:52:08 version 1.512, 2016/02/22 03:37:02
Line 2 Line 2
 # Navigate Maps Handler  # Navigate Maps Handler
 #  #
 # $Id$  # $Id$
   
 #  #
 # Copyright Michigan State University Board of Trustees  # Copyright Michigan State University Board of Trustees
 #  #
Line 643  sub getDescription { Line 642  sub getDescription {
             } elsif ($slot_status == $res->RESERVABLE) {              } elsif ($slot_status == $res->RESERVABLE) {
                 $slotmsg = &mt('Reservable, reservations close [_1]',                  $slotmsg = &mt('Reservable, reservations close [_1]',
                            timeToHumanString($slot_time,'end'));                             timeToHumanString($slot_time,'end'));
             } elsif ($slot_status == $res->NEEDS_CHECKIN) {  
                 $slotmsg = &mt('Reserved, check-in needed - ends [_1]',  
                            timeToHumanString($slot_time,'end'));  
             } elsif ($slot_status == $res->RESERVABLE_LATER) {              } elsif ($slot_status == $res->RESERVABLE_LATER) {
                 $slotmsg = &mt('Reservable, reservations open [_1]',                  $slotmsg = &mt('Reservable, reservations open [_1]',
                            timeToHumanString($slot_time,'start'));                             timeToHumanString($slot_time,'start'));
Line 999  sub render_resource { Line 995  sub render_resource {
             $linkopen = "";              $linkopen = "";
             $linkclose = "";              $linkclose = "";
         }          }
         if (((&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) ||          if ((&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) &&
              (&Apache::lonnet::allowed('cev',$env{'request.course.id'}))) &&  
             ($resource->symb=~/\_\_\_[^\_]+\_\_\_uploaded/)) {              ($resource->symb=~/\_\_\_[^\_]+\_\_\_uploaded/)) {
             if (!$params->{'map_no_edit_link'}) {              if (!$params->{'map_no_edit_link'}) {
                 my $icon = &Apache::loncommon::lonhttpdurl('/res/adm/pages').'/editmap.png';                  my $icon = &Apache::loncommon::lonhttpdurl('/res/adm/pages').'/editmap.png';
Line 1010  sub render_resource { Line 1005  sub render_resource {
                          '</a>';                           '</a>';
             }              }
         }          }
         if ($params->{'mapHidden'} || $resource->randomout()) {      }
             $nonLinkedText .= ' <span class="LC_warning">('.&mt('hidden').')</span> ';  
         }      if ($resource->randomout()) {
     } else {          $nonLinkedText .= ' <span class="LC_warning">('.&mt('hidden').')</span> ';
         if ($resource->randomout()) {  
             $nonLinkedText .= ' <span class="LC_warning">('.&mt('hidden').')</span> ';  
         }  
     }      }
     if (!$resource->condval()) {      if (!$resource->condval()) {
         $nonLinkedText .= ' <span class="LC_info">('.&mt('conditionally hidden').')</span> ';          $nonLinkedText .= ' <span class="LC_info">('.&mt('conditionally hidden').')</span> ';
Line 1545  END Line 1537  END
  $result.='</form>';   $result.='</form>';
     }      }
     if (($args->{'caller'} eq 'navmapsdisplay') &&      if (($args->{'caller'} eq 'navmapsdisplay') &&
         ((&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) ||          (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
          (&Apache::lonnet::allowed('cev',$env{'request.course.id'})))) {  
         my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};          my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
         my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};          my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
         if ($env{'course.'.$env{'request.course.id'}.'.url'} eq           if ($env{'course.'.$env{'request.course.id'}.'.url'} eq 
Line 1592  END Line 1583  END
     $args->{'indentString'} = setDefault($args->{'indentString'}, "<img src='$location' alt='' />");      $args->{'indentString'} = setDefault($args->{'indentString'}, "<img src='$location' alt='' />");
     $args->{'displayedHereMarker'} = 0;      $args->{'displayedHereMarker'} = 0;
   
     # If we're suppressing empty sequences, look for them here.      # If we're suppressing empty sequences, look for them here. Use DFS for speed,
     # We also do this even if $args->{'suppressEmptySequences'}      # since structure actually doesn't matter, except what map has what resources.
     # is not true, so we can hide empty sequences for which the      if ($args->{'suppressEmptySequences'}) {
     # hiddenresource parameter is set to yes (at map level), or          my $dfsit = Apache::lonnavmaps::DFSiterator->new($navmap,
     # mark as hidden for users who have $userCanSeeHidden.                                                           $it->{FIRST_RESOURCE},
     # Use DFS for speed, since structure actually doesn't matter,                                                           $it->{FINISH_RESOURCE},
     # except what map has what resources.                                                           {}, undef, 1);
           my $depth = 0;
     my $dfsit = Apache::lonnavmaps::DFSiterator->new($navmap,          $dfsit->next();
                                                      $it->{FIRST_RESOURCE},          my $curRes = $dfsit->next();
                                                      $it->{FINISH_RESOURCE},          while ($depth > -1) {
                                                      {}, undef, 1);              if ($curRes == $dfsit->BEGIN_MAP()) { $depth++; }
               if ($curRes == $dfsit->END_MAP()) { $depth--; }
     my $depth = 0;  
     $dfsit->next();              if (ref($curRes)) { 
     my $curRes = $dfsit->next();                  # Parallel pre-processing: Do sequences have non-filtered-out children?
     while ($depth > -1) {                  if ($curRes->is_map()) {
         if ($curRes == $dfsit->BEGIN_MAP()) { $depth++; }                      $curRes->{DATA}->{HAS_VISIBLE_CHILDREN} = 0;
         if ($curRes == $dfsit->END_MAP()) { $depth--; }                      # Sequences themselves do not count as visible children,
                       # unless those sequences also have visible children.
         if (ref($curRes)) {                      # This means if a sequence appears, there's a "promise"
             # Parallel pre-processing: Do sequences have non-filtered-out children?                      # that there's something under it if you open it, somewhere.
             if ($curRes->is_map()) {                  } else {
                 $curRes->{DATA}->{HAS_VISIBLE_CHILDREN} = 0;                      # Not a sequence: if it's filtered, ignore it, otherwise
                 # Sequences themselves do not count as visible children,                      # rise up the stack and mark the sequences as having children
                 # unless those sequences also have visible children.                      if (&$filterFunc($curRes)) {
                 # This means if a sequence appears, there's a "promise"                          for my $sequence (@{$dfsit->getStack()}) {
                 # that there's something under it if you open it, somewhere.                              $sequence->{DATA}->{HAS_VISIBLE_CHILDREN} = 1;
             } elsif ($curRes->src()) {                          }
                 # Not a sequence: if it's filtered, ignore it, otherwise  
                 # rise up the stack and mark the sequences as having children  
                 if (&$filterFunc($curRes)) {  
                     for my $sequence (@{$dfsit->getStack()}) {  
                         $sequence->{DATA}->{HAS_VISIBLE_CHILDREN} = 1;  
                     }                      }
                 }                  }
             }              }
           } continue {
               $curRes = $dfsit->next();
         }          }
     } continue {  
         $curRes = $dfsit->next();  
     }      }
   
     my $displayedJumpMarker = 0;      my $displayedJumpMarker = 0;
Line 1724  END Line 1710  END
         }           } 
   
         # If this is an empty sequence and we're filtering them, continue on          # If this is an empty sequence and we're filtering them, continue on
         $args->{'mapHidden'} = 0;          if ($curRes->is_map() && $args->{'suppressEmptySequences'} &&
         if (($curRes->is_map()) && (!$curRes->{DATA}->{HAS_VISIBLE_CHILDREN})) {              !$curRes->{DATA}->{HAS_VISIBLE_CHILDREN}) {
             if ($args->{'suppressEmptySequences'}) {              next;
                 next;  
             } else {  
                 my $mapname = &Apache::lonnet::declutter($curRes->src());  
                 $mapname = &Apache::lonnet::deversion($mapname);  
                 if (lc($navmap->get_mapparam(undef,$mapname,"0.hiddenresource")) eq 'yes') {  
                     if ($userCanSeeHidden) {  
                         $args->{'mapHidden'} = 1;  
                     } else {  
                         next;  
                     }  
                 }  
             }  
         }          }
   
         # If we're suppressing navmaps and this is a navmap, continue on          # If we're suppressing navmaps and this is a navmap, continue on
Line 2737  sub parmval_real { Line 2711  sub parmval_real {
     if (defined($pack_def)) { return [$pack_def,'resource']; }      if (defined($pack_def)) { return [$pack_def,'resource']; }
     return [''];      return [''];
 }  }
   
 sub recurseup_maps {  
     my ($self,$mapname) = @_;  
     my @recurseup;  
     if ($mapname) {  
         my $res = $self->getResourceByUrl($mapname);  
         if (ref($res)) {  
             my @pcs = split(/,/,$res->map_hierarchy());  
             shift(@pcs);  
             if (@pcs) {  
                 @recurseup = map { &Apache::lonnet::declutter($self->getByMapPc($_)->src()); } reverse(@pcs);  
             }  
         }  
     }  
     return @recurseup;  
 }  
   
 #  #
 #  Determines the open/close dates for printing a map that  #  Determines the open/close dates for printing a map that
 #  encloses a resource.  #  encloses a resource.
Line 2765  sub map_printdates { Line 2722  sub map_printdates {
   
   
   
     my $opendate = $self->get_mapparam($res->symb(),'',"$part.printstartdate");      my $opendate = $self->get_mapparam($res->symb(), "$part.printstartdate");
     my $closedate= $self->get_mapparam($res->symb(),'', "$part.printenddate");      my $closedate= $self->get_mapparam($res->symb(), "$part.printenddate");
   
   
     return ($opendate, $closedate);      return ($opendate, $closedate);
 }  }
   
 sub get_mapparam {  sub get_mapparam {
     my ($self, $symb, $mapname, $what) = @_;      my ($self, $symb, $what) = @_;
   
     # Ensure the course option hash is populated:      # Ensure the course option hash is populated:
   
Line 2792  sub get_mapparam { Line 2749  sub get_mapparam {
     my $uname=$self->{USERNAME};      my $uname=$self->{USERNAME};
     my $udom=$self->{DOMAIN};      my $udom=$self->{DOMAIN};
   
     unless ($symb || $mapname) { return; }      unless ($symb) { return ['']; }
     my $result='';      my $result='';
     my ($recursed,@recurseup);  
   
     # Figure out which map we are in.      # Figure out which map we are in.
   
     if ($symb && !$mapname) {      my ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb);
         my ($id,$fn);      $mapname = &Apache::lonnet::deversion($mapname);
         ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb);  
         $mapname = &Apache::lonnet::deversion($mapname);  
     }  
   
     my $rwhat=$what;      my $rwhat=$what;
     $what=~s/^parameter\_//;      $what=~s/^parameter\_//;
Line 2834  sub get_mapparam { Line 2789  sub get_mapparam {
  if (defined($$useropt{$courselevel})) {   if (defined($$useropt{$courselevel})) {
     return $$useropt{$courselevel};      return $$useropt{$courselevel};
  }   }
         if ($what =~ /\.(encrypturl|hiddenresource)$/) {  
             unless ($recursed) {  
                 @recurseup = $self->recurseup_maps($mapname);  
                 $recursed = 1;  
             }  
             foreach my $item (@recurseup) {  
                 my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what;  
                 if (defined($$useropt{$norecursechk})) {  
                     if ($what =~ /\.(encrypturl|hiddenresource)$/) {  
                         return $$useropt{$norecursechk};  
                     }  
                 }  
             }  
         }  
     }      }
   
     # Check course -- group      # Check course -- group
Line 2858  sub get_mapparam { Line 2799  sub get_mapparam {
  if (defined($$courseopt{$grplevel})) {   if (defined($$courseopt{$grplevel})) {
     return $$courseopt{$grplevel};      return $$courseopt{$grplevel};
  }   }
         if ($what =~ /\.(encrypturl|hiddenresource)$/) {  
             unless ($recursed) {  
                 @recurseup = $self->recurseup_maps($mapname);  
                 $recursed = 1;  
             }  
             foreach my $item (@recurseup) {  
                 my $norecursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(all).'.$what;  
                 if (defined($$courseopt{$norecursechk})) {  
                     if ($what =~ /\.(encrypturl|hiddenresource)$/) {  
                         return $$courseopt{$norecursechk};  
                     }  
                 }  
             }  
         }  
     }      }
   
     # Check course -- section      # Check course -- section
Line 2884  sub get_mapparam { Line 2811  sub get_mapparam {
  if (defined($$courseopt{$seclevel})) {   if (defined($$courseopt{$seclevel})) {
     return $$courseopt{$seclevel};      return $$courseopt{$seclevel};
  }   }
         if ($what =~ /\.(encrypturl|hiddenresource)$/) {  
             unless ($recursed) {  
                 @recurseup = $self->recurseup_maps($mapname);  
                 $recursed = 1;  
             }  
             foreach my $item (@recurseup) {  
                 my $norecursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(all).'.$what;  
                 if (defined($$courseopt{$norecursechk})) {  
                     if ($what =~ /\.(encrypturl|hiddenresource)$/) {  
                         return $$courseopt{$norecursechk};  
                     }  
                 }  
             }  
         }  
     }      }
     # Check the map parameters themselves:      # Check the map parameters themselves:
   
     if ($symb) {      my $thisparm = $$parmhash{$symbparm};
         my $symbparm=$symb.'.'.$what;      if (defined($thisparm)) {
         my $thisparm = $$parmhash{$symbparm};   return $thisparm;
         if (defined($thisparm)) {  
             return $thisparm;  
         }  
     }      }
   
   
Line 2916  sub get_mapparam { Line 2826  sub get_mapparam {
  if (defined($$courseopt{$courselevel})) {   if (defined($$courseopt{$courselevel})) {
     return $$courseopt{$courselevel};      return $$courseopt{$courselevel};
  }   }
         if ($what =~ /\.(encrypturl|hiddenresource)$/) {  
             unless ($recursed) {  
                 @recurseup = $self->recurseup_maps($mapname);  
                 $recursed = 1;  
             }  
             foreach my $item (@recurseup) {  
                 my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what;  
                 if (defined($$courseopt{$norecursechk})) {  
                     if ($what =~ /\.(encrypturl|hiddenresource)$/) {  
                         return $$courseopt{$norecursechk};  
                     }  
                 }  
             }  
         }  
     }      }
     return undef; # Unefined if we got here.      return undef; # Unefined if we got here.
 }  }
Line 2985  sub getcourseparam { Line 2881  sub getcourseparam {
     #       # 
     # We want the course level stuff from the way      # We want the course level stuff from the way
     # parmval_real operates       # parmval_real operates 
     # TODO: Factor some of this stuff out of      # TODO: Fator some of this stuff out of
     # both parmval_real and here      # both parmval_real and here
     #      #
     my $courselevel = $cid . '.' .  $what;      my $courselevel = $cid . '.' .  $what;
Line 3002  sub getcourseparam { Line 2898  sub getcourseparam {
     }      }
     # Try for the group's course level option:      # Try for the group's course level option:
   
     if ($cgroup ne '' and defined($courseopt)) {      if ($uname ne '' and defined($courseopt)) {
  if (defined($$courseopt{$grplevel})) {   if (defined($$courseopt{$grplevel})) {
     return $$courseopt{$grplevel};      return $$courseopt{$grplevel};
  }   }
Line 3010  sub getcourseparam { Line 2906  sub getcourseparam {
   
     #  Try for section level parameters:      #  Try for section level parameters:
   
     if ($csec ne '' and defined($courseopt)) {      if ($csec and defined($courseopt)) {
  if (defined($$courseopt{$seclevel})) {   if (defined($$courseopt{$seclevel})) {
     return $$courseopt{$seclevel};      return $$courseopt{$seclevel};
  }   }
     }      }
     # Try for 'additional' course parameters:      # Try for 'additional' course parameterse:
   
     if (defined($courseopt)) {      if (defined($courseopt)) {
  if (defined($$courseopt{$courselevel})) {   if (defined($$courseopt{$courselevel})) {
Line 4105  sub enclosing_map_src { Line 4001  sub enclosing_map_src {
 }  }
 sub symb {  sub symb {
     my $self=shift;      my $self=shift;
     if (defined($self->{SYMB})) { return $self->{SYMB}; }  
     (my $first, my $second) = $self->{ID} =~ /(\d+).(\d+)/;      (my $first, my $second) = $self->{ID} =~ /(\d+).(\d+)/;
     my $symbSrc = &Apache::lonnet::declutter($self->src());      my $symbSrc = &Apache::lonnet::declutter($self->src());
     my $symb = &Apache::lonnet::declutter($self->navHash('map_id_'.$first))       my $symb = &Apache::lonnet::declutter($self->navHash('map_id_'.$first)) 
Line 4637  sub duedate { Line 4532  sub duedate {
     my $due_date=$self->parmval("duedate", $part);      my $due_date=$self->parmval("duedate", $part);
     if ($interval[0] =~ /\d+/) {      if ($interval[0] =~ /\d+/) {
        my $first_access=&Apache::lonnet::get_first_access($interval[1],         my $first_access=&Apache::lonnet::get_first_access($interval[1],
                                                           $self->{SYMB});                                                            $self->symb);
  if (defined($first_access)) {   if (defined($first_access)) {
            my $interval = $first_access+$interval[0];             my $interval = $first_access+$interval[0];
     $date = (!$due_date || $interval < $due_date) ? $interval       $date = (!$due_date || $interval < $due_date) ? $interval 
Line 4719  sub part_display { Line 4614  sub part_display {
     my $self= shift(); my $partID = shift();      my $self= shift(); my $partID = shift();
     if (! defined($partID)) { $partID = '0'; }      if (! defined($partID)) { $partID = '0'; }
     my $display=&Apache::lonnet::EXT('resource.'.$partID.'.display',      my $display=&Apache::lonnet::EXT('resource.'.$partID.'.display',
                                      $self->{SYMB});                                       $self->symb);
     if (! defined($display) || $display eq '') {      if (! defined($display) || $display eq '') {
         $display = $partID;          $display = $partID;
     }      }
Line 5515  sub check_for_slot { Line 5410  sub check_for_slot {
         my $cnum=$env{'course.'.$cid.'.num'};          my $cnum=$env{'course.'.$cid.'.num'};
         my $now = time;          my $now = time;
         my $num_usable_slots = 0;          my $num_usable_slots = 0;
         my ($checkedin,$checkedinslot,%consumed_uniq,%slots);  
         if (@slots > 0) {          if (@slots > 0) {
             %slots=&Apache::lonnet::get('slots',[@slots],$cdom,$cnum);              my %slots=&Apache::lonnet::get('slots',[@slots],$cdom,$cnum);
             if (&Apache::lonnet::error(%slots)) {              if (&Apache::lonnet::error(%slots)) {
                 return (UNKNOWN);                  return (UNKNOWN);
             }              }
             my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots,'starttime');              my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots,'starttime');
               my ($checkedin,$checkedinslot);
             foreach my $slot_name (@sorted_slots) {              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 $end = $slots{$slot_name}->{'endtime'};
Line 5545  sub check_for_slot { Line 5440  sub check_for_slot {
                                 ($checkedin,$checkedinslot) = $self->checkedin();                                  ($checkedin,$checkedinslot) = $self->checkedin();
                                 unless ((grep(/^\Q$checkedin\E/,@proctors)) &&                                  unless ((grep(/^\Q$checkedin\E/,@proctors)) &&
                                         ($checkedinslot eq $slot_name)) {                                          ($checkedinslot eq $slot_name)) {
                                     return (NEEDS_CHECKIN,$end,$slot_name);                                       return (NEEDS_CHECKIN,undef,$slot_name); 
                                 }                                  }
                             }                              }
                             return (RESERVED,$end,$slot_name);                              return (RESERVED,$end,$slot_name);
Line 5555  sub check_for_slot { Line 5450  sub check_for_slot {
                     $num_usable_slots ++;                      $num_usable_slots ++;
                 }                  }
             }              }
             my ($is_correct,$wait_for_grade);              my ($is_correct,$got_grade);
             if ($self->is_task()) {              if ($self->is_task()) {
                 my $taskstatus = $self->taskstatus();                  my $taskstatus = $self->taskstatus();
                 $is_correct = (($taskstatus eq 'pass') ||                   $is_correct = (($taskstatus eq 'pass') || 
                                ($self->solved() =~ /^correct_/));                                 ($self->solved() =~ /^correct_/));
                 unless ($taskstatus =~ /^(?:pass|fail)$/) {                  $got_grade = ($taskstatus =~ /^(?:pass|fail)$/);
                     $wait_for_grade = 1;  
                 }  
             } else {              } else {
                 unless ($self->completable()) {                  $got_grade = 1;
                     $wait_for_grade = 1;                  $is_correct = ($self->solved() =~ /^correct_/);   
                 }  
                 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();              ($checkedin,$checkedinslot) = $self->checkedin();
             if ($checkedin) {              if ($checkedin) {
                 if (ref($slots{$checkedinslot}) eq 'HASH') {                  if (!$got_grade) {
                     $consumed_uniq{$checkedinslot} = $slots{$checkedinslot}{'uniqueperiod'};  
                 }  
                 if ($wait_for_grade) {  
                     return (WAITING_FOR_GRADE);                      return (WAITING_FOR_GRADE);
                 } elsif ($is_correct) {                  } elsif ($is_correct) {
                     return (CORRECT);                       return (CORRECT); 
Line 5591  sub check_for_slot { Line 5475  sub check_for_slot {
         my $reservable = &Apache::lonnet::get_reservable_slots($cnum,$cdom,$env{'user.name'},          my $reservable = &Apache::lonnet::get_reservable_slots($cnum,$cdom,$env{'user.name'},
                                                                $env{'user.domain'});                                                                 $env{'user.domain'});
         if (ref($reservable) eq 'HASH') {          if (ref($reservable) eq 'HASH') {
               my ($map) = &Apache::lonnet::decode_symb($symb);
             if ((ref($reservable->{'now_order'}) eq 'ARRAY') && (ref($reservable->{'now'}) eq 'HASH')) {              if ((ref($reservable->{'now_order'}) eq 'ARRAY') && (ref($reservable->{'now'}) eq 'HASH')) {
                 foreach my $slot (reverse (@{$reservable->{'now_order'}})) {                  foreach my $slot (reverse (@{$reservable->{'now_order'}})) {
                     my $canuse;                      my $canuse;
                     if (($reservable->{'now'}{$slot}{'symb'} eq '') ||                      if ($reservable->{'now'}{$slot}{'symb'} eq '') {
                         ($reservable->{'now'}{$slot}{'symb'} eq $symb)) {  
                         $canuse = 1;                          $canuse = 1;
                     }                      } else {
                     if ($canuse) {                          my %oksymbs;
                         if ($checkedin) {                          my @slotsymbs = split(/\s*,\s*/,$reservable->{'now'}{$slot}{'symb'});
                             if (ref($consumed_uniq{$checkedinslot}) eq 'ARRAY') {                          map { $oksymbs{$_} = 1; } @slotsymbs;
                                 my ($uniqstart,$uniqend)=@{$consumed_uniq{$checkedinslot}};                          if ($oksymbs{$symb}) {
                                 if ($reservable->{'now'}{$slot}{'uniqueperiod'} =~ /^(\d+),(\d+)$/) {                              $canuse = 1;
                                     my ($new_uniq_start,$new_uniq_end) = ($1,$2);                          } else {
                                     next if (!                              foreach my $item (@slotsymbs) {
                                         ($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) ||                                  if ($item =~ /\.(page|sequence)$/) {
                                         ($uniqstart > $new_uniq_end   &&  $uniqend > $new_uniq_end  ));                                      (undef,undef, my $sloturl) = &Apache::lonnet::decode_symb($item);
                                       if (($map ne '') && ($map eq $sloturl)) {
                                           $canuse = 1;
                                           last;
                                       }
                                 }                                  }
                             }                              }
                         }                          }
                       }
                       if ($canuse) {
                         return(RESERVABLE,$reservable->{'now'}{$slot}{'endreserve'});                          return(RESERVABLE,$reservable->{'now'}{$slot}{'endreserve'});
                     }                      }
                 }                  }
Line 5617  sub check_for_slot { Line 5507  sub check_for_slot {
             if ((ref($reservable->{'future_order'}) eq 'ARRAY') && (ref($reservable->{'future'}) eq 'HASH')) {              if ((ref($reservable->{'future_order'}) eq 'ARRAY') && (ref($reservable->{'future'}) eq 'HASH')) {
                 foreach my $slot (@{$reservable->{'future_order'}}) {                  foreach my $slot (@{$reservable->{'future_order'}}) {
                     my $canuse;                      my $canuse;
                     if (($reservable->{'future'}{$slot}{'symb'} eq '') ||                      if ($reservable->{'future'}{$slot}{'symb'} eq '') {
                         ($reservable->{'future'}{$slot}{'symb'} eq $symb)) {  
                         $canuse = 1;                          $canuse = 1;
                     }                      } elsif ($reservable->{'future'}{$slot}{'symb'} =~ /,/) {
                     if ($canuse) {                          my %oksymbs;
                         if ($checkedin) {                          my @slotsymbs = split(/\s*,\s*/,$reservable->{'future'}{$slot}{'symb'});
                             if (ref($consumed_uniq{$checkedinslot}) eq 'ARRAY') {                          map { $oksymbs{$_} = 1; } @slotsymbs;
                                 my ($uniqstart,$uniqend)=@{$consumed_uniq{$checkedinslot}};                          if ($oksymbs{$symb}) {
                                 if ($reservable->{'future'}{$slot}{'uniqueperiod'} =~ /^(\d+),(\d+)$/) {                              $canuse = 1;
                                     my ($new_uniq_start,$new_uniq_end) = ($1,$2);                          } else {
                                     next if (!                              foreach my $item (@slotsymbs) {
                                         ($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) ||                                  if ($item =~ /\.(page|sequence)$/) {
                                         ($uniqstart > $new_uniq_end   &&  $uniqend > $new_uniq_end  ));                                      (undef,undef, my $sloturl) = &Apache::lonnet::decode_symb($item);
                                       if (($map ne '') && ($map eq $sloturl)) {
                                           $canuse = 1;
                                           last;
                                       }
                                 }                                  }
                             }                              }
                         }                          }
                       } elsif ($reservable->{'future'}{$slot}{'symb'} eq $symb) {
                           $canuse = 1;
                       }
                       if ($canuse) {
                         return(RESERVABLE_LATER,$reservable->{'future'}{$slot}{'startreserve'});                          return(RESERVABLE_LATER,$reservable->{'future'}{$slot}{'startreserve'});
                     }                      }
                 }                  }

Removed from v.1.509.2.6  
changed lines
  Added in v.1.512


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