| … | |
… | |
| 54 | my $key = $r->param('key'); |
54 | my $key = $r->param('key'); |
| 55 | my $user = $db->getUser($userName); |
55 | my $user = $db->getUser($userName); |
| 56 | my $effectiveUser = $db->getUser($effectiveUserName); |
56 | my $effectiveUser = $db->getUser($effectiveUserName); |
| 57 | |
57 | |
| 58 | # obtain the effective user set, or if that is not yet defined obtain global set |
58 | # obtain the effective user set, or if that is not yet defined obtain global set |
| 59 | my $set = $db->getGlobalUserSet($effectiveUserName, $setName); |
59 | my $set = $db->getMergedSet($effectiveUserName, $setName); |
| 60 | unless (defined $set) { |
60 | unless (defined $set) { |
| 61 | my $userSetClass = $courseEnv->{dbLayout}->{set_user}->{record}; |
61 | my $userSetClass = $courseEnv->{dbLayout}->{set_user}->{record}; |
| 62 | $set = global2user($userSetClass, $db->getGlobalSet($setName)); |
62 | $set = global2user($userSetClass, $db->getGlobalSet($setName)); |
| 63 | $set->psvn('000'); |
63 | $set->psvn('000'); |
| 64 | } |
64 | } |
| 65 | my $psvn = $set->psvn(); |
65 | my $psvn = $set->psvn(); |
| 66 | |
66 | |
| 67 | # obtain the effective user problem, or if that is not yet defined obtain global problem |
67 | # obtain the effective user problem, or if that is not yet defined obtain global problem |
| 68 | my $problem = $db->getGlobalUserProblem($effectiveUserName, $setName, $problemNumber); |
68 | my $problem = $db->getMergedProblem($effectiveUserName, $setName, $problemNumber); |
| 69 | unless (defined $problem) { |
69 | unless (defined $problem) { |
| 70 | my $userProblemClass = $courseEnv->{dbLayout}->{problem_user}->{record}; |
70 | my $userProblemClass = $courseEnv->{dbLayout}->{problem_user}->{record}; |
| 71 | $problem = global2user($userProblemClass, $db->getGlobalProblem($setName,$problemNumber)); |
71 | $problem = global2user($userProblemClass, $db->getGlobalProblem($setName,$problemNumber)); |
| 72 | |
72 | |
| 73 | # $problem->max_attempts(-1); # default is infinite number of attempts |
73 | # $problem->max_attempts(-1); # default is infinite number of attempts |
| … | |
… | |
| 285 | |
285 | |
| 286 | print CGI::strong("Problems"), CGI::br(); |
286 | print CGI::strong("Problems"), CGI::br(); |
| 287 | |
287 | |
| 288 | my $effectiveUser = $self->{r}->param("effectiveUser"); |
288 | my $effectiveUser = $self->{r}->param("effectiveUser"); |
| 289 | my @problems; |
289 | my @problems; |
| 290 | push @problems, $db->getGlobalUserProblem($effectiveUser, $setName, $_) |
290 | push @problems, $db->getMergedProblem($effectiveUser, $setName, $_) |
| 291 | foreach ($db->listUserProblems($effectiveUser, $setName)); |
291 | foreach ($db->listUserProblems($effectiveUser, $setName)); |
| 292 | foreach my $problem (sort { $a->problem_id <=> $b->problem_id } @problems) { |
292 | foreach my $problem (sort { $a->problem_id <=> $b->problem_id } @problems) { |
| 293 | print CGI::a({-href=>"$root/$courseName/$setName/".$problem->problem_id."/?" |
293 | print CGI::a({-href=>"$root/$courseName/$setName/".$problem->problem_id."/?" |
| 294 | . $self->url_authen_args . "&displayMode=" . $self->{displayMode}}, |
294 | . $self->url_authen_args . "&displayMode=" . $self->{displayMode}}, |
| 295 | "Problem ".$problem->problem_id), CGI::br(); |
295 | "Problem ".$problem->problem_id), CGI::br(); |
| … | |
… | |
| 311 | my $effectiveUser = $self->{r}->param("effectiveUser"); |
311 | my $effectiveUser = $self->{r}->param("effectiveUser"); |
| 312 | my $tail = "&displayMode=".$self->{displayMode}; |
312 | my $tail = "&displayMode=".$self->{displayMode}; |
| 313 | |
313 | |
| 314 | my @links = ("Problem List" , "$root/$courseName/$setName", "navProbList"); |
314 | my @links = ("Problem List" , "$root/$courseName/$setName", "navProbList"); |
| 315 | |
315 | |
| 316 | my $prevProblem = $db->getGlobalUserProblem($effectiveUser, $setName, $problemNumber-1); |
316 | my $prevProblem = $db->getMergedProblem($effectiveUser, $setName, $problemNumber-1); |
| 317 | my $nextProblem = $db->getGlobalUserProblem($effectiveUser, $setName, $problemNumber+1); |
317 | my $nextProblem = $db->getMergedProblem($effectiveUser, $setName, $problemNumber+1); |
| 318 | unshift @links, "Previous Problem" , ($prevProblem |
318 | unshift @links, "Previous Problem" , ($prevProblem |
| 319 | ? "$root/$courseName/$setName/".$prevProblem->problem_id |
319 | ? "$root/$courseName/$setName/".$prevProblem->problem_id |
| 320 | : "") , "navPrev"; |
320 | : "") , "navPrev"; |
| 321 | push @links, "Next Problem" , ($nextProblem |
321 | push @links, "Next Problem" , ($nextProblem |
| 322 | ? "$root/$courseName/$setName/".$nextProblem->problem_id |
322 | ? "$root/$courseName/$setName/".$nextProblem->problem_id |