[LON-CAPA-cvs] cvs: loncom /interface slotrequest.pm
raeburn
raeburn at source.lon-capa.org
Sat May 9 23:58:12 EDT 2015
raeburn Sun May 10 03:58:12 2015 EDT
Modified files:
/loncom/interface slotrequest.pm
Log:
"Reservations" screen for students.
- Efficiency improvements
- Information about all slots and consumed_uniqueperiods rerieved once,
even if there are multiple resources which employ slots to control
access.
- User interface improvements in the case where there are many possible
slots to choose from. If more than a single possible slot, display
menu to show current reservation, or search for reservations in a
date/time range, or show all possible.
-------------- next part --------------
Index: loncom/interface/slotrequest.pm
diff -u loncom/interface/slotrequest.pm:1.121 loncom/interface/slotrequest.pm:1.122
--- loncom/interface/slotrequest.pm:1.121 Fri Sep 12 15:22:58 2014
+++ loncom/interface/slotrequest.pm Sun May 10 03:58:12 2015
@@ -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.121 2014/09/12 15:22:58 raeburn Exp $
+# $Id: slotrequest.pm,v 1.122 2015/05/10 03:58:12 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -56,12 +56,22 @@
}
sub start_page {
- my ($r,$title,$brcrum)=@_;
+ my ($r,$title,$brcrum,$js)=@_;
my $args;
if (ref($brcrum) eq 'ARRAY') {
$args = {bread_crumbs => $brcrum};
}
- $r->print(&Apache::loncommon::start_page($title,undef,$args));
+ if (($env{'form.requestattempt'}) || ($env{'form.command'} eq 'manageresv')) {
+ my %loaditems = (
+ onload => 'javascript:uncheckSlotRadio();',
+ );
+ if (ref($args) eq 'HASH') {
+ $args->{'add_entries'} = \%loaditems;
+ } else {
+ $args = { 'add_entries' => \%loaditems };
+ }
+ }
+ $r->print(&Apache::loncommon::start_page($title,$js,$args));
}
sub end_page {
@@ -69,6 +79,179 @@
$r->print(&Apache::loncommon::end_page());
}
+sub reservation_js {
+ my ($slots,$consumed_uniqueperiods,$available,$got_slots,$symb) = @_;
+ return unless ((ref($slots) eq 'HASH') && (ref($available) eq 'ARRAY'));
+ my $toskip;
+ if ($symb eq '') {
+ $toskip = { symb => 1, };
+ }
+ my ($i,$j) = (0,0);
+ my $js;
+ foreach my $slot (sort
+ { return $slots->{$a}->{'starttime'} <=> $slots->{$b}->{'starttime'} }
+ (keys(%{$slots}))) {
+
+ next if (!&allowed_slot($slot,$slots->{$slot},$symb,$slots,
+ $consumed_uniqueperiods,$toskip));
+ $js .= " slotstart[$i]='$slots->{$slot}->{'starttime'}';\n".
+ " slotend[$i]='$slots->{$slot}->{'endtime'}';\n".
+ " slotname[$i]='$slot';\n";
+ if (($symb) && (ref($got_slots) eq 'ARRAY')) {
+ if (grep(/^\Q$slot\E$/,@{$got_slots})) {
+ $js .= " currslot[$j]='$slot';\n";
+ $j++;
+ }
+ }
+ $i++;
+ push(@{$available},$slot);
+ }
+ if ($j) {
+ $js = " var currslot = new Array($j);\n\n$js";
+ }
+ my %alerts = &Apache::lonlocal::texthash (
+ none => 'No reservable time slots found',
+ invalid => 'Invalid date format',
+ );
+ return <<"ENDSCRIPT";
+<script type="text/javascript">
+// <![CDATA[
+function updateSlotDisplay(form,num,slotpickradio) {
+ var slotstart = new Array($i);
+ var slotend = new Array($i);
+ var slotname = new Array($i);
+$js
+
+ if (slotpickradio == 'all') {
+ for (var i=0; i<$i; i++) {
+ if (document.getElementById('LC_slotrow_'+num+'_'+slotname[i])) {
+ document.getElementById('LC_slotrow_'+num+'_'+slotname[i]).style.display = '';
+ }
+ if (document.getElementById('LC_slotsearch_'+num)) {
+ document.getElementById('LC_slotsearch_'+num).style.display = 'block';
+ }
+ }
+ } else {
+ if (slotpickradio == 'show') {
+ for (var i=0; i<$i; i++) {
+ if (document.getElementById('LC_slotrow_'+num+'_'+slotname[i])) {
+ document.getElementById('LC_slotrow_'+num+'_'+slotname[i]).style.display = 'none';
+ }
+ }
+ for (var j=0; j<$j; j++) {
+ if (document.getElementById('LC_slotrow_'+num+'_'+currslot[j])) {
+ document.getElementById('LC_slotrow_'+num+'_'+currslot[j]).style.display = '';
+ }
+ }
+ if (document.getElementById('LC_slotsearch_'+num)) {
+ document.getElementById('LC_slotsearch_'+num).style.display = 'block';
+ }
+ } else {
+ var numberRegExp = /^[0-9]+\$/;
+ var startm = form.start_month.options[form.start_month.selectedIndex].value;
+ var startd = form.start_day.value;
+ startd=startd.trim();
+ var starty = form.start_year.value;
+ starty=starty.trim();
+ var endm = form.end_month.options[form.end_month.selectedIndex].value;
+ var endd = form.end_day.value;
+ endd=endd.trim();
+ var endy = form.end_year.value;
+ endy=endy.trim();
+ if (numberRegExp.test(endd) && numberRegExp.test(endy) && numberRegExp.test(startd) && numberRegExp.test(starty)) {
+ var startdate = startm+"/"+startd+"/"+starty;
+ var starttime = new Date(startdate).getTime();
+ starttime = starttime/1000;
+ var enddate = endm+"/"+endd+"/"+endy;
+ var endtime = new Date(enddate).getTime();
+ endtime = endtime/1000;
+ var shown = 0;
+ for (var i=0; i<$i; i++) {
+ if ((slotstart[i] >= starttime) && (slotend[i] <= endtime)) {
+ if (document.getElementById('LC_slotrow_'+num+'_'+slotname[i])) {
+ document.getElementById('LC_slotrow_'+num+'_'+slotname[i]).style.display = '';
+ shown ++;
+ }
+ } else {
+ if (document.getElementById('LC_slotrow_'+num+'_'+slotname[i])) {
+ document.getElementById('LC_slotrow_'+num+'_'+slotname[i]).style.display = 'none';
+ }
+ }
+ }
+ if (document.getElementById('LC_slotsearch_'+num)) {
+ if (shown) {
+ document.getElementById('LC_slotsearch_'+num).style.display = 'block';
+ } else {
+ document.getElementById('LC_slotsearch_'+num).style.display = 'none';
+ }
+ }
+ if (shown == 0) {
+ alert('$alerts{"none"}');
+ }
+ } else {
+ alert('$alerts{"invalid"}');
+ }
+ }
+ }
+ return;
+}
+
+function toggleSlotDisplay(form,num) {
+ if (form.slotpick.length) {
+ for (var i=0; i<form.slotpick.length; i++) {
+ if (form.slotpick[i].checked) {
+ var val = form.slotpick[i].value;
+ if (document.getElementById('LC_slotfilter_'+num)) {
+ document.getElementById('LC_slotsearch_'+num).style.display = 'none';
+ if (val == 'filter') {
+ document.getElementById('LC_slotfilter_'+num).style.display = 'block';
+ } else {
+ document.getElementById('LC_slotfilter_'+num).style.display = 'none';
+ if (val == 'all') {
+ updateSlotDisplay(form,num,val);
+ } else {
+ updateSlotDisplay(form,num,val);
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ return false;
+}
+
+if (!document.getElementsByClassName) {
+ function getElementsByClassName(node, classname) {
+ var a = [];
+ var re = new RegExp('(^| )'+classname+'( |$)');
+ var els = node.getElementsByTagName("*");
+ for(var i=0,j=els.length; i<j; i++)
+ if(re.test(els[i].className))a.push(els[i]);
+ return a;
+ }
+}
+
+function uncheckSlotRadio() {
+ var slotpicks;
+ if (document.getElementsByClassName) {
+ slotpicks = document.getElementsByClassName('LC_slotpick_radio');
+ } else {
+ sloctpicks = getElementsByClassName(document.body,'LC_slotpick_radio');
+ }
+ if (slotpicks.length) {
+ for (var i=0; i<slotpicks.length; i++) {
+ slotpicks[i].checked = false;
+ }
+ }
+}
+// ]]>
+</script>
+ENDSCRIPT
+
+}
+
+
=pod
slot_reservations db
@@ -121,7 +304,6 @@
my ($symb,$mode)=@_;
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 @slots = (split(/:/,$student), split(/:/, $course));
@@ -218,16 +400,19 @@
if (!defined($new_slot->{'uniqueperiod'})) { return undef; }
if (!ref($consumed_uniqueperiods)) {
- $consumed_uniqueperiods = &get_consumed_uniqueperiods($slots);
- if (ref($consumed_uniqueperiods) eq 'HASH') {
- if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
- return 'error: Unable to determine current status';
- }
+ if ($consumed_uniqueperiods =~ /^error: /) {
+ return $consumed_uniqueperiods;
} else {
- return 'error: Unable to determine current status';
+ $consumed_uniqueperiods = &get_consumed_uniqueperiods($slots);
+ if (ref($consumed_uniqueperiods) eq 'HASH') {
+ if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
+ return 'error: Unable to determine current status';
+ }
+ } else {
+ return 'error: Unable to determine current status';
+ }
}
- }
-
+ }
my ($new_uniq_start,$new_uniq_end) = @{$new_slot->{'uniqueperiod'}};
foreach my $slot_name (keys(%$consumed_uniqueperiods)) {
my ($start,$end)=@{$consumed_uniqueperiods->{$slot_name}};
@@ -735,7 +920,7 @@
}
sub allowed_slot {
- my ($slot_name,$slot,$symb,$slots,$consumed_uniqueperiods)=@_;
+ my ($slot_name,$slot,$symb,$slots,$consumed_uniqueperiods,$toskip)=@_;
#already started
if ($slot->{'starttime'} < time) {
@@ -811,7 +996,9 @@
# not allowed for this resource
if (defined($slot->{'symb'})
&& $slot->{'symb'} ne $symb) {
- return 0;
+ unless ((ref($toskip) eq 'HASH') && ($toskip->{'symb'})) {
+ return 0;
+ }
}
my $conflict = &check_for_conflict($symb,$slot_name,$slot,$slots,
@@ -839,44 +1026,13 @@
}
sub show_choices {
- my ($r,$symb,$formname)=@_;
-
- my ($cnum,$cdom)=&get_course();
- 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)) {
- $r->print('<span class="LC_error">'.
- &mt('An error occurred determining slot availability.').
- '</span>');
- return;
- }
- } elsif ($consumed_uniqueperiods =~ /^error: /) {
- $r->print('<span class="LC_error">'.
- &mt('An error occurred determining slot availability.').
- '</span>');
- return;
- }
- my (@available,$output);
+ my ($r,$symb,$formname,$num,$slots,$consumed_uniqueperiods,$available,$got_slots)=@_;
+ my $output;
&Apache::lonxml::debug("Checking Slots");
- my @got_slots=&check_for_reservation($symb,'allslots');
- if ($got_slots[0] =~ /^error: /) {
- $r->print('<span class="LC_error">'.
- &mt('An error occurred determining slot availability.').
- '</span>');
+ if (!ref($available) eq 'ARRAY') {
return;
}
- foreach my $slot (sort
- { return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} }
- (keys(%slots))) {
-
- &Apache::lonxml::debug("Checking Slot $slot");
- next if (!&allowed_slot($slot,$slots{$slot},$symb,\%slots,
- $consumed_uniqueperiods));
-
- push(@available,$slot);
- }
- if (!@available) {
+ if (!@{$available}) {
$output = '<span class="LC_info">'.&mt('No available times.').'</span>';
if ($env{'form.command'} ne 'manageresv') {
$output .= ' <a href="/adm/flip?postdata=return:">'.
@@ -885,30 +1041,101 @@
$r->print($output);
return;
}
+ if (@{$available} > 1) {
+ my $numavailable = scalar(@{$available});
+ my $numreserved = 0;
+ my $js;
+ my $j = 0;
+ foreach my $got (@{$got_slots}) {
+ unless (($got eq '') || (!defined($got))) {
+ $numreserved ++;
+ if ($env{'form.command'} eq 'manageresv') {
+ $js .= " currslot[$j]='$got';\n";
+ $j++;
+ }
+ }
+ }
+ my $showfilter = 'none';
+ $output .= '<fieldset><legend>'.&mt('Actions').'</legend>'."\n".
+ '<form method="post" name="reservationdisplay_'.$num.
+ '" action="" onsubmit="toggleSlotDisplay(this.form,'."'$num'".');">';
+ my @options = ('all','filter');
+ if ($numreserved) {
+ unshift(@options,'show');
+ }
+ my %resmenu = &Apache::lonlocal::texthash (
+ show => 'Show current reservation',
+ all => 'Show all',
+ filter => 'Search by date',
+ );
+ foreach my $option (@options) {
+ my $onclick = "toggleSlotDisplay(this.form,'$num');";
+ if (($option eq 'show') && ($env{'form.command'} eq 'manageresv')) {
+ $onclick .= "currSlotDisplay$num(this.form,'$num');";
+ }
+ $output .= '<span class="LC_nobreak"><label>'.
+ '<input type="radio" class="LC_slotpick_radio" name="slotpick" value="'.
+ $option.'" onclick="'.$onclick.'" />'.
+ $resmenu{$option}.
+ '</label></span>'.(' ' x3)."\n";
+ }
+ $output .= '</form>';
+ my $chooserform = 'reservationchooser_'.$num;
+ my $starttime = $slots->{$available->[0]}->{'starttime'};
+ my $endtime = $slots->{$available->[-1]}->{'starttime'};
+ if ($env{'form.command'} eq 'manageresv') {
+ $output .= <<"ENDSCRIPT";
+
+<script type="text/javascript">
+// <![CDATA[
+function currSlotDisplay$num() {
+ var currslot = new Array($numreserved);
+$js
+ for (var j=0; j<$numreserved; j++) {
+ if (document.getElementById('LC_slotrow_$num\_'+currslot[j])) {
+ document.getElementById('LC_slotrow_$num\_'+currslot[j]).style.display = '';
+ }
+ }
+}
+// ]]>
+</script>
+
+ENDSCRIPT
+ }
+ $output .=
+ '<div id="LC_slotfilter_'.$num.'" style="display:'.$showfilter.'">'.
+ '<form method="post" name="'.$chooserform.'" action="">'.
+ '<table><tr><td>'.&mt('Open after').'</td><td>'.
+ &Apache::lonhtmlcommon::date_setter($chooserform,'start',$starttime,'','','','','','','',1,1).
+ '</td></tr><tr><td>'.&mt('Closed before').'</td><td>'.
+ &Apache::lonhtmlcommon::date_setter($chooserform,'end',$endtime,'','','','','','','',1,1).
+ '</td></tr></table><br />'.
+ '<input type="button" name="slotfilter" value="Search for reservable slots" onclick="updateSlotDisplay(this.form,'."'$num'".');" />'.
+ '</form></div><div id="LC_slotsearch_'.$num.'" style="display:none"><hr />';
+ }
if ($env{'form.command'} eq 'manageresv') {
- $output = '<table border="0">';
+ $output .= '<table border="0">';
} else {
- $output = &Apache::loncommon::start_data_table();
+ $output .= &Apache::loncommon::start_data_table();
}
- foreach my $slot (@available) {
- my $description=&get_description($slot,$slots{$slot});
+ foreach my $slot (@{$available}) {
+ my $description=&get_description($slot,$slots->{$slot});
my $form;
- if ((grep(/^\Q$slot\E$/, at got_slots)) ||
- &space_available($slot,$slots{$slot},$symb)) {
+ if ((grep(/^\Q$slot\E$/,@{$got_slots})) ||
+ &space_available($slot,$slots->{$slot},$symb)) {
my $text=&mt('Select');
my $command='get';
- if (grep(/^\Q$slot\E$/, at got_slots)) {
+ if (grep(/^\Q$slot\E$/,@{$got_slots})) {
$text=&mt('Drop Reservation');
$command='release';
} else {
- my $conflict = &check_for_conflict($symb,$slot,$slots{$slot},
- \%slots,
- $consumed_uniqueperiods);
+ my $conflict = &check_for_conflict($symb,$slot,$slots->{$slot},
+ $slots,$consumed_uniqueperiods);
if ($conflict) {
if ($conflict =~ /^error: /) {
$form = '<span class="LC_error">'.
- &mt('Slot: [_1] has unknown status.',$description).
- '</span>';
+ &mt('Slot: [_1] has unknown status.',$description).
+ '</span>';
} else {
$text=&mt('Change Reservation');
$command='get';
@@ -917,15 +1144,16 @@
}
my $escsymb=&escape($symb);
if (!$form) {
+ my $name;
if ($formname) {
- $formname = 'name="'.$formname.'" ';
+ $name = 'name="'.$formname.'"';
}
my $context = 'user';
if ($env{'form.command'} eq 'manageresv') {
$context = 'usermanage';
}
$form=<<STUFF;
- <form method="post" action="/adm/slotrequest" $formname>
+ <form method="post" action="/adm/slotrequest" $name>
<input type="submit" name="Select" value="$text" />
<input type="hidden" name="symb" value="$escsymb" />
<input type="hidden" name="slotname" value="$slot" />
@@ -938,9 +1166,9 @@
$form = &mt('Unavailable');
}
if ($env{'form.command'} eq 'manageresv') {
- $output .= '<tr>';
+ $output .= '<tr id="LC_slotrow_'.$num.'_'.$slot.'" >';
} else {
- $output .= &Apache::loncommon::start_data_table_row();
+ $output .= &Apache::loncommon::start_data_table_row('','LC_slotrow_'.$num.'_'.$slot);
}
$output .= "
<td>$form</td>
@@ -954,7 +1182,10 @@
if ($env{'form.command'} eq 'manageresv') {
$output .= '</table>';
} else {
- $output .= &Apache::loncommon::end_data_table();
+ $output .= &Apache::loncommon::end_data_table();
+ }
+ if (@{$available} > 1) {
+ $output .= '</div></fieldset>';
}
$r->print($output);
return;
@@ -1478,7 +1709,7 @@
}
sub manage_reservations {
- my ($r,$crstype) = @_;
+ my ($r,$crstype,$slots,$consumed_uniqueperiods,$allavailable) = @_;
my $navmap = Apache::lonnavmaps::navmap->new();
$r->print('<p>'
.&mt('Instructors may use a reservation system to place restrictions on when and where assignments can be worked on.')
@@ -1497,6 +1728,19 @@
&Apache::lonnet::logthis('Manage Reservations - could not create navmap object in '.lc($crstype).':'.$env{'request.course.id'});
return;
}
+ if (ref($consumed_uniqueperiods) eq 'HASH') {
+ if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
+ $r->print('<span class="LC_error">'.
+ &mt('An error occurred determining slot availability.').
+ '</span>');
+ return;
+ }
+ } elsif ($consumed_uniqueperiods =~ /^error: /) {
+ $r->print('<span class="LC_error">'.
+ &mt('An error occurred determining slot availability.').
+ '</span>');
+ return;
+ }
my (%parent,%shownparent,%container,%container_title,%contents);
my ($depth,$count,$reservable,$lastcontainer,$rownum) = (0,0,0,0,0);
my @backgrounds = ("LC_odd_row","LC_even_row");
@@ -1635,15 +1879,38 @@
}
}
if ($hasaction) {
- $result .= '<td valgn="middle">'.$msg.'</td>'.
- '<td valign="middle">'.(' ' x6);
+ $result .= '<td valign="top">'.$msg.'</td>'.
+ '<td valign="top">';
} else {
$result .= '<td colspan="2" valign="middle">'.$msg.'</td>';
}
$r->print($result);
if ($hasaction) {
- my $formname = 'manageres_'.$reservable;
- &show_choices($r,$symb,$formname);
+ my @got_slots=&check_for_reservation($symb,'allslots');
+ if ($got_slots[0] =~ /^error: /) {
+ $r->print('<span class="LC_error">'.
+ &mt('An error occurred determining slot availability.').
+ '</span>');
+ } else {
+ my $formname = 'manageres_'.$reservable;
+ if (ref($allavailable) eq 'ARRAY') {
+ my @available;
+ if (ref($slots) eq 'HASH') {
+ foreach my $slot (@{$allavailable}) {
+ # not allowed for this resource
+ if (ref($slots->{$slot}) eq 'HASH') {
+ if ((defined($slots->{$slot}->{'symb'})) &&
+ ($slots->{$slot}->{'symb'} ne $symb)) {
+ next;
+ }
+ }
+ push(@available,$slot);
+ }
+ }
+ &show_choices($r,$symb,$formname,$reservable,$slots,$consumed_uniqueperiods,
+ \@available,\@got_slots);
+ }
+ }
$r->print('</td>');
}
$r->print('</tr>');
@@ -1803,6 +2070,7 @@
$r->print('</tr></table>');
$r->print(<<"ENDSCRIPT");
<script type="text/javascript">
+// <![CDATA[
function chgPage(caller) {
if (caller == 'previous') {
document.$formname.page.value --;
@@ -1813,6 +2081,7 @@
document.$formname.submit();
return;
}
+// ]]>
</script>
ENDSCRIPT
}
@@ -2576,6 +2845,7 @@
my $vgr=&Apache::lonnet::allowed('vgr',$env{'request.course.id'});
my $mgr=&Apache::lonnet::allowed('mgr',$env{'request.course.id'});
+ my (%slots,$consumed_uniqueperiods);
if ($env{'form.command'} eq 'showslots') {
if (($vgr ne 'F') && ($mgr ne 'F')) {
$env{'form.command'} = 'manageresv';
@@ -2596,9 +2866,14 @@
if (ref($brcrum) eq 'ARRAY') {
push(@{$brcrum},{href=>"/adm/slotrequest?command=showresv",text=>$title});
}
- } elsif ($env{'form.command'} eq 'manageresv') {
- $title = 'Manage Reservations';
- $brcrum =[{href=>"/adm/slotrequest?command=manageresv",text=>$title}];
+ } elsif (($env{'form.requestattempt'}) || ($env{'form.command'} eq 'manageresv')) {
+ if ($env{'form.command'} eq 'manageresv') {
+ $title = 'Manage Reservations';
+ $brcrum =[{href=>"/adm/slotrequest?command=manageresv",text=>$title}];
+ }
+ my ($cnum,$cdom)=&get_course();
+ %slots = &Apache::lonnet::get_course_slots($cnum,$cdom);
+ $consumed_uniqueperiods = &get_consumed_uniqueperiods(\%slots);
} elsif ($vgr eq 'F') {
if ($env{'form.command'} =~ /^(slotlog|showslots|uploadstart|csvuploadmap|csvuploadassign|delete|release|remove_registration)$/) {
$brcrum =[{href=>"/adm/slotrequest?command=showslots",
@@ -2622,11 +2897,23 @@
} else {
$brcrum =[];
}
- &start_page($r,$title,$brcrum);
+ my ($symb,$js,$available,$allavailable,$got_slots);
+ $available = [];
+ if ($env{'form.requestattempt'}) {
+ $symb=&unescape($env{'form.symb'});
+ @{$got_slots}=&check_for_reservation($symb,'allslots');
+ }
+ if (($env{'form.requestattempt'}) || ($env{'form.command'} eq 'manageresv')) {
+ $js = &reservation_js(\%slots,$consumed_uniqueperiods,$available,$got_slots,$symb);
+ }
+ &start_page($r,$title,$brcrum,$js);
if ($env{'form.command'} eq 'manageresv') {
+ $allavailable = $available;
+ undef($available);
+ undef($got_slots);
my $crstype = &Apache::loncommon::course_type();
- &manage_reservations($r,$crstype);
+ &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') {
@@ -2684,7 +2971,7 @@
}
if ($env{'form.requestattempt'}) {
$r->print('<div class="LC_left_float">');
- &show_choices($r,$symb);
+ &show_choices($r,$symb,undef,undef,\%slots,$consumed_uniqueperiods,$available,$got_slots);
$r->print('</div><div style="padding:0;clear:both;margin:0;border:0"></div>');
} elsif ($env{'form.command'} eq 'release') {
&release_slot($r,$symb);
More information about the LON-CAPA-cvs
mailing list