--- loncom/interface/slotrequest.pm 2008/12/11 14:55:15 1.84 +++ loncom/interface/slotrequest.pm 2009/03/20 10:05:08 1.90 @@ -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.84 2008/12/11 14:55:15 bisitz Exp $ +# $Id: slotrequest.pm,v 1.90 2009/03/20 10:05:08 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,13 +236,10 @@ sub check_for_conflict { } } return undef; - } sub make_reservation { - my ($slot_name,$slot,$symb)=@_; - - my ($cnum,$cdom)=&get_course(); + my ($slot_name,$slot,$symb,$cnum,$cdom)=@_; my $value=&Apache::lonnet::EXT("resource.0.availablestudent",$symb, $env{'user.domain'},$env{'user.name'}); @@ -309,13 +313,7 @@ sub make_reservation { if ($value) { $new_value=$value.':'.$new_value; } - my $result=&Apache::lonparmset::storeparm_by_symb($symb, - '0_availablestudent', - $parm_level, $new_value, - 'string', - $env{'user.name'}, - $env{'user.domain'}); - &Apache::lonxml::debug("hrrm $result"); + &store_slot_parm($symb,$slot_name,$parm_level,$new_value,$cnum,$cdom); return $wanted; } @@ -323,6 +321,28 @@ sub make_reservation { return undef; } +sub store_slot_parm { + my ($symb,$slot_name,$parm_level,$new_value,$cnum,$cdom) = @_; + my $result=&Apache::lonparmset::storeparm_by_symb($symb, + '0_availablestudent', + $parm_level, $new_value, + 'string', + $env{'user.name'}, + $env{'user.domain'}); + &Apache::lonxml::debug("hrrm $result"); + my %storehash = ( + symb => $symb, + slot => $slot_name, + action => 'reserve', + context => $env{'form.context'}, + ); + + &Apache::lonnet::instructor_log('slotreservationslog',\%storehash, + '',$env{'user.name'},$env{'user.domain'}, + $cnum,$cdom); + return; +} + sub remove_registration { my ($r) = @_; if ($env{'form.entry'} ne 'remove all') { @@ -339,8 +359,8 @@ sub remove_registration { 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; } @@ -348,7 +368,7 @@ sub remove_registration { my $names = join(' ',@names); my $msg = &mt('Remove all of [_1] from slot [_2]?',$names,$slot_name); - &remove_registration_confirmation($r,$msg,['entry','slotname']); + &remove_registration_confirmation($r,$msg,['entry','slotname','context']); } sub remove_registration_user { @@ -365,7 +385,7 @@ sub remove_registration_user { $name,$slot_name,$title); &remove_registration_confirmation($r,$msg,['uname','udom','slotname', - 'entry','symb']); + 'entry','symb','context']); } sub remove_registration_confirmation { @@ -377,8 +397,10 @@ sub remove_registration_confirmation { '<input type="hidden" name="'.$parm.'" value="' .&HTML::Entities::encode($env{'form.'.$parm},'"<>&\'').'" />'."\n"; } - my %lt = &Apache::lonlocal::texthash('yes' => 'Yes', - 'no' => 'No',); + my %lt = &Apache::lonlocal::texthash( + 'yes' => 'Yes', + 'no' => 'No', + ); $r->print(<<"END_CONFIRM"); <p> $msg </p> <form action="/adm/slotrequest" method="post"> @@ -413,7 +435,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">'. @@ -439,7 +465,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">'. @@ -464,6 +494,9 @@ sub release_reservation { # 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) = @@ -493,6 +526,14 @@ sub release_reservation { if ( $consumed{$entry}->{'name'} eq ($uname.':'.$udom) ) { &Apache::lonnet::del('slot_reservations',[$entry], $cdom,$cnum); + my %storehash = ( + symb => $symb, + slot => $slot_name, + action => 'release', + context => $env{'form.context'}, + ); + &Apache::lonnet::instructor_log('slotreservationslog',\%storehash, + 1,$uname,$udom,$cnum,$cdom); } } @@ -513,7 +554,6 @@ sub release_reservation { '0_availablestudent', $parm_level, $new_param, 'string', $uname, $udom); - my $msg; if ($mgr eq 'F') { $msg = &mt('Released Reservation for user: [_1]',"$uname:$udom"); @@ -540,15 +580,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><span class=\"LC_error\"> An error ($ret) occurse when attempting to delete Slot <tt>$slot_name</tt>.</span></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">'. @@ -580,7 +620,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"> @@ -589,13 +629,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> @@ -606,8 +647,9 @@ STUFF return 0; } + my ($cnum,$cdom)=&get_course(); my $reserved=&make_reservation($env{'form.slotname'}, - \%slot,$symb); + \%slot,$symb,$cnum,$cdom); my $description=&get_description($env{'form.slotname'},\%slot); if (defined($reserved)) { my $retvalue = 0; @@ -616,26 +658,28 @@ STUFF .&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'); - %lt=&Apache::lonlocal::texthash(%lt); + my %lt = &Apache::lonlocal::texthash( + 'request' => 'Availibility list', + 'try' => 'Try again?', + 'or' => 'or', + ); my $extra_input; if ($conflictable_slot) { $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> <span class="LC_warning">Failed</span> to reserve a spot for $description. </p> <p> <form method="post" action="/adm/slotrequest"> <input type="submit" name="Try Again" value="$lt{'try'}" /> @@ -644,19 +688,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; } @@ -737,7 +782,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; } @@ -763,10 +810,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))) { @@ -791,10 +857,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; @@ -803,6 +875,7 @@ sub show_choices { <input type="hidden" name="symb" value="$escsymb" /> <input type="hidden" name="slotname" value="$slot" /> <input type="hidden" name="command" value="$command" /> + <input type="hidden" name="context" value="user" /> </form> STUFF } @@ -815,7 +888,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>'); @@ -902,7 +976,7 @@ sub remove_link { $symb = &escape($symb); return <<"END_LINK"; - <a href="/adm/slotrequest?command=remove_registration&slotname=$slotname&entry=$entry&uname=$uname&udom=$udom&symb=$symb" + <a href="/adm/slotrequest?command=remove_registration&slotname=$slotname&entry=$entry&uname=$uname&udom=$udom&symb=$symb&context=manage" >($remove)</a> END_LINK @@ -1302,7 +1376,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; @@ -1357,11 +1431,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 } @@ -1478,7 +1553,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; @@ -1565,9 +1640,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><span class=\"LC_warning\">$error</span></p>\n"); + $r->print('<p><span class="LC_warning">'.$error.'</span></p>'."\n"); } &show_table($r,$mgr); return ''; @@ -1655,7 +1730,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);