--- loncom/interface/slotrequest.pm 2006/06/16 19:54:02 1.65
+++ loncom/interface/slotrequest.pm 2007/04/11 16:07:51 1.78
@@ -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.65 2006/06/16 19:54:02 albertel Exp $
+# $Id: slotrequest.pm,v 1.78 2007/04/11 16:07:51 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -77,7 +77,7 @@ sub end_page {
=cut
sub get_course {
- (undef,my $courseid)=&Apache::lonxml::whichuser();
+ (undef,my $courseid)=&Apache::lonnet::whichuser();
my $cdom=$env{'course.'.$courseid.'.domain'};
my $cnum=$env{'course.'.$courseid.'.num'};
return ($cnum,$cdom);
@@ -90,7 +90,7 @@ sub get_reservation_ids {
my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,
"^$slot_name\0");
- if (&network_error(%consumed)) {
+ if (&Apache::lonnet::error(%consumed)) {
return 'error: Unable to determine current status';
}
my ($tmp)=%consumed;
@@ -127,8 +127,9 @@ sub check_for_reservation {
my ($cnum,$cdom)=&get_course();
my %slots=&Apache::lonnet::get('slots', [@slots], $cdom, $cnum);
- if (&network_error($student) || &network_error($course) ||
- &network_error(%slots)) {
+ if (&Apache::lonnet::error($student)
+ || &Apache::lonnet::error($course)
+ || &Apache::lonnet::error(%slots)) {
return 'error: Unable to determine current status';
}
my @got;
@@ -175,7 +176,8 @@ sub get_consumed_uniqueperiods {
my $course = &Apache::lonnet::EXT("resource.0.available",
$symb, $env{'user.domain'},
$env{'user.name'});
- if (&network_error($student) || &network_error($course)) {
+ if (&Apache::lonnet::error($student)
+ || &Apache::lonnet::error($course)) {
return 'error: Unable to determine current status';
}
foreach my $slot (split(/:/,$student), split(/:/, $course)) {
@@ -186,7 +188,7 @@ sub get_consumed_uniqueperiods {
if (!ref($slots)) {
my ($cnum,$cdom)=&get_course();
my %slots=&Apache::lonnet::get('slots', [keys(%used_slots)], $cdom, $cnum);
- if (&network_error(%slots)) {
+ if (&Apache::lonnet::error(%slots)) {
return 'error: Unable to determine current status';
}
$slots = \%slots;
@@ -212,7 +214,7 @@ sub check_for_conflict {
if (!ref($consumed_uniqueperiods)) {
$consumed_uniqueperiods = &get_consumed_uniqueperiods($slots);
- if (&network_error(%$consumed_uniqueperiods)) {
+ if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
return 'error: Unable to determine current status';
}
}
@@ -230,14 +232,6 @@ sub check_for_conflict {
}
-sub network_error {
- my ($result) = @_;
- if ($result =~ /^(con_lost|no_such_host|error: [^2])/) {
- return 1;
- }
- return 0;
-}
-
sub make_reservation {
my ($slot_name,$slot,$symb)=@_;
@@ -250,13 +244,14 @@ sub make_reservation {
my $use_slots = &Apache::lonnet::EXT("resource.0.useslots");
&Apache::lonxml::debug("use_slots is $use_slots
");
- if (&network_error($value) || &network_error($use_slots)) {
+ if (&Apache::lonnet::error($value)
+ || &Apache::lonnet::error($use_slots)) {
return 'error: Unable to determine current status';
}
my $parm_symb = $symb;
my $parm_level = 1;
- if ($use_slots eq 'map') {
+ if ($use_slots eq 'map' || $use_slots eq 'map_map') {
my ($map) = &Apache::lonnet::decode_symb($symb);
$parm_symb = &Apache::lonnet::symbread($map);
$parm_level = 2;
@@ -266,7 +261,7 @@ sub make_reservation {
if ($other_slot eq $slot_name) {
my %consumed=&Apache::lonnet::dump('slot_reservations', $cdom,
$cnum, "^$slot_name\0");
- if (&network_error($value)) {
+ if (&Apache::lonnet::error($value)) {
return 'error: Unable to determine current status';
}
my $me=$env{'user.name'}.':'.$env{'user.domain'};
@@ -283,7 +278,7 @@ sub make_reservation {
if (!defined($max)) { $max=99999; }
my (@ids)=&get_reservation_ids($slot_name);
- if (&network_error(@ids)) {
+ if (&Apache::lonnet::error(@ids)) {
return 'error: Unable to determine current status';
}
my $last=0;
@@ -338,8 +333,8 @@ sub remove_registration {
my ($cnum,$cdom)=&get_course();
my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,
"^$slot_name\0");
- if (&network_error(%consumed)) {
- $r->print("
".&mt('A network error has occured.').'
'); + if (&Apache::lonnet::error(%consumed)) { + $r->print("".&mt('A network error has occured.').'
'); return; } if (!%consumed) { @@ -438,7 +433,7 @@ sub release_slot { if ($mgr eq 'F' && defined($env{'form.symb'})) { - $symb = $env{'form.symb'}; + $symb = &unescape($env{'form.symb'}); } my ($result,$msg) = @@ -490,12 +485,12 @@ sub release_reservation { my $use_slots = &Apache::lonnet::EXT("resource.0.useslots"); &Apache::lonxml::debug("use_slots is $use_slotsSlot $slot_name marked as deleted.
"); } else { - $r->print("An error ($ret) occurse when attempting to delete Slot $slot_name.
"); + $r->print("An error ($ret) occurse when attempting to delete Slot $slot_name.
"); } } else { if (%consumed) { @@ -553,17 +548,17 @@ sub return_link { } sub get_slot { - my ($r,$symb)=@_; + my ($r,$symb,$conflictable_slot,$inhibit_return_link)=@_; my %slot=&Apache::lonnet::get_slot($env{'form.slotname'}); my $slot_name=&check_for_conflict($symb,$env{'form.slotname'},\%slot); if ($slot_name =~ /^error: (.*)/) { - $r->print("An error occured while attempting to make a reservation. ($1)
"); + $r->print("An error occured while attempting to make a reservation. ($1)
"); &return_link($r); - return; + return 0; } - if ($slot_name) { + if ($slot_name && $slot_name ne $conflictable_slot) { my %slot=&Apache::lonnet::get_slot($slot_name); my $description1=&get_description($slot_name,\%slot); %slot=&Apache::lonnet::get_slot($env{'form.slotname'}); @@ -591,36 +586,44 @@ STUFF } else { &return_link($r); } - return; + return 0; } my $reserved=&make_reservation($env{'form.slotname'}, \%slot,$symb); my $description=&get_description($env{'form.slotname'},\%slot); if (defined($reserved)) { + my $retvalue = 0; if ($slot_name =~ /^error: (.*)/) { - $r->print("An error occured while attempting to make a reservation. ($1)
"); + $r->print("An error occured while attempting to make a reservation. ($1)
"); } elsif ($reserved > -1) { $r->print("Success: $description
"); + $retvalue = 1; } elsif ($reserved < 0) { $r->print("Already reserved: $description
"); } - &return_link($r); - return; + if (!$inhibit_return_link) { &return_link($r); } + return 1; } my %lt=('request'=>"Availibility list", 'try' =>'Try again'); %lt=&Apache::lonlocal::texthash(%lt); + my $extra_input; + if ($conflictable_slot) { + $extra_input=''; + } + $r->print(<Failed to reserve a spot for $description.
? @@ -634,8 +637,8 @@ or or STUFF - &return_link($r); - return; + if (!$inhibit_return_link) { &return_link($r); } + return 0; } sub allowed_slot { @@ -643,8 +646,7 @@ sub allowed_slot { #already started if ($slot->{'starttime'} < time) { - # all open slot to be schedulable - #return 0; + return 0; } &Apache::lonxml::debug("$slot_name starttime good"); @@ -680,6 +682,16 @@ sub allowed_slot { split(',',$slot->{'allowedsections'}))) { $userallowed=1; } + if (defined($env{'request.course.groups'})) { + my @groups = split(/:/,$env{'request.course.groups'}); + my @allowed_sec = split(',',$slot->{'allowedsections'}); + foreach my $group (@groups) { + if (grep {$_ eq $group} (@allowed_sec)) { + $userallowed=1; + last; + } + } + } } &Apache::lonxml::debug("$slot_name sections is $userallowed"); @@ -754,7 +766,7 @@ sub show_choices { my $text=&mt('Select'); my $command='get'; if (grep(/^\Q$slot\E$/,@got_slots)) { - $text=&mt('Free Reservation'); + $text=&mt('Drop Reservation'); $command='release'; } else { my $conflict = &check_for_conflict($symb,$slot,$slots{$slot}, @@ -887,14 +899,19 @@ sub show_table { } my $available; if ($mgr eq 'F') { + # FIXME: This line should be deleted once Slots uses breadcrumbs + $r->print(&Apache::loncommon::help_open_topic('Slot About', 'Help on slots')); + $r->print('
Created $countdone slots\n
"); foreach my $error (@errors) { - $r->print("$error\n
"); + $r->print("$error
\n"); } &show_table($r,$mgr); return ''; @@ -1570,7 +1608,9 @@ sub handler { } my (undef,undef,$res)=&Apache::lonnet::decode_symb($symb); my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb); - if ($useslots ne 'resource' && $useslots ne 'map') { + if ($useslots ne 'resource' + && $useslots ne 'map' + && $useslots ne 'map_map') { &fail($r,'not_available'); return OK; } @@ -1591,8 +1631,8 @@ sub handler { } 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 (&get_slot($r,$symb,$env{'form.releaseslot'},1)) { + &release_slot($r,$symb,$env{'form.releaseslot'}); } } else { $r->print("Unknown command: ".$env{'form.command'}."
");