--- loncom/interface/slotrequest.pm 2005/08/09 15:04:50 1.6 +++ loncom/interface/slotrequest.pm 2005/09/06 21:31:03 1.12 @@ -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.12 2005/09/06 21:31:03 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('

'.&mt('Unable to understand what resource you wanted to sign up for.').'

'.$env{'form.symb'}); + $r->print('

'.&mt('Unable to understand what resource you wanted to sign up for.').'

'); + } elsif ($code eq 'not_allowed') { + $r->print('

'.&mt('Not allowed to sign up or change reservations at this time.').'

'); + } else { + $r->print('

'.&mt('Failed.').'

'); } + $r->print('

'. &mt('Return to last resource').'

'); &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
"); - 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("

Released Reservation: $description

"); - if ($inhibit_return_link) { + if (!$inhibit_return_link) { $r->print('

'. &mt('Return to last resource').'

'); } @@ -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("

Already have a reservation: $description1

"); - $r->print(<print(< STUFF - $r->print("

You can either "); - $r->print(<print("

You can either "); + $r->print(< STUFF - $r->print(' your reservation from '.$description1.' to '. - $description2. - '
or '. - &mt('Return to last resource').'

'); - $r->print(<print(' your reservation from '.$description1.' to '. + $description2. + '
or '. + &mt('Return to last resource').'

'); + $r->print(< STUFF - # FIXME add button to free current reservation and get new one + } else { + $r->print('

'. + &mt('Return to last resource').'

'); + } 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("

Success: $description

"); - $r->print('

'. - &mt('Return to last resource').'

'); - return; - } elsif ($reserved < 0) { - $r->print("

Already reserved: $description

"); - $r->print('

'. - &mt('Return to last resource').'

'); - return; + if (defined($reserved)) { + if ($reserved > -1) { + $r->print("

Success: $description

"); + $r->print('

'. + &mt('Return to last resource').'

'); + return; + } elsif ($reserved < 0) { + $r->print("

Already reserved: $description

"); + $r->print('

'. + &mt('Return to last resource').'

'); + 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(''); + $r->print('
+ + + + + + + + + + +'); foreach my $slot (sort { return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} } (keys(%slots))) { @@ -470,11 +488,14 @@ sub show_table { $r->print(< + + + 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,18 +513,30 @@ sub handler { &fail($r,'not_valid'); return OK; } - - if ($env{'form.command'} eq 'showslots') { + $env{'request.symb'}=$symb; + 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); - } elsif ($env{'form.command'} eq 'release') { - &release_slot($r,$symb); - } elsif ($env{'form.command'} eq 'get') { - &get_slot($r,$symb); - } elsif ($env{'form.command'} eq 'change') { - &release_slot($r,$symb,$env{'form.releaseslot'},1); - &get_slot($r,$symb); + } else { + 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; + } + if ($env{'form.requestattempt'}) { + &show_choices($r,$symb); + } elsif ($env{'form.command'} eq 'release') { + &release_slot($r,$symb); + } elsif ($env{'form.command'} eq 'get') { + &get_slot($r,$symb); + } elsif ($env{'form.command'} eq 'change') { + &release_slot($r,$symb,$env{'form.releaseslot'},1); + &get_slot($r,$symb); + } else { + $r->print("

Unknown command: ".$env{'form.command'}."

"); + } } &end_page($r); return OK;
Slot nameTypeDescriptionStart TimeEnd TimeMax spaceScheduled StudentsProctorsUnique Period
$slot$slots{$slot}->{'type'} $description $start $end $slots{$slot}->{'maxspace'} $ids$slots{$slot}->{'proctor'}$slots{$slot}->{'uniqueperiod'}