--- loncom/interface/slotrequest.pm 2011/01/03 18:04:56 1.110
+++ loncom/interface/slotrequest.pm 2012/08/01 20:26:43 1.114
@@ -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.110 2011/01/03 18:04:56 raeburn Exp $
+# $Id: slotrequest.pm,v 1.114 2012/08/01 20:26:43 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -137,16 +137,20 @@ sub check_for_reservation {
return 'error: Unable to determine current status';
}
my @got;
- my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots);
+ my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots,'starttime');
foreach my $slot_name (@sorted_slots) {
next if (!defined($slots{$slot_name}) ||
!ref($slots{$slot_name}));
&Apache::lonxml::debug(time." $slot_name ".
$slots{$slot_name}->{'starttime'}." -- ".
- $slots{$slot_name}->{'startreserve'});
- if ($slots{$slot_name}->{'endtime'} > time &&
- $slots{$slot_name}->{'startreserve'} < time) {
- # between start of reservation times and end of slot
+ $slots{$slot_name}->{'startreserve'}." -- ".
+ $slots{$slot_name}->{'endreserve'});
+ if (($slots{$slot_name}->{'endtime'} > time) &&
+ ($slots{$slot_name}->{'startreserve'} < time) &&
+ ((!$slots{$slot_name}->{'endreserve'}) ||
+ ($slots{$slot_name}->{'endreserve'} > time))) {
+ # between start of reservation time and end of reservation time
+ # and before end of slot
if ($mode eq 'allslots') {
push(@got,$slot_name);
} else {
@@ -756,6 +760,11 @@ sub allowed_slot {
if ($slot->{'startreserve'} > time) {
return 0;
}
+ # reserve time ended
+ if (($slot->{'endreserve'}) &&
+ ($slot->{'endreserve'} < time)) {
+ return 0;
+ }
&Apache::lonxml::debug("$slot_name reserve good");
my $userallowed=0;
@@ -833,7 +842,7 @@ sub show_choices {
my ($r,$symb,$formname)=@_;
my ($cnum,$cdom)=&get_course();
- my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum);
+ my %slots = &Apache::lonnet::get_course_slots($cnum,$cdom);
my $consumed_uniqueperiods = &get_consumed_uniqueperiods(\%slots);
if (ref($consumed_uniqueperiods) eq 'HASH') {
if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
@@ -868,11 +877,12 @@ sub show_choices {
push(@available,$slot);
}
if (!@available) {
- $output = &mt('No available times.');
+ $output = '
';
$r->print($output);
return;
}
@@ -1096,6 +1106,7 @@ sub show_table {
'starttime' => 'Start time',
'endtime' => 'End Time',
'startreserve' => 'Time students can start reserving',
+ 'endreserve' => 'Time students can no longer reserve',
'reservationmsg' => 'Message triggered by reservation',
'secret' => 'Secret Word',
'space' => '# of students/max',
@@ -1108,11 +1119,12 @@ sub show_table {
'proctor' => 'List of proctors');
if ($crstype eq 'Community') {
$show_fields{'startreserve'} = &mt('Time members can start reserving');
+ $show_fields{'endreserve'} = &mt('Time members can no longer reserve');
$show_fields{'scheduled'} = &mt('Scheduled Members');
}
my @show_order=('name','description','type','starttime','endtime',
- 'startreserve','reservationmsg','secret','space','ip','symb',
- 'allowedsections','allowedusers','uniqueperiod',
+ 'startreserve','endreserve','reservationmsg','secret','space',
+ 'ip','symb','allowedsections','allowedusers','uniqueperiod',
'scheduled','proctor');
my @show =
(exists($env{'form.show'})) ? &Apache::loncommon::get_env_multiple('form.show')
@@ -1223,7 +1235,7 @@ sub show_table {
my %name_cache;
my $slotsort = sub {
- if ($env{'form.order'}=~/^(type|description|endtime|startreserve|ip|symb|allowedsections|allowedusers|reservationmsg)$/) {
+ if ($env{'form.order'}=~/^(type|description|endtime|startreserve|endreserve|ip|symb|allowedsections|allowedusers|reservationmsg)$/) {
if (lc($slots{$a}->{$env{'form.order'}})
ne lc($slots{$b}->{$env{'form.order'}})) {
return (lc($slots{$a}->{$env{'form.order'}})
@@ -1305,6 +1317,8 @@ sub show_table {
&Apache::lonlocal::locallocaltime($slots{$slot}->{'endtime'}):'');
my $start_reserve=($slots{$slot}->{'startreserve'}?
&Apache::lonlocal::locallocaltime($slots{$slot}->{'startreserve'}):'');
+ my $end_reserve=($slots{$slot}->{'endreserve'}?
+ &Apache::lonlocal::locallocaltime($slots{$slot}->{'endreserve'}):'');
my $unique;
if (ref($slots{$slot}{'uniqueperiod'})) {
@@ -1412,6 +1426,9 @@ LOGLINK
if (exists($show{'startreserve'})) {
$colspan++;$r->print("$start_reserve | \n");
}
+ if (exists($show{'endreserve'})) {
+ $colspan++;$r->print("$end_reserve | \n");
+ }
if (exists($show{'reservationmsg'})) {
$colspan++;$r->print("$reservemsg | \n");
}
@@ -1550,6 +1567,8 @@ sub manage_reservations {
} elsif ($slot_status == $resource->RESERVABLE) {
$msg=&mt('Reservation needed');
$get_choices = 1;
+ } elsif ($slot_status == $resource->RESERVABLE_LATER) {
+ $msg=&mt('Reservation needed: will be reservable later.');
} elsif ($slot_status == $resource->NOTRESERVABLE) {
$msg=&mt('Reservation needed: none available.');
} elsif ($slot_status == $resource->UNKNOWN) {
@@ -2347,6 +2366,7 @@ sub csvupload_fields {
['starttime','Start Time of slot'],
['endtime','End Time of slot'],
['startreserve','Reservation Start Time'],
+ ['endreserve','Reservation End Time'],
['reservationmsg','Message when reservation changed'],
['ip','IP or DNS restriction'],
['proctor','List of proctor ids'],
@@ -2429,6 +2449,16 @@ sub csv_upload_assign {
next;
}
+ if ($entries{$fields{'endreserve'}}) {
+ $slot{'endreserve'}=
+ &UnixDate($entries{$fields{'endreserve'}},"%s");
+ }
+ if (defined($slot{'endreserve'})
+ && $slot{'endreserve'} > $slot{'starttime'}) {
+ push(@errors,"$name not created -- Slot's reservation end time is after the slot's start time.");
+ next;
+ }
+
if ($slot{'type'} eq 'schedulable_student') {
if ($entries{$fields{'reservationmsg'}}) {
if (($entries{$fields{'reservationmsg'}} eq 'only_student') ||
@@ -2467,6 +2497,9 @@ sub csv_upload_assign {
$r->rflush();
$countdone++;
}
+ if ($countdone) {
+ &Apache::lonnet::devalidate_slots_cache($cname,$cdom);
+ }
$r->print(''.&mt('Created [quant,_1,slot]',$countdone)."\n".'
');
foreach my $error (@errors) {
$r->print(''.$error.'
'."\n");
@@ -2560,8 +2593,9 @@ sub handler {
if (ref($brcrum) eq 'ARRAY') {
push(@{$brcrum},{href=>"/adm/slotrequest?command=$env{'form.command'}",text=>$crumb_titles{$env{'form.command'}}});
}
-
}
+ } else {
+ $brcrum =[];
}
&start_page($r,$title,$brcrum);