|
|
1 | ################################################################################ |
|
|
2 | # WeBWorK mod_perl (c) 2000-2002 WeBWorK Project |
|
|
3 | # $Id$ |
|
|
4 | ################################################################################ |
|
|
5 | |
| 1 | package WeBWorK::ContentGenerator::ProblemSets; |
6 | package WeBWorK::ContentGenerator::ProblemSets; |
| 2 | our @ISA = qw(WeBWorK::ContentGenerator); |
|
|
| 3 | |
7 | |
|
|
8 | =head1 NAME |
|
|
9 | |
|
|
10 | WeBWorK::ContentGenerator::ProblemSets - Display a list of built problem sets. |
|
|
11 | |
|
|
12 | =cut |
|
|
13 | |
|
|
14 | use strict; |
|
|
15 | use warnings; |
|
|
16 | use base qw(WeBWorK::ContentGenerator); |
|
|
17 | use Apache::Constants qw(:common); |
|
|
18 | use CGI qw(); |
| 4 | use WeBWorK::ContentGenerator; |
19 | use WeBWorK::ContentGenerator; |
| 5 | use Apache::Constants qw(:common); |
20 | use WeBWorK::DB::WW; |
| 6 | use CGI qw(-compile :html :form); |
21 | use WeBWorK::Utils qw(formatDateTime); |
|
|
22 | |
|
|
23 | sub initialize { |
|
|
24 | my $self = shift; |
|
|
25 | my $courseEnvironment = $self->{courseEnvironment}; |
|
|
26 | |
|
|
27 | # Open a database connection that we can use for the rest of |
|
|
28 | # the content generation. |
|
|
29 | |
|
|
30 | my $wwdb = new WeBWorK::DB::WW $courseEnvironment; |
|
|
31 | $self->{wwdb} = $wwdb; |
|
|
32 | } |
|
|
33 | |
|
|
34 | sub path { |
|
|
35 | my ($self, $args) = @_; |
|
|
36 | |
|
|
37 | my $ce = $self->{courseEnvironment}; |
|
|
38 | my $root = $ce->{webworkURLs}->{root}; |
|
|
39 | my $courseName = $ce->{courseName}; |
|
|
40 | return $self->pathMacro($args, |
|
|
41 | "Home" => "$root", |
|
|
42 | $courseName => "", |
|
|
43 | ); |
|
|
44 | } |
| 7 | |
45 | |
| 8 | sub title { |
46 | sub title { |
| 9 | my $self = shift; |
47 | my $self = shift; |
| 10 | my $r = $self->{r}; |
|
|
| 11 | my $courseEnvironment = $self->{courseEnvironment}; |
48 | my $courseEnvironment = $self->{courseEnvironment}; |
| 12 | my $user = $r->param('user'); |
49 | |
| 13 | |
50 | return $courseEnvironment->{courseName}; |
| 14 | return "Problem Sets for $user"; |
|
|
| 15 | } |
51 | } |
| 16 | |
52 | |
| 17 | sub body { |
53 | sub body { |
| 18 | my $self = shift; |
54 | my $self = shift; |
| 19 | my $r = $self->{r}; |
55 | my $r = $self->{r}; |
| 20 | my $courseEnvironment = $self->{courseEnvironment}; |
56 | my $courseEnvironment = $self->{courseEnvironment}; |
| 21 | my $user = $r->param('user'); |
57 | my $user = $r->param("user"); |
|
|
58 | my $sort = $r->param("sort"); |
|
|
59 | my $wwdb = $self->{wwdb}; |
| 22 | |
60 | |
|
|
61 | $sort = "status" unless $sort eq "status" or $sort eq "name"; |
|
|
62 | my $baseURL = $r->uri . "?" . $self->url_authen_args(); |
|
|
63 | my $nameHeader = ($sort eq "name") ? "Name" : CGI::a({-href=>"$baseURL&sort=name"}, "Name"); |
|
|
64 | my $statusHeader = ($sort eq "status") ? "Status" : CGI::a({-href=>"$baseURL&sort=status"}, "Status"); |
|
|
65 | |
| 23 | print startform({-method=>"POST", -action=>$r->uri."set0/"}); |
66 | print CGI::startform(-method=>"POST", -action=>$r->uri."hardcopy/"); |
| 24 | print $self->hidden_authen_fields; |
67 | print $self->hidden_authen_fields; |
| 25 | print input({-type=>"submit", -value=>"Do Set 0"}); |
68 | print CGI::start_table(); |
|
|
69 | print CGI::Tr( |
|
|
70 | CGI::th("Sel."), |
|
|
71 | CGI::th($nameHeader), |
|
|
72 | CGI::th($statusHeader), |
|
|
73 | CGI::th("Hardcopy"), |
|
|
74 | ); |
|
|
75 | |
|
|
76 | my @sets; |
|
|
77 | push @sets, $wwdb->getSet($user, $_) foreach ($wwdb->getSets($user)); |
|
|
78 | @sets = sort byname @sets if $sort eq "name"; |
|
|
79 | @sets = sort byduedate @sets if $sort eq "status"; |
|
|
80 | foreach my $set (@sets) { |
|
|
81 | print $self->setListRow($set); |
|
|
82 | } |
|
|
83 | |
|
|
84 | print CGI::end_table(); |
|
|
85 | print CGI::p(CGI::submit("hardcopy", "Download Harcopy for Selected Sets")); |
| 26 | print endform; |
86 | print CGI::endform(); |
| 27 | ""; |
87 | |
|
|
88 | # feedback form |
|
|
89 | my $ce = $self->{courseEnvironment}; |
|
|
90 | my $root = $ce->{webworkURLs}->{root}; |
|
|
91 | my $courseName = $ce->{courseName}; |
|
|
92 | my $feedbackURL = "$root/$courseName/feedback/"; |
|
|
93 | print |
|
|
94 | CGI::startform("POST", $feedbackURL), |
|
|
95 | $self->hidden_authen_fields, |
|
|
96 | CGI::hidden("module", __PACKAGE__), |
|
|
97 | CGI::p({-align=>"right"}, |
|
|
98 | CGI::submit(-name=>"feedbackForm", -label=>"Send Feedback") |
|
|
99 | ), |
|
|
100 | CGI::endform(); |
|
|
101 | |
|
|
102 | return ""; |
| 28 | } |
103 | } |
| 29 | |
104 | |
|
|
105 | sub setListRow($$) { |
|
|
106 | my $self = shift; |
|
|
107 | my $set = shift; |
|
|
108 | |
|
|
109 | my $name = $set->id; |
|
|
110 | |
|
|
111 | my $interactiveURL = "$name/?" . $self->url_authen_args; |
|
|
112 | my $hardcopyURL = "hardcopy/$name/?" . $self->url_authen_args; |
|
|
113 | |
|
|
114 | my $openDate = formatDateTime($set->open_date); |
|
|
115 | my $dueDate = formatDateTime($set->due_date); |
|
|
116 | my $answerDate = formatDateTime($set->answer_date); |
|
|
117 | |
|
|
118 | my $checkbox = CGI::checkbox(-name=>"set", -value=>$set->id, -label=>""); |
|
|
119 | my $interactive = CGI::a({-href=>$interactiveURL}, $name); |
|
|
120 | my $hardcopy = CGI::a({-href=>$hardcopyURL}, "download"); |
|
|
121 | |
|
|
122 | my $status; |
|
|
123 | if (time < $set->open_date) { |
|
|
124 | $status = "opens at $openDate"; |
|
|
125 | $checkbox = ""; |
|
|
126 | $interactive = $name; |
|
|
127 | $hardcopy = ""; |
|
|
128 | } elsif (time < $set->due_date) { |
|
|
129 | $status = "open, due at $dueDate"; |
|
|
130 | } elsif (time < $set->answer_date) { |
|
|
131 | $status = "closed, answers at $answerDate"; |
|
|
132 | } else { |
|
|
133 | $status = "closed, answers available"; |
|
|
134 | } |
|
|
135 | |
|
|
136 | return CGI::Tr(CGI::td([ |
|
|
137 | $checkbox, |
|
|
138 | $interactive, |
|
|
139 | $status, |
|
|
140 | $hardcopy, |
|
|
141 | ])); |
|
|
142 | } |
|
|
143 | |
|
|
144 | sub byname { $a->id cmp $b->id; } |
|
|
145 | sub byduedate { $a->due_date <=> $b->due_date; } |
|
|
146 | |
| 30 | 1; |
147 | 1; |