| … | |
… | |
| 65 | sub body { |
65 | sub body { |
| 66 | my $self = shift; |
66 | my $self = shift; |
| 67 | |
67 | |
| 68 | STUFF: { |
68 | STUFF: { |
| 69 | my $courseName = $self->{courseEnvironment}->{courseName}; |
69 | my $courseName = $self->{courseEnvironment}->{courseName}; |
| 70 | my $userName = $self->{r}->param("effectiveUser"); |
70 | my $effectiveUserName = $self->{r}->param("effectiveUser"); |
| 71 | my @sets = @{$self->{sets}}; |
71 | my @sets = @{$self->{sets}}; |
| 72 | |
72 | |
| 73 | unless (@sets) { |
73 | unless (@sets) { |
| 74 | print CGI::p("No problem sets were specified."); |
74 | print CGI::p("No problem sets were specified."); |
| 75 | last STUFF; |
75 | last STUFF; |
| … | |
… | |
| 91 | |
91 | |
| 92 | # determine name of PDF file |
92 | # determine name of PDF file |
| 93 | my $fileName; |
93 | my $fileName; |
| 94 | if (@sets > 1) { |
94 | if (@sets > 1) { |
| 95 | # multiset output |
95 | # multiset output |
| 96 | $fileName = "$courseName.$userName.multiset.pdf" |
96 | $fileName = "$courseName.$effectiveUserName.multiset.pdf" |
| 97 | } elsif (@sets == 1) { |
97 | } elsif (@sets == 1) { |
| 98 | # only one set |
98 | # only one set |
| 99 | my $setName = $sets[0]; |
99 | my $setName = $sets[0]; |
| 100 | $fileName = "$courseName.$userName.$setName.pdf"; |
100 | $fileName = "$courseName.$effectiveUserName.$setName.pdf"; |
| 101 | } else { |
101 | } else { |
| 102 | $fileName = "$courseName.$userName.pdf"; |
102 | $fileName = "$courseName.$effectiveUserName.pdf"; |
| 103 | } |
103 | } |
| 104 | |
104 | |
| 105 | # determine full URL |
105 | # determine full URL |
| 106 | my $fullURL = "$tempURL/$fileName"; |
106 | my $fullURL = "$tempURL/$fileName"; |
| 107 | |
107 | |
| … | |
… | |
| 237 | |
237 | |
| 238 | sub getSetTeX { |
238 | sub getSetTeX { |
| 239 | my ($self, $setName) = @_; |
239 | my ($self, $setName) = @_; |
| 240 | my $ce = $self->{courseEnvironment}; |
240 | my $ce = $self->{courseEnvironment}; |
| 241 | my $wwdb = $self->{wwdb}; |
241 | my $wwdb = $self->{wwdb}; |
| 242 | my $user = $self->{r}->param("user"); |
242 | my $effectiveUserName = $self->{r}->param("effectiveUser"); |
| 243 | my @problemNumbers = sort { $a <=> $b } $wwdb->getProblems($user, $setName); |
243 | my @problemNumbers = sort { $a <=> $b } $wwdb->getProblems($effectiveUserName, $setName); |
| 244 | |
244 | |
| 245 | # get header and footer |
245 | # get header and footer |
| 246 | my $setHeader = $wwdb->getSet($user, $setName)->set_header |
246 | my $setHeader = $wwdb->getSet($effectiveUserName, $setName)->set_header |
| 247 | || $ce->{webworkFiles}->{hardcopySnippets}->{setHeader}; |
247 | || $ce->{webworkFiles}->{hardcopySnippets}->{setHeader}; |
| 248 | # database doesn't support the following yet :( |
248 | # database doesn't support the following yet :( |
| 249 | #my $setFooter = $wwdb->getSet($user, $setName)->set_footer |
249 | #my $setFooter = $wwdb->getSet($effectiveUserName, $setName)->set_footer |
| 250 | # || $ce->{webworkFiles}->{hardcopySnippets}->{setFooter}; |
250 | # || $ce->{webworkFiles}->{hardcopySnippets}->{setFooter}; |
| 251 | # so we don't allow per-set customization, which is probably okay :) |
251 | # so we don't allow per-set customization, which is probably okay :) |
| 252 | my $setFooter = $ce->{webworkFiles}->{hardcopySnippets}->{setFooter}; |
252 | my $setFooter = $ce->{webworkFiles}->{hardcopySnippets}->{setFooter}; |
| 253 | |
253 | |
| 254 | my $tex = ""; |
254 | my $tex = ""; |
| … | |
… | |
| 279 | my $r = $self->{r}; |
279 | my $r = $self->{r}; |
| 280 | my $ce = $self->{courseEnvironment}; |
280 | my $ce = $self->{courseEnvironment}; |
| 281 | |
281 | |
| 282 | my $wwdb = $self->{wwdb}; |
282 | my $wwdb = $self->{wwdb}; |
| 283 | my $cldb = $self->{cldb}; |
283 | my $cldb = $self->{cldb}; |
| 284 | my $user = $cldb->getUser($r->param("effectiveUser")); |
284 | my $effectiveUser = $cldb->getUser($r->param("effectiveUser")); |
| 285 | my $set = $wwdb->getSet($user->id, $setName); |
285 | my $set = $wwdb->getSet($effectiveUser->id, $setName); |
| 286 | my $psvn = $wwdb->getPSVN($user->id, $setName); |
286 | my $psvn = $wwdb->getPSVN($effectiveUser->id, $setName); |
| 287 | |
287 | |
| 288 | # decide what to do about problem number |
288 | # decide what to do about problem number |
| 289 | my $problem; |
289 | my $problem; |
| 290 | if ($problemNumber) { |
290 | if ($problemNumber) { |
| 291 | $problem = $wwdb->getProblem($user->id, $setName, $problemNumber); |
291 | $problem = $wwdb->getProblem($effectiveUser->id, $setName, $problemNumber); |
| 292 | } elsif ($pgFile) { |
292 | } elsif ($pgFile) { |
| 293 | $problem = WeBWorK::Problem->new( |
293 | $problem = WeBWorK::Problem->new( |
| 294 | id => 0, |
294 | id => 0, |
| 295 | set_id => $set->id, |
295 | set_id => $set->id, |
| 296 | login_id => $user->id, |
296 | login_id => $effectiveUser->id, |
| 297 | source_file => $pgFile, |
297 | source_file => $pgFile, |
| 298 | # the rest of Problem's fields are not needed, i think |
298 | # the rest of Problem's fields are not needed, i think |
| 299 | ); |
299 | ); |
| 300 | } |
300 | } |
| 301 | |
301 | |
| 302 | my $pg = WeBWorK::PG->new( |
302 | my $pg = WeBWorK::PG->new( |
| 303 | $ce, |
303 | $ce, |
| 304 | $user, |
304 | $effectiveUser, |
| 305 | $r->param('key'), |
305 | $r->param('key'), |
| 306 | $set, |
306 | $set, |
| 307 | $problem, |
307 | $problem, |
| 308 | $psvn, |
308 | $psvn, |
| 309 | {}, # no form fields! |
309 | {}, # no form fields! |