--- loncom/interface/slotrequest.pm 2005/08/09 15:04:50 1.6 +++ loncom/interface/slotrequest.pm 2005/09/06 20:53:36 1.10 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for requesting to have slots added to a students record # -# $Id: slotrequest.pm,v 1.6 2005/08/09 15:04:50 albertel Exp $ +# $Id: slotrequest.pm,v 1.10 2005/09/06 20:53:36 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,9 +38,14 @@ use Apache::lonnet; sub fail { my ($r,$code)=@_; 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>'.&mt('Unable to understand what resource you wanted to sign up for.').'</p>'); + } elsif ($code eq 'not_allowed') { + $r->print('<p>'.&mt('Not allowed to sign up or change reservations at this time.').'</p>'); + } else { + $r->print('<p>'.&mt('Failed.').'</p>'); } + $r->print('<p><a href="/adm/flip?postdata=return:">'. &mt('Return to last resource').'</a></p>'); &end_page($r); @@ -125,9 +130,9 @@ sub check_for_reservation { &Apache::lonxml::debug(time." $slot_name ". $slots{$slot_name}->{'starttime'}." -- ". $slots{$slot_name}->{'startreserve'}); - if ($slots{$slot_name}->{'starttime'} > time && + if ($slots{$slot_name}->{'endtime'} > time && $slots{$slot_name}->{'startreserve'} < time) { - # between start of reservation times and start of slot + # between start of reservation times and end of slot return($slot_name, $slots{$slot_name}); } } @@ -158,9 +163,6 @@ sub check_for_conflict { } -# FIXME - depends on the parameter for the resource to be correct -# to prevent multiple reservations - sub make_reservation { my ($slot_name,$slot,$symb)=@_; @@ -189,7 +191,6 @@ sub make_reservation { 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]; @@ -198,9 +199,9 @@ sub make_reservation { my $wanted=$last+1; &Apache::lonxml::debug("wanted $wanted<br />"); - if ($wanted >= $max) { + if (scalar(@ids) >= $max) { # full up - return -1; + return undef; } my %reservation=('name' => $env{'user.name'}.'@'.$env{'user.domain'}, @@ -213,7 +214,6 @@ sub make_reservation { $cdom, $cnum); if ($success eq 'ok') { - #FIXME need to set the parm my $new_value=$slot_name; if ($value) { $new_value=$value.':'.$new_value; @@ -268,7 +268,7 @@ sub release_slot { my %slot=&Apache::lonnet::get_slot($slot_name); my $description=&get_description($env{'form.slotname'},\%slot); $r->print("<p>Released Reservation: $description</p>"); - if ($inhibit_return_link) { + if (!$inhibit_return_link) { $r->print('<p><a href="/adm/flip?postdata=return:">'. &mt('Return to last resource').'</a></p>'); } @@ -285,44 +285,50 @@ sub get_slot { %slot=&Apache::lonnet::get_slot($env{'form.slotname'}); my $description2=&get_description($env{'form.slotname'},\%slot); $r->print("<p>Already have a reservation: $description1</p>"); - $r->print(<<STUFF); + if ($slot_name ne $env{'form.slotname'}) { + $r->print(<<STUFF); <form method="POST" action="/adm/slotrequest"> <input type="hidden" name="symb" value="$env{'form.symb'}" /> <input type="hidden" name="slotname" value="$env{'form.slotname'}" /> <input type="hidden" name="releaseslot" value="$slot_name" /> <input type="hidden" name="command" value="change" /> STUFF - $r->print("<p>You can either "); - $r->print(<<STUFF); + $r->print("<p>You can either "); + $r->print(<<STUFF); <input type="submit" name="change" value="Change" /> STUFF - $r->print(' your reservation from <b>'.$description1.'</b> to <b>'. - $description2. - '</b> <br />or <a href="/adm/flip?postdata=return:">'. - &mt('Return to last resource').'</a></p>'); - $r->print(<<STUFF); + $r->print(' your reservation from <b>'.$description1.'</b> to <b>'. + $description2. + '</b> <br />or <a href="/adm/flip?postdata=return:">'. + &mt('Return to last resource').'</a></p>'); + $r->print(<<STUFF); </form> STUFF - # FIXME add button to free current reservation and get new one + } else { + $r->print('<p><a href="/adm/flip?postdata=return:">'. + &mt('Return to last resource').'</a></p>'); + } return; } 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; + if (defined($reserved)) { + 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", + my %lt=('request'=>"Availibility list", 'try' =>'Try again'); %lt=&Apache::lonlocal::texthash(%lt); @@ -411,7 +417,8 @@ sub show_choices { my $description=&get_description($slot,$slots{$slot}); my $form=&mt('Unavailable'); - if (&space_available($slot,$slots{$slot},$symb)) { + if (($slot eq $got_slot) || + &space_available($slot,$slots{$slot},$symb)) { my $text=&mt('Select'); my $command='get'; if ($slot eq $got_slot) { @@ -449,7 +456,18 @@ sub show_table { my ($cnum,$cdom)=&get_course(); my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum); my $available; - $r->print('<table border="1">'); + $r->print('<table border="1"> +<tr> + <th>Slot name</th> + <th>Type</th> + <th>Description</th> + <th>Start Time</th> + <th>End Time</th> + <th>Max space</th> + <th>Scheduled Students</th> + <th>Proctors</th> + <th>Unique Period</th> +</tr>'); foreach my $slot (sort { return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} } (keys(%slots))) { @@ -470,11 +488,14 @@ sub show_table { $r->print(<<STUFF); <tr> <td>$slot</td> + <td>$slots{$slot}->{'type'}</td> <td>$description</td> <td>$start</td> <td>$end</td> <td>$slots{$slot}->{'maxspace'}</td> <td>$ids</td> + <td>$slots{$slot}->{'proctor'}</td> + <td>$slots{$slot}->{'uniqueperiod'}</td> </tr> STUFF } @@ -484,6 +505,7 @@ STUFF sub handler { my $r=shift; + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); &start_page($r); my $symb=&Apache::lonnet::unescape($env{'form.symb'}); my (undef,undef,$res)=&Apache::lonnet::decode_symb($symb); @@ -491,8 +513,16 @@ sub handler { &fail($r,'not_valid'); return OK; } - - if ($env{'form.command'} eq 'showslots') { + $env{'request.symb'}=$symb; + my ($status) = &Apache::lonhomework::check_task_access('0'); + if ($status eq 'CAN_ANSWER' || + $status eq 'NEEDS_CHECKIN' || + $status eq 'WAITING_FOR_GRADE') { + &fail($r,'not_allowed'); + return OK; + } + my $vgr=&Apache::lonnet::allowed('vgr',$env{'request.course.id'}); + if ($env{'form.command'} eq 'showslots' && $vgr eq 'F') { &show_table($r,$symb); } elsif ($env{'form.requestattempt'}) { &show_choices($r,$symb); @@ -503,6 +533,8 @@ sub handler { } elsif ($env{'form.command'} eq 'change') { &release_slot($r,$symb,$env{'form.releaseslot'},1); &get_slot($r,$symb); + } else { + $r->print("<p>Unknown command: ".$env{'form.command'}."</p>"); } &end_page($r); return OK;