@@ -14,7 +14,7 @@ use WeBWorK::Utils qw(cryptPassword x);
1414use WeBWorK::Utils::Files qw( surePathToFile readFile) ;
1515use WeBWorK::Utils::Instructor qw( assignProblemToAllSetUsers addProblemToSet) ;
1616use WeBWorK::Utils::JITAR qw( seq_to_jitar_id jitar_id_to_seq) ;
17- use WeBWorK::Utils::Sets qw( format_set_name_internal format_set_name_display) ;
17+ use WeBWorK::Utils::Sets qw( format_set_name_display) ;
1818require WeBWorK::PG;
1919
2020our @EXPORT_OK = qw( FIELD_PROPERTIES) ;
@@ -197,7 +197,7 @@ use constant FIELD_PROPERTIES => {
197197 override => ' any' ,
198198 help_text => x(
199199 ' This set will be unavailable to students until they have earned the "Score Required for Release" on the '
200- . ' sets specified in this field. The sets should be written as a comma separated list .'
200+ . ' sets selected in this field. Hold down Ctrl (or Cmd on Mac) to select or deselect multiple sets .'
201201 )
202202 },
203203 restricted_status => {
@@ -886,14 +886,31 @@ sub fieldHTML ($c, $userID, $setID, $problemID, $globalRecord, $userRecord, $fie
886886 if ($field eq ' problems_per_page'
887887 && $c -> ce-> {test }{maxProblemsPerPage }
888888 && ($value == 0 || $value > $c -> ce-> {test }{maxProblemsPerPage }));
889- $value = format_set_name_display($value =~ s /\s *,\s */ ,/ gr ) if $field eq ' restricted_release' ;
890889
891890 my @field_args = (
892891 id => " $recordType .$recordID .${field} _id" ,
893892 class => ' form-control form-control-sm' ,
894- $field eq ' restricted_release ' || $field eq ' source_file' ? (dir => ' ltr' ) : ()
893+ $field eq ' source_file' ? (dir => ' ltr' ) : ()
895894 );
896- if ($field eq ' problem_seed' ) {
895+ if ($field eq ' restricted_release' ) {
896+ # Only sets that currently exist in the course are valid choices.
897+ my @setIDs = sort grep { $_ ne $setID } $db -> listGlobalSets;
898+ my %isSelected =
899+ map { $_ => 1 } split (/ \s *,\s */ , $value =~ s / ^\s *|\s *$// gr );
900+
901+ $input = $c -> select_field(
902+ " $recordType .$recordID .$field " ,
903+ [
904+ map {
905+ [ format_set_name_display($_ ) => $_ , $isSelected {$_ } ? (selected => undef ) : () ]
906+ } @setIDs
907+ ],
908+ id => " $recordType .$recordID .${field} _id" ,
909+ class => ' form-select form-select-sm' ,
910+ multiple => undef ,
911+ size => (@setIDs ? (@setIDs > 8 ? 8 : scalar (@setIDs )) : 1)
912+ );
913+ } elsif ($field eq ' problem_seed' ) {
897914 # Insert a randomization button
898915 $input = $c -> tag(
899916 ' div' ,
@@ -1411,7 +1428,14 @@ sub initialize ($c) {
14111428 next unless canChange($forUsers , $field );
14121429
14131430 my @paramValues = $c -> param(" set.$setID .$field " );
1414- my $param = @paramValues > 1 && $paramValues [0] eq ' numeric' ? $paramValues [1] : $paramValues [0];
1431+ my $param ;
1432+ if ($field eq ' restricted_release' ) {
1433+ $param = join (' ,' , grep {$_ } @paramValues );
1434+ } elsif (@paramValues > 1 && $paramValues [0] eq ' numeric' ) {
1435+ $param = $paramValues [1];
1436+ } else {
1437+ $param = $paramValues [0];
1438+ }
14151439 if ($param && $param ne ' ' ) {
14161440 $param = $param * $properties {$field }-> {convertby } if $properties {$field }{convertby };
14171441
@@ -1488,13 +1512,16 @@ sub initialize ($c) {
14881512 next unless canChange($forUsers , $field );
14891513
14901514 my @paramValues = $c -> param(" set.$setID .$field " );
1491- my $param = @paramValues > 1 && $paramValues [0] eq ' numeric' ? $paramValues [1] : $paramValues [0];
1515+ my $param ;
1516+ if ($field eq ' restricted_release' ) {
1517+ $param = join (' ,' , grep {$_ } @paramValues );
1518+ } elsif (@paramValues > 1 && $paramValues [0] eq ' numeric' ) {
1519+ $param = $paramValues [1];
1520+ } else {
1521+ $param = $paramValues [0];
1522+ }
14921523 $param = defined $properties {$field }{default } ? $properties {$field }{default } : ' '
14931524 unless defined $param && $param ne ' ' ;
1494- if ($field =~ / restricted_release/ && $param ) {
1495- $param = format_set_name_internal($param =~ s /\s *,\s */ ,/ gr );
1496- $c -> check_sets($db , $param );
1497- }
14981525 if ($properties {$field }-> {convertby } && $param ) {
14991526 $param = $param * $properties {$field }-> {convertby };
15001527 }
@@ -2093,17 +2120,6 @@ sub checkFile ($c, $filePath, $headerType) {
20932120 return $c -> maketext(" This source file is not a plain file!" );
20942121}
20952122
2096- # Make sure restrictor sets exist.
2097- sub check_sets ($c , $db , $sets_string ) {
2098- my @proposed_sets = split (/ \s *,\s */ , $sets_string );
2099- for (@proposed_sets ) {
2100- $c -> addbadmessage(" Error: $_ is not a valid set name in restricted release list!" )
2101- unless $db -> existsGlobalSet($_ );
2102- }
2103-
2104- return ;
2105- }
2106-
21072123sub userCountMessage ($c , $count , $numUsers ) {
21082124 if ($count == 0) {
21092125 return $c -> tag(' em' , $c -> maketext(' no students' ));
0 commit comments