Diff for /loncom/interface/slotrequest.pm between versions 1.64 and 1.71

version 1.64, 2006/06/16 19:49:00 version 1.71, 2006/10/31 15:58:09
Line 77  sub end_page { Line 77  sub end_page {
 =cut  =cut
   
 sub get_course {  sub get_course {
     (undef,my $courseid)=&Apache::lonxml::whichuser();      (undef,my $courseid)=&Apache::lonnet::whichuser();
     my $cdom=$env{'course.'.$courseid.'.domain'};      my $cdom=$env{'course.'.$courseid.'.domain'};
     my $cnum=$env{'course.'.$courseid.'.num'};      my $cnum=$env{'course.'.$courseid.'.num'};
     return ($cnum,$cdom);      return ($cnum,$cdom);
Line 90  sub get_reservation_ids { Line 90  sub get_reservation_ids {
   
     my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,      my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,
        "^$slot_name\0");         "^$slot_name\0");
     if (&network_error(%consumed)) {       if (&Apache::lonnet::error(%consumed)) { 
  return 'error: Unable to determine current status';   return 'error: Unable to determine current status';
     }      }
     my ($tmp)=%consumed;      my ($tmp)=%consumed;
Line 127  sub check_for_reservation { Line 127  sub check_for_reservation {
     my ($cnum,$cdom)=&get_course();      my ($cnum,$cdom)=&get_course();
     my %slots=&Apache::lonnet::get('slots', [@slots], $cdom, $cnum);      my %slots=&Apache::lonnet::get('slots', [@slots], $cdom, $cnum);
   
     if (&network_error($student) || &network_error($course)  ||      if (&Apache::lonnet::error($student) 
  &network_error(%slots)) {   || &Apache::lonnet::error($course)
    || &Apache::lonnet::error(%slots)) {
  return 'error: Unable to determine current status';   return 'error: Unable to determine current status';
     }          }    
     my @got;      my @got;
Line 175  sub get_consumed_uniqueperiods { Line 176  sub get_consumed_uniqueperiods {
  my $course =  &Apache::lonnet::EXT("resource.0.available",   my $course =  &Apache::lonnet::EXT("resource.0.available",
    $symb, $env{'user.domain'},     $symb, $env{'user.domain'},
    $env{'user.name'});     $env{'user.name'});
  if (&network_error($student) || &network_error($course)) {   if (&Apache::lonnet::error($student) 
       || &Apache::lonnet::error($course)) {
     return 'error: Unable to determine current status';      return 'error: Unable to determine current status';
  }   }
  foreach my $slot (split(/:/,$student), split(/:/, $course)) {   foreach my $slot (split(/:/,$student), split(/:/, $course)) {
Line 186  sub get_consumed_uniqueperiods { Line 188  sub get_consumed_uniqueperiods {
     if (!ref($slots)) {      if (!ref($slots)) {
  my ($cnum,$cdom)=&get_course();   my ($cnum,$cdom)=&get_course();
  my %slots=&Apache::lonnet::get('slots', [keys(%used_slots)], $cdom, $cnum);   my %slots=&Apache::lonnet::get('slots', [keys(%used_slots)], $cdom, $cnum);
  if (&network_error(%slots)) {   if (&Apache::lonnet::error(%slots)) {
     return 'error: Unable to determine current status';      return 'error: Unable to determine current status';
  }   }
  $slots = \%slots;   $slots = \%slots;
Line 212  sub check_for_conflict { Line 214  sub check_for_conflict {
   
     if (!ref($consumed_uniqueperiods)) {      if (!ref($consumed_uniqueperiods)) {
  $consumed_uniqueperiods = &get_consumed_uniqueperiods($slots);   $consumed_uniqueperiods = &get_consumed_uniqueperiods($slots);
  if (&network_error(%$consumed_uniqueperiods)) {   if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
     return 'error: Unable to determine current status';      return 'error: Unable to determine current status';
  }   }
     }      }
Line 230  sub check_for_conflict { Line 232  sub check_for_conflict {
   
 }  }
   
 sub network_error {  
     my ($result) = @_;  
     if ($result =~ /^(con_lost|no_such_host|error: [^2])/) {  
  return 1;  
     }  
     return 0;  
 }  
   
 sub make_reservation {  sub make_reservation {
     my ($slot_name,$slot,$symb)=@_;      my ($slot_name,$slot,$symb)=@_;
   
Line 250  sub make_reservation { Line 244  sub make_reservation {
     my $use_slots = &Apache::lonnet::EXT("resource.0.useslots");      my $use_slots = &Apache::lonnet::EXT("resource.0.useslots");
     &Apache::lonxml::debug("use_slots is  $use_slots<br />");      &Apache::lonxml::debug("use_slots is  $use_slots<br />");
   
     if (&network_error($value) || &network_error($use_slots)) {       if (&Apache::lonnet::error($value) 
    || &Apache::lonnet::error($use_slots)) { 
  return 'error: Unable to determine current status';   return 'error: Unable to determine current status';
     }      }
   
     my $parm_symb  = $symb;      my $parm_symb  = $symb;
     my $parm_level = 1;      my $parm_level = 1;
     if ($use_slots eq 'map') {      if ($use_slots eq 'map' || $use_slots eq 'map_map') {
  my ($map) = &Apache::lonnet::decode_symb($symb);   my ($map) = &Apache::lonnet::decode_symb($symb);
  $parm_symb = &Apache::lonnet::symbread($map);   $parm_symb = &Apache::lonnet::symbread($map);
  $parm_level = 2;   $parm_level = 2;
Line 266  sub make_reservation { Line 261  sub make_reservation {
  if ($other_slot eq $slot_name) {   if ($other_slot eq $slot_name) {
     my %consumed=&Apache::lonnet::dump('slot_reservations', $cdom,      my %consumed=&Apache::lonnet::dump('slot_reservations', $cdom,
        $cnum, "^$slot_name\0");            $cnum, "^$slot_name\0");   
     if (&network_error($value)) {       if (&Apache::lonnet::error($value)) { 
  return 'error: Unable to determine current status';   return 'error: Unable to determine current status';
     }      }
     my $me=$env{'user.name'}.':'.$env{'user.domain'};      my $me=$env{'user.name'}.':'.$env{'user.domain'};
Line 283  sub make_reservation { Line 278  sub make_reservation {
     if (!defined($max)) { $max=99999; }      if (!defined($max)) { $max=99999; }
   
     my (@ids)=&get_reservation_ids($slot_name);      my (@ids)=&get_reservation_ids($slot_name);
     if (&network_error(@ids)) {       if (&Apache::lonnet::error(@ids)) { 
  return 'error: Unable to determine current status';   return 'error: Unable to determine current status';
     }      }
     my $last=0;      my $last=0;
Line 338  sub remove_registration { Line 333  sub remove_registration {
     my ($cnum,$cdom)=&get_course();      my ($cnum,$cdom)=&get_course();
     my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,      my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,
        "^$slot_name\0");         "^$slot_name\0");
     if (&network_error(%consumed)) {      if (&Apache::lonnet::error(%consumed)) {
  $r->print("<p>".&mt('A network error has occured.').'</p>');   $r->print("<p>".&mt('A network error has occured.').'</p>');
  return;   return;
     }      }
Line 438  sub release_slot { Line 433  sub release_slot {
   
     if ($mgr eq 'F'       if ($mgr eq 'F' 
  && defined($env{'form.symb'})) {   && defined($env{'form.symb'})) {
  $symb = $env{'form.symb'};   $symb = &unescape($env{'form.symb'});
     }      }
   
     my ($result,$msg) =      my ($result,$msg) =
Line 490  sub release_reservation { Line 485  sub release_reservation {
     my $use_slots = &Apache::lonnet::EXT("resource.0.useslots");      my $use_slots = &Apache::lonnet::EXT("resource.0.useslots");
     &Apache::lonxml::debug("use_slots is  $use_slots<br />");      &Apache::lonxml::debug("use_slots is  $use_slots<br />");
   
     if (&network_error($use_slots)) {       if (&Apache::lonnet::error($use_slots)) { 
  return (0,'error: Unable to determine current status');   return (0,'error: Unable to determine current status');
     }      }
   
     my $parm_level = 1;      my $parm_level = 1;
     if ($use_slots eq 'map') {      if ($use_slots eq 'map' || $use_slots eq 'map_map') {
  $parm_level = 2;   $parm_level = 2;
     }      }
     # store new parameter string      # store new parameter string
Line 680  sub allowed_slot { Line 675  sub allowed_slot {
     split(',',$slot->{'allowedsections'}))) {      split(',',$slot->{'allowedsections'}))) {
     $userallowed=1;      $userallowed=1;
  }   }
    if (defined($env{'request.course.groups'})) {
       my @groups = split(/:/,$env{'request.course.groups'});
       my @allowed_sec = split(',',$slot->{'allowedsections'});
       foreach my $group (@groups) {
    if (grep {$_ eq $group} (@allowed_sec)) {
       $userallowed=1;
       last;
    }
       }
    }
     }      }
     &Apache::lonxml::debug("$slot_name sections is $userallowed");      &Apache::lonxml::debug("$slot_name sections is $userallowed");
   
Line 754  sub show_choices { Line 759  sub show_choices {
     my $text=&mt('Select');      my $text=&mt('Select');
     my $command='get';      my $command='get';
     if (grep(/^\Q$slot\E$/,@got_slots)) {      if (grep(/^\Q$slot\E$/,@got_slots)) {
  $text=&mt('Free Reservation');   $text=&mt('Drop Reservation');
  $command='release';   $command='release';
     } else {      } else {
  my $conflict = &check_for_conflict($symb,$slot,$slots{$slot},   my $conflict = &check_for_conflict($symb,$slot,$slots{$slot},
Line 1031  sub show_table { Line 1036  sub show_table {
     $r->print('</div>');      $r->print('</div>');
     $r->print('<p><input type="submit" name="start" value="'.&mt('Update Display').'" /></p>');      $r->print('<p><input type="submit" name="start" value="'.&mt('Update Display').'" /></p>');
     my $linkstart='<a href="/adm/slotrequest?command=showslots&amp;order=';      my $linkstart='<a href="/adm/slotrequest?command=showslots&amp;order=';
     $r->print('<table class="thinborder">      $r->print(&Apache::loncommon::start_data_table().
 <tr>        &Apache::loncommon::start_data_table_header_row().'
   <th></th>');         <th></th>');
     foreach my $which (@show_order) {      foreach my $which (@show_order) {
  if ($which ne 'proctor' && exists($show{$which})) {   if ($which ne 'proctor' && exists($show{$which})) {
     $r->print('<th>'.$linkstart.$which.'">'.$show_fields{$which}.'</a></th>');      $r->print('<th>'.$linkstart.$which.'">'.$show_fields{$which}.'</a></th>');
  }   }
     }      }
       $r->print(&Apache::loncommon::end_data_table_header_row());
   
     my %name_cache;      my %name_cache;
     my $slotsort = sub {      my $slotsort = sub {
Line 1180  DELETELINK Line 1186  DELETELINK
     undef($remove_all);      undef($remove_all);
  }   }
   
         $r->print("<tr>\n<td rowspan=\"$rowspan\">$edit $delete</td>\n");   my $row_start=&Apache::loncommon::start_data_table_row();
    my $row_end=&Apache::loncommon::end_data_table_row();
           $r->print($row_start.
     "\n<td rowspan=\"$rowspan\">$edit $delete</td>\n");
  if (exists($show{'name'})) {   if (exists($show{'name'})) {
     $colspan++;$r->print("<td>$slot</td>");      $colspan++;$r->print("<td>$slot</td>");
  }   }
Line 1223  DELETELINK Line 1232  DELETELINK
  if (exists($show{'scheduled'})) {   if (exists($show{'scheduled'})) {
     $colspan++;$r->print("<td>$remove_all $ids</td>\n");      $colspan++;$r->print("<td>$remove_all $ids</td>\n");
  }   }
  $r->print("</tr>\n");   $r->print("$row_end\n");
  if (exists($show{'proctor'})) {   if (exists($show{'proctor'})) {
     $r->print(<<STUFF);      $r->print(<<STUFF);
 <tr>  $row_start
  <td colspan="$colspan">$proctors</td>   <td colspan="$colspan">$proctors</td>
 </tr>  $row_end
 STUFF  STUFF
         }          }
     }      }
Line 1566  sub handler { Line 1575  sub handler {
  }   }
  my (undef,undef,$res)=&Apache::lonnet::decode_symb($symb);   my (undef,undef,$res)=&Apache::lonnet::decode_symb($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') {
     &fail($r,'not_available');      &fail($r,'not_available');
     return OK;      return OK;
  }   }

Removed from v.1.64  
changed lines
  Added in v.1.71


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