--- loncom/interface/slotrequest.pm 2018/09/14 21:06:22 1.125.2.6 +++ loncom/interface/slotrequest.pm 2019/06/22 19:18:28 1.125.2.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.125.2.6 2018/09/14 21:06:22 raeburn Exp $ +# $Id: slotrequest.pm,v 1.125.2.7 2019/06/22 19:18:28 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -729,13 +729,39 @@ sub release_reservation { } my $new_param = join(':',@new_slots); + # Get value of useslots parameter in effect for this user. + # If value is map or map_map, then the parm level is 2 (i.e., + # non-recursive enclosing map/folder level for specific user) + # and the symb for this reservation in slot_reservations.db + # will be the symb of the map itself. + + my $use_slots = &Apache::lonnet::EXT("resource.0.useslots", + $symb,$udom,$uname); + &Apache::lonxml::debug("use_slots is $use_slots
"); + + if (&Apache::lonnet::error($use_slots)) { + return (0,'error: Unable to determine current status'); + } + + my $parm_level = 1; + my $parm_symb = $passed_resource->symb(); + if ($use_slots eq 'map' || $use_slots eq 'map_map') { + $parm_level = 2; + unless ($passed_resource->is_map()) { + my ($map) = &Apache::lonnet::decode_symb($parm_symb); + $parm_symb = &Apache::lonnet::symbread($map); + } + } + my ($cnum,$cdom)=&get_course(); - # get slot reservations, check if user has one, if so remove reservation + # get slot reservations, check if user has one for the + # correct symb, and if so, remove the reservation my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum, "^$slot_name\0"); foreach my $entry (keys(%consumed)) { - if ( $consumed{$entry}->{'name'} eq ($uname.':'.$udom) ) { + if (($consumed{$entry}->{'name'} eq $uname.':'.$udom) && + ($consumed{$entry}->{'symb'} eq $parm_symb)) { &Apache::lonnet::del('slot_reservations',[$entry], $cdom,$cnum); my %storehash = ( @@ -751,18 +777,6 @@ sub release_reservation { } } - my $use_slots = &Apache::lonnet::EXT("resource.0.useslots", - $symb,$udom,$uname); - &Apache::lonxml::debug("use_slots is $use_slots
"); - - if (&Apache::lonnet::error($use_slots)) { - return (0,'error: Unable to determine current status'); - } - - my $parm_level = 1; - if ($use_slots eq 'map' || $use_slots eq 'map_map') { - $parm_level = 2; - } # store new parameter string my $result=&Apache::lonparmset::storeparm_by_symb($symb, '0_availablestudent',