--- loncom/interface/slotrequest.pm 2007/04/10 23:31:18 1.77 +++ loncom/interface/slotrequest.pm 2009/02/02 18:20:15 1.88 @@ -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.77 2007/04/10 23:31:18 albertel Exp $ +# $Id: slotrequest.pm,v 1.88 2009/02/02 18:20:15 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -165,6 +165,9 @@ sub check_for_reservation { sub get_consumed_uniqueperiods { my ($slots) = @_; my $navmap=Apache::lonnavmaps::navmap->new; + if (!defined($navmap)) { + return 'error: Unable to determine current status'; + } my @problems = $navmap->retrieveResources(undef, sub { $_[0]->is_problem() },1,0); my %used_slots; @@ -214,9 +217,13 @@ sub check_for_conflict { if (!ref($consumed_uniqueperiods)) { $consumed_uniqueperiods = &get_consumed_uniqueperiods($slots); - if (&Apache::lonnet::error(%$consumed_uniqueperiods)) { - return 'error: Unable to determine current status'; - } + 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'}}; @@ -229,7 +236,6 @@ sub check_for_conflict { } } return undef; - } sub make_reservation { @@ -241,7 +247,8 @@ sub make_reservation { $env{'user.domain'},$env{'user.name'}); &Apache::lonxml::debug("value is $value<br />"); - my $use_slots = &Apache::lonnet::EXT("resource.0.useslots"); + my $use_slots = &Apache::lonnet::EXT("resource.0.useslots",$symb, + $env{'user.domain'},$env{'user.name'}); &Apache::lonxml::debug("use_slots is $use_slots<br />"); if (&Apache::lonnet::error($value) @@ -334,12 +341,12 @@ sub remove_registration { my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum, "^$slot_name\0"); if (&Apache::lonnet::error(%consumed)) { - $r->print("<p>".&mt('A network error has occured.').'</p>'); + $r->print("<p><span class=\"LC_error\">".&mt('A network error has occurred.').'</span></p>'); return; } if (!%consumed) { - $r->print("<p>".&mt('Slot <tt>[_1]</tt> has no reservations.', - $slot_name)."</p>"); + $r->print('<p>'.&mt('Slot [_1] has no reservations.', + '<tt>'.$slot_name.'</tt>').'</p>'); return; } @@ -412,7 +419,11 @@ sub release_all_slot { my ($result,$msg) = &release_reservation($slot_name,$uname,$udom, $consumed{$entry}{'symb'},$mgr); - $r->print("<p>$msg</p>"); + if (!$result) { + $r->print('<p><span class="LC_error">'.&mt($msg).'</span></p>'); + } else { + $r->print("<p>$msg</p>"); + } $r->rflush(); } $r->print('<p><a href="/adm/slotrequest?command=showslots">'. @@ -438,7 +449,11 @@ sub release_slot { my ($result,$msg) = &release_reservation($slot_name,$uname,$udom,$symb,$mgr); - $r->print("<p>$msg</p>"); + if (!$result) { + $r->print('<p><span class="LC_error">'.&mt($msg).'</span></p>'); + } else { + $r->print("<p>$msg</p>"); + } if ($mgr eq 'F') { $r->print('<p><a href="/adm/slotrequest?command=showslots">'. @@ -459,9 +474,25 @@ sub release_reservation { return (0,&mt('Not allowed to release Reservation: [_1], as it has already ended.',$description)); } } + + # if the reservation symb is for a map get a resource in that map + # to check slot parameters on + my $navmap=Apache::lonnavmaps::navmap->new; + if (!defined($navmap)) { + return (0,'error: Unable to determine current status'); + } + my $passed_resource = $navmap->getBySymb($symb); + if ($passed_resource->is_map()) { + my ($a_resource) = + $navmap->retrieveResources($passed_resource, + sub {$_[0]->is_problem()},0,1); + $symb = $a_resource->symb(); + } + # get parameter string, check for existance, rebuild string with the slot - my @slots = split(/:/,&Apache::lonnet::EXT("resource.0.availablestudent", - $symb,$udom,$uname)); + my $student = &Apache::lonnet::EXT("resource.0.availablestudent", + $symb,$udom,$uname); + my @slots = split(/:/,$student); my @new_slots; foreach my $exist_slot (@slots) { @@ -482,7 +513,8 @@ sub release_reservation { } } - my $use_slots = &Apache::lonnet::EXT("resource.0.useslots"); + my $use_slots = &Apache::lonnet::EXT("resource.0.useslots", + $symb,$udom,$uname); &Apache::lonxml::debug("use_slots is $use_slots<br />"); if (&Apache::lonnet::error($use_slots)) { @@ -525,15 +557,15 @@ sub delete_slot { my $ret = &Apache::lonnet::cput('slots', {$slot_name => \%slot}, $cdom, $cnum); if ($ret eq 'ok') { - $r->print("<p>Slot <tt>$slot_name</tt> marked as deleted.</p>"); + $r->print('<p>'.&mt('Slot [_1] marked as deleted.','<tt>'.$slot_name.'</tt>').'</p>'); } else { - $r->print("<p> An error ($ret) occurse when attempting to delete Slot <tt>$slot_name</tt>.</p>"); + $r->print('<p><span class="LC_error">'.&mt('An error occurred when attempting to delete slot: [_1]','<tt>'.$slot_name.'</tt>')." ($ret)</span></p>"); } } else { if (%consumed) { - $r->print("<p>Slot <tt>$slot_name</tt> has active reservations.</p>"); + $r->print('<p>'.&mt('Slot [_1] has active reservations.','<tt>'.$slot_name.'</tt>').'</p>'); } else { - $r->print("<p>Slot <tt>$slot_name</tt> does not exist.</p>"); + $r->print('<p>'.&mt('Slot [_1] does not exist.','<tt>'.$slot_name.'</tt>').'</p>'); } } $r->print('<p><a href="/adm/slotrequest?command=showslots">'. @@ -554,7 +586,9 @@ sub get_slot { my $slot_name=&check_for_conflict($symb,$env{'form.slotname'},\%slot); if ($slot_name =~ /^error: (.*)/) { - $r->print("<p>An error occured while attempting to make a reservation. ($1)</p>"); + $r->print('<p><span class="LC_error">' + .&mt('An error occurred while attempting to make a reservation. ([_1])',$1) + .'</span></p>'); &return_link($r); return 0; } @@ -563,7 +597,7 @@ sub get_slot { my $description1=&get_description($slot_name,\%slot); %slot=&Apache::lonnet::get_slot($env{'form.slotname'}); my $description2=&get_description($env{'form.slotname'},\%slot); - $r->print("<p>Already have a reservation: $description1</p>"); + $r->print('<p>'.&mt('Already have a reservation: [_1].',$description1).'</p>'); if ($slot_name ne $env{'form.slotname'}) { $r->print(<<STUFF); <form method="post" action="/adm/slotrequest"> @@ -572,13 +606,14 @@ sub get_slot { <input type="hidden" name="releaseslot" value="$slot_name" /> <input type="hidden" name="command" value="change" /> STUFF - $r->print("<p>You can either "); - $r->print(<<STUFF); - <input type="submit" name="change" value="Change" /> -STUFF - $r->print(' your reservation from <b>'.$description1.'</b> to <b>'. - $description2. - '</b> <br />or </p>'); + $r->print('<p>' + .&mt('You can either [_1]Change[_2] your reservation from [_3] to [_4] or' + ,'<input type="submit" name="change" value="' + ,'" />' + ,'<b>'.$description1.'</b>' + ,'<b>'.$description2.'</b>') + .'<br /></p>' + ); &return_link($r); $r->print(<<STUFF); </form> @@ -595,19 +630,22 @@ STUFF if (defined($reserved)) { my $retvalue = 0; if ($slot_name =~ /^error: (.*)/) { - $r->print("<p>An error occured while attempting to make a reservation. ($1)</p>"); + $r->print('<p><span class="LC_error">' + .&mt('An error occurred while attempting to make a reservation. ([_1])',$1) + .'</span></p>'); } elsif ($reserved > -1) { - $r->print("<p>Success: $description</p>"); + $r->print('<p>'.&mt('Success: [_1]',$description).'</p>'); $retvalue = 1; } elsif ($reserved < 0) { - $r->print("<p>Already reserved: $description</p>"); + $r->print('<p>'.&mt('Already reserved: [_1]',$description).'</p>'); } if (!$inhibit_return_link) { &return_link($r); } return 1; } my %lt=('request'=>"Availibility list", - 'try' =>'Try again'); + 'try' =>'Try again?', + 'or' => 'or'); %lt=&Apache::lonlocal::texthash(%lt); my $extra_input; @@ -615,8 +653,8 @@ STUFF $extra_input='<input type="hidden" name="releaseslot" value="'.$env{'form.slotname'}.'" />'; } + $r->print('<p>'.&mt('[_1]Failed[_2] to reserve a slot for [_3].','<span class="LC_warning">','</span>',$description).'</p>'); $r->print(<<STUFF); -<p> <font color="red">Failed</font> to reserve a spot for $description. </p> <p> <form method="post" action="/adm/slotrequest"> <input type="submit" name="Try Again" value="$lt{'try'}" /> @@ -625,19 +663,20 @@ STUFF <input type="hidden" name="command" value="$env{'form.command'}" /> $extra_input </form> -? </p> <p> -or +$lt{'or'} <form method="post" action="/adm/slotrequest"> <input type="hidden" name="symb" value="$env{'form.symb'}" /> <input type="submit" name="requestattempt" value="$lt{'request'}" /> </form> -</p> -or STUFF - if (!$inhibit_return_link) { &return_link($r); } + if (!$inhibit_return_link) { + $r->print(&mt('or').'</p>').&return_link($r); + } else { + $r->print('</p>'); + } return 0; } @@ -718,7 +757,9 @@ sub allowed_slot { my $conflict = &check_for_conflict($symb,$slot_name,$slot,$slots, $consumed_uniqueperiods); - if ($conflict) { + if ($conflict =~ /^error: /) { + return 0; + } elsif ($conflict ne '') { if ($slots->{$conflict}{'starttime'} < time) { return 0; } @@ -744,10 +785,29 @@ sub show_choices { my ($cnum,$cdom)=&get_course(); my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum); 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; - $r->print('<table border="1">'); &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>'); + return; + } + $r->print('<table border="1">'); foreach my $slot (sort { return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} } (keys(%slots))) { @@ -772,10 +832,16 @@ sub show_choices { my $conflict = &check_for_conflict($symb,$slot,$slots{$slot}, \%slots, $consumed_uniqueperiods); - if ($conflict) { - $text=&mt('Change Reservation'); - $command='get'; - } + if ($conflict) { + if ($conflict =~ /^error: /) { + $r->print('<tr><td><span class="LC_error" colspan="2">' + .&mt('Slot: [_1] has unknown status.',$description) + .'</span></td></tr>'); + } else { + $text=&mt('Change Reservation'); + $command='get'; + } + } } my $escsymb=&escape($symb); $form=<<STUFF; @@ -796,7 +862,8 @@ STUFF } if (!$available) { - $r->print('<tr><td>No available times. <a href="/adm/flip?postdata=return:">'. + $r->print('<tr><td>'.&mt('No available times.'). + ' <a href="/adm/flip?postdata=return:">'. &mt('Return to last resource').'</a></td></tr>'); } $r->print('</table>'); @@ -1108,15 +1175,16 @@ sub show_table { my ($id_count,$ids); if (exists($show{'scheduled'}) || exists($show{'space'}) ) { - my @this_slot = grep(/^$slot\0/,keys(%consumed)); + my $re_str = "$slot\0"; + my @this_slot = grep(/^\Q$re_str\E/,keys(%consumed)); $id_count = scalar(@this_slot); if (exists($show{'scheduled'})) { foreach my $entry (sort { $consumed{$a}{name} cmp $consumed{$b}{name} } - (keys(%consumed))) { + (@this_slot)) { my (undef,$id)=split("\0",$entry); my ($uname,$udom) = split(':',$consumed{$entry}{'name'}); - $ids.= '<nobr>'; + $ids.= '<span class="LC_nobreak">'; foreach my $item (@stu_display_order) { if ($stu_display{$item}) { if ($item eq 'fullname') { @@ -1127,7 +1195,7 @@ sub show_table { } } $ids.=&remove_link($slot,$entry,$uname,$udom, - $consumed{$entry}{'symb'}).'</nobr><br />'; + $consumed{$entry}{'symb'}).'</span><br />'; } } } @@ -1282,7 +1350,7 @@ sub upload_start { $result.=' <b>'. &mt('Specify a file containing the slot definitions.'). '</b></td></tr>'."\n"; - $result.='<tr bgcolor=#ffffe6><td>'."\n"; + $result.='<tr bgcolor="#ffffe6"><td>'."\n"; my $upfile_select=&Apache::loncommon::upfile_select_html(); my $ignore=&mt('Ignore First Line'); $result.=<<ENDUPFORM; @@ -1337,11 +1405,12 @@ ENDPICK sub csvuploadmap_footer { my ($request,$i,$keyfields) =@_; + my $buttontext = &mt('Create Slots'); $request->print(<<ENDPICK); </table> <input type="hidden" name="nfields" value="$i" /> <input type="hidden" name="keyfields" value="$keyfields" /> -<input type="button" onClick="javascript:verify(this.form)" value="Create Slots" /><br /> +<input type="button" onClick="javascript:verify(this.form)" value="$buttontext" /><br /> </form> ENDPICK } @@ -1458,7 +1527,7 @@ sub csv_upload_assign { my @slotdata = &Apache::loncommon::upfile_record_sep(); if ($env{'form.noFirstLine'}) { shift(@slotdata); } my %fields=&Apache::grades::get_fields(); - $r->print('<h3>Creating Slots</h3>'); + $r->print('<h3>'.&mt('Creating Slots').'</h3>'); my $cname=$env{'course.'.$env{'request.course.id'}.'.num'}; my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'}; my $countdone=0; @@ -1545,9 +1614,9 @@ sub csv_upload_assign { $r->rflush(); $countdone++; } - $r->print("<p>Created $countdone slots\n</p>"); + $r->print('<p>'.&mt('Created [quant,_1,slot]',$countdone)."\n".'</p>'); foreach my $error (@errors) { - $r->print("<p>$error\n</p>"); + $r->print('<p><span class="LC_warning">'.$error.'</span></p>'."\n"); } &show_table($r,$mgr); return ''; @@ -1635,7 +1704,7 @@ sub handler { &release_slot($r,$symb,$env{'form.releaseslot'}); } } else { - $r->print("<p>Unknown command: ".$env{'form.command'}."</p>"); + $r->print('<p>'.&mt('Unknown command: [_1]',$env{'form.command'}).'</p>'); } } &end_page($r);