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

Annotation of /trunk/webwork2/lib/WeBWorK/ContentGenerator/ProblemSet.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 809 - (view) (download) (as text)

1 : sh002i 455 ################################################################################
2 : sh002i 494 # WeBWorK mod_perl (c) 2000-2002 WeBWorK Project
3 : sh002i 455 # $Id$
4 :     ################################################################################
5 :    
6 : malsyned 353 package WeBWorK::ContentGenerator::ProblemSet;
7 :    
8 : sh002i 455 =head1 NAME
9 :    
10 :     WeBWorK::ContentGenerator::ProblemSet - display an index of the problems in a
11 :     problem set.
12 :    
13 :     =cut
14 :    
15 : malsyned 441 use strict;
16 :     use warnings;
17 : sh002i 455 use base qw(WeBWorK::ContentGenerator);
18 : malsyned 353 use Apache::Constants qw(:common);
19 : sh002i 443 use CGI qw();
20 : sh002i 455 use WeBWorK::ContentGenerator;
21 : sh002i 526 use WeBWorK::DB::WW;
22 :     use WeBWorK::DB::Classlist;
23 : malsyned 353
24 : sh002i 469 sub initialize {
25 : sh002i 738 my ($self, $setName) = @_;
26 : sh002i 809 my $courseEnvironment = $self->{ce};
27 : sh002i 738 my $r = $self->{r};
28 :     my $userName = $r->param("user");
29 :     my $effectiveUserName = $r->param("effectiveUser");
30 : sh002i 469
31 : sh002i 738 ##### database setup #####
32 : sh002i 469
33 : sh002i 738 my $cldb = WeBWorK::DB::Classlist->new($courseEnvironment);
34 :     my $wwdb = WeBWorK::DB::WW->new($courseEnvironment);
35 :     my $authdb = WeBWorK::DB::Auth->new($courseEnvironment);
36 :    
37 :     my $user = $cldb->getUser($userName);
38 :     my $effectiveUser = $cldb->getUser($effectiveUserName);
39 :     my $set = $wwdb->getSet($effectiveUserName, $setName);
40 :     my $permissionLevel = $authdb->getPermissions($userName);
41 :    
42 :     $self->{cldb} = $cldb;
43 :     $self->{wwdb} = $wwdb;
44 :     $self->{authdb} = $authdb;
45 :    
46 :     $self->{userName} = $userName;
47 :     $self->{user} = $user;
48 :     $self->{effectiveUser} = $effectiveUser;
49 :     $self->{set} = $set;
50 :     $self->{permissionLevel} = $permissionLevel;
51 :    
52 :     ##### permissions #####
53 :    
54 :     $self->{isOpen} = time >= $set->open_date || $permissionLevel > 0;
55 : sh002i 469 }
56 : malsyned 353
57 : sh002i 469 sub path {
58 :     my ($self, $setName, $args) = @_;
59 :    
60 : sh002i 809 my $ce = $self->{ce};
61 : sh002i 469 my $root = $ce->{webworkURLs}->{root};
62 :     my $courseName = $ce->{courseName};
63 :     return $self->pathMacro($args,
64 :     "Home" => "$root",
65 :     $courseName => "$root/$courseName",
66 :     $setName => "",
67 :     );
68 : malsyned 353 }
69 :    
70 : malsyned 750 sub nav {
71 :     my ($self, $setName, $args) = @_;
72 :    
73 : sh002i 809 my $ce = $self->{ce};
74 : malsyned 750 my $root = $ce->{webworkURLs}->{root};
75 :     my $courseName = $ce->{courseName};
76 : malsyned 795 my @links = ("Problem Sets" , "$root/$courseName", "navUp");
77 : malsyned 750 my $tail = "";
78 :    
79 :     return $self->navMacro($args, $tail, @links);
80 :     }
81 :    
82 :    
83 : sh002i 469 sub siblings {
84 :     my ($self, $setName) = @_;
85 :    
86 : sh002i 809 my $ce = $self->{ce};
87 : sh002i 469 my $root = $ce->{webworkURLs}->{root};
88 :     my $courseName = $ce->{courseName};
89 : sh002i 526
90 :     print CGI::strong("Problem Sets"), CGI::br();
91 :    
92 : sh002i 469 my $wwdb = $self->{wwdb};
93 : malsyned 720 my $effectiveUser = $self->{r}->param("effectiveUser");
94 : sh002i 469 my @sets;
95 : malsyned 720 push @sets, $wwdb->getSet($effectiveUser, $_) foreach ($wwdb->getSets($effectiveUser));
96 : sh002i 469 foreach my $set (sort { $a->open_date <=> $b->open_date } @sets) {
97 :     if (time >= $set->open_date) {
98 :     print CGI::a({-href=>"$root/$courseName/".$set->id."/?"
99 :     . $self->url_authen_args}, $set->id), CGI::br();
100 :     } else {
101 :     print $set->id, CGI::br();
102 :     }
103 :     }
104 :     }
105 :    
106 :     sub title {
107 :     my ($self, $setName) = @_;
108 :    
109 :     return $setName;
110 :     }
111 :    
112 : sh002i 526 sub info {
113 :     my ($self, $setName) = @_;
114 :    
115 :     my $r = $self->{r};
116 : sh002i 809 my $ce = $self->{ce};
117 : sh002i 526
118 : sh002i 738 return "" unless $self->{isOpen};
119 :    
120 : sh002i 526 my $wwdb = $self->{wwdb};
121 :     my $cldb = $self->{cldb};
122 : sh002i 737 my $effectiveUser = $cldb->getUser($r->param("effectiveUser"));
123 : malsyned 720 my $set = $wwdb->getSet($effectiveUser->id, $setName);
124 :     my $psvn = $wwdb->getPSVN($effectiveUser->id, $setName);
125 : sh002i 526
126 : sh002i 693 my $screenSetHeader = $set->problem_header || $ce->{webworkFiles}->{screenSnippets}->{setHeader};
127 : sh002i 526 my $displayMode = $ce->{pg}->{options}->{displayMode};
128 :    
129 :     return "" unless defined $screenSetHeader and $screenSetHeader;
130 :    
131 :     # decide what to do about problem number
132 :     my $problem = WeBWorK::Problem->new(
133 :     id => 0,
134 :     set_id => $set->id,
135 : malsyned 720 login_id => $effectiveUser->id,
136 : sh002i 526 source_file => $screenSetHeader,
137 :     # the rest of Problem's fields are not needed, i think
138 :     );
139 :    
140 :     my $pg = WeBWorK::PG->new(
141 :     $ce,
142 : malsyned 720 $effectiveUser,
143 : sh002i 526 $r->param('key'),
144 :     $set,
145 :     $problem,
146 :     $psvn,
147 :     {}, # no form fields!
148 :     { # translation options
149 :     displayMode => $displayMode,
150 :     showHints => 0,
151 :     showSolutions => 0,
152 :     processAnswers => 0,
153 :     },
154 :     );
155 :    
156 :     # handle translation errors
157 :     if ($pg->{flags}->{error_flag}) {
158 : sh002i 737 return $self->errorOutput($pg->{errors}, $pg->{body_text});
159 : sh002i 526 } else {
160 :     return $pg->{body_text};
161 :     }
162 :     }
163 :    
164 : malsyned 353 sub body {
165 : sh002i 469 my ($self, $setName) = @_;
166 : malsyned 353 my $r = $self->{r};
167 : sh002i 809 my $courseEnvironment = $self->{ce};
168 : malsyned 720 my $effectiveUser = $r->param('effectiveUser');
169 : sh002i 469 my $wwdb = $self->{wwdb};
170 : malsyned 353
171 : sh002i 738 return CGI::p(CGI::font({-color=>"red"}, "This problem set is not available because it is not yet open."))
172 :     unless ($self->{isOpen});
173 :    
174 : sh002i 526 my $hardcopyURL =
175 :     $courseEnvironment->{webworkURLs}->{root} . "/"
176 :     . $courseEnvironment->{courseName} . "/"
177 : sh002i 555 . "hardcopy/$setName/?" . $self->url_authen_args;
178 : sh002i 526 print CGI::p(CGI::a({-href=>$hardcopyURL}, "Download a hardcopy"),
179 :     "of this problem set.");
180 : sh002i 476
181 : sh002i 469 print CGI::start_table();
182 :     print CGI::Tr(
183 :     CGI::th("Name"),
184 :     CGI::th("Attempts"),
185 :     CGI::th("Remaining"),
186 :     CGI::th("Status"),
187 :     );
188 :    
189 : malsyned 720 my $set = $wwdb->getSet($effectiveUser, $setName);
190 :     my @problemNumbers = $wwdb->getProblems($effectiveUser, $setName);
191 : sh002i 469 foreach my $problemNumber (sort { $a <=> $b } @problemNumbers) {
192 : malsyned 720 my $problem = $wwdb->getProblem($effectiveUser, $setName, $problemNumber);
193 : sh002i 469 print $self->problemListRow($set, $problem);
194 :     }
195 :    
196 :     print CGI::end_table();
197 :    
198 : sh002i 669 # feedback form
199 : sh002i 809 my $ce = $self->{ce};
200 : sh002i 669 my $root = $ce->{webworkURLs}->{root};
201 :     my $courseName = $ce->{courseName};
202 :     my $feedbackURL = "$root/$courseName/feedback/";
203 :     print
204 :     CGI::startform("POST", $feedbackURL),
205 :     $self->hidden_authen_fields,
206 :     CGI::hidden("module", __PACKAGE__),
207 :     CGI::hidden("set", $set->id),
208 :     CGI::p({-align=>"right"},
209 :     CGI::submit(-name=>"feedbackForm", -label=>"Send Feedback")
210 :     ),
211 :     CGI::endform();
212 :    
213 : sh002i 469 return "";
214 : malsyned 353 }
215 :    
216 : sh002i 469 sub problemListRow($$$) {
217 :     my $self = shift;
218 :     my $set = shift;
219 :     my $problem = shift;
220 :    
221 :     my $name = $problem->id;
222 : sh002i 555 my $interactiveURL = "$name/?" . $self->url_authen_args;
223 : sh002i 469 my $interactive = CGI::a({-href=>$interactiveURL}, "Problem $name");
224 :     my $attempts = $problem->num_correct + $problem->num_incorrect;
225 :     my $remaining = $problem->max_attempts < 0
226 :     ? "unlimited"
227 :     : $problem->max_attempts - $attempts;
228 :     my $status = $problem->status * 100 . "%";
229 :    
230 : sh002i 526 return CGI::Tr(CGI::td({-nowrap=>1}, [
231 : sh002i 469 $interactive,
232 :     $attempts,
233 :     $remaining,
234 :     $status,
235 :     ]));
236 :     }
237 :    
238 : malsyned 353 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9