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

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

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9