@@ -66,7 +66,9 @@ use constant JITAR_SET_FIELD_ORDER => [qw(restrict_prob_progression email_instru
6666# All but name are optional
6767# some_field => {
6868# name => "Some Field",
69- # type => "edit", # edit, choose, hidden, view - defines how the data is displayed
69+ # type => "edit", # edit, choose, hidden, view, [min, max, step] - defines how the data is displayed
70+ # [min, max, step] will introduce validation, so should not be used on just any
71+ # input where we expect numbers
7072# size => "50", # size of the edit box (if any)
7173# override => "none", # none, one, any, all - defines for whom this data can/must be overidden
7274# module => "problem_list", # WeBWorK module
@@ -298,7 +300,7 @@ use constant FIELD_PROPERTIES => {
298300 },
299301 attempts_per_version => {
300302 name => x(" Graded Submissions per Version" ),
301- type => ' edit ' ,
303+ type => [ 0, undef , 1 ] ,
302304 size => ' 3' ,
303305 override => ' any' ,
304306 default => ' 0' ,
@@ -327,7 +329,7 @@ use constant FIELD_PROPERTIES => {
327329 },
328330 versions_per_interval => {
329331 name => x(' Versions per Interval' ),
330- type => ' edit ' ,
332+ type => [ 0, undef , 1 ] ,
331333 size => ' 3' ,
332334 override => ' any' ,
333335 default => ' 0' ,
@@ -350,7 +352,7 @@ use constant FIELD_PROPERTIES => {
350352 },
351353 problems_per_page => {
352354 name => x(' Problems per Page' ),
353- type => ' edit ' ,
355+ type => [ 0, undef , 1 ] ,
354356 size => ' 3' ,
355357 override => ' any' ,
356358 default => ' 1' ,
@@ -452,7 +454,7 @@ use constant FIELD_PROPERTIES => {
452454 },
453455
454456 # In addition to the set fields above, there are a number of things
455- # that are set but aren" t in this table:
457+ # that are set but aren' t in this table:
456458 # any set proctor information (which is in the user tables), and
457459 # any set location restriction information (which is in the
458460 # location tables)
@@ -478,7 +480,7 @@ use constant FIELD_PROPERTIES => {
478480 },
479481 max_attempts => {
480482 name => x(' Max Attempts' ),
481- type => ' edit ' ,
483+ type => [ -1, undef , 1 ] ,
482484 size => 6,
483485 override => ' any' ,
484486 default => ' -1' ,
@@ -491,7 +493,7 @@ use constant FIELD_PROPERTIES => {
491493 },
492494 showMeAnother => {
493495 name => x(' Show Me Another' ),
494- type => ' edit ' ,
496+ type => [ -2, undef , 1 ] ,
495497 size => ' 6' ,
496498 override => ' any' ,
497499 default => ' -1' ,
@@ -507,7 +509,7 @@ use constant FIELD_PROPERTIES => {
507509 },
508510 showHintsAfter => {
509511 name => x(' Show Hints After' ),
510- type => ' edit ' ,
512+ type => [ -2, undef , 1 ] ,
511513 size => ' 6' ,
512514 override => ' any' ,
513515 default => ' -2' ,
@@ -524,7 +526,7 @@ use constant FIELD_PROPERTIES => {
524526 },
525527 prPeriod => {
526528 name => x(' Rerandomize After' ),
527- type => ' edit ' ,
529+ type => [ -1, undef , 1 ] ,
528530 size => ' 6' ,
529531 override => ' any' ,
530532 default => ' -1' ,
@@ -540,7 +542,7 @@ use constant FIELD_PROPERTIES => {
540542 },
541543 problem_seed => {
542544 name => x(' Seed' ),
543- type => ' edit ' ,
545+ type => [ 0, undef , 1 ] ,
544546 size => 6,
545547 override => ' one' ,
546548 help_text => x(
@@ -604,7 +606,7 @@ use constant FIELD_PROPERTIES => {
604606 },
605607 att_to_open_children => {
606608 name => x(' Attempt Threshold for Children' ),
607- type => ' edit ' ,
609+ type => [ -1, undef , 1 ] ,
608610 size => 6,
609611 override => ' any' ,
610612 default => ' 0' ,
@@ -819,14 +821,29 @@ sub fieldHTML ($c, $userID, $setID, $problemID, $globalRecord, $userRecord, $fie
819821 if $forOneUser && $globalRecord && !$userRecord ;
820822
821823 my %properties = %{ FIELD_PROPERTIES()-> {$field } };
824+ if ($field eq ' problems_per_page' ) {
825+ if ($c -> ce-> {test }{maxProblemsPerPage } == 1) {
826+ $properties {override } = ' none' ;
827+ } elsif ($c -> ce-> {test }{maxProblemsPerPage } > 1) {
828+ my $max = $c -> ce-> {test }{maxProblemsPerPage };
829+ $properties {type } = [ 1, $max , 1 ];
830+ $properties {help_text } =
831+ ' A test is broken up into pages with this many problems on each page. Students can '
832+ . ' move from page to page without clicking to grade the test, and their temporary answers will be '
833+ . " saved. The site administator has capped this setting at $max . If only using 1 problem per page, "
834+ . ' the student has many pages and may be frustrated trying to reach a particular problem. However, '
835+ . ' their answers will be saved more frequently as they move from page to page.' ;
836+ }
837+ }
822838
823839 return ' ' if $properties {type } eq ' hidden' ;
824840 return ' ' if $properties {override } eq ' one' && !$forOneUser ;
825841 return ' ' if $properties {override } eq ' none' && !$forOneUser ;
826842 return ' ' if $properties {override } eq ' all' && $forUsers ;
827843
828- my $edit = $properties {type } eq ' edit' && $properties {override } ne ' none' ;
829- my $choose = $properties {type } eq ' choose' && $properties {override } ne ' none' ;
844+ my $edit = $properties {type } eq ' edit' && $properties {override } ne ' none' ;
845+ my $number = ref ($properties {type }) eq ' ARRAY' && $properties {override } ne ' none' ;
846+ my $choose = $properties {type } eq ' choose' && $properties {override } ne ' none' ;
830847
831848 my ($globalValue , $userValue , $blankField ) = (undef , undef , ' ' );
832849 if ($field =~ / :/ ) {
@@ -870,7 +887,7 @@ sub fieldHTML ($c, $userID, $setID, $problemID, $globalRecord, $userRecord, $fie
870887 # This contains either a text input or a select for changing a given database field.
871888 my $input = ' ' ;
872889
873- if ($edit ) {
890+ if ($edit || $number ) {
874891 if ($field =~ / _date/ ) {
875892 $input = $c -> tag(
876893 ' div' ,
@@ -907,6 +924,10 @@ sub fieldHTML ($c, $userID, $setID, $problemID, $globalRecord, $userRecord, $fie
907924 );
908925 } else {
909926 my $value = $forUsers ? ($labels {$userValue } || $userValue ) : ($labels {$globalValue } || $globalValue );
927+ $value = $c -> ce-> {test }{maxProblemsPerPage }
928+ if ($field eq ' problems_per_page'
929+ && $c -> ce-> {test }{maxProblemsPerPage }
930+ && ($value == 0 || $value > $c -> ce-> {test }{maxProblemsPerPage }));
910931 $value = format_set_name_display($value =~ s /\s *,\s */ ,/ gr ) if $field eq ' restricted_release' ;
911932
912933 my @field_args = (
@@ -936,6 +957,15 @@ sub fieldHTML ($c, $userID, $setID, $problemID, $globalRecord, $userRecord, $fie
936957 )
937958 )-> join (' ' )
938959 );
960+ } elsif ($number ) {
961+ $input = $c -> number_field(
962+ @field_args ,
963+ min => ($properties {type }[0] || 0),
964+ max => ($properties {type }[1] || undef ),
965+ step => ($properties {type }[2] || 1),
966+ placeholder => $value ,
967+ $forUsers && $canOverride ? (placeholder => $c -> maketext(' Set Default' )) : ()
968+ );
939969 } else {
940970 $input = $c -> text_field(@field_args ,
941971 $forUsers && $canOverride ? (placeholder => $c -> maketext(' Set Default' )) : ());
0 commit comments