--- loncom/interface/slotrequest.pm 2015/09/27 14:21:48 1.129 +++ loncom/interface/slotrequest.pm 2016/10/12 14:16:09 1.133 @@ -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.129 2015/09/27 14:21:48 raeburn Exp $ +# $Id: slotrequest.pm,v 1.133 2016/10/12 14:16:09 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1114,14 +1114,25 @@ sub allowed_slot { # not allowed for this resource if (defined($slot->{'symb'})) { my $exclude = 1; - my ($slotmap,$slotid,$sloturl) = &Apache::lonnet::decode_symb($slot->{'symb'}); - if ($sloturl=~/\.(page|sequence)$/) { - my ($map,$id,$url) = &Apache::lonnet::decode_symb($symb); - if (($map ne '') && ($map eq $slotmap)) { + my @symbs; + if ($slot->{'symb'} =~ /,/) { + @symbs = split(/\s*,\s*/,$slot->{'symb'}); + } else { + @symbs = ($slot->{'symb'}); + } + my ($map,$id,$url) = &Apache::lonnet::decode_symb($symb); + foreach my $reqsymb (@symbs) { + next if ($reqsymb eq ''); + my ($slotmap,$slotid,$sloturl) = &Apache::lonnet::decode_symb($reqsymb); + if ($sloturl=~/\.(page|sequence)$/) { + if (($map ne '') && ($map eq $sloturl)) { + $exclude = 0; + last; + } + } elsif ($reqsymb eq $symb) { $exclude = 0; + last; } - } elsif ($slot->{'symb'} eq $symb) { - $exclude = 0; } if ($exclude) { unless ((ref($toskip) eq 'HASH') && ($toskip->{'symb'})) { @@ -1478,12 +1489,13 @@ sub show_table { 'secret' => 'Secret Word', 'space' => '# of students/max', 'ip' => 'IP or DNS restrictions', - 'symb' => 'Resource/Map slot is restricted to.', + 'symb' => 'Resource(s)/Map(s) slot is restricted to.', 'allowedsections' => 'Sections slot is restricted to.', 'allowedusers' => 'Users slot is restricted to.', 'uniqueperiod' => 'Period of time slot is unique', 'scheduled' => 'Scheduled Students', - 'proctor' => 'List of proctors'); + 'proctor' => 'List of proctors', + 'iptied' => 'Unique IP each student',); if ($crstype eq 'Community') { $show_fields{'startreserve'} = &mt('Time members can start reserving'); $show_fields{'endreserve'} = &mt('Time members can no longer reserve'); @@ -1491,7 +1503,7 @@ sub show_table { } my @show_order=('name','description','type','starttime','endtime', 'startreserve','endreserve','reservationmsg','secret','space', - 'ip','symb','allowedsections','allowedusers','uniqueperiod', + 'ip','iptied','symb','allowedsections','allowedusers','uniqueperiod', 'scheduled','proctor'); my @show = (exists($env{'form.show'})) ? &Apache::loncommon::get_env_multiple('form.show') @@ -1590,15 +1602,16 @@ sub show_table { $r->print(''); $r->print('
'); my $linkstart=''.$show_fields{$which}.''); + $tableheader .= ''.&mt('No slots meet the criteria for display').'
'); + } + $r->print(''); return; } @@ -2186,9 +2231,26 @@ sub slot_chooser { foreach my $slot (@{$allavailable}) { # not allowed for this resource if (ref($slots->{$slot}) eq 'HASH') { - if ((defined($slots->{$slot}->{'symb'})) && - ($slots->{$slot}->{'symb'} ne $symb)) { - next; + if ($slots->{$slot}->{'symb'} ne '') { + my ($map,$id,$url) = &Apache::lonnet::decode_symb($symb); + my $exclude = 1; + my @reqsymbs = split(/\s*,\s*/,$slots->{$slot}->{'symb'}); + if (@reqsymbs) { + if (grep(/^\Q$symb\E$/,@reqsymbs)) { + $exclude = 0; + } else { + foreach my $reqsymb (@reqsymbs) { + my (undef,undef,$sloturl) = &Apache::lonnet::decode_symb($reqsymb); + if ($sloturl=~/\.(page|sequence)$/) { + if (($map ne '') && ($map eq $sloturl)) { + $exclude = 0; + last; + } + } + } + } + next if ($exclude); + } } } push(@available,$slot); @@ -2313,14 +2375,16 @@ sub show_reservations { if ($showntablehdr) { $r->print(&Apache::loncommon::end_data_table().''.&mt('Previous [_1] changes',$curr{'show'}).' | '); + $r->print(''); } if ($more_records) { - $r->print(''.&mt('Next [_1] changes',$curr{'show'}).' | '); + $r->print(''); } - $r->print('