| … | |
… | |
| 19 | use File::Temp qw(tempdir); |
19 | use File::Temp qw(tempdir); |
| 20 | use WeBWorK::Form; |
20 | use WeBWorK::Form; |
| 21 | use WeBWorK::PG; |
21 | use WeBWorK::PG; |
| 22 | use WeBWorK::PG::IO; |
22 | use WeBWorK::PG::IO; |
| 23 | use WeBWorK::Utils qw(writeLog encodeAnswers decodeAnswers ref2string); |
23 | use WeBWorK::Utils qw(writeLog encodeAnswers decodeAnswers ref2string); |
|
|
24 | use WeBWorK::DB::Utils qw(global2user user2global findDefaults); |
| 24 | |
25 | |
| 25 | ############################################################ |
26 | ############################################################ |
| 26 | # |
27 | # |
| 27 | # user |
28 | # user |
| 28 | # effectiveUser |
29 | # effectiveUser |
| … | |
… | |
| 49 | my $courseEnv = $self->{ce}; |
50 | my $courseEnv = $self->{ce}; |
| 50 | my $db = $self->{db}; |
51 | my $db = $self->{db}; |
| 51 | my $userName = $r->param('user'); |
52 | my $userName = $r->param('user'); |
| 52 | my $effectiveUserName = $r->param('effectiveUser'); |
53 | my $effectiveUserName = $r->param('effectiveUser'); |
| 53 | |
54 | |
| 54 | my $user = $db->getUser($userName); |
55 | my $user = $db->getUser($userName); |
| 55 | my $effectiveUser = $db->getUser($effectiveUserName); |
56 | my $effectiveUser = $db->getUser($effectiveUserName); |
| 56 | # obtain the effective user set, or if that is not yet defined obtain global set |
57 | # obtain the effective user set, or if that is not yet defined obtain global set |
| 57 | my $set = $db->getGlobalUserSet($effectiveUserName, $setName); |
58 | my $set = $db->getGlobalUserSet($effectiveUserName, $setName); |
| 58 | #$set = $db->getGlobalSet($setName) unless defined($set); |
59 | #$set = $db->getGlobalSet($setName) unless defined($set); |
| 59 | unless (defined $set) { |
60 | unless (defined $set) { |
| 60 | $userSetClass = $courseEnv->{dbLayout}->{set_user}->{record}; |
61 | my $userSetClass = $courseEnv->{dbLayout}->{set_user}->{record}; |
| 61 | $set = global2user($userSetClass, $db->getGlobalSet($setName)) |
62 | $set = global2user($userSetClass, $db->getGlobalSet($setName)); |
|
|
63 | $set->psvn('000'); |
| 62 | } |
64 | } |
| 63 | # obtain the effective user problem, or if that is not yet defined obtain global problem |
65 | # obtain the effective user problem, or if that is not yet defined obtain global problem |
| 64 | my $problem = $db->getGlobalUserProblem($effectiveUserName, $setName, $problemNumber); |
66 | my $problem = $db->getGlobalUserProblem($effectiveUserName, $setName, $problemNumber); |
|
|
67 | unless (defined $set) { |
|
|
68 | my $userProblemClass = $courseEnv->{dbLayout}->{problem_user}->{record}; |
|
|
69 | $problem = global2user($userProblemClass, $db->getGlobalSet($setName)); |
|
|
70 | $problem->max_attempts(-1); |
|
|
71 | } |
| 65 | $problem = $db->getGlobalProblem($setName, $problemNumber) unless defined($problem); |
72 | #$problem = $db->getGlobalProblem($setName, $problemNumber) unless defined($problem); |
| 66 | # FIXME |
73 | # FIXME |
| 67 | # a better solution at this point would be to take set and problem, convert them to global_user type |
74 | # a better solution at this point would be to take set and problem, convert them to global_user type |
| 68 | # so that they have the right methods. |
75 | # so that they have the right methods. |
| 69 | # Stuff the local copy of $set and $problem with default data where it won't have been defined |
76 | # Stuff the local copy of $set and $problem with default data where it won't have been defined |
| 70 | # Make sure that nothing bad is stored back in the database. |
77 | # Make sure that nothing bad is stored back in the database. |