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

version 1.2, 2005/05/31 21:13:01 version 1.3, 2005/06/04 07:44:48
Line 104  sub space_available { Line 104  sub space_available {
     }      }
     return 0;      return 0;
 }  }
    
   # FIXME - depends on the parameter for the resource to be correct
   #         tho prevent multiple reservations
   
 sub make_reservation {  sub make_reservation {
     my ($slot_name,$slot,$symb)=@_;      my ($slot_name,$slot,$symb)=@_;
     my $max=$slot->{'maxspace'};  
   
     if (!defined($max)) { return 1; }      my ($cnum,$cdom)=&get_course();
   
       my $value=&Apache::lonnet::EXT("resource.0.availablestudent",$symb,
      $env{'user.domain'},$env{'user.name'});
       &Apache::lonxml::debug("value is  $value<br />");
       foreach my $other_slot (split(/:/, $value)) {
    if ($other_slot eq $slot_name) {
       my %consumed=&Apache::lonnet::dump('slot_reservations', $cdom,
          $cnum, "^$slot_name\0");   
   
       my $me=$env{'user.name'}.'@'.$env{'user.domain'};
       foreach my $key (keys(%consumed)) {
    if ($consumed{$key}->{'name'} eq $me) {
       my $num=(split('\0',$key))[1];
       return -$num;
    }
       }
    }
       }
   
       my $max=$slot->{'maxspace'};
       if (!defined($max)) { $max=99999; }
   
     my (@ids)=&get_reservation_ids($slot_name);      my (@ids)=&get_reservation_ids($slot_name);
   
Line 121  sub make_reservation { Line 144  sub make_reservation {
     }      }
           
     my $wanted=$last+1;      my $wanted=$last+1;
       &Apache::lonxml::debug("wanted $wanted<br />");
     if ($wanted >= $max) {      if ($wanted >= $max) {
  # full up   # full up
  return -1;   return -1;
Line 130  sub make_reservation { Line 154  sub make_reservation {
      'timestamp' => time,       'timestamp' => time,
      'symb'      => $symb);       'symb'      => $symb);
   
     my ($cnum,$cdom)=&get_course();  
     my $success=&Apache::lonnet::newput('slot_reservations',      my $success=&Apache::lonnet::newput('slot_reservations',
  {"$slot_name\0$wanted" =>   {"$slot_name\0$wanted" =>
      \%reservation},       \%reservation},
  $cdom,$cnum);   $cdom, $cnum);
   
     if ($success eq 'ok') {      if ($success eq 'ok') {
    #FIXME need to set the parm
    my $new_value=$slot_name;
    if ($value) {
       $new_value=$value.':'.$new_value;
    }
    my $result=&Apache::lonparmset::storeparm_by_symb($symb,
         '0_availablestudent',
          1, $new_value, 'string',
          $env{'user.name'},
                  $env{'user.domain'});
    &Apache::lonxml::debug("hrrm $result");
  return $wanted;   return $wanted;
     }      }
   
     # someone else got it      # someone else got it
     return -1;      return undef;
   }
   
   sub get_slot {
       my ($r,$symb)=@_;
   
       my %slot=&Apache::lonnet::get_slot($env{'form.slotname'});
       my $reserved=&make_reservation($env{'form.slotname'},
      \%slot,$symb);
       my $description=&get_description($env{'form.slotname'},\%slot);
       if ($reserved > -1) {
    $r->print("<p>Success: $description</p>");
    $r->print('<p><a href="/adm/flip?postdata=return:">'.
     &mt('Return to last resource').'</a></p>');
    return;
       } elsif ($reserved < 0) {
    $r->print("<p>Already reserved: $description</p>");
    $r->print('<p><a href="/adm/flip?postdata=return:">'.
     &mt('Return to last resource').'</a></p>');
    return;
       }
   
       my %lt=('request'=>"Request another attempt",
       'try'    =>'Try again');
       %lt=&Apache::lonlocal::texthash(%lt);
   
       $r->print(<<STUFF);
   <p> <font color="red">Failed</font> to reserve a spot for $description. </p>
   <p>
   <form method="POST" action="/adm/slotrequest">
      <input type="submit" name="Try Again" value="$lt{'try'}" />
      <input type="hidden" name="symb" value="$env{'form.symb'}" />
      <input type="hidden" name="slotname" value="$env{'form.slotname'}" />
      <input type="hidden" name="command" value="get" />
   </form>
   ?
   </p>
   <p>
   or
   <form method="POST" action="/adm/slotrequest">
       <input type="hidden" name="symb" value="$env{'form.symb'}" />
       <input type="submit" name="requestattempt" value="$lt{'request'}" />
   </form>
   </p>
   or
   STUFF
       $r->print('<p><a href="/adm/flip?postdata=return:">'.
         &mt('Return to last resource').'</a></p>');
       return;
   }
   
   sub allowed_slot {
       my ($slot_name,$slot,$symb)=@_;
       #already started
       if ($slot->{'starttime'} < time) {
    return 0;
       }
   
       #already ended
       if ($slot->{'endtime'} < time) {
    return 0;
       }
   
       # not allowed to pick this one
       if (defined($slot->{'type'})
    && $slot->{'type'} ne 'schedulable_student') {
    return 0;
       }
   
       # not allowed for this resource
       if (defined($slot->{'symb'})
    && $slot->{'symb'} ne $symb) {
    return 0;
       }
   
       return 1;
 }  }
   
   sub get_description {
       my ($slot_name,$slot)=@_;
       my $description=$slot->{'description'};
       if (!defined($description)) {
    $description=&mt('[_1] From [_2] to [_3]',$slot,
    &Apache::lonlocal::locallocaltime($slot->{'starttime'}),
    &Apache::lonlocal::locallocaltime($slot->{'endtime'}));
       }
       return $description;
   }
   
 sub show_choices {  sub show_choices {
     my ($r,$symb)=@_;      my ($r,$symb)=@_;
   
     my ($cnum,$cdom)=&get_course();      my ($cnum,$cdom)=&get_course();
     my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum);      my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum);
       my $available;
     $r->print('<table border="1">');      $r->print('<table border="1">');
     foreach my $slot (sort       foreach my $slot (sort 
       { return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} }        { return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} }
       (keys(%slots)))  {        (keys(%slots)))  {
  my $description=$slots{$slot}->{'description'};  
  if (!defined($description)) {   next if (!&allowed_slot($slot,$slots{$slot}));
     $description=&mt('[_1] From [_2] to [_3]',$slot,  
      &Apache::lonlocal::locallocaltime($slots{$slot}->{'starttime'}),   $available++;
      &Apache::lonlocal::locallocaltime($slots{$slot}->{'endtime'}));  
  }   my $description=&get_description($slot,$slots{$slot});
   
  my $form=&mt('Unavailable');   my $form=&mt('Unavailable');
  if (&space_available($slot,$slots{$slot})) {   if (&space_available($slot,$slots{$slot},$symb)) {
       my $escsymb=&Apache::lonnet::escape($symb);
     $form=<<STUFF;      $form=<<STUFF;
    <form>     <form method="POST" action="/adm/slotrequest">
      <input type="submit" name="Select" value="Select" />       <input type="submit" name="Select" value="Select" />
      <!-- FIXME needs to send data -->       <input type="hidden" name="symb" value="$escsymb" />
        <input type="hidden" name="slotname" value="$slot" />
        <input type="hidden" name="command" value="get" />
    </form>     </form>
 STUFF  STUFF
  }   }
Line 175  STUFF Line 300  STUFF
 </tr>  </tr>
 STUFF  STUFF
     }      }
   
       if (!$available) {
    $r->print('<tr><td>No avaliable times. <a href="/adm/flip?postdata=return:">'.
     &mt('Return to last resource').'</a></td></tr>');
       }
     $r->print('</table>');      $r->print('</table>');
 }  }
   
Line 191  sub handler { Line 321  sub handler {
           
     if ($env{'form.requestattempt'}) {      if ($env{'form.requestattempt'}) {
  &show_choices($r,$symb);   &show_choices($r,$symb);
       } elsif ($env{'form.command'} eq 'get') {
    &get_slot($r,$symb);
     }      }
   
     &end_page($r);      &end_page($r);
     return OK;      return OK;
 }  }
   
   1;
   __END__

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


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