From: jj v. a. <we...@ma...> - 2005-09-19 17:11:14
|
Log Message: ----------- Fix bug 819. This adds a method to DB for getting all merged problems for a (student,set) combination so that the problem value can be correct. See bug 819 for additional comments on how this affects scoring when an individual student is given an override value for "weight". Modified Files: -------------- webwork-modperl/lib/WeBWorK: DB.pm webwork-modperl/lib/WeBWorK/ContentGenerator/Instructor: StudentProgress.pm Scoring.pm webwork-modperl/lib/WeBWorK/ContentGenerator: Grades.pm Revision Data ------------- Index: DB.pm =================================================================== RCS file: /webwork/cvs/system/webwork-modperl/lib/WeBWorK/DB.pm,v retrieving revision 1.66 retrieving revision 1.67 diff -Llib/WeBWorK/DB.pm -Llib/WeBWorK/DB.pm -u -r1.66 -r1.67 --- lib/WeBWorK/DB.pm +++ lib/WeBWorK/DB.pm @@ -1865,6 +1865,29 @@ } } +=item getAllMergedUserProblems($userID, $setID) + +Returns a list of merged UserProblem objects representing all the problems +in the given set. Analogous to getAllUserProblems, except it returns +merged problem records. + +=cut + +sub getAllMergedUserProblems { + my ($self, $userID, $setID) = @_; + + croak "getAllMergedUserProblems: requires 2 arguments" + unless @_ == 3; + croak "getAllMergedUserProblems: argument 1 must contain a user_id" + unless defined $userID; + croak "getAllMergedUserProblems: argument 2 must contain a set_id" + unless defined $setID; + + my @userProblemRecords = $self->getAllUserProblems( $userID, $setID ); + my @userProblemIDs = map { [$userID, $setID, $_->problem_id] } @userProblemRecords; + return $self->getMergedProblems( @userProblemIDs ); +} + sub putUserProblem { my ($self, $UserProblem, $versioned) = @_; # $versioned is an optional argument which lets us slip versioned setIDs Index: Scoring.pm =================================================================== RCS file: /webwork/cvs/system/webwork-modperl/lib/WeBWorK/ContentGenerator/Instructor/Scoring.pm,v retrieving revision 1.49 retrieving revision 1.50 diff -Llib/WeBWorK/ContentGenerator/Instructor/Scoring.pm -Llib/WeBWorK/ContentGenerator/Instructor/Scoring.pm -u -r1.49 -r1.50 --- lib/WeBWorK/ContentGenerator/Instructor/Scoring.pm +++ lib/WeBWorK/ContentGenerator/Instructor/Scoring.pm @@ -381,7 +381,7 @@ $setRecord->assignment_type() !~ /gateway/ ) { foreach my $userID (@sortedUserIDs) { my %CurrUserProblems = map { $_->problem_id => $_ } - $db->getAllUserProblems($userID, $setID); + $db->getAllMergedUserProblems($userID, $setID); $UserProblems{$userID} = \%CurrUserProblems; } } else { # versioned sets; get the problems for the best version @@ -463,7 +463,7 @@ } $userStatusTotals{$user} = 0 unless exists $userStatusTotals{$user}; my $user_problem_status = ($userProblem->status =~/^[\d\.]+$/) ? $userProblem->status : 0; # ensure it's numeric - $userStatusTotals{$user} += $user_problem_status * $globalProblem->value; + $userStatusTotals{$user} += $user_problem_status * $userProblem->value; if ($scoringItems->{successIndex}) { $numberOfAttempts{$user} = 0 unless defined($numberOfAttempts{$user}); my $num_correct = $userProblem->num_correct; Index: StudentProgress.pm =================================================================== RCS file: /webwork/cvs/system/webwork-modperl/lib/WeBWorK/ContentGenerator/Instructor/StudentProgress.pm,v retrieving revision 1.19 retrieving revision 1.20 diff -Llib/WeBWorK/ContentGenerator/Instructor/StudentProgress.pm -Llib/WeBWorK/ContentGenerator/Instructor/StudentProgress.pm -u -r1.19 -r1.20 --- lib/WeBWorK/ContentGenerator/Instructor/StudentProgress.pm +++ lib/WeBWorK/ContentGenerator/Instructor/StudentProgress.pm @@ -420,7 +420,7 @@ debug("Begin obtaining problem records for user $student set $setName"); - my @problemRecords = sort {$a->problem_id <=> $b->problem_id } $db->getAllUserProblems( $student, $sN ); + my @problemRecords = sort {$a->problem_id <=> $b->problem_id } $db->getAllMergedUserProblems( $student, $sN ); debug("End obtaining problem records for user $student set $setName"); my $num_of_problems = @problemRecords; $max_num_problems = ($max_num_problems>= $num_of_problems) ? $max_num_problems : $num_of_problems; Index: Grades.pm =================================================================== RCS file: /webwork/cvs/system/webwork-modperl/lib/WeBWorK/ContentGenerator/Grades.pm,v retrieving revision 1.16 retrieving revision 1.17 diff -Llib/WeBWorK/ContentGenerator/Grades.pm -Llib/WeBWorK/ContentGenerator/Grades.pm -u -r1.16 -r1.17 --- lib/WeBWorK/ContentGenerator/Grades.pm +++ lib/WeBWorK/ContentGenerator/Grades.pm @@ -269,7 +269,7 @@ my $num_of_attempts = 0; debug("Begin collecting problems for set $setName"); - my @problemRecords = $db->getAllUserProblems( $studentName, $setName ); + my @problemRecords = $db->getAllMergedUserProblems( $studentName, $setName ); debug("End collecting problems for set $setName"); # FIXME the following line doesn't sort the problemRecords |