--- loncom/html/adm/helper/newslot.helper 2006/12/18 15:14:37 1.21
+++ loncom/html/adm/helper/newslot.helper 2018/06/24 04:11:12 1.35
@@ -1,5 +1,6 @@
-
+
OPTIONAL
@@ -25,16 +26,34 @@
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};
+ if (($which eq 'ipdeny') || ($which eq 'ipallow')) {
+ if (!exists($slot{$name}{'ip'})) { return $default; }
+ } else {
+ if (!exists($slot{$name}{$which})) { return $default; }
+ }
+ if (($which eq 'ipdeny') || ($which eq 'ipallow')) {
+ my @allows;
+ my @denies;
+ foreach my $item (split(',',$slot{$name}{'ip'})) {
+ $item =~ s/^\s*//;
+ $item =~ s/\s*$//;
+ if ($item =~ /^\!(.+)$/) {
+ push(@denies,$1);
+ } else {
+ push(@allows,$item);
+ }
+ }
+ if ($which eq 'ipdeny') {
+ return join(',',@denies);
+ }
+ if ($which eq 'ipallow') {
+ return join(',',@allows);
+ }
+ } else {
+ return $slot{$name}{$which};
+ }
}
-
- Help on required attributes
-
-
- Required Attributes
-
Name:
@@ -81,7 +100,7 @@
Type:
- Instructor asssignable.
+ Instructor assignable.
Student selectable.
return &{$helper->{DATA}{origslot}}('type','preassigned');
@@ -90,14 +109,8 @@
-
-
- Help on optional attributes
-
-
- Optional Attributes
-
-
+
Description:
@@ -123,7 +136,21 @@
-
Maxium number of students allowed in this slot:
+
Time students can no longer reserve:
+
+
+
+ return &{$helper->{DATA}{origslot}}('endreserve','anytime');
+
+
+ if (defined($val) && $val > $helper->{'VARS'}{'starttime'}) {
+ return 'Reservation end time must come before the slot has started.';
+ }
+ return undef;
+
+
+
+
Maximum number of students allowed in this slot:
@@ -135,7 +162,7 @@
-
Period of time in which this slot is can only be uniquely chosen:
Start:
+
Period of time when this slot can only be uniquely chosen:
Start:
@@ -160,17 +187,55 @@
return undef;
+
+
Message(s) triggered by reservation change by student
+
+
+ Sent to student
+ Sent to student and added to user notes
+ None sent and no record in user notes
+
+ my $default=&{$helper->{DATA}{origslot}}('reservationmsg');
+ if ($default eq 'only_student') { return $default; }
+ if ($default eq 'student_and_user_notes_screen') { return $default; }
+ return 'none';
+
+
$helper->{'VARS'}{'type'} eq 'preassigned'
delete($helper->{'VARS'}{'startreserve'});
+ delete($helper->{'VARS'}{'endreserve'});
delete($helper->{'VARS'}{'maxspace'});
- delete($helper->{'VARS'}{'startunique'});
- delete($helper->{'VARS'}{'endunique'});
+
+
Period of time when this slot can only be uniquely assigned:
Start:
+
+
+
+ my $default=&{$helper->{DATA}{origslot}}('uniqueperiod','anytime');
+ if ($default eq 'anytime') { return 'anytime' };
+ if (ref($default)) { return $default->[0]; }
+ return 'anytime';
+
+
+
End:
+
+
+ my $default=&{$helper->{DATA}{origslot}}('uniqueperiod','anytime');
+ if ($default eq 'anytime') { return 'anytime' };
+ 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;
+
+
-
Proctored access:
@@ -198,31 +263,72 @@
Slot is:
-
- Resource Restriction
-
+
usable for any resource.
- restricted to a specific resource.
+ restricted to resources in specific folder(s)/composite page(s).
+ restricted to specific resource(s).
my $default=&{$helper->{DATA}{origslot}}('symb');
- if ($default) { return 'resource'; }
- return 'any';
+ if ($default) {
+ my @symbs;
+ if ($default =~ /,/) {
+ @symbs = split(/\s*,\s*/,$default);
+ } else {
+ @symbs = ($default);
+ }
+ if (grep(/\.(page|sequence)$/,@symbs)) {
+ return 'map';
+ } else {
+ return 'resource';
+ }
+ } else {
+ return 'any';
+ }
+
+
+
IP restrictions -- allow from all except:
+
+
+
+
+ return undef;
+
+
+ return &{$helper->{DATA}{origslot}}('ipdeny');
+
+
-
IP restrictions:
+
IP restrictions -- deny from all except:
-
+
+
return undef;
- return &{$helper->{DATA}{origslot}}('ip');
+ return &{$helper->{DATA}{origslot}}('ipallow');
+
+
+
Does each student need to use a unique IP address to access a resource with this slot?
+
+
+ No. The student's IP address is not tied for later access to the same resource.
+ Yes. The IP address on a student's first access to a resource is tied for later access.
+ Yes. The IP address on a student's first access to a resource is tied for later access (including post-answer date).
+
+ my $default=&{$helper->{DATA}{origslot}}('iptied');
+ if ($default eq 'yes') { return 'yes'; }
+ if ($default eq 'answer') { return 'answer'; }
+ return 'no';
+
+
@@ -231,17 +337,41 @@
PROCTOR
-
- return $res->is_problem()
+
+ return $res->is_map() || $res->is_problem()
+ return $res->is_problem()
return $res->symb()
- return &{$helper->{DATA}{origslot}}('symb');
+ my @defaults;
+ my $default=&{$helper->{DATA}{origslot}}('symb');
+ if ($default) {
+ @defaults=(split(/\s*,\s*/,$default));
+ }
+ return @defaults;
+
-
+ PROCTOR
+
+
+ return $res->is_map()
+ return $res->symb()
+
+ my @defaults;
+ my $default=&{$helper->{DATA}{origslot}}('symb');
+ if ($default) {
+ @defaults=(split(/\s*,\s*/,$default));
+ }
+ return @defaults;
+
+
+
+
+
$helper->{'VARS'}{'useproctor'} eq 'no'
@@ -249,15 +379,9 @@
RESTRICTUSER
-
- Specifying Proctors
-
-
- Specifying Proctors
-
+ activeonly="1" emptyallowed="0">
my @defaults;
my $default=&{$helper->{DATA}{origslot}}('proctor');
@@ -270,7 +394,8 @@
-
+
$helper->{'VARS'}{'type'} ne 'schedulable_student'
FINISH
@@ -280,21 +405,18 @@
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.
-
- Restrict Availibility
-
- Select sections to limit slot availability to:
+ Select sections to limit slot availability to:
- return join('|||',
+ return join('|||',
split(',',&{$helper->{DATA}{origslot}}('allowedsections')));
- Select users to limit slot availability to:
+
Select users to limit slot availability to:
@@ -305,7 +427,7 @@
-
+
Created Slot
@@ -317,22 +439,70 @@
$slot{$which} = $helper->{'VARS'}{$which};
}
- foreach my $which ('ip','description','maxspace','secret','symb') {
+ foreach my $which ('description','maxspace','secret') {
if ( $helper->{'VARS'}{$which} =~/\S/ ) {
$slot{$which} = $helper->{'VARS'}{$which};
}
}
+ if ($helper->{'VARS'}{'ipdeny'} =~/\S/ ) {
+ foreach my $item (split(',',$helper->{'VARS'}{'ipdeny'})) {
+ $item =~ s/^\s*//;
+ $item =~ s/\s*$//;
+ $slot{'ip'} .= '!'.$item.',';
+ }
+ }
+
+ if ($helper->{'VARS'}{'ipallow'} =~/\S/ ) {
+ foreach my $item (split(',',$helper->{'VARS'}{'ipallow'})) {
+ $item =~ s/^\s*//;
+ $item =~ s/\s*$//;
+ $slot{'ip'} .= $item.',';
+ }
+ }
+
+ if ($slot{'ip'} ne '') {
+ $slot{'ip'} =~s /,$//;
+ }
+
+ if ($helper->{'VARS'}{'type'} eq 'schedulable_student') {
+ if (($helper->{'VARS'}{'reservationmsg'} eq 'only_student') ||
+ ($helper->{'VARS'}{'reservationmsg'} eq 'student_and_user_notes_screen')) {
+ $slot{'reservationmsg'} = $helper->{'VARS'}{'reservationmsg'};
+ } else {
+ $slot{'reservationmsg'} = 'none';
+ }
+ }
+
+ if (($helper->{'VARS'}{'restricttosymb'} =~ /^(map|resource)$/) &&
+ ($helper->{'VARS'}{'symb'} =~ /\S/)) {
+ my @symbs;
+ foreach my $symb (split(/\|\|\|/, $helper->{'VARS'}{'symb'})) {
+ push(@symbs,$symb);
+ }
+ # make sure the symbs are unique
+ my %symbs = map { ($_,1) } @symbs;
+ $slot{'symb'}=join(',',sort(keys(%symbs)));
+ }
+
if ( $helper->{'VARS'}{'startreserve'} > 0) {
$slot{'startreserve'} = $helper->{'VARS'}{'startreserve'};
}
+ if ( $helper->{'VARS'}{'endreserve'} > 0) {
+ $slot{'endreserve'} = $helper->{'VARS'}{'endreserve'};
+ }
+
if ( $helper->{'VARS'}{'startunique'} > 0 &&
$helper->{'VARS'}{'endunique'} > 0 ) {
$slot{'uniqueperiod'} = [$helper->{'VARS'}{'startunique'},
$helper->{'VARS'}{'endunique'}];
}
+ if ( $helper->{'VARS'}{'iptied'} =~ /^(yes|answer)$/ ) {
+ $slot{'iptied'} = lc($helper->{'VARS'}{'iptied'});
+ }
+
if ( $helper->{'VARS'}{'useproctor'} eq 'yes'
&& $helper->{'VARS'}{'proctor'} =~/\S/ ) {
my @names;
@@ -342,7 +512,7 @@
my ($uname,$udomain)=split(/:/,$user);
push(@names,"$uname:$udomain");
}
- # make sure the usernmaes are unique
+ # make sure the usernames are unique
my %proctors = map { ($_,1) } @names;
$slot{'proctor'}=join(',',sort(keys(%proctors)));
}
@@ -374,23 +544,60 @@
my $ret = &Apache::lonnet::cput('slots',
{$helper->{'VARS'}{'name'} => \%slot},
$cdom,$cname);
+ if ($ret eq 'ok') {
+ &Apache::lonnet::devalidate_slots_cache($cname,$cdom);
+ }
$result.="\n ".'Name: '.&HTML::Entities::encode($helper->{'VARS'}{'name'}).''.
"\n".' Starts: '.&Apache::lonlocal::locallocaltime($slot{'starttime'}).''.
"\n".' Ends: '.&Apache::lonlocal::locallocaltime($slot{'endtime'}).''.
"\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',
'allowedsections','allowedusers') {
if (exists($slot{$which})) {
$result.="\n".' '.$labels{$which}.': '.
&HTML::Entities::encode($slot{$which}).'';
}
}
+ if (exists($slot{'iptied'})) {
+ $result.="\n".' '.$labels{'iptied'}.': ';
+ if ($slot{'iptied'} eq 'yes') {
+ $result.=&Apache::lonlocal::mt('yes');
+ } elsif ($slot{'iptied'} eq 'answer') {
+ $result.=&Apache::lonlocal::mt('yes, including post-answer date');
+ }
+ $result.='';
+ }
+ if (exists($slot{'symb'})) {
+ $result.="\n".' '.$labels{'symb'}.': ';
+ if ($slot{'symb'} =~ /,/) {
+ $result.='';
+ foreach my $symb (split(/\s*,\s*/,$slot{'symb'})) {
+ $result.='- '.&HTML::Entities::encode($symb).'
';
+ }
+ $result.='
';
+ } else {
+ $result.=&HTML::Entities::encode($slot{'symb'});
+ }
+ $result.='';
+ }
if (exists($slot{'startreserve'})) {
$result.="\n".' '.$labels{'startreserve'}.': '.
&Apache::lonlocal::locallocaltime($slot{'startreserve'}).'';
}
+
+ if (exists($slot{'endreserve'})) {
+ $result.="\n".' '.$labels{'endreserve'}.': '.
+ &Apache::lonlocal::locallocaltime($slot{'endreserve'}).'';
+ }
+
+ if (exists($slot{'reservationmsg'})) {
+ my %options = &Apache::slotrequest::slot_reservationmsg_options();
+ $result.="\n".' '.$labels{'reservationmsg'}.': '.
+ $options{$slot{'reservationmsg'}}.'';
+ }
+
if (exists($slot{'proctor'})) {
my $proctors = $slot{'proctor'};
$proctors =~ s/,/, /g;