--- loncom/html/adm/helper/newslot.helper 2010/10/31 15:32:15 1.27 +++ loncom/html/adm/helper/newslot.helper 2023/07/07 04:18:18 1.30.4.1.4.2 @@ -26,8 +26,32 @@ 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}; + } } @@ -112,6 +136,20 @@ +

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:
    @@ -168,12 +206,36 @@ $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: @@ -212,16 +274,30 @@ return 'any'; - + -

IP restrictions:
    +

IP restrictions -- allow from all except:
    - + + return undef; - return &{$helper->{DATA}{origslot}}('ip'); + return &{$helper->{DATA}{origslot}}('ipdeny'); + + + + +

IP restrictions -- deny from all except:
    + + + + + return undef; + + + return &{$helper->{DATA}{origslot}}('ipallow');

@@ -233,7 +309,7 @@ PROCTOR - return $res->is_problem() + return $res->is_problem() || $res->is_tool() return $res->symb() return &{$helper->{DATA}{origslot}}('symb'); @@ -299,7 +375,7 @@ - + Created Slot @@ -311,12 +387,32 @@ $slot{$which} = $helper->{'VARS'}{$which}; } - foreach my $which ('ip','description','maxspace','secret','symb') { + foreach my $which ('description','maxspace','secret','symb') { 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')) { @@ -330,6 +426,10 @@ $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'}, @@ -377,6 +477,9 @@ 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'}).'
  • '. @@ -395,6 +498,11 @@ &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'}.': '.