--- loncom/interface/slotrequest.pm 2006/03/30 05:20:44 1.56
+++ loncom/interface/slotrequest.pm 2006/04/25 15:32:20 1.59
@@ -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.56 2006/03/30 05:20:44 albertel Exp $
+# $Id: slotrequest.pm,v 1.59 2006/04/25 15:32:20 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -243,10 +243,22 @@ sub make_reservation {
my $value=&Apache::lonnet::EXT("resource.0.availablestudent",$symb,
$env{'user.domain'},$env{'user.name'});
&Apache::lonxml::debug("value is $value
");
- if (&network_error($value)) {
+
+ my $use_slots = &Apache::lonnet::EXT("resource.0.useslots");
+ &Apache::lonxml::debug("use_slots is $use_slots
");
+
+ if (&network_error($value) || &network_error($use_slots)) {
return 'error: Unable to determine current status';
}
+ my $parm_symb = $symb;
+ my $parm_level = 1;
+ if ($use_slots eq 'sequence') {
+ my ($map) = &Apache::lonnet::decode_symb($symb);
+ $parm_symb = &Apache::lonnet::symbread($map);
+ $parm_level = 2;
+ }
+
foreach my $other_slot (split(/:/, $value)) {
if ($other_slot eq $slot_name) {
my %consumed=&Apache::lonnet::dump('slot_reservations', $cdom,
@@ -254,7 +266,7 @@ sub make_reservation {
if (&network_error($value)) {
return 'error: Unable to determine current status';
}
- my $me=$env{'user.name'}.'@'.$env{'user.domain'};
+ my $me=$env{'user.name'}.':'.$env{'user.domain'};
foreach my $key (keys(%consumed)) {
if ($consumed{$key}->{'name'} eq $me) {
my $num=(split('\0',$key))[1];
@@ -284,9 +296,9 @@ sub make_reservation {
return undef;
}
- my %reservation=('name' => $env{'user.name'}.'@'.$env{'user.domain'},
+ my %reservation=('name' => $env{'user.name'}.':'.$env{'user.domain'},
'timestamp' => time,
- 'symb' => $symb);
+ 'symb' => $parm_symb);
my $success=&Apache::lonnet::newput('slot_reservations',
{"$slot_name\0$wanted" =>
@@ -300,7 +312,8 @@ sub make_reservation {
}
my $result=&Apache::lonparmset::storeparm_by_symb($symb,
'0_availablestudent',
- 1, $new_value, 'string',
+ $parm_level, $new_value,
+ 'string',
$env{'user.name'},
$env{'user.domain'});
&Apache::lonxml::debug("hrrm $result");
@@ -397,7 +410,7 @@ sub release_all_slot {
foreach my $entry (sort { $consumed{$a}{'name'} cmp
$consumed{$b}{'name'} } (keys(%consumed))) {
- my ($uname,$udom) = split('@',$consumed{$entry}{'name'});
+ my ($uname,$udom) = split(':',$consumed{$entry}{'name'});
my ($result,$msg) =
&release_reservation($slot_name,$uname,$udom,
$consumed{$entry}{'symb'},$mgr);
@@ -465,17 +478,28 @@ sub release_reservation {
my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,
"^$slot_name\0");
foreach my $entry (keys(%consumed)) {
- if ( $consumed{$entry}->{'name'} eq ($uname.'@'.$udom) ) {
+ if ( $consumed{$entry}->{'name'} eq ($uname.':'.$udom) ) {
&Apache::lonnet::del('slot_reservations',[$entry],
$cdom,$cnum);
}
}
+ my $use_slots = &Apache::lonnet::EXT("resource.0.useslots");
+ &Apache::lonxml::debug("use_slots is $use_slots
");
+
+ if (&network_error($use_slots)) {
+ return (0,'error: Unable to determine current status');
+ }
+
+ my $parm_level = 1;
+ if ($use_slots eq 'sequence') {
+ $parm_level = 2;
+ }
# store new parameter string
my $result=&Apache::lonparmset::storeparm_by_symb($symb,
'0_availablestudent',
- 1, $new_param, 'string',
- $uname,$udom);
+ $parm_level, $new_param,
+ 'string', $uname, $udom);
my $msg;
if ($mgr eq 'F') {
@@ -1055,14 +1079,14 @@ sub show_table {
$consumed{$b}{name} }
(keys(%consumed))) {
my (undef,$id)=split("\0",$entry);
- my ($uname,$udom) = split('@',$consumed{$entry}{'name'});
+ my ($uname,$udom) = split(':',$consumed{$entry}{'name'});
$ids.= '';
foreach my $item (@stu_display_order) {
if ($stu_display{$item}) {
if ($item eq 'fullname') {
$ids.=$fullname->{"$uname:$udom"}.' ';
} elsif ($item eq 'username') {
- $ids.="$uname\@$udom ";
+ $ids.="$uname:$udom ";
}
}
}
@@ -1420,22 +1444,49 @@ sub csv_upload_assign {
if ($entries{$fields{'endtime'}}) {
$slot{'endtime'}=&UnixDate($entries{$fields{'endtime'}},"%s");
}
+
+ # start/endtime must be defined and greater than zero
+ if (!$slot{'starttime'}) {
+ push(@errors,"$name not created -- Invalid start time");
+ next;
+ }
+ if (!$slot{'endtime'}) {
+ push(@errors,"$name not created -- Invalid end time");
+ next;
+ }
+ if ($slot{'starttime'} > $slot{'endtime'}) {
+ push(@errors,"$name not created -- Slot starts after it ends");
+ next;
+ }
+
if ($entries{$fields{'startreserve'}}) {
$slot{'startreserve'}=
&UnixDate($entries{$fields{'startreserve'}},"%s");
}
+ if (defined($slot{'startreserve'})
+ && $slot{'startreserve'} > $slot{'starttime'}) {
+ push(@errors,"$name not created -- Slot's reservation start time is after the slot's start time.");
+ next;
+ }
+
foreach my $key ('ip','proctor','description','maxspace',
'secret','symb') {
if ($entries{$fields{$key}}) {
$slot{$key}=$entries{$fields{$key}};
}
}
+
if ($entries{$fields{'uniqueperiod'}}) {
my ($start,$end)=split(',',$entries{$fields{'uniqueperiod'}});
my @times=(&UnixDate($start,"%s"),
&UnixDate($end,"%s"));
$slot{'uniqueperiod'}=\@times;
}
+ if (defined($slot{'uniqueperiod'})
+ && $slot{'uniqueperiod'}[0] > $slot{'uniqueperiod'}[1]) {
+ push(@errors,"$name not created -- Slot's unique period start time is later than the unique period's end time.");
+ next;
+ }
&Apache::lonnet::cput('slots',{$name=>\%slot},$cdom,$cname);
$r->print('.');
@@ -1501,7 +1552,7 @@ sub handler {
my $symb=&Apache::lonnet::unescape($env{'form.symb'});
my (undef,undef,$res)=&Apache::lonnet::decode_symb($symb);
my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb);
- if ($useslots ne 'resource') {
+ if ($useslots ne 'resource' && $useslots ne 'sequence') {
&fail($r,'not_valid');
return OK;
}