| … | |
… | |
| 26 | sub go { |
26 | sub go { |
| 27 | my ($self, $singleSet) = @_; |
27 | my ($self, $singleSet) = @_; |
| 28 | |
28 | |
| 29 | my $r = $self->{r}; |
29 | my $r = $self->{r}; |
| 30 | my $ce = $self->{courseEnvironment}; |
30 | my $ce = $self->{courseEnvironment}; |
| 31 | my @sets = $r->param("set"); |
31 | my @sets = $r->param("hcSet"); |
| 32 | my @users = $r->param("user"); |
32 | my @users = $r->param("hcUser"); |
| 33 | |
33 | |
| 34 | # add singleSet to the list of sets |
34 | # add singleSet to the list of sets |
| 35 | if (length $singleSet > 0) { |
35 | if (length $singleSet > 0) { |
| 36 | $singleSet =~ s/^set//; |
36 | $singleSet =~ s/^set//; |
| 37 | unshift @sets, $singleSet; |
37 | unshift @sets, $singleSet unless grep { $_ eq $singleSet } @sets; |
| 38 | } |
38 | } |
| 39 | |
39 | |
| 40 | # default user is the effectiveUser |
40 | # default user is the effectiveUser |
| 41 | unless (@users) { |
41 | unless (@users) { |
| 42 | unshift @users, $r->param("effectiveUser"); |
42 | unshift @users, $r->param("effectiveUser"); |
| … | |
… | |
| 52 | $self->{users} = \@users; |
52 | $self->{users} = \@users; |
| 53 | $self->{errors} = []; |
53 | $self->{errors} = []; |
| 54 | $self->{warnings} = []; |
54 | $self->{warnings} = []; |
| 55 | |
55 | |
| 56 | if ($r->param("generateHardcopy")) { |
56 | if ($r->param("generateHardcopy")) { |
| 57 | my $filePath = eval { $self->generateHardcopy() }; |
57 | my ($tempDir, $fileName) = eval { $self->generateHardcopy() }; |
| 58 | if ($@) { |
58 | if ($@) { |
| 59 | $self->{generationError} = $@; |
59 | $self->{generationError} = $@; |
| 60 | } else { |
60 | } else { |
| 61 | my ($fileName) = $filePath =~ m/([^\/]*)$/; |
61 | my $filePath = "$tempDir/$fileName"; |
| 62 | |
62 | |
| 63 | $r->content_type("application/x-pdf"); |
63 | $r->content_type("application/x-pdf"); |
| 64 | # as per RFC2183: |
64 | # as per RFC2183: |
| 65 | $r->header_out("Content-Disposition", "attachment; filename=$fileName"); |
65 | $r->header_out("Content-Disposition", "attachment; filename=$fileName"); |
| 66 | $r->send_http_header(); |
66 | $r->send_http_header(); |
| … | |
… | |
| 237 | return ""; |
237 | return ""; |
| 238 | } |
238 | } |
| 239 | |
239 | |
| 240 | sub generateHardcopy($) { |
240 | sub generateHardcopy($) { |
| 241 | my $self = shift; |
241 | my $self = shift; |
| 242 | my @sets = @{$self->{hcSets}}; |
242 | my @sets = @{$self->{sets}}; |
| 243 | my @users = @{$self->{hcUsers}}; |
243 | my @users = @{$self->{users}}; |
| 244 | my $multiSet = $self->{permissionLevel} > 0; |
244 | my $multiSet = $self->{permissionLevel} > 0; |
| 245 | my $multiUser = $self->{permissionLevel} > 0; |
245 | my $multiUser = $self->{permissionLevel} > 0; |
| 246 | |
|
|
| 247 | # sanity checks |
246 | # sanity checks |
| 248 | unless (@sets) { |
247 | unless (@sets) { |
| 249 | die ["RETRY", "No sets were specified."]; |
248 | die ["RETRY", "No sets were specified."]; |
| 250 | } |
249 | } |
| 251 | unless (@users) { |
250 | unless (@users) { |
| … | |
… | |
| 276 | # determine name of PDF file |
275 | # determine name of PDF file |
| 277 | my $courseName = $self->{courseEnvironment}->{courseName}; |
276 | my $courseName = $self->{courseEnvironment}->{courseName}; |
| 278 | my $fileNameSet = (@sets > 1 ? "multiset" : $sets[0]); |
277 | my $fileNameSet = (@sets > 1 ? "multiset" : $sets[0]); |
| 279 | my $fileNameUser = (@users > 1 ? "multiuser" : $users[0]); |
278 | my $fileNameUser = (@users > 1 ? "multiuser" : $users[0]); |
| 280 | my $fileName = "$courseName.$fileNameUser.$fileNameSet.pdf"; |
279 | my $fileName = "$courseName.$fileNameUser.$fileNameSet.pdf"; |
| 281 | |
280 | |
| 282 | # for each user ... generate TeX for each set |
281 | # for each user ... generate TeX for each set |
| 283 | my $tex; |
282 | my $tex; |
| 284 | foreach my $user (@users) { |
283 | foreach my $user (@users) { |
| 285 | $tex .= getMultiSetTeX(@sets); |
284 | $tex .= $self->getMultiSetTeX(@sets); |
| 286 | } |
285 | } |
| 287 | |
286 | |
| 288 | # deal with PG errors |
287 | # deal with PG errors |
| 289 | if (@{$self->{errors}}) { |
288 | if (@{$self->{errors}}) { |
| 290 | die ["PGFAIL"]; |
289 | die ["PGFAIL"]; |
| … | |
… | |
| 293 | # "try" to generate pdf |
292 | # "try" to generate pdf |
| 294 | eval { $self->latex2pdf($tex, $tempDir, $fileName) }; |
293 | eval { $self->latex2pdf($tex, $tempDir, $fileName) }; |
| 295 | if ($@) { |
294 | if ($@) { |
| 296 | die ["FAIL", "Failed to generate PDF from tex", $@]; |
295 | die ["FAIL", "Failed to generate PDF from tex", $@]; |
| 297 | } |
296 | } |
|
|
297 | |
|
|
298 | return $tempDir, $fileName; |
| 298 | } |
299 | } |
| 299 | |
300 | |
| 300 | # ----- |
301 | # ----- |
| 301 | |
302 | |
| 302 | sub latex2pdf { |
303 | sub latex2pdf { |