--- loncom/interface/slotrequest.pm 2006/12/18 14:59:16 1.72
+++ loncom/interface/slotrequest.pm 2009/03/01 03:23:18 1.89
@@ -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.72 2006/12/18 14:59:16 rezaferry Exp $
+# $Id: slotrequest.pm,v 1.89 2009/03/01 03:23:18 raeburn 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,19 +236,17 @@ 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'});
&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)
@@ -308,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;
}
@@ -322,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') {
@@ -334,12 +355,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;
}
@@ -347,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 {
@@ -364,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 {
@@ -412,7 +433,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 +463,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 +488,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) {
@@ -479,10 +524,19 @@ 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);
}
}
- 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)) {
@@ -498,7 +552,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");
@@ -525,15 +578,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(''.
@@ -548,22 +601,24 @@ 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(''
+ .&mt('An error occurred while attempting to make a reservation. ([_1])',$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'});
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 +627,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(<
@@ -586,51 +642,64 @@ STUFF
} else {
&return_link($r);
}
- return;
+ 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;
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).'
');
}
- &return_link($r);
- return;
+ 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;
+ if ($conflictable_slot) {
+ $extra_input=' ';
+ }
+
+ $r->print(''.&mt('[_1]Failed[_2] to reserve a slot for [_3].','',' ',$description).'
');
$r->print(< Failed to reserve a spot for $description.
-?
-or
+$lt{'or'}
-
-or
STUFF
- &return_link($r);
- return;
+ if (!$inhibit_return_link) {
+ $r->print(&mt('or').'').&return_link($r);
+ } else {
+ $r->print('');
+ }
+ return 0;
}
sub allowed_slot {
@@ -638,8 +707,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");
@@ -711,7 +779,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;
}
@@ -737,10 +807,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))) {
@@ -765,10 +854,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(''
+ .&mt('Slot: [_1] has unknown status.',$description)
+ .' ');
+ } else {
+ $text=&mt('Change Reservation');
+ $command='get';
+ }
+ }
}
my $escsymb=&escape($symb);
$form=<
+
STUFF
}
@@ -789,7 +885,8 @@ STUFF
}
if (!$available) {
- $r->print('No available times. '.
+ $r->print(''.&mt('No available times.').
+ ' '.
&mt('Return to last resource').' ');
}
$r->print('
');
@@ -876,7 +973,7 @@ sub remove_link {
$symb = &escape($symb);
return <<"END_LINK";
- ($remove)
END_LINK
@@ -893,7 +990,7 @@ 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(&Apache::loncommon::help_open_topic('Slot About', 'Help on slots'));
$r->print('