--- loncom/interface/slotrequest.pm 2005/08/09 07:34:51 1.5
+++ loncom/interface/slotrequest.pm 2005/08/09 15:38:13 1.7
@@ -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.5 2005/08/09 07:34:51 albertel Exp $
+# $Id: slotrequest.pm,v 1.7 2005/08/09 15:38:13 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -125,9 +125,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 +158,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 +186,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 +194,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 +209,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;
@@ -232,12 +227,47 @@ sub make_reservation {
}
sub release_slot {
- my ($r,$symb)=@_;
+ 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 { @@ -246,30 +276,54 @@ sub get_slot { my $slot_name=&check_for_conflict($symb,$env{'form.slotname'}); if ($slot_name) { my %slot=&Apache::lonnet::get_slot($slot_name); - my $description=&get_description($env{'form.slotname'},\%slot); - $r->print("Already have a reservation: $description
"); - $r->print(''. - &mt('Return to last resource').'
'); - # FIXME add button to free current reservation adn get new one + 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(''); + return; + } } - my %lt=('request'=>"Request another attempt", + my %lt=('request'=>"Availibility list", 'try' =>'Try again'); %lt=&Apache::lonlocal::texthash(%lt); @@ -358,7 +412,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) { @@ -447,6 +502,9 @@ sub handler { &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); } &end_page($r); return OK;