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

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

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

Revision 809 Revision 919
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
6package WeBWorK::ContentGenerator::ProblemSet; 6package WeBWorK::ContentGenerator::ProblemSet;
7use base qw(WeBWorK::ContentGenerator);
7 8
8=head1 NAME 9=head1 NAME
9 10
10WeBWorK::ContentGenerator::ProblemSet - display an index of the problems in a 11WeBWorK::ContentGenerator::ProblemSet - display an index of the problems in a
11problem set. 12problem set.
12 13
13=cut 14=cut
14 15
15use strict; 16use strict;
16use warnings; 17use warnings;
17use base qw(WeBWorK::ContentGenerator);
18use Apache::Constants qw(:common);
19use CGI qw(); 18use CGI qw();
20use WeBWorK::ContentGenerator;
21use WeBWorK::DB::WW;
22use WeBWorK::DB::Classlist;
23 19
24sub initialize { 20sub initialize {
25 my ($self, $setName) = @_; 21 my ($self, $setName) = @_;
26 my $courseEnvironment = $self->{ce}; 22 my $courseEnvironment = $self->{ce};
27 my $r = $self->{r}; 23 my $r = $self->{r};
24 my $db = $self->{db};
28 my $userName = $r->param("user"); 25 my $userName = $r->param("user");
29 my $effectiveUserName = $r->param("effectiveUser"); 26 my $effectiveUserName = $r->param("effectiveUser");
30 27
31 ##### database setup #####
32
33 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); 28 my $user = $db->getUser($userName);
38 my $effectiveUser = $cldb->getUser($effectiveUserName); 29 my $effectiveUser = $db->getUser($effectiveUserName);
39 my $set = $wwdb->getSet($effectiveUserName, $setName); 30 my $set = $db->getGlobalUserSet($effectiveUserName, $setName);
40 my $permissionLevel = $authdb->getPermissions($userName); 31 my $permissionLevel = $db->getPermissionLevel($userName)->permission();
41
42 $self->{cldb} = $cldb;
43 $self->{wwdb} = $wwdb;
44 $self->{authdb} = $authdb;
45 32
46 $self->{userName} = $userName; 33 $self->{userName} = $userName;
47 $self->{user} = $user; 34 $self->{user} = $user;
48 $self->{effectiveUser} = $effectiveUser; 35 $self->{effectiveUser} = $effectiveUser;
49 $self->{set} = $set; 36 $self->{set} = $set;
82 69
83sub siblings { 70sub siblings {
84 my ($self, $setName) = @_; 71 my ($self, $setName) = @_;
85 72
86 my $ce = $self->{ce}; 73 my $ce = $self->{ce};
74 my $db = $self->{db};
87 my $root = $ce->{webworkURLs}->{root}; 75 my $root = $ce->{webworkURLs}->{root};
88 my $courseName = $ce->{courseName}; 76 my $courseName = $ce->{courseName};
89 77
90 print CGI::strong("Problem Sets"), CGI::br(); 78 print CGI::strong("Problem Sets"), CGI::br();
91 79
92 my $wwdb = $self->{wwdb};
93 my $effectiveUser = $self->{r}->param("effectiveUser"); 80 my $effectiveUser = $self->{r}->param("effectiveUser");
94 my @sets; 81 my @sets;
95 push @sets, $wwdb->getSet($effectiveUser, $_) foreach ($wwdb->getSets($effectiveUser)); 82 push @sets, $db->getGlobalUserSet($effectiveUser, $_)
83 foreach ($db->listUserSets($effectiveUser));
96 foreach my $set (sort { $a->open_date <=> $b->open_date } @sets) { 84 foreach my $set (sort { $a->open_date <=> $b->open_date } @sets) {
97 if (time >= $set->open_date) { 85 if (time >= $set->open_date) {
98 print CGI::a({-href=>"$root/$courseName/".$set->id."/?" 86 print CGI::a({-href=>"$root/$courseName/".$set->set_id."/?"
99 . $self->url_authen_args}, $set->id), CGI::br(); 87 . $self->url_authen_args}, $set->set_id), CGI::br();
100 } else { 88 } else {
101 print $set->id, CGI::br(); 89 print $set->set_id, CGI::br();
102 } 90 }
103 } 91 }
104} 92}
105 93
106sub title { 94sub title {
112sub info { 100sub info {
113 my ($self, $setName) = @_; 101 my ($self, $setName) = @_;
114 102
115 my $r = $self->{r}; 103 my $r = $self->{r};
116 my $ce = $self->{ce}; 104 my $ce = $self->{ce};
105 my $db = $self->{db};
117 106
118 return "" unless $self->{isOpen}; 107 return "" unless $self->{isOpen};
119 108
120 my $wwdb = $self->{wwdb};
121 my $cldb = $self->{cldb};
122 my $effectiveUser = $cldb->getUser($r->param("effectiveUser")); 109 my $effectiveUser = $db->getUser($r->param("effectiveUser"));
123 my $set = $wwdb->getSet($effectiveUser->id, $setName); 110 my $set = $db->getGlobalUserSet($effectiveUser->user_id, $setName);
124 my $psvn = $wwdb->getPSVN($effectiveUser->id, $setName); 111 my $psvn = $set->psvn();
125 112
126 my $screenSetHeader = $set->problem_header || $ce->{webworkFiles}->{screenSnippets}->{setHeader}; 113 my $screenSetHeader = $set->problem_header || $ce->{webworkFiles}->{screenSnippets}->{setHeader};
127 my $displayMode = $ce->{pg}->{options}->{displayMode}; 114 my $displayMode = $ce->{pg}->{options}->{displayMode};
128 115
129 return "" unless defined $screenSetHeader and $screenSetHeader; 116 return "" unless defined $screenSetHeader and $screenSetHeader;
130 117
131 # decide what to do about problem number 118 # decide what to do about problem number
132 my $problem = WeBWorK::Problem->new( 119 my $problem = WeBWorK::DB::Record::UserProblem->new(
133 id => 0, 120 problem_id => 0,
134 set_id => $set->id, 121 set_id => $set->set_id,
135 login_id => $effectiveUser->id, 122 login_id => $effectiveUser->user_id,
136 source_file => $screenSetHeader, 123 source_file => $screenSetHeader,
137 # the rest of Problem's fields are not needed, i think 124 # the rest of Problem's fields are not needed, i think
138 ); 125 );
139 126
140 my $pg = WeBWorK::PG->new( 127 my $pg = WeBWorK::PG->new(
163 150
164sub body { 151sub body {
165 my ($self, $setName) = @_; 152 my ($self, $setName) = @_;
166 my $r = $self->{r}; 153 my $r = $self->{r};
167 my $courseEnvironment = $self->{ce}; 154 my $courseEnvironment = $self->{ce};
155 my $db = $self->{db};
168 my $effectiveUser = $r->param('effectiveUser'); 156 my $effectiveUser = $r->param('effectiveUser');
169 my $wwdb = $self->{wwdb};
170 157
171 return CGI::p(CGI::font({-color=>"red"}, "This problem set is not available because it is not yet open.")) 158 return CGI::p(CGI::font({-color=>"red"}, "This problem set is not available because it is not yet open."))
172 unless ($self->{isOpen}); 159 unless ($self->{isOpen});
173 160
174 my $hardcopyURL = 161 my $hardcopyURL =
184 CGI::th("Attempts"), 171 CGI::th("Attempts"),
185 CGI::th("Remaining"), 172 CGI::th("Remaining"),
186 CGI::th("Status"), 173 CGI::th("Status"),
187 ); 174 );
188 175
189 my $set = $wwdb->getSet($effectiveUser, $setName); 176 my $set = $db->getGlobalUserSet($effectiveUser, $setName);
190 my @problemNumbers = $wwdb->getProblems($effectiveUser, $setName); 177 my @problemNumbers = $db->listUserProblems($effectiveUser, $setName);
191 foreach my $problemNumber (sort { $a <=> $b } @problemNumbers) { 178 foreach my $problemNumber (sort { $a <=> $b } @problemNumbers) {
192 my $problem = $wwdb->getProblem($effectiveUser, $setName, $problemNumber); 179 my $problem = $db->getGlobalUserProblem($effectiveUser, $setName, $problemNumber);
193 print $self->problemListRow($set, $problem); 180 print $self->problemListRow($set, $problem);
194 } 181 }
195 182
196 print CGI::end_table(); 183 print CGI::end_table();
197 184
202 my $feedbackURL = "$root/$courseName/feedback/"; 189 my $feedbackURL = "$root/$courseName/feedback/";
203 print 190 print
204 CGI::startform("POST", $feedbackURL), 191 CGI::startform("POST", $feedbackURL),
205 $self->hidden_authen_fields, 192 $self->hidden_authen_fields,
206 CGI::hidden("module", __PACKAGE__), 193 CGI::hidden("module", __PACKAGE__),
207 CGI::hidden("set", $set->id), 194 CGI::hidden("set", $set->set_id),
208 CGI::p({-align=>"right"}, 195 CGI::p({-align=>"right"},
209 CGI::submit(-name=>"feedbackForm", -label=>"Send Feedback") 196 CGI::submit(-name=>"feedbackForm", -label=>"Send Feedback")
210 ), 197 ),
211 CGI::endform(); 198 CGI::endform();
212 199
216sub problemListRow($$$) { 203sub problemListRow($$$) {
217 my $self = shift; 204 my $self = shift;
218 my $set = shift; 205 my $set = shift;
219 my $problem = shift; 206 my $problem = shift;
220 207
221 my $name = $problem->id; 208 my $name = $problem->problem_id;
222 my $interactiveURL = "$name/?" . $self->url_authen_args; 209 my $interactiveURL = "$name/?" . $self->url_authen_args;
223 my $interactive = CGI::a({-href=>$interactiveURL}, "Problem $name"); 210 my $interactive = CGI::a({-href=>$interactiveURL}, "Problem $name");
224 my $attempts = $problem->num_correct + $problem->num_incorrect; 211 my $attempts = $problem->num_correct + $problem->num_incorrect;
225 my $remaining = $problem->max_attempts < 0 212 my $remaining = $problem->max_attempts < 0
226 ? "unlimited" 213 ? "unlimited"

Legend:
Removed from v.809  
changed lines
  Added in v.919

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9