--- loncom/interface/slotrequest.pm 2005/06/04 08:17:06 1.4 +++ 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.4 2005/06/04 08:17:06 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,17 +130,38 @@ 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}); } } return (undef,undef); } -# FIXME - depends on the parameter for the resource to be correct -# tho prevent multiple reservations +sub check_for_conflict { + my ($symb,$new_slot_name)=@_; + my $student = &Apache::lonnet::EXT("resource.0.availablestudent", $symb, + $env{'user.domain'}, $env{'user.name'}); + my $course = &Apache::lonnet::EXT("resource.0.available", $symb, + $env{'user.domain'}, $env{'user.name'}); + my @slots = (split(/:/,$student), split(/:/, $course)); + my ($cnum,$cdom)=&get_course(); + my %slots=&Apache::lonnet::get('slots', [@slots], $cdom, $cnum); + foreach my $slot_name (@slots) { + next if (!defined($slots{$slot_name}) || + !ref($slots{$slot_name})); + + next if (!defined($slots{$slot_name}->{'uniqueperiod'}) || + !ref($slots{$slot_name}->{'uniqueperiod'})); + my ($start,$end)=@{$slots{$slot_name}->{'uniqueperiod'}}; + if ($start"); - if ($wanted >= $max) { + if (scalar(@ids) >= $max) { # full up - return -1; + return undef; } my %reservation=('name' => $env{'user.name'}.'@'.$env{'user.domain'}, @@ -189,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; @@ -207,26 +231,104 @@ sub make_reservation { return undef; } +sub release_slot { + my ($r,$symb,$slot_name,$inhibit_return_link)=@_; + + if ($slot_name eq '') { $slot_name=$env{'form.slotname'}; } + my ($cnum,$cdom)=&get_course(); + + # get parameter string, check for existance, rebuild string with the slot + + my @slots = split(/:/,&Apache::lonnet::EXT("resource.0.availablestudent", + $symb,$env{'user.domain'}, + $env{'user.name'})); + my @new_slots; + foreach my $exist_slot (@slots) { + if ($exist_slot eq $slot_name) { next; } + push(@new_slots,$exist_slot); + } + my $new_param = join(':',@new_slots); + + # get slot reservations, check if user has one, if so remove reservation + my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum, + "^$slot_name\0"); + foreach my $entry (keys(%consumed)) { + if ( $consumed{$entry}->{'name'} eq + ($env{'user.name'}.'@'.$env{'user.domain'}) ) { + &Apache::lonnet::del('slot_reservations',[$entry], + $cdom,$cnum); + } + } + # store new parameter string + my $result=&Apache::lonparmset::storeparm_by_symb($symb, + '0_availablestudent', + 1, $new_param, 'string', + $env{'user.name'}, + $env{'user.domain'}); + 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) { + $r->print(''. + &mt('Return to last resource').'
'); + } + return 1; +} + sub get_slot { my ($r,$symb)=@_; + my $slot_name=&check_for_conflict($symb,$env{'form.slotname'}); + if ($slot_name) { + my %slot=&Apache::lonnet::get_slot($slot_name); + my $description1=&get_description($slot_name,\%slot); + %slot=&Apache::lonnet::get_slot($env{'form.slotname'}); + my $description2=&get_description($env{'form.slotname'},\%slot); + $r->print("Already have a reservation: $description1
"); + if ($slot_name ne $env{'form.slotname'}) { + $r->print(<You can either ");
+ $r->print(<
or '.
+ &mt('Return to last resource').'
'. + &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); @@ -259,26 +361,27 @@ sub allowed_slot { my ($slot_name,$slot,$symb)=@_; #already started if ($slot->{'starttime'} < time) { - return 0; + # all open slot to be schedulable + #return 0; } - + &Apache::lonxml::debug("$slot_name starttime good"); #already ended if ($slot->{'endtime'} < time) { return 0; } - + &Apache::lonxml::debug("$slot_name endtime good"); # not allowed to pick this one if (defined($slot->{'type'}) && $slot->{'type'} ne 'schedulable_student') { return 0; } - + &Apache::lonxml::debug("$slot_name type good"); # not allowed for this resource if (defined($slot->{'symb'}) && $slot->{'symb'} ne $symb) { return 0; } - + &Apache::lonxml::debug("$slot_name symb good"); return 1; } @@ -300,10 +403,13 @@ sub show_choices { my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum); my $available; $r->print('No avaliable times. '.
+ $r->print('No available times. '.
&mt('Return to last resource').' | |
Slot name | +Type | +Description | +Start Time | +End Time | +Max space | +Scheduled Students | +Proctors | +Unique Period | +$slot | +$slots{$slot}->{'type'} | +$description | +$start | +$end | +$slots{$slot}->{'maxspace'} | +$ids | +$slots{$slot}->{'proctor'} | +$slots{$slot}->{'uniqueperiod'} | + +STUFF + } + $r->print('
---|
Unknown command: ".$env{'form.command'}."
"); + } } &end_page($r); return OK;