--- loncom/html/adm/helper/newslot.helper 2005/11/02 22:07:52 1.7 +++ loncom/html/adm/helper/newslot.helper 2006/12/18 21:49:32 1.22 @@ -1,5 +1,9 @@ - + + + OPTIONAL + if (!exists($helper->{'VARS'}{'name'}) || $helper->{'VARS'}{'name'} !~ /\S/) { @@ -7,6 +11,8 @@ if (exists($env{'form.name'}) || $env{'form.name'} =~ /\S/) { $helper->{'VARS'}{'name'}=$env{'form.name'}; + $helper->{VARS}{'origname'}=$env{'form.name'}; + $helper->{DATA}{copy} = 1; } } $helper->{DATA}{origslot} = sub { @@ -17,30 +23,35 @@ } my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; - my $name=$helper->{'VARS'}{'name'}; + my $name=$helper->{VARS}{'origname'}; my %slot=&Apache::lonnet::get('slots', [$name], $cdom, $cnum); if (!ref($slot{$name})) { return $default; } if (!exists($slot{$name}{$which})) { return $default; } return $slot{$name}{$which}; } - - - Name:
    -
+ +
Name:
   
if ($val=~/^\s*$/) { return 'Must specify a name'; } - if ($val=~/\s$/) { return 'Must not contain spaces'; } + if ($val=~/\s/) { return 'Must not contain spaces'; } + if ($val=~/\W/) { return 'Must contain only letters, numbers and _'; } return undef; return $helper->{'VARS'}{'name'}; + + $helper->{DATA}{copy} + +

Changing the Name will create a new slot with the new name, and not rename the existing slot.

+
+
-
Start time:
   
+
Start time:
   
@@ -48,15 +59,21 @@ -
End time:
   
+
End time:
   
return &{$helper->{DATA}{origslot}}('endtime'); + + if ($val < $helper->{'VARS'}{'starttime'}) { + return 'End time must be later than the start time.'; + } + return undef; + -
Type:
+
Type:
Instructor asssignable. @@ -67,11 +84,11 @@
- + + - -

Description:
    - +

Description:
    @@ -81,19 +98,21 @@ $helper->{'VARS'}{'type'} eq 'schedulable_student' - -

Time students can start reserving:
    - +

Time students can start reserving:
    return &{$helper->{DATA}{origslot}}('startreserve','anytime'); + + if (defined($val) && $val > $helper->{'VARS'}{'starttime'}) { + return 'Reservation time must come before the slot has started.'; + } + return undef; + - -

Maxium number of students allowed in this slot:
    - +

Maxium number of students allowed in this slot:
    @@ -105,9 +124,7 @@ - -

Period of time in which this slot is can only be uniquely chosen:
   Start: - +

Period of time in which this slot is can only be uniquely chosen:
   Start: @@ -117,7 +134,7 @@ return 'anytime'; -
   End:
+
   End:
my $default=&{$helper->{DATA}{origslot}}('uniqueperiod','anytime'); @@ -125,6 +142,12 @@ if (ref($default)) { return $default->[1]; } return 'anytime'; + + if (defined($val) && $val < $helper->{'VARS'}{'startunique'}) { + return 'End time must be later than the start time.'; + } + return undef; + @@ -136,10 +159,22 @@ delete($helper->{'VARS'}{'endunique'}); + - -

Secret word proctors use to checkin users:
    - +

Proctored access: + + + No proctor checkin required for access. + Require proctored checkin for access. + + my $default=&{$helper->{DATA}{origslot}}('proctor'); + if ($default) { return 'yes'; } + return 'no'; + + + + +

Secret word proctors use to checkin users:
    @@ -150,10 +185,10 @@ - -

Slot is: - +

Slot is: + + usable for any resource. restricted to a specific resource. @@ -163,10 +198,9 @@ return 'any'; + - -

IP restrictions:
    - +

IP restrictions:
    @@ -176,61 +210,144 @@ return &{$helper->{DATA}{origslot}}('ip'); -

+

+ + + + PROCTOR + return $res->is_problem() return $res->symb() - PROCTOR return &{$helper->{DATA}{origslot}}('symb'); - + + + + + + $helper->{'VARS'}{'useproctor'} eq 'no' + RESTRICTUSER + + + RESTRICTUSER + + activeonly="1" emptyallowed="1"> my @defaults; my $default=&{$helper->{DATA}{origslot}}('proctor'); if ($default) { - $default=~ tr/@/:/; @defaults=(split(',',$default)); } return @defaults; + + + + + $helper->{'VARS'}{'type'} ne 'schedulable_student' + FINISH + + + FINISH + +

Slots are by default available to all users in a course, if you would like this slot to be restricted to a subset of users you can specify restrictions.

+
+ + + Select sections to limit slot availability to:
    +
+
+ + return join('|||', + split(',',&{$helper->{DATA}{origslot}}('allowedsections'))); + +
+ + Select users to limit slot availability to:
    +
+ + + return split(',',&{$helper->{DATA}{origslot}}('allowedusers')); + + +
+ + - Created Slot + Created Slot my $result; if ($helper->{'STATE'} ne 'FINISH') { return; } my %slot; + foreach my $which ('type','starttime','endtime') { $slot{$which} = $helper->{'VARS'}{$which}; } - foreach my $which ('ip','description','maxspace', - 'secret','symb') { + + foreach my $which ('ip','description','maxspace','secret','symb') { if ( $helper->{'VARS'}{$which} =~/\S/ ) { $slot{$which} = $helper->{'VARS'}{$which}; } } + + if ( $helper->{'VARS'}{'startreserve'} > 0) { + $slot{'startreserve'} = $helper->{'VARS'}{'startreserve'}; + } + if ( $helper->{'VARS'}{'startunique'} > 0 && $helper->{'VARS'}{'endunique'} > 0 ) { $slot{'uniqueperiod'} = [$helper->{'VARS'}{'startunique'}, $helper->{'VARS'}{'endunique'}]; } - if ( $helper->{'VARS'}{'proctor'} =~/\S/ ) { + + if ( $helper->{'VARS'}{'useproctor'} eq 'yes' + && $helper->{'VARS'}{'proctor'} =~/\S/ ) { my @names; + # just need the username/domain throw away the other data + # that returns foreach my $user (split(/\|\|\|/, $helper->{'VARS'}{'proctor'})) { my ($uname,$udomain)=split(/:/,$user); - push(@names,"$uname\@$udomain"); + push(@names,"$uname:$udomain"); + } + # make sure the usernmaes are unique + my %proctors = map { ($_,1) } @names; + $slot{'proctor'}=join(',',sort(keys(%proctors))); + } + + if ( $helper->{'VARS'}{'allowedsections'} =~/\S/ ) { + $slot{'allowedsections'}= + join(',',sort(split(/\|\|\|/, + $helper->{'VARS'}{'allowedsections'}))); + } + + if ( $helper->{'VARS'}{'allowedusers'} =~/\S/ ) { + my @names; + # just need the username/domain throw away the other data + # that returns + foreach my $item (split(/\|\|\|/, + $helper->{'VARS'}{'allowedusers'})) { + my ($uname,$udomain)=split(/:/,$item); + push(@names,"$uname:$udomain"); } - $slot{'proctor'}=join(',',@names); + + # make sure the choices are unique + my %users = map { ($_,1) } @names; + $slot{'allowedusers'}=join(',',sort(keys(%users))); } + my $cname = $env{'course.'.$env{'request.course.id'}.'.num'}; my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; @@ -243,12 +360,17 @@ "\n".'
  • Type: '.$slot{'type'}.'
  • '; my %labels = map {($_->[0],$_->[1])} &Apache::slotrequest::csvupload_fields(); - foreach my $which ('ip','description','maxspace','secret','symb') { + foreach my $which ('ip','description','maxspace','secret','symb', + 'allowedsections','allowedusers') { if (exists($slot{$which})) { $result.="\n".'
  • '.$labels{$which}.': '. &HTML::Entities::encode($slot{$which}).'
  • '; } } + if (exists($slot{'startreserve'})) { + $result.="\n".'
  • '.$labels{'startreserve'}.': '. + &Apache::lonlocal::locallocaltime($slot{'startreserve'}).'
  • '; + } if (exists($slot{'proctor'})) { my $proctors = $slot{'proctor'}; $proctors =~ s/,/, /g;