');
+ &return_link($r);
&end_page($r);
}
sub start_page {
- my ($r)=@_;
+ my ($r,$title)=@_;
my $html=&Apache::lonxml::xmlbegin();
- $r->print($html.''.
- &mt('Request another Worktime').'');
- $r->print(&Apache::loncommon::bodytag('Requesting another Worktime'));
- $r->print('
'.$env{'form.command'}.'
');
+ $r->print($html.''.&mt($title).'');
+ $r->print(&Apache::loncommon::bodytag($title));
}
sub end_page {
@@ -91,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;
@@ -113,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'});
@@ -126,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 ".
@@ -135,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