Diff for /loncom/interface/slotrequest.pm between versions 1.1 and 1.2

version 1.1, 2005/05/31 17:42:11 version 1.2, 2005/05/31 21:13:01
Line 37  use Apache::lonnet; Line 37  use Apache::lonnet;
   
 sub fail {  sub fail {
     my ($r,$code)=@_;      my ($r,$code)=@_;
     $r->print();      if ($code eq 'not_valid') {
    $r->print('<p>'.&mt('Unable to understand what resource you wanted to sign up for.').'</p>'.$env{'form.symb'});
   
       }
       $r->print('<p><a href="/adm/flip?postdata=return:">'.
         &mt('Return to last resource').'</a></p>');
     &end_page($r);      &end_page($r);
 }  }
   
Line 54  sub end_page { Line 59  sub end_page {
     $r->print(&Apache::loncommon::endbodytag().'</html>');      $r->print(&Apache::loncommon::endbodytag().'</html>');
 }  }
   
   =pod
   
    slot_reservations db
      - keys are 
       - slotname\0id -> value is an hashref of
                            name -> user@domain of holder
                            timestamp -> timestamp of reservation
                            symb -> symb of resource that it is reserved for
   
   =cut
   
   sub get_course {
       (undef,my $courseid)=&Apache::lonxml::whichuser();
       my $cdom=$env{'course.'.$courseid.'.domain'};
       my $cnum=$env{'course.'.$courseid.'.num'};
       return ($cnum,$cdom);
   }
   
   sub get_reservation_ids {
       my ($slot_name)=@_;
       
       my ($cnum,$cdom)=&get_course();
   
       my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,
          "^$slot_name\0");
       
       my ($tmp)=%consumed;
       if ($tmp=~/^error: 2 / ) {
    return 0;
       }
       return keys(%consumed);
   }
   
   sub space_available {
       my ($slot_name,$slot)=@_;
       my $max=$slot->{'maxspace'};
   
       if (!defined($max)) { return 1; }
   
       my $consumed=scalar(&get_reservation_ids($slot_name));
       if ($consumed < $max) {
    return 1
       }
       return 0;
   }
    
   sub make_reservation {
       my ($slot_name,$slot,$symb)=@_;
       my $max=$slot->{'maxspace'};
   
       if (!defined($max)) { return 1; }
   
       my (@ids)=&get_reservation_ids($slot_name);
   
       # FIXME we could end up having holes... 
       my $last=0;
       foreach my $id (@ids) {
    my $num=(split('\0',$id))[1];
    if ($num > $last) { $last=$num; }
       }
       
       my $wanted=$last+1;
       if ($wanted >= $max) {
    # full up
    return -1;
       }
       
       my %reservation=('name'      => $env{'user.name'}.'@'.$env{'user.domain'},
        'timestamp' => time,
        'symb'      => $symb);
   
       my ($cnum,$cdom)=&get_course();
       my $success=&Apache::lonnet::newput('slot_reservations',
    {"$slot_name\0$wanted" =>
        \%reservation},
    $cdom,$cnum);
       if ($success eq 'ok') {
    return $wanted;
       }
       # someone else got it
       return -1;
   }
   
   
   sub show_choices {
       my ($r,$symb)=@_;
   
       my ($cnum,$cdom)=&get_course();
       my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum);
       $r->print('<table border="1">');
       foreach my $slot (sort 
         { return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} }
         (keys(%slots)))  {
    my $description=$slots{$slot}->{'description'};
    if (!defined($description)) {
       $description=&mt('[_1] From [_2] to [_3]',$slot,
        &Apache::lonlocal::locallocaltime($slots{$slot}->{'starttime'}),
        &Apache::lonlocal::locallocaltime($slots{$slot}->{'endtime'}));
    }
   
    my $form=&mt('Unavailable');
    if (&space_available($slot,$slots{$slot})) {
       $form=<<STUFF;
      <form>
        <input type="submit" name="Select" value="Select" />
        <!-- FIXME needs to send data -->
      </form>
   STUFF
    }
    $r->print(<<STUFF);
   <tr>
    <td>$form</td>
    <td>$description</td>
   </tr>
   STUFF
       }
       $r->print('</table>');
   }
   
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
   
     &start_page($r);      &start_page($r);
     my $symb=$env{'form.symb'};      my $symb=&Apache::lonnet::unescape($env{'form.symb'});
     my (undef,undef,$res)=&Apache::lonnet::decode_symb($symb);      my (undef,undef,$res)=&Apache::lonnet::decode_symb($symb);
     if ($symb !~ /\.task$/) {      if ($res !~ /\.task$/) {
  &fail($r,'not_valid');   &fail($r,'not_valid');
  return OK;   return OK;
     }      }
       
       if ($env{'form.requestattempt'}) {
    &show_choices($r,$symb);
       }
   
     &end_page($r);      &end_page($r);
     return OK;      return OK;

Removed from v.1.1  
changed lines
  Added in v.1.2


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