--- loncom/interface/slotrequest.pm 2006/10/31 15:58:41 1.68.2.2
+++ loncom/interface/slotrequest.pm 2007/04/10 23:30:41 1.76
@@ -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.68.2.2 2006/10/31 15:58:41 albertel Exp $
+# $Id: slotrequest.pm,v 1.76 2007/04/10 23:30:41 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);
@@ -548,7 +548,7 @@ 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);
@@ -556,9 +556,9 @@ sub get_slot {
if ($slot_name =~ /^error: (.*)/) {
$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'});
@@ -586,28 +586,35 @@ 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)
");
}
- &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.
@@ -615,7 +622,8 @@ STUFF
-
+
+ $extra_input
?
@@ -629,8 +637,8 @@ or
or
STUFF
- &return_link($r);
- return;
+ if (!$inhibit_return_link) { &return_link($r); }
+ return 0;
}
sub allowed_slot {
@@ -639,7 +647,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");
@@ -892,14 +900,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('
');
}
@@ -927,7 +940,7 @@ sub show_table {
'endtime' => 'End Time',
'startreserve' => 'Time students can start reserving',
'secret' => 'Secret Word',
- 'maxspace' => 'Maximum # of students',
+ 'space' => '# of students/max',
'ip' => 'IP or DNS restrictions',
'symb' => 'Resource slot is restricted to.',
'allowedsections' => 'Sections slot is restricted to.',
@@ -936,7 +949,7 @@ sub show_table {
'scheduled' => 'Scheduled Students',
'proctor' => 'List of proctors');
my @show_order=('name','description','type','starttime','endtime',
- 'startreserve','secret','maxspace','ip','symb',
+ 'startreserve','secret','space','ip','symb',
'allowedsections','allowedusers','uniqueperiod',
'scheduled','proctor');
my @show =
@@ -1048,12 +1061,16 @@ sub show_table {
my %name_cache;
my $slotsort = sub {
- if ($env{'form.order'}=~/^(type|description|endtime|startreserve|maxspace|ip|symb|allowedsections|allowedusers)$/) {
+ if ($env{'form.order'}=~/^(type|description|endtime|startreserve|ip|symb|allowedsections|allowedusers)$/) {
if (lc($slots{$a}->{$env{'form.order'}})
ne lc($slots{$b}->{$env{'form.order'}})) {
return (lc($slots{$a}->{$env{'form.order'}})
cmp lc($slots{$b}->{$env{'form.order'}}));
}
+ } elsif ($env{'form.order'} eq 'space') {
+ if ($slots{$a}{'maxspace'} ne $slots{$b}{'maxspace'}) {
+ return ($slots{$a}{'maxspace'} cmp $slots{$b}{'maxspace'});
+ }
} elsif ($env{'form.order'} eq 'name') {
if (lc($a) cmp lc($b)) {
return lc($a) cmp lc($b);
@@ -1073,6 +1090,14 @@ sub show_table {
}
return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'};
};
+
+ my %consumed;
+ if (exists($show{'scheduled'}) || exists($show{'space'}) ) {
+ %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum);
+ my ($tmp)=%consumed;
+ if ($tmp =~ /^error: /) { undef(%consumed); }
+ }
+
foreach my $slot (sort $slotsort (keys(%slots))) {
if (!&to_show($slot,$slots{$slot},$when,
$env{'form.deleted'},$name_filter)) { next; }
@@ -1081,12 +1106,12 @@ sub show_table {
#next;
}
my $description=&get_description($slot,$slots{$slot});
- my $ids;
- if (exists($show{'scheduled'})) {
- my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,
- "^$slot\0");
- my ($tmp)=%consumed;
- if ($tmp !~ /^error: /) {
+ my ($id_count,$ids);
+
+ if (exists($show{'scheduled'}) || exists($show{'space'}) ) {
+ my @this_slot = grep(/^$slot\0/,keys(%consumed));
+ $id_count = scalar(@this_slot);
+ if (exists($show{'scheduled'})) {
foreach my $entry (sort { $consumed{$a}{name} cmp
$consumed{$b}{name} }
(keys(%consumed))) {
@@ -1211,8 +1236,15 @@ DELETELINK
if (exists($show{'secret'})) {
$colspan++;$r->print("
$slots{$slot}{'secret'}
\n");
}
- if (exists($show{'maxspace'})) {
- $colspan++;$r->print("
$slots{$slot}{'maxspace'}
\n");
+ if (exists($show{'space'})) {
+ my $display = $id_count;
+ if ($slots{$slot}{'maxspace'}>0) {
+ $display.='/'.$slots{$slot}{'maxspace'};
+ if ($slots{$slot}{'maxspace'} <= $id_count) {
+ $display = ''.$display.' (full) ';
+ }
+ }
+ $colspan++;$r->print("
$display
\n");
}
if (exists($show{'ip'})) {
$colspan++;$r->print("
$slots{$slot}{'ip'}
\n");
@@ -1278,9 +1310,11 @@ sub csvuploadmap_header {
my $checked=(($env{'form.noFirstLine'})?' checked="checked"':'');
my $ignore=&mt('Ignore First Line');
+ my $help_field = &Apache::loncommon::help_open_topic('Slot SelectingField');
+
$r->print(<
-
Identify fields
+
Identify fields $help_field
Total number of records found in file: $distotal
Enter as many fields as you can. The system will inform you and bring you back
to this page if the data selected is insufficient to create the slots.
@@ -1598,8 +1632,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("