--- loncom/html/adm/helper/newslot.helper 2009/01/27 20:53:53 1.25 +++ loncom/html/adm/helper/newslot.helper 2015/10/05 02:35:51 1.33 @@ -76,7 +76,7 @@
Type: - Instructor asssignable. + Instructor assignable. Student selectable. return &{$helper->{DATA}{origslot}}('type','preassigned'); @@ -112,6 +112,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:
    @@ -149,11 +163,26 @@ 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'}); @@ -191,11 +220,25 @@ 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'; + } @@ -210,6 +253,21 @@ return &{$helper->{DATA}{origslot}}('ip'); + + +

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'; + +

@@ -218,15 +276,38 @@ 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; + + + @@ -265,16 +346,16 @@ - 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:

   
@@ -285,7 +366,7 @@
- + Created Slot @@ -297,22 +378,50 @@ $slot{$which} = $helper->{'VARS'}{$which}; } - foreach my $which ('ip','description','maxspace','secret','symb') { + foreach my $which ('ip','description','maxspace','secret') { if ( $helper->{'VARS'}{$which} =~/\S/ ) { $slot{$which} = $helper->{'VARS'}{$which}; } } + 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; @@ -322,7 +431,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))); } @@ -354,23 +463,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;