[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 526 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::ContentGenerator::Problem;
22use WeBWorK::DB::WW;
23use WeBWorK::DB::Classlist;
24 19
25sub initialize { 20sub initialize {
26 my $self = shift; 21 my ($self, $setName) = @_;
27 my $courseEnvironment = $self->{courseEnvironment}; 22 my $courseEnvironment = $self->{ce};
23 my $r = $self->{r};
24 my $db = $self->{db};
25 my $userName = $r->param("user");
26 my $effectiveUserName = $r->param("effectiveUser");
28 27
29 # Open a database connection that we can use for the rest of 28 my $user = $db->getUser($userName);
30 # the content generation. 29 my $effectiveUser = $db->getUser($effectiveUserName);
30 my $set = $db->getGlobalUserSet($effectiveUserName, $setName);
31 my $permissionLevel = $db->getPermissionLevel($userName)->permission();
31 32
32 $self->{wwdb} = WeBWorK::DB::WW->new($courseEnvironment); 33 $self->{userName} = $userName;
33 $self->{cldb} = WeBWorK::DB::Classlist->new($courseEnvironment); 34 $self->{user} = $user;
35 $self->{effectiveUser} = $effectiveUser;
36 $self->{set} = $set;
37 $self->{permissionLevel} = $permissionLevel;
38
39 ##### permissions #####
40
41 $self->{isOpen} = time >= $set->open_date || $permissionLevel > 0;
34} 42}
35 43
36sub path { 44sub path {
37 my ($self, $setName, $args) = @_; 45 my ($self, $setName, $args) = @_;
38 $setName =~ s/^set//;
39 46
40 my $ce = $self->{courseEnvironment}; 47 my $ce = $self->{ce};
41 my $root = $ce->{webworkURLs}->{root}; 48 my $root = $ce->{webworkURLs}->{root};
42 my $courseName = $ce->{courseName}; 49 my $courseName = $ce->{courseName};
43 return $self->pathMacro($args, 50 return $self->pathMacro($args,
44 "Home" => "$root", 51 "Home" => "$root",
45 $courseName => "$root/$courseName", 52 $courseName => "$root/$courseName",
46 $setName => "", 53 $setName => "",
47 ); 54 );
48} 55}
49 56
57sub nav {
58 my ($self, $setName, $args) = @_;
59
60 my $ce = $self->{ce};
61 my $root = $ce->{webworkURLs}->{root};
62 my $courseName = $ce->{courseName};
63 my @links = ("Problem Sets" , "$root/$courseName", "navUp");
64 my $tail = "";
65
66 return $self->navMacro($args, $tail, @links);
67}
68
69
50sub siblings { 70sub siblings {
51 my ($self, $setName) = @_; 71 my ($self, $setName) = @_;
52 $setName =~ s/^set//;
53 72
54 my $ce = $self->{courseEnvironment}; 73 my $ce = $self->{ce};
74 my $db = $self->{db};
55 my $root = $ce->{webworkURLs}->{root}; 75 my $root = $ce->{webworkURLs}->{root};
56 my $courseName = $ce->{courseName}; 76 my $courseName = $ce->{courseName};
57 77
58 print CGI::strong("Problem Sets"), CGI::br(); 78 print CGI::strong("Problem Sets"), CGI::br();
59 79
60 my $wwdb = $self->{wwdb};
61 my $user = $self->{r}->param("user"); 80 my $effectiveUser = $self->{r}->param("effectiveUser");
62 my @sets; 81 my @sets;
63 push @sets, $wwdb->getSet($user, $_) foreach ($wwdb->getSets($user)); 82 push @sets, $db->getGlobalUserSet($effectiveUser, $_)
83 foreach ($db->listUserSets($effectiveUser));
64 foreach my $set (sort { $a->open_date <=> $b->open_date } @sets) { 84 foreach my $set (sort { $a->open_date <=> $b->open_date } @sets) {
65 if (time >= $set->open_date) { 85 if (time >= $set->open_date) {
66 print CGI::a({-href=>"$root/$courseName/".$set->id."/?" 86 print CGI::a({-href=>"$root/$courseName/".$set->set_id."/?"
67 . $self->url_authen_args}, $set->id), CGI::br(); 87 . $self->url_authen_args}, $set->set_id), CGI::br();
68 } else { 88 } else {
69 print $set->id, CGI::br(); 89 print $set->set_id, CGI::br();
70 } 90 }
71 } 91 }
72} 92}
73 93
74sub title { 94sub title {
75 my ($self, $setName) = @_; 95 my ($self, $setName) = @_;
76 $setName =~ s/^set//;
77 96
78 return $setName; 97 return $setName;
79} 98}
80 99
81sub info { 100sub info {
82 # NOTE: info doesn't
83 my ($self, $setName) = @_; 101 my ($self, $setName) = @_;
84 $setName =~ s/^set//;
85 102
86 my $r = $self->{r}; 103 my $r = $self->{r};
87 my $ce = $self->{courseEnvironment}; 104 my $ce = $self->{ce};
88
89 my $wwdb = $self->{wwdb}; 105 my $db = $self->{db};
90 my $cldb = $self->{cldb}; 106
107 return "" unless $self->{isOpen};
108
91 my $user = $cldb->getUser($r->param("user")); 109 my $effectiveUser = $db->getUser($r->param("effectiveUser"));
92 my $set = $wwdb->getSet($user->id, $setName); 110 my $set = $db->getGlobalUserSet($effectiveUser->user_id, $setName);
93 my $psvn = $wwdb->getPSVN($user->id, $setName); 111 my $psvn = $set->psvn();
94 112
95 my $screenSetHeader = $ce->{webworkFiles}->{screenSnippets}->{setHeader}; 113 my $screenSetHeader = $set->problem_header || $ce->{webworkFiles}->{screenSnippets}->{setHeader};
96 my $displayMode = $ce->{pg}->{options}->{displayMode}; 114 my $displayMode = $ce->{pg}->{options}->{displayMode};
97 115
98 return "" unless defined $screenSetHeader and $screenSetHeader; 116 return "" unless defined $screenSetHeader and $screenSetHeader;
99 117
100 # decide what to do about problem number 118 # decide what to do about problem number
101 my $problem = WeBWorK::Problem->new( 119 my $problem = WeBWorK::DB::Record::UserProblem->new(
102 id => 0, 120 problem_id => 0,
103 set_id => $set->id, 121 set_id => $set->set_id,
104 login_id => $user->id, 122 login_id => $effectiveUser->user_id,
105 source_file => $screenSetHeader, 123 source_file => $screenSetHeader,
106 # the rest of Problem's fields are not needed, i think 124 # the rest of Problem's fields are not needed, i think
107 ); 125 );
108 126
109 my $pg = WeBWorK::PG->new( 127 my $pg = WeBWorK::PG->new(
110 $ce, 128 $ce,
111 $user, 129 $effectiveUser,
112 $r->param('key'), 130 $r->param('key'),
113 $set, 131 $set,
114 $problem, 132 $problem,
115 $psvn, 133 $psvn,
116 {}, # no form fields! 134 {}, # no form fields!
122 }, 140 },
123 ); 141 );
124 142
125 # handle translation errors 143 # handle translation errors
126 if ($pg->{flags}->{error_flag}) { 144 if ($pg->{flags}->{error_flag}) {
127 return WeBWorK::ContentGenerator::Problem::translationError( 145 return $self->errorOutput($pg->{errors}, $pg->{body_text});
128 $pg->{errors}, $pg->{body_text});
129 } else { 146 } else {
130 return $pg->{body_text}; 147 return $pg->{body_text};
131 } 148 }
132} 149}
133 150
134sub body { 151sub body {
135 my ($self, $setName) = @_; 152 my ($self, $setName) = @_;
136 $setName =~ s/^set//;
137 my $r = $self->{r}; 153 my $r = $self->{r};
138 my $courseEnvironment = $self->{courseEnvironment}; 154 my $courseEnvironment = $self->{ce};
139 my $user = $r->param('user');
140 my $wwdb = $self->{wwdb}; 155 my $db = $self->{db};
156 my $effectiveUser = $r->param('effectiveUser');
157
158 return CGI::p(CGI::font({-color=>"red"}, "This problem set is not available because it is not yet open."))
159 unless ($self->{isOpen});
141 160
142 my $hardcopyURL = 161 my $hardcopyURL =
143 $courseEnvironment->{webworkURLs}->{root} . "/" 162 $courseEnvironment->{webworkURLs}->{root} . "/"
144 . $courseEnvironment->{courseName} . "/" 163 . $courseEnvironment->{courseName} . "/"
145 . "hardcopy/set$setName/?" . $self->url_authen_args; 164 . "hardcopy/$setName/?" . $self->url_authen_args;
146 print CGI::p(CGI::a({-href=>$hardcopyURL}, "Download a hardcopy"), 165 print CGI::p(CGI::a({-href=>$hardcopyURL}, "Download a hardcopy"),
147 "of this problem set."); 166 "of this problem set.");
148 167
149 print CGI::start_table(); 168 print CGI::start_table();
150 print CGI::Tr( 169 print CGI::Tr(
152 CGI::th("Attempts"), 171 CGI::th("Attempts"),
153 CGI::th("Remaining"), 172 CGI::th("Remaining"),
154 CGI::th("Status"), 173 CGI::th("Status"),
155 ); 174 );
156 175
157 my $set = $wwdb->getSet($user, $setName); 176 my $set = $db->getGlobalUserSet($effectiveUser, $setName);
158 my @problemNumbers = $wwdb->getProblems($user, $setName); 177 my @problemNumbers = $db->listUserProblems($effectiveUser, $setName);
159 foreach my $problemNumber (sort { $a <=> $b } @problemNumbers) { 178 foreach my $problemNumber (sort { $a <=> $b } @problemNumbers) {
160 my $problem = $wwdb->getProblem($user, $setName, $problemNumber); 179 my $problem = $db->getGlobalUserProblem($effectiveUser, $setName, $problemNumber);
161 print $self->problemListRow($set, $problem); 180 print $self->problemListRow($set, $problem);
162 } 181 }
163 182
164 print CGI::end_table(); 183 print CGI::end_table();
184
185 # feedback form
186 my $ce = $self->{ce};
187 my $root = $ce->{webworkURLs}->{root};
188 my $courseName = $ce->{courseName};
189 my $feedbackURL = "$root/$courseName/feedback/";
190 print
191 CGI::startform("POST", $feedbackURL),
192 $self->hidden_authen_fields,
193 CGI::hidden("module", __PACKAGE__),
194 CGI::hidden("set", $set->set_id),
195 CGI::p({-align=>"right"},
196 CGI::submit(-name=>"feedbackForm", -label=>"Send Feedback")
197 ),
198 CGI::endform();
165 199
166 return ""; 200 return "";
167} 201}
168 202
169sub problemListRow($$$) { 203sub problemListRow($$$) {
170 my $self = shift; 204 my $self = shift;
171 my $set = shift; 205 my $set = shift;
172 my $problem = shift; 206 my $problem = shift;
173 207
174 my $name = $problem->id; 208 my $name = $problem->problem_id;
175 my $interactiveURL = "prob$name/?" . $self->url_authen_args; 209 my $interactiveURL = "$name/?" . $self->url_authen_args;
176 my $interactive = CGI::a({-href=>$interactiveURL}, "Problem $name"); 210 my $interactive = CGI::a({-href=>$interactiveURL}, "Problem $name");
177 my $attempts = $problem->num_correct + $problem->num_incorrect; 211 my $attempts = $problem->num_correct + $problem->num_incorrect;
178 my $remaining = $problem->max_attempts < 0 212 my $remaining = $problem->max_attempts < 0
179 ? "unlimited" 213 ? "unlimited"
180 : $problem->max_attempts - $attempts; 214 : $problem->max_attempts - $attempts;

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

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9