| … | |
… | |
| 81 | open_date => { |
81 | open_date => { |
| 82 | name => "Opens", |
82 | name => "Opens", |
| 83 | type => "edit", |
83 | type => "edit", |
| 84 | size => "24", |
84 | size => "24", |
| 85 | override => "any", |
85 | override => "any", |
|
|
86 | labels => { |
|
|
87 | 0 => "None Specified", |
|
|
88 | "" => "None Specified", |
|
|
89 | }, |
| 86 | }, |
90 | }, |
| 87 | due_date => { |
91 | due_date => { |
| 88 | name => "Answers Due", |
92 | name => "Answers Due", |
| 89 | type => "edit", |
93 | type => "edit", |
| 90 | size => "24", |
94 | size => "24", |
| 91 | override => "any", |
95 | override => "any", |
|
|
96 | labels => { |
|
|
97 | 0 => "None Specified", |
|
|
98 | "" => "None Specified", |
|
|
99 | }, |
| 92 | }, |
100 | }, |
| 93 | answer_date => { |
101 | answer_date => { |
| 94 | name => "Answers Available", |
102 | name => "Answers Available", |
| 95 | type => "edit", |
103 | type => "edit", |
| 96 | size => "24", |
104 | size => "24", |
| 97 | override => "any", |
105 | override => "any", |
|
|
106 | labels => { |
|
|
107 | 0 => "None Specified", |
|
|
108 | "" => "None Specified", |
|
|
109 | }, |
| 98 | }, |
110 | }, |
| 99 | published => { |
111 | published => { |
| 100 | name => "Visible to Students", |
112 | name => "Visible to Students", |
| 101 | type => "choose", |
113 | type => "choose", |
| 102 | override => "all", |
114 | override => "all", |
| … | |
… | |
| 504 | |
516 | |
| 505 | my $override = $r->param("set.$setID.$field.override"); |
517 | my $override = $r->param("set.$setID.$field.override"); |
| 506 | if (defined $override && $override eq $field) { |
518 | if (defined $override && $override eq $field) { |
| 507 | |
519 | |
| 508 | my $param = $r->param("set.$setID.$field"); |
520 | my $param = $r->param("set.$setID.$field"); |
| 509 | $param = $properties{$field}->{default} unless defined $param && $param ne ""; |
521 | $param = $properties{$field}->{default} || "" unless defined $param && $param ne ""; |
| 510 | $param = $undoLabels{$field}->{$param} || $param; |
522 | $param = $undoLabels{$field}->{$param} || $param; |
| 511 | if ($field =~ /_date/) { |
523 | if ($field =~ /_date/) { |
| 512 | $param = $self->parseDateTime($param); |
524 | $param = $self->parseDateTime($param); |
| 513 | } |
525 | } |
| 514 | $record->$field($param); |
526 | $record->$field($param); |
| … | |
… | |
| 522 | |
534 | |
| 523 | foreach my $field ( @{ SET_FIELDS() } ) { |
535 | foreach my $field ( @{ SET_FIELDS() } ) { |
| 524 | next unless canChange($forUsers, $field); |
536 | next unless canChange($forUsers, $field); |
| 525 | |
537 | |
| 526 | my $param = $r->param("set.$setID.$field"); |
538 | my $param = $r->param("set.$setID.$field"); |
| 527 | $param = $properties{$field}->{default} unless defined $param && $param ne ""; |
539 | $param = $properties{$field}->{default} || "" unless defined $param && $param ne ""; |
| 528 | $param = $undoLabels{$field}->{$param} || $param; |
540 | $param = $undoLabels{$field}->{$param} || $param; |
| 529 | if ($field =~ /_date/) { |
541 | if ($field =~ /_date/) { |
| 530 | $param = $self->parseDateTime($param); |
542 | $param = $self->parseDateTime($param); |
| 531 | } |
543 | } |
| 532 | $setRecord->$field($param); |
544 | $setRecord->$field($param); |
| … | |
… | |
| 562 | |
574 | |
| 563 | my $override = $r->param("problem.$problemID.$field.override"); |
575 | my $override = $r->param("problem.$problemID.$field.override"); |
| 564 | if (defined $override && $override eq $field) { |
576 | if (defined $override && $override eq $field) { |
| 565 | |
577 | |
| 566 | my $param = $r->param("problem.$problemID.$field"); |
578 | my $param = $r->param("problem.$problemID.$field"); |
| 567 | $param = $properties{$field}->{default} unless defined $param && $param ne ""; |
579 | $param = $properties{$field}->{default} || "" unless defined $param && $param ne ""; |
| 568 | $param = $undoLabels{$field}->{$param} || $param; |
580 | $param = $undoLabels{$field}->{$param} || $param; |
| 569 | $changed ||= changed($record->$field, $param); |
581 | $changed ||= changed($record->$field, $param); |
| 570 | $record->$field($param); |
582 | $record->$field($param); |
| 571 | } else { |
583 | } else { |
| 572 | $changed ||= changed($record->$field, undef); |
584 | $changed ||= changed($record->$field, undef); |
| … | |
… | |
| 577 | |
589 | |
| 578 | foreach my $field ( @{ USER_PROBLEM_FIELDS() } ) { |
590 | foreach my $field ( @{ USER_PROBLEM_FIELDS() } ) { |
| 579 | next unless canChange($forUsers, $field); |
591 | next unless canChange($forUsers, $field); |
| 580 | |
592 | |
| 581 | my $param = $r->param("problem.$problemID.$field"); |
593 | my $param = $r->param("problem.$problemID.$field"); |
| 582 | $param = $properties{$field}->{default} unless defined $param && $param ne ""; |
594 | $param = $properties{$field}->{default} || "" unless defined $param && $param ne ""; |
| 583 | $param = $undoLabels{$field}->{$param} || $param; |
595 | $param = $undoLabels{$field}->{$param} || $param; |
| 584 | $changed ||= changed($record->$field, $param); |
596 | $changed ||= changed($record->$field, $param); |
| 585 | $record->$field($param); |
597 | $record->$field($param); |
| 586 | } |
598 | } |
| 587 | $db->putUserProblem($record) if $changed; |
599 | $db->putUserProblem($record) if $changed; |
| … | |
… | |
| 596 | my $changed = 0; # keep track of any changes, if none are made, avoid unnecessary db accesses |
608 | my $changed = 0; # keep track of any changes, if none are made, avoid unnecessary db accesses |
| 597 | foreach my $field ( @{ PROBLEM_FIELDS() } ) { |
609 | foreach my $field ( @{ PROBLEM_FIELDS() } ) { |
| 598 | next unless canChange($forUsers, $field); |
610 | next unless canChange($forUsers, $field); |
| 599 | |
611 | |
| 600 | my $param = $r->param("problem.$problemID.$field"); |
612 | my $param = $r->param("problem.$problemID.$field"); |
| 601 | $param = $properties{$field}->{default} unless defined $param && $param ne ""; |
613 | $param = $properties{$field}->{default} || "" unless defined $param && $param ne ""; |
| 602 | $param = $undoLabels{$field}->{$param} || $param; |
614 | $param = $undoLabels{$field}->{$param} || $param; |
| 603 | $changed ||= changed($problemRecord->$field, $param); |
615 | $changed ||= changed($problemRecord->$field, $param); |
| 604 | $problemRecord->$field($param); |
616 | $problemRecord->$field($param); |
| 605 | } |
617 | } |
| 606 | $db->putGlobalProblem($problemRecord) if $changed; |
618 | $db->putGlobalProblem($problemRecord) if $changed; |
| … | |
… | |
| 630 | foreach my $field ( @{ USER_PROBLEM_FIELDS() } ) { |
642 | foreach my $field ( @{ USER_PROBLEM_FIELDS() } ) { |
| 631 | next unless canChange($forUsers, $field); |
643 | next unless canChange($forUsers, $field); |
| 632 | next unless $useful{$field}; |
644 | next unless $useful{$field}; |
| 633 | |
645 | |
| 634 | my $param = $r->param("problem.$problemID.$field"); |
646 | my $param = $r->param("problem.$problemID.$field"); |
| 635 | $param = $properties{$field}->{default} unless defined $param && $param ne ""; |
647 | $param = $properties{$field}->{default} || "" unless defined $param && $param ne ""; |
| 636 | $param = $undoLabels{$field}->{$param} || $param; |
648 | $param = $undoLabels{$field}->{$param} || $param; |
| 637 | $changed ||= changed($record->$field, $param); |
649 | $changed ||= changed($record->$field, $param); |
| 638 | $record->$field($param); |
650 | $record->$field($param); |
| 639 | } |
651 | } |
| 640 | $db->putUserProblem($record) if $changed; |
652 | $db->putUserProblem($record) if $changed; |
| … | |
… | |
| 1012 | |
1024 | |
| 1013 | my $editProblemPage = $urlpath->new(type => 'instructor_problem_editor_withset_withproblem', args => { courseID => $courseID, setID => $setID, problemID => $problemID }); |
1025 | my $editProblemPage = $urlpath->new(type => 'instructor_problem_editor_withset_withproblem', args => { courseID => $courseID, setID => $setID, problemID => $problemID }); |
| 1014 | my $editProblemLink = $self->systemLink($editProblemPage, params => { make_local_copy => 0 }); |
1026 | my $editProblemLink = $self->systemLink($editProblemPage, params => { make_local_copy => 0 }); |
| 1015 | |
1027 | |
| 1016 | # FIXME: should we have an "act as" type link here when editing for multiple users? |
1028 | # FIXME: should we have an "act as" type link here when editing for multiple users? |
| 1017 | my $viewProblemPage = $urlpath->new(type => 'problem_detail', args => { courseID => $courseID, setID => $setID }); |
1029 | my $viewProblemPage = $urlpath->new(type => 'problem_detail', args => { courseID => $courseID, setID => $setID, problemID => $problemID }); |
| 1018 | my $viewProblemLink = $self->systemLink($viewProblemPage, params => { effectiveUser => ($forOneUser ? $editForUser[0] : $userID)}); |
1030 | my $viewProblemLink = $self->systemLink($viewProblemPage, params => { effectiveUser => ($forOneUser ? $editForUser[0] : $userID)}); |
| 1019 | |
1031 | |
| 1020 | my @fields = @{ PROBLEM_FIELDS() }; |
1032 | my @fields = @{ PROBLEM_FIELDS() }; |
| 1021 | push @fields, @{ USER_PROBLEM_FIELDS() } if $forOneUser; |
1033 | push @fields, @{ USER_PROBLEM_FIELDS() } if $forOneUser; |
| 1022 | |
1034 | |