--- loncom/interface/slotrequest.pm 2007/04/10 23:28:20 1.75 +++ 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.75 2007/04/10 23:28:20 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
"); - 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
"); 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("

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

'); + $r->print("

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

'); return; } if (!%consumed) { - $r->print("

".&mt('Slot [_1] has no reservations.', - $slot_name)."

"); + $r->print('

'.&mt('Slot [_1] has no reservations.', + ''.$slot_name.'').'

'); return; } @@ -412,7 +419,11 @@ sub release_all_slot { my ($result,$msg) = &release_reservation($slot_name,$uname,$udom, $consumed{$entry}{'symb'},$mgr); - $r->print("

$msg

"); + if (!$result) { + $r->print('

'.&mt($msg).'

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

$msg

"); + } $r->rflush(); } $r->print('

'. @@ -438,7 +449,11 @@ sub release_slot { my ($result,$msg) = &release_reservation($slot_name,$uname,$udom,$symb,$mgr); - $r->print("

$msg

"); + if (!$result) { + $r->print('

'.&mt($msg).'

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

$msg

"); + } if ($mgr eq 'F') { $r->print('

'. @@ -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
"); 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("

Slot $slot_name marked as deleted.

"); + $r->print('

'.&mt('Slot [_1] marked as deleted.',''.$slot_name.'').'

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

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

"); + $r->print('

'.&mt('An error occurred when attempting to delete slot: [_1]',''.$slot_name.'')." ($ret)

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

Slot $slot_name has active reservations.

"); + $r->print('

'.&mt('Slot [_1] has active reservations.',''.$slot_name.'').'

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

Slot $slot_name does not exist.

"); + $r->print('

'.&mt('Slot [_1] does not exist.',''.$slot_name.'').'

'); } } $r->print('

'. @@ -554,7 +586,9 @@ sub get_slot { 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('

' + .&mt('An error occurred while attempting to make a reservation. ([_1])',$1) + .'

'); &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("

Already have a reservation: $description1

"); + $r->print('

'.&mt('Already have a reservation: [_1].',$description1).'

'); if ($slot_name ne $env{'form.slotname'}) { $r->print(< @@ -572,13 +606,14 @@ sub get_slot { STUFF - $r->print("

You can either "); - $r->print(< -STUFF - $r->print(' your reservation from '.$description1.' to '. - $description2. - '
or

'); + $r->print('

' + .&mt('You can either [_1]Change[_2] your reservation from [_3] to [_4] or' + ,'' + ,''.$description1.'' + ,''.$description2.'') + .'

' + ); &return_link($r); $r->print(< @@ -595,19 +630,22 @@ STUFF if (defined($reserved)) { my $retvalue = 0; if ($slot_name =~ /^error: (.*)/) { - $r->print("

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

"); + $r->print('

' + .&mt('An error occurred while attempting to make a reservation. ([_1])',$1) + .'

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

Success: $description

"); + $r->print('

'.&mt('Success: [_1]',$description).'

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

Already reserved: $description

"); + $r->print('

'.&mt('Already reserved: [_1]',$description).'

'); } 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=''; } + $r->print('

'.&mt('[_1]Failed[_2] to reserve a slot for [_3].','','',$description).'

'); $r->print(< Failed to reserve a spot for $description.

@@ -625,19 +663,20 @@ STUFF $extra_input
-?

-or +$lt{'or'}

-

-or STUFF - if (!$inhibit_return_link) { &return_link($r); } + if (!$inhibit_return_link) { + $r->print(&mt('or').'

').&return_link($r); + } else { + $r->print('

'); + } return 0; } @@ -646,8 +685,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"); @@ -719,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; } @@ -745,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(''. + &mt('An error occurred determining slot availability'). + ''); + return; + } + } elsif ($consumed_uniqueperiods =~ /^error: /) { + $r->print(''. + &mt('An error occurred determining slot availability'). + ''); + return; + } my $available; - $r->print(''); &Apache::lonxml::debug("Checking Slots"); my @got_slots=&check_for_reservation($symb,'allslots'); + if ($got_slots[0] =~ /^error: /) { + $r->print(''. + &mt('An error occurred determining slot availability'). + ''); + return; + } + $r->print('
'); foreach my $slot (sort { return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} } (keys(%slots))) { @@ -773,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(''); + } else { + $text=&mt('Change Reservation'); + $command='get'; + } + } } my $escsymb=&escape($symb); $form=<print(''); } $r->print('
' + .&mt('Slot: [_1] has unknown status.',$description) + .'
No available times. '. + $r->print('
'.&mt('No available times.'). + ' '. &mt('Return to last resource').'
'); @@ -1109,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.= ''; + $ids.= ''; foreach my $item (@stu_display_order) { if ($stu_display{$item}) { if ($item eq 'fullname') { @@ -1128,7 +1195,7 @@ sub show_table { } } $ids.=&remove_link($slot,$entry,$uname,$udom, - $consumed{$entry}{'symb'}).'
'; + $consumed{$entry}{'symb'}).'
'; } } } @@ -1283,7 +1350,7 @@ sub upload_start { $result.=' '. &mt('Specify a file containing the slot definitions.'). ''."\n"; - $result.=''."\n"; + $result.=''."\n"; my $upfile_select=&Apache::loncommon::upfile_select_html(); my $ignore=&mt('Ignore First Line'); $result.=<print(< -
+
ENDPICK } @@ -1459,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('

Creating Slots

'); + $r->print('

'.&mt('Creating Slots').'

'); my $cname=$env{'course.'.$env{'request.course.id'}.'.num'}; my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'}; my $countdone=0; @@ -1546,9 +1614,9 @@ sub csv_upload_assign { $r->rflush(); $countdone++; } - $r->print("

Created $countdone slots\n

"); + $r->print('

'.&mt('Created [quant,_1,slot]',$countdone)."\n".'

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

$error\n

"); + $r->print('

'.$error.'

'."\n"); } &show_table($r,$mgr); return ''; @@ -1636,7 +1704,7 @@ sub handler { &release_slot($r,$symb,$env{'form.releaseslot'}); } } else { - $r->print("

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

"); + $r->print('

'.&mt('Unknown command: [_1]',$env{'form.command'}).'

'); } } &end_page($r);