| … | |
… | |
| 22 | use WeBWorK::Utils qw(writeLog encodeAnswers decodeAnswers ref2string); |
22 | use WeBWorK::Utils qw(writeLog encodeAnswers decodeAnswers ref2string); |
| 23 | |
23 | |
| 24 | ############################################################ |
24 | ############################################################ |
| 25 | # |
25 | # |
| 26 | # user |
26 | # user |
|
|
27 | # effectiveUser |
| 27 | # key |
28 | # key |
| 28 | # |
29 | # |
| 29 | # displayMode |
30 | # displayMode |
| 30 | # showOldAnswers |
31 | # showOldAnswers |
| 31 | # showCorrectAnswers |
32 | # showCorrectAnswers |
| … | |
… | |
| 41 | |
42 | |
| 42 | sub pre_header_initialize { |
43 | sub pre_header_initialize { |
| 43 | my ($self, $setName, $problemNumber) = @_; |
44 | my ($self, $setName, $problemNumber) = @_; |
| 44 | my $courseEnv = $self->{courseEnvironment}; |
45 | my $courseEnv = $self->{courseEnvironment}; |
| 45 | my $r = $self->{r}; |
46 | my $r = $self->{r}; |
| 46 | my $authUserName = $r->param("user"); |
47 | my $userName = $r->param('user'); |
| 47 | my $userName = $r->param("effectiveUser"); |
48 | my $effectiveUserName = $r->param('effectiveUser'); |
| 48 | |
49 | |
| 49 | ##### database setup ##### |
50 | ##### database setup ##### |
| 50 | |
51 | |
| 51 | my $cldb = WeBWorK::DB::Classlist->new($courseEnv); |
52 | my $cldb = WeBWorK::DB::Classlist->new($courseEnv); |
| 52 | my $wwdb = WeBWorK::DB::WW->new($courseEnv); |
53 | my $wwdb = WeBWorK::DB::WW->new($courseEnv); |
| 53 | my $authdb = WeBWorK::DB::Auth->new($courseEnv); |
54 | my $authdb = WeBWorK::DB::Auth->new($courseEnv); |
| 54 | |
55 | |
| 55 | my $user = $cldb->getUser($userName); |
56 | my $user = $cldb->getUser($userName); |
|
|
57 | my $effectiveUser = $cldb->getUser($effectiveUserName); |
| 56 | my $set = $wwdb->getSet($userName, $setName); |
58 | my $set = $wwdb->getSet($effectiveUserName, $setName); |
| 57 | my $problem = $wwdb->getProblem($userName, $setName, $problemNumber); |
59 | my $problem = $wwdb->getProblem($effectiveUserName, $setName, $problemNumber); |
| 58 | my $psvn = $wwdb->getPSVN($userName, $setName); |
60 | my $psvn = $wwdb->getPSVN($effectiveUserName, $setName); |
| 59 | my $permissionLevel = $authdb->getPermissions($authUserName); |
61 | my $permissionLevel = $authdb->getPermissions($userName); |
| 60 | |
62 | |
| 61 | ##### form processing ##### |
63 | ##### form processing ##### |
| 62 | |
64 | |
| 63 | # set options from form fields (see comment at top of file for names) |
65 | # set options from form fields (see comment at top of file for names) |
| 64 | my $displayMode = $r->param("displayMode") || $courseEnv->{pg}->{options}->{displayMode}; |
66 | my $displayMode = $r->param("displayMode") || $courseEnv->{pg}->{options}->{displayMode}; |
| … | |
… | |
| 116 | |
118 | |
| 117 | ##### translation ##### |
119 | ##### translation ##### |
| 118 | |
120 | |
| 119 | my $pg = WeBWorK::PG->new( |
121 | my $pg = WeBWorK::PG->new( |
| 120 | $courseEnv, |
122 | $courseEnv, |
| 121 | $user, |
123 | $effectiveUser, |
| 122 | $r->param('key'), |
124 | $r->param('key'), |
| 123 | $set, |
125 | $set, |
| 124 | $problem, |
126 | $problem, |
| 125 | $psvn, |
127 | $psvn, |
| 126 | $formFields, |
128 | $formFields, |
| … | |
… | |
| 144 | $self->{wwdb} = $wwdb; |
146 | $self->{wwdb} = $wwdb; |
| 145 | $self->{authdb} = $authdb; |
147 | $self->{authdb} = $authdb; |
| 146 | |
148 | |
| 147 | $self->{userName} = $userName; |
149 | $self->{userName} = $userName; |
| 148 | $self->{user} = $user; |
150 | $self->{user} = $user; |
|
|
151 | $self->{effectiveUser} = $effectiveUser; |
| 149 | $self->{set} = $set; |
152 | $self->{set} = $set; |
| 150 | $self->{problem} = $problem; |
153 | $self->{problem} = $problem; |
| 151 | $self->{permissionLevel} = $permissionLevel; |
154 | $self->{permissionLevel} = $permissionLevel; |
| 152 | |
155 | |
| 153 | $self->{displayMode} = $displayMode; |
156 | $self->{displayMode} = $displayMode; |
| … | |
… | |
| 207 | my $courseName = $ce->{courseName}; |
210 | my $courseName = $ce->{courseName}; |
| 208 | |
211 | |
| 209 | print CGI::strong("Problems"), CGI::br(); |
212 | print CGI::strong("Problems"), CGI::br(); |
| 210 | |
213 | |
| 211 | my $wwdb = $self->{wwdb}; |
214 | my $wwdb = $self->{wwdb}; |
| 212 | my $user = $self->{userName}; |
215 | my $effectiveUser = $self->{r}->param("effectiveUser"); |
| 213 | my @problems; |
216 | my @problems; |
| 214 | push @problems, $wwdb->getProblem($user, $setName, $_) |
217 | push @problems, $wwdb->getProblem($effectiveUser, $setName, $_) |
| 215 | foreach ($wwdb->getProblems($user, $setName)); |
218 | foreach ($wwdb->getProblems($effectiveUser, $setName)); |
| 216 | foreach my $problem (sort { $a->id <=> $b->id } @problems) { |
219 | foreach my $problem (sort { $a->id <=> $b->id } @problems) { |
| 217 | print CGI::a({-href=>"$root/$courseName/$setName/".$problem->id."/?" |
220 | print CGI::a({-href=>"$root/$courseName/$setName/".$problem->id."/?" |
| 218 | . $self->url_authen_args . "&displayMode=" . $self->{displayMode}}, |
221 | . $self->url_authen_args . "&displayMode=" . $self->{displayMode}}, |
| 219 | "Problem ".$problem->id), CGI::br(); |
222 | "Problem ".$problem->id), CGI::br(); |
| 220 | } |
223 | } |
| … | |
… | |
| 228 | |
231 | |
| 229 | my $ce = $self->{courseEnvironment}; |
232 | my $ce = $self->{courseEnvironment}; |
| 230 | my $root = $ce->{webworkURLs}->{root}; |
233 | my $root = $ce->{webworkURLs}->{root}; |
| 231 | my $courseName = $ce->{courseName}; |
234 | my $courseName = $ce->{courseName}; |
| 232 | |
235 | |
| 233 | my $wwdb = $self->{wwdb}; |
236 | my $wwdb = $self->{wwdb}; |
| 234 | my $user = $self->{userName}; |
237 | my $effectiveUser = $self->{r}->param("effectiveUser"); |
| 235 | my $tail = "&displayMode=".$self->{displayMode}; |
238 | my $tail = "&displayMode=".$self->{displayMode}; |
| 236 | |
239 | |
| 237 | my @links = ("Problem List" => "$root/$courseName/$setName"); |
240 | my @links = ("Problem List" => "$root/$courseName/$setName"); |
| 238 | |
241 | |
| 239 | my $prevProblem = $wwdb->getProblem($user, $setName, $problemNumber-1); |
242 | my $prevProblem = $wwdb->getProblem($effectiveUser, $setName, $problemNumber-1); |
| 240 | my $nextProblem = $wwdb->getProblem($user, $setName, $problemNumber+1); |
243 | my $nextProblem = $wwdb->getProblem($effectiveUser, $setName, $problemNumber+1); |
| 241 | unshift @links, "Previous Problem" => $prevProblem |
244 | unshift @links, "Previous Problem" => $prevProblem |
| 242 | ? "$root/$courseName/$setName/".$prevProblem->id |
245 | ? "$root/$courseName/$setName/".$prevProblem->id |
| 243 | : ""; |
246 | : ""; |
| 244 | push @links, "Next Problem" => $nextProblem |
247 | push @links, "Next Problem" => $nextProblem |
| 245 | ? "$root/$courseName/$setName/".$nextProblem->id |
248 | ? "$root/$courseName/$setName/".$nextProblem->id |