--- loncom/interface/slotrequest.pm 2005/11/21 19:50:36 1.34
+++ loncom/interface/slotrequest.pm 2006/02/03 23:42:54 1.43
@@ -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.34 2005/11/21 19:50:36 albertel Exp $
+# $Id: slotrequest.pm,v 1.43 2006/02/03 23:42:54 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -47,8 +47,7 @@ sub fail {
$r->print('
'.&mt('Failed.').'
');
}
- $r->print(''.
- &mt('Return to last resource').'
');
+ &return_link($r);
&end_page($r);
}
@@ -89,7 +88,9 @@ sub get_reservation_ids {
my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,
"^$slot_name\0");
-
+ if (&network_error(%consumed)) {
+ return 'error: Unable to determine current status';
+ }
my ($tmp)=%consumed;
if ($tmp=~/^error: 2 / ) {
return 0;
@@ -111,7 +112,7 @@ sub space_available {
}
sub check_for_reservation {
- my ($symb)=@_;
+ my ($symb,$mode)=@_;
my $student = &Apache::lonnet::EXT("resource.0.availablestudent", $symb,
$env{'user.domain'}, $env{'user.name'});
@@ -124,7 +125,19 @@ sub check_for_reservation {
my ($cnum,$cdom)=&get_course();
my %slots=&Apache::lonnet::get('slots', [@slots], $cdom, $cnum);
- foreach my $slot_name (@slots) {
+ if (&network_error($student) || &network_error($course) ||
+ &network_error(%slots)) {
+ return 'error: Unable to determine current status';
+ }
+ my @got;
+ foreach my $slot_name (sort {
+ if (ref($slots{$a}) && ref($slots{$b})) {
+ return $slots{$a}{'starttime'} <=> $slots{$b}{'starttime'}
+ }
+ if (ref($slots{$a})) { return -1;}
+ if (ref($slots{$b})) { return 1;}
+ return 0;
+ } @slots) {
next if (!defined($slots{$slot_name}) ||
!ref($slots{$slot_name}));
&Apache::lonxml::debug(time." $slot_name ".
@@ -133,29 +146,51 @@ sub check_for_reservation {
if ($slots{$slot_name}->{'endtime'} > time &&
$slots{$slot_name}->{'startreserve'} < time) {
# between start of reservation times and end of slot
- return($slot_name, $slots{$slot_name});
+ if ($mode eq 'allslots') {
+ push(@got,$slot_name);
+ } else {
+ return($slot_name, $slots{$slot_name});
+ }
}
}
+ if ($mode eq 'allslots' && @got) {
+ return @got;
+ }
return (undef,undef);
}
sub check_for_conflict {
- my ($symb,$new_slot_name)=@_;
+ my ($symb,$new_slot_name,$new_slot,$slots)=@_;
+
+ if (!defined($new_slot->{'uniqueperiod'})) { return undef; }
+
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 $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);
+ if (!ref($slots)) {
+ my %slots=&Apache::lonnet::get('slots', [@slots], $cdom, $cnum);
+ $slots = \%slots;
+ }
+
+ if (&network_error($student) || &network_error($course) ||
+ &network_error(%$slots)) {
+ return 'error: Unable to determine current status';
+ }
+
+ my ($new_uniq_start,$new_uniq_end) = @{$new_slot->{'uniqueperiod'}};
foreach my $slot_name (@slots) {
- next if (!defined($slots{$slot_name}) ||
- !ref($slots{$slot_name}));
+ 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