'."\n"); + + if ($env{'form.command'} eq 'manageresv') { + $allavailable = $available; + undef($available); + undef($got_slots); + my $crstype = &Apache::loncommon::course_type(); + &manage_reservations($r,$crstype,\%slots,$consumed_uniqueperiods,$allavailable); + } elsif ($env{'form.command'} eq 'showresv') { + &show_reservations($r,$env{'form.uname'},$env{'form.udom'}); + } elsif ($env{'form.command'} eq 'showslots' && $vgr eq 'F') { &show_table($r,$mgr); } elsif ($env{'form.command'} eq 'remove_registration' && $mgr eq 'F') { &remove_registration($r); } elsif ($env{'form.command'} eq 'release' && $mgr eq 'F') { - &release_slot($r,undef,undef,undef,$mgr); + if ($env{'form.entry'} eq 'remove all') { + &release_all_slot($r,$mgr); + } else { + &release_slot($r,undef,undef,undef,$mgr); + } } elsif ($env{'form.command'} eq 'delete' && $mgr eq 'F') { &delete_slot($r); } elsif ($env{'form.command'} eq 'uploadstart' && $mgr eq 'F') { @@ -1394,12 +3694,23 @@ sub handler { } &csv_upload_map($r); } + } elsif (($env{'form.command'} eq 'slotlog') && ($vgr eq 'F')) { + &show_reservations_log($r); } else { - my $symb=&Apache::lonnet::unescape($env{'form.symb'}); + $symb = &unescape($env{'form.symb'}); + if ($symb =~ m{^/enc/}) { + $symb = &Apache::lonenc::unencrypted($symb); + } + if (!defined($symb)) { + &fail($r,'not_valid'); + return OK; + } my (undef,undef,$res)=&Apache::lonnet::decode_symb($symb); my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb); - if ($useslots ne 'resource') { - &fail($r,'not_valid'); + if ($useslots ne 'resource' + && $useslots ne 'map' + && $useslots ne 'map_map') { + &fail($r,'not_available'); return OK; } $env{'request.symb'}=$symb; @@ -1408,22 +3719,44 @@ sub handler { my ($status) = &Apache::lonhomework::check_slot_access('0',$type); if ($status eq 'CAN_ANSWER' || $status eq 'NEEDS_CHECKIN' || - $status eq 'WAITING_FOR_GRADE') { + $status eq 'WAITING_FOR_GRADE' || + $status eq 'NEED_DIFFERENT_IP') { &fail($r,'not_allowed'); return OK; } if ($env{'form.requestattempt'}) { - &show_choices($r,$symb); + $r->print('
'. + &show_choices($symb,undef,0,undef,\%slots,$consumed_uniqueperiods,$available,$got_slots). + '
'); } 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') { - if (&release_slot($r,$symb,$env{'form.releaseslot'},1)) { - &get_slot($r,$symb); + if ($env{'form.nochange'}) { + my $slot_name = $env{'form.releaseslot'}; + my @slots = &check_for_reservation($symb,'allslots'); + my $msg; + if (($slot_name ne '') && (grep(/^\Q$slot_name\E/,@slots))) { + my %slot=&Apache::lonnet::get_slot($env{'form.releaseslot'}); + my $description=&get_description($slot_name,\%slot); + $msg = ''. + &mt('Unchanged reservation: [_1]',$description).'

'; + my $person = + &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); + my $subject = &mt('Reservation unchanged: [_1]',$description); + my $msgbody = &mt('No change to existing registration by [_1] for [_2].',$person,$description); + $msg .= &slot_change_messaging($slot{'reservationmsg'},$subject,$msgbody,'nochange'); + } else { + $msg = ''.&mt('Reservation no longer reported as available.').''; + } + $r->print($msg); + &return_link($r); + } elsif (&get_slot($r,$symb,$env{'form.releaseslot'},1)) { + &release_slot($r,$symb,$env{'form.releaseslot'}); } } else { - $r->print("

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

"); + $r->print('

'.&mt('Unknown command: [_1]',$env{'form.command'}).'

'); } } &end_page($r);