--- loncom/interface/slotrequest.pm 2006/10/31 15:58:09 1.71 +++ loncom/interface/slotrequest.pm 2007/04/11 16:07:51 1.78 @@ -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.71 2006/10/31 15:58:09 albertel Exp $ +# $Id: slotrequest.pm,v 1.78 2007/04/11 16:07:51 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -334,7 +334,7 @@ sub remove_registration { my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum, "^$slot_name\0"); if (&Apache::lonnet::error(%consumed)) { - $r->print("

".&mt('A network error has occured.').'

'); + $r->print("

".&mt('A network error has occured.').'

'); return; } if (!%consumed) { @@ -527,7 +527,7 @@ sub delete_slot { if ($ret eq 'ok') { $r->print("

Slot $slot_name marked as deleted.

"); } else { - $r->print("

An error ($ret) occurse when attempting to delete Slot $slot_name.

"); + $r->print("

An error ($ret) occurse when attempting to delete Slot $slot_name.

"); } } else { if (%consumed) { @@ -548,17 +548,17 @@ 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); if ($slot_name =~ /^error: (.*)/) { - $r->print("

An error occured while attempting to make a reservation. ($1)

"); + $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,36 +586,44 @@ 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)

"); + $r->print("

An error occured while attempting to make a reservation. ($1)

"); } elsif ($reserved > -1) { $r->print("

Success: $description

"); + $retvalue = 1; } elsif ($reserved < 0) { $r->print("

Already reserved: $description

"); } - &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.

+

Failed to reserve a spot for $description.

- + + $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 { @@ -638,8 +646,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 +899,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('
'); $r->print('
'); + $r->print(&Apache::loncommon::help_open_topic('Slot CommaDelimited')); $r->print('
'); + $r->print(&Apache::loncommon::help_open_topic('Slot AddInterface')); $r->print('
'); } @@ -927,7 +939,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 +948,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 +1060,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 +1089,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 +1105,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 +1235,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 +1309,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.
@@ -1514,7 +1547,7 @@ sub csv_upload_assign { } $r->print("

Created $countdone slots\n

"); foreach my $error (@errors) { - $r->print("

$error\n

"); + $r->print("

$error

\n"); } &show_table($r,$mgr); return ''; @@ -1598,8 +1631,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("

Unknown command: ".$env{'form.command'}."

");