[system] / trunk / webwork2 / lib / WeBWorK / ContentGenerator / Hardcopy.pm Repository:
ViewVC logotype

Diff of /trunk/webwork2/lib/WeBWorK/ContentGenerator/Hardcopy.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 2763 Revision 2764
1################################################################################ 1################################################################################
2# WeBWorK Online Homework Delivery System 2# WeBWorK Online Homework Delivery System
3# Copyright © 2000-2003 The WeBWorK Project, http://openwebwork.sf.net/ 3# Copyright © 2000-2003 The WeBWorK Project, http://openwebwork.sf.net/
4# $CVSHeader: webwork2/lib/WeBWorK/ContentGenerator/Hardcopy.pm,v 1.47.2.1 2004/08/18 22:32:23 gage Exp $ 4# $CVSHeader: webwork2/lib/WeBWorK/ContentGenerator/Hardcopy.pm,v 1.48 2004/08/18 22:55:41 gage Exp $
5# 5#
6# This program is free software; you can redistribute it and/or modify it under 6# This program is free software; you can redistribute it and/or modify it under
7# the terms of either: (a) the GNU General Public License as published by the 7# the terms of either: (a) the GNU General Public License as published by the
8# Free Software Foundation; either version 2, or (at your option) any later 8# Free Software Foundation; either version 2, or (at your option) any later
9# version, or (b) the "Artistic License" which comes with this package. 9# version, or (b) the "Artistic License" which comes with this package.
50sub pre_header_initialize { 50sub pre_header_initialize {
51 my ($self) = @_; 51 my ($self) = @_;
52 my $r = $self->r; 52 my $r = $self->r;
53 my $ce = $r->ce; 53 my $ce = $r->ce;
54 my $db = $r->db; 54 my $db = $r->db;
55 my $authz = $r->authz;
55 56
56 my $singleSet = $r->urlpath->arg("setID"); 57 my $singleSet = $r->urlpath->arg("setID");
57 my @sets = $r->param("hcSet"); 58 my @sets = $r->param("hcSet");
58 my @users = $r->param("hcUser"); 59 my @users = $r->param("hcUser");
59 my $hardcopy_format = $r->param('hardcopy_format') ? $r->param('hardcopy_format') : ''; 60 my $hardcopy_format = $r->param('hardcopy_format') ? $r->param('hardcopy_format') : '';
75 76
76 $self->{effectiveUser} = $db->getUser($r->param("effectiveUser")); # checked 77 $self->{effectiveUser} = $db->getUser($r->param("effectiveUser")); # checked
77 die "user ", $r->param("effectiveUser"), " (effective user) not found." 78 die "user ", $r->param("effectiveUser"), " (effective user) not found."
78 unless $self->{effectiveUser}; 79 unless $self->{effectiveUser};
79 80
80 my $PermissionLevel = $db->getPermissionLevel($r->param("user")); # checked 81 #my $PermissionLevel = $db->getPermissionLevel($r->param("user")); # checked
81 if ($PermissionLevel) { 82 #if ($PermissionLevel) {
82 $self->{permissionLevel} = $PermissionLevel->permission(); 83 # $self->{permissionLevel} = $PermissionLevel->permission();
83 } else { 84 #} else {
84 die "permission level for user ", $r->param("user"), " (real user) not found."; 85 # die "permission level for user ", $r->param("user"), " (real user) not found.";
85 } 86 #}
86 87
87 $self->{sets} = \@sets; 88 $self->{sets} = \@sets;
88 $self->{users} = \@users; 89 $self->{users} = \@users;
89 $self->{hardcopy_format} = $hardcopy_format; 90 $self->{hardcopy_format} = $hardcopy_format;
90 $self->{errors} = []; 91 $self->{errors} = [];
91 $self->{warnings} = []; 92 $self->{warnings} = [];
92 93
93 94 # is the user allowed to request multiple sets/users at a time?
94 # security checks 95 my $multiSet = $authz->hasPermissions($r->param("user"), "download_hardcopy_multiset");
95 my $multiSet = $self->{permissionLevel} > 0; 96 my $multiUser = $authz->hasPermissions($r->param("user"), "download_hardcopy_multiuser");
96 my $multiUser = $self->{permissionLevel} > 0;
97 97
98 if (@sets > 1 and not $multiSet) { 98 if (@sets > 1 and not $multiSet) {
99 $self->{generationError} = ["SIMPLE", "You are not permitted to generate hardcopy for multiple sets. Please select a single set and try again."]; 99 $self->{generationError} = ["SIMPLE", "You are not permitted to generate hardcopy for multiple sets. Please select a single set and try again."];
100 } 100 }
101 if (@users > 1 and not $multiUser) { 101 if (@users > 1 and not $multiUser) {
238 238
239sub displayForm($) { 239sub displayForm($) {
240 my ($self) = @_; 240 my ($self) = @_;
241 my $r = $self->r; 241 my $r = $self->r;
242 my $db = $r->db; 242 my $db = $r->db;
243 my $authz = $r->authz;
243 244
244 print CGI::start_p(), "Select the problem sets for which to generate hardcopy versions."; 245 print CGI::start_p(), "Select the problem sets for which to generate hardcopy versions.";
245 if ($self->{permissionLevel} > 0) { 246 if ($authz->hasPermissions($r->param("user"), "download_hardcopy_multiuser")) {
246 print "You may also select multiple users from the users list. You will receive hardcopy for each (set, user) pair."; 247 print "You may also select multiple users from the users list. You will receive hardcopy for each (set, user) pair.";
247 } 248 }
248 print CGI::end_p(); 249 print CGI::end_p();
249 250
250 my $download_texQ = $self->{permissionLevel} > 0; 251 my $download_texQ = $authz->hasPermissions($r->param("user"), "download_hardcopy_format_tex");
251 252
252 # ##########construct action URL ################# 253 # ##########construct action URL #################
253 my $ce = $r->ce; 254 my $ce = $r->ce;
254 my $root = $ce->{webworkURLs}->{root}; 255 my $root = $ce->{webworkURLs}->{root};
255 my $courseName = $ce->{courseName}; 256 my $courseName = $ce->{courseName};
277 -label => "Solutions", 278 -label => "Solutions",
278 ), 279 ),
279 ); 280 );
280 print CGI::start_table({-width=>"100%"}), CGI::start_Tr({-valign=>"top"}); 281 print CGI::start_table({-width=>"100%"}), CGI::start_Tr({-valign=>"top"});
281 282
282 my $multiSet = $self->{permissionLevel} > 0; 283 my $multiSet = $authz->hasPermissions($r->param("user"), "download_hardcopy_multiset");
283 my $multiUser = $self->{permissionLevel} > 0; 284 my $multiUser = $authz->hasPermissions($r->param("user"), "download_hardcopy_multiuser");
284 my $preOpenSets = $self->{permissionLevel} > 0; 285 my $preOpenSets = $authz->hasPermissions($r->param("user"), "view_unopened_sets");
286 my $unpublishedSets = $authz->hasPermissions($r->param("user"), "view_unpublished_sets");
285 my $effectiveUserName = $self->{effectiveUser}->user_id; 287 my $effectiveUserName = $self->{effectiveUser}->user_id;
286 my @setNames = $db->listUserSets($effectiveUserName); 288 my @setNames = $db->listUserSets($effectiveUserName);
287 my @sets = $db->getMergedSets( map { [$effectiveUserName, $_] } @setNames ); # checked 289 my @sets = $db->getMergedSets( map { [$effectiveUserName, $_] } @setNames ); # checked
288 @sets = grep { defined $_ and 290 @sets = grep { defined $_ and ($preOpenSets or $_->open_date < time) and ($unpublishedSets or $_->published) } @sets;
289 ( $self->{permissionLevel} > 0 or ($_->published and $_->open_date < time) ) } @sets;
290 @sets = sort { $a->set_id cmp $b->set_id } @sets; 291 @sets = sort { $a->set_id cmp $b->set_id } @sets;
291 @setNames = map( {$_->set_id } @sets ); # get sorted version of setNames 292 @setNames = map( {$_->set_id } @sets ); # get sorted version of setNames
292 my %setLabels = map( {($_->set_id, "set ".$_->set_id )} @sets ); 293 my %setLabels = map( {($_->set_id, "set ".$_->set_id )} @sets );
293 my (@users, @userNames,%userLabels); 294 my (@users, @userNames,%userLabels);
294 295
353 354
354sub generateHardcopy($) { 355sub generateHardcopy($) {
355 my ($self) = @_; 356 my ($self) = @_;
356 my $r = $self->r; 357 my $r = $self->r;
357 my $ce = $r->ce; 358 my $ce = $r->ce;
359 my $authz = $r->authz;
358 360
359 my @sets = @{$self->{sets}}; 361 my @sets = @{$self->{sets}};
360 my @users = @{$self->{users}}; 362 my @users = @{$self->{users}};
361 my $multiSet = $self->{permissionLevel} > 0; 363 my $multiSet = $authz->hasPermissions($r->param("user"), "download_hardcopy_multiset");
362 my $multiUser = $self->{permissionLevel} > 0; 364 my $multiUser = $authz->hasPermissions($r->param("user"), "download_hardcopy_multiuser");
363 # sanity checks 365 # sanity checks
364 unless (@sets) { 366 unless (@sets) {
365 die ["RETRY", "No sets were specified."]; 367 die ["RETRY", "No sets were specified."];
366 } 368 }
367 unless (@users) { 369 unless (@users) {
680 $WeBWorK::timer1 ->continue("hardcopy: begin processing problem") if defined($WeBWorK::timer1); 682 $WeBWorK::timer1 ->continue("hardcopy: begin processing problem") if defined($WeBWorK::timer1);
681 my ($self, $effectiveUser, $setName, $problemNumber, $pgFile) = @_; 683 my ($self, $effectiveUser, $setName, $problemNumber, $pgFile) = @_;
682 my $r = $self->r; 684 my $r = $self->r;
683 my $ce = $r->ce; 685 my $ce = $r->ce;
684 my $db = $r->db; 686 my $db = $r->db;
687 my $authz = $r->authz;
685 688
686 # Should we provide a default user ? I think not FIXME 689 # Should we provide a default user ? I think not FIXME
687 690
688 # $effectiveUser = $self->{effectiveUser} unless defined($effectiveUser); 691 # $effectiveUser = $self->{effectiveUser} unless defined($effectiveUser);
689 my $permissionLevel = $self->{permissionLevel}; 692 my $permissionLevel = $self->{permissionLevel};
695 message => "No set $setName exists for ".$effectiveUser->first_name.' '. 698 message => "No set $setName exists for ".$effectiveUser->first_name.' '.
696 $effectiveUser->last_name.' ('.$effectiveUser->user_id.' )' 699 $effectiveUser->last_name.' ('.$effectiveUser->user_id.' )'
697 ); 700 );
698 return "No set $setName for ".$effectiveUser->user_id; 701 return "No set $setName for ".$effectiveUser->user_id;
699 } 702 }
700 unless (( $set->published and $set->open_date < time ) or $permissionLevel>0 ) { # return error if set is invisible 703
704 my $preOpenSets = $authz->hasPermissions($r->param("user"), "view_unopened_sets");
705 my $unpublishedSets = $authz->hasPermissions($r->param("user"), "view_unpublished_sets");
706 unless ( ($preOpenSets or $set->open_date < time) and ($unpublishedSets or $set->published) ) { # return error if set is invisible
701 push(@{$self->{warnings}}, 707 push(@{$self->{warnings}},
702 setName => $setName, 708 setName => $setName,
703 problem => 0, 709 problem => 0,
704 message => "The set $setName is hidden for ".$effectiveUser->first_name.' '. 710 message => "The set $setName is hidden for ".$effectiveUser->first_name.' '.
705 $effectiveUser->last_name.' ('.$effectiveUser->user_id.' )' 711 $effectiveUser->last_name.' ('.$effectiveUser->user_id.' )'
737 } 743 }
738 # figure out if we're allowed to get solutions and call PG->new accordingly. 744 # figure out if we're allowed to get solutions and call PG->new accordingly.
739 my $showCorrectAnswers = $r->param("showCorrectAnswers") || 0; 745 my $showCorrectAnswers = $r->param("showCorrectAnswers") || 0;
740 my $showHints = $r->param("showHints") || 0; 746 my $showHints = $r->param("showHints") || 0;
741 my $showSolutions = $r->param("showSolutions") || 0; 747 my $showSolutions = $r->param("showSolutions") || 0;
742 unless ($permissionLevel > 0 or time > $set->answer_date) { 748 unless ($authz->hasPermissions($r->param("user"), "view_answers") or time > $set->answer_date) {
743 $showCorrectAnswers = 0; 749 $showCorrectAnswers = 0;
744 $showSolutions = 0; 750 $showSolutions = 0;
745 } 751 }
746 752
747 my $pg = WeBWorK::PG->new( 753 my $pg = WeBWorK::PG->new(

Legend:
Removed from v.2763  
changed lines
  Added in v.2764

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9