| … | |
… | |
| 2 | # WeBWorK mod_perl (c) 2000-2002 WeBWorK Project |
2 | # WeBWorK mod_perl (c) 2000-2002 WeBWorK Project |
| 3 | # $Id$ |
3 | # $Id$ |
| 4 | ################################################################################ |
4 | ################################################################################ |
| 5 | |
5 | |
| 6 | package WeBWorK::ContentGenerator::ProblemSets; |
6 | package WeBWorK::ContentGenerator::ProblemSets; |
|
|
7 | use base qw(WeBWorK::ContentGenerator); |
| 7 | |
8 | |
| 8 | =head1 NAME |
9 | =head1 NAME |
| 9 | |
10 | |
| 10 | WeBWorK::ContentGenerator::ProblemSets - Display a list of built problem sets. |
11 | WeBWorK::ContentGenerator::ProblemSets - Display a list of built problem sets. |
| 11 | |
12 | |
| 12 | =cut |
13 | =cut |
| 13 | |
14 | |
| 14 | use strict; |
15 | use strict; |
| 15 | use warnings; |
16 | use warnings; |
| 16 | use base qw(WeBWorK::ContentGenerator); |
|
|
| 17 | use Apache::Constants qw(:common); |
|
|
| 18 | use CGI qw(); |
17 | use CGI qw(); |
| 19 | use WeBWorK::ContentGenerator; |
|
|
| 20 | use WeBWorK::DB::WW; |
|
|
| 21 | use WeBWorK::DB::Auth; |
|
|
| 22 | use WeBWorK::Utils qw(readFile formatDateTime); |
18 | use WeBWorK::Utils qw(readFile formatDateTime); |
| 23 | |
|
|
| 24 | sub initialize { |
|
|
| 25 | my $self = shift; |
|
|
| 26 | my $courseEnvironment = $self->{ce}; |
|
|
| 27 | |
|
|
| 28 | # Open a database connection that we can use for the rest of |
|
|
| 29 | # the content generation. |
|
|
| 30 | |
|
|
| 31 | $self->{wwdb} = new WeBWorK::DB::WW $courseEnvironment; |
|
|
| 32 | $self->{authdb} = new WeBWorK::DB::Auth $courseEnvironment; |
|
|
| 33 | } |
|
|
| 34 | |
19 | |
| 35 | sub path { |
20 | sub path { |
| 36 | my ($self, $args) = @_; |
21 | my ($self, $args) = @_; |
| 37 | |
22 | |
| 38 | my $ce = $self->{ce}; |
23 | my $ce = $self->{ce}; |
| … | |
… | |
| 44 | ); |
29 | ); |
| 45 | } |
30 | } |
| 46 | |
31 | |
| 47 | sub title { |
32 | sub title { |
| 48 | my $self = shift; |
33 | my $self = shift; |
| 49 | my $courseEnvironment = $self->{ce}; |
34 | return $self->{ce}->{courseName}; |
| 50 | |
|
|
| 51 | return $courseEnvironment->{courseName}; |
|
|
| 52 | } |
35 | } |
| 53 | |
36 | |
| 54 | sub body { |
37 | sub body { |
| 55 | my $self = shift; |
38 | my $self = shift; |
| 56 | my $r = $self->{r}; |
39 | my $r = $self->{r}; |
| 57 | my $courseEnvironment = $self->{ce}; |
40 | my $courseEnvironment = $self->{ce}; |
|
|
41 | my $db = $self->{db}; |
| 58 | my $user = $r->param("user"); |
42 | my $user = $r->param("user"); |
| 59 | my $effectiveUser = $r->param("effectiveUser"); |
43 | my $effectiveUser = $r->param("effectiveUser"); |
| 60 | my $sort = $r->param("sort") || "status"; |
44 | my $sort = $r->param("sort") || "status"; |
| 61 | my $wwdb = $self->{wwdb}; |
|
|
| 62 | my $authdb = $self->{authdb}; |
|
|
| 63 | my $permissionLevel = $authdb->getPermissions($user); |
45 | my $permissionLevel = $db->getPermissionLevel($user)->permission(); |
| 64 | |
46 | |
| 65 | if (defined $courseEnvironment->{courseFiles}->{motd} |
47 | if (defined $courseEnvironment->{courseFiles}->{motd} |
| 66 | and $courseEnvironment->{courseFiles}->{motd}) { |
48 | and $courseEnvironment->{courseFiles}->{motd}) { |
| 67 | my $motd = eval { readFile($courseEnvironment->{courseFiles}->{motd}) }; |
49 | my $motd = eval { readFile($courseEnvironment->{courseFiles}->{motd}) }; |
| 68 | $@ or print $motd; |
50 | $@ or print $motd; |
| … | |
… | |
| 82 | CGI::th($statusHeader), |
64 | CGI::th($statusHeader), |
| 83 | #CGI::th("Hardcopy"), |
65 | #CGI::th("Hardcopy"), |
| 84 | ); |
66 | ); |
| 85 | |
67 | |
| 86 | my @sets; |
68 | my @sets; |
| 87 | push @sets, $wwdb->getSet($effectiveUser, $_) foreach ($wwdb->getSets($effectiveUser)); |
69 | push @sets, $db->getGlobalUserSet($effectiveUser, $_) |
|
|
70 | foreach ($db->listUserSets($effectiveUser)); |
| 88 | @sets = sort byname @sets if $sort eq "name"; |
71 | @sets = sort byname @sets if $sort eq "name"; |
| 89 | @sets = sort byduedate @sets if $sort eq "status"; |
72 | @sets = sort byduedate @sets if $sort eq "status"; |
| 90 | foreach my $set (@sets) { |
73 | foreach my $set (@sets) { |
| 91 | print $self->setListRow($set, ($permissionLevel > 0), |
74 | print $self->setListRow($set, ($permissionLevel > 0), |
| 92 | ($permissionLevel > 0)); |
75 | ($permissionLevel > 0)); |
| … | |
… | |
| 115 | } |
98 | } |
| 116 | |
99 | |
| 117 | sub setListRow($$$) { |
100 | sub setListRow($$$) { |
| 118 | my ($self, $set, $multiSet, $preOpenSets) = @_; |
101 | my ($self, $set, $multiSet, $preOpenSets) = @_; |
| 119 | |
102 | |
| 120 | my $name = $set->id; |
103 | my $name = $set->set_id; |
| 121 | |
104 | |
| 122 | my $interactiveURL = "$name/?" . $self->url_authen_args; |
105 | my $interactiveURL = "$name/?" . $self->url_authen_args; |
| 123 | #my $hardcopyURL = "hardcopy/$name/?" . $self->url_authen_args; |
106 | #my $hardcopyURL = "hardcopy/$name/?" . $self->url_authen_args; |
| 124 | |
107 | |
| 125 | my $openDate = formatDateTime($set->open_date); |
108 | my $openDate = formatDateTime($set->open_date); |
| 126 | my $dueDate = formatDateTime($set->due_date); |
109 | my $dueDate = formatDateTime($set->due_date); |
| 127 | my $answerDate = formatDateTime($set->answer_date); |
110 | my $answerDate = formatDateTime($set->answer_date); |
| 128 | |
111 | |
| 129 | #my $checkbox = CGI::checkbox(-name=>"hcSet", -value=>$set->id, -label=>""); |
112 | #my $checkbox = CGI::checkbox(-name=>"hcSet", -value=>$set->set_id, -label=>""); |
| 130 | |
113 | |
| 131 | my $control = ""; |
114 | my $control = ""; |
| 132 | if ($multiSet) { |
115 | if ($multiSet) { |
| 133 | $control = CGI::checkbox( |
116 | $control = CGI::checkbox( |
| 134 | -name=>"hcSet", |
117 | -name=>"hcSet", |