| … | |
… | |
| 40 | # |
40 | # |
| 41 | ############################################################ |
41 | ############################################################ |
| 42 | |
42 | |
| 43 | sub pre_header_initialize { |
43 | sub pre_header_initialize { |
| 44 | my ($self, $setName, $problemNumber) = @_; |
44 | my ($self, $setName, $problemNumber) = @_; |
| 45 | my $courseEnv = $self->{courseEnvironment}; |
45 | my $courseEnv = $self->{ce}; |
| 46 | my $r = $self->{r}; |
46 | my $r = $self->{r}; |
| 47 | my $userName = $r->param('user'); |
47 | my $userName = $r->param('user'); |
| 48 | my $effectiveUserName = $r->param('effectiveUser'); |
48 | my $effectiveUserName = $r->param('effectiveUser'); |
| 49 | |
49 | |
| 50 | ##### database setup ##### |
50 | ##### database setup ##### |
| … | |
… | |
| 198 | my $self = shift; |
198 | my $self = shift; |
| 199 | my $args = $_[-1]; |
199 | my $args = $_[-1]; |
| 200 | my $setName = $self->{set}->id; |
200 | my $setName = $self->{set}->id; |
| 201 | my $problemNumber = $self->{problem}->id; |
201 | my $problemNumber = $self->{problem}->id; |
| 202 | |
202 | |
| 203 | my $ce = $self->{courseEnvironment}; |
203 | my $ce = $self->{ce}; |
| 204 | my $root = $ce->{webworkURLs}->{root}; |
204 | my $root = $ce->{webworkURLs}->{root}; |
| 205 | my $courseName = $ce->{courseName}; |
205 | my $courseName = $ce->{courseName}; |
| 206 | return $self->pathMacro($args, |
206 | return $self->pathMacro($args, |
| 207 | "Home" => "$root", |
207 | "Home" => "$root", |
| 208 | $courseName => "$root/$courseName", |
208 | $courseName => "$root/$courseName", |
| … | |
… | |
| 214 | sub siblings { |
214 | sub siblings { |
| 215 | my $self = shift; |
215 | my $self = shift; |
| 216 | my $setName = $self->{set}->id; |
216 | my $setName = $self->{set}->id; |
| 217 | my $problemNumber = $self->{problem}->id; |
217 | my $problemNumber = $self->{problem}->id; |
| 218 | |
218 | |
| 219 | my $ce = $self->{courseEnvironment}; |
219 | my $ce = $self->{ce}; |
| 220 | my $root = $ce->{webworkURLs}->{root}; |
220 | my $root = $ce->{webworkURLs}->{root}; |
| 221 | my $courseName = $ce->{courseName}; |
221 | my $courseName = $ce->{courseName}; |
| 222 | |
222 | |
| 223 | print CGI::strong("Problems"), CGI::br(); |
223 | print CGI::strong("Problems"), CGI::br(); |
| 224 | |
224 | |
| … | |
… | |
| 238 | my $self = shift; |
238 | my $self = shift; |
| 239 | my $args = $_[-1]; |
239 | my $args = $_[-1]; |
| 240 | my $setName = $self->{set}->id; |
240 | my $setName = $self->{set}->id; |
| 241 | my $problemNumber = $self->{problem}->id; |
241 | my $problemNumber = $self->{problem}->id; |
| 242 | |
242 | |
| 243 | my $ce = $self->{courseEnvironment}; |
243 | my $ce = $self->{ce}; |
| 244 | my $root = $ce->{webworkURLs}->{root}; |
244 | my $root = $ce->{webworkURLs}->{root}; |
| 245 | my $courseName = $ce->{courseName}; |
245 | my $courseName = $ce->{courseName}; |
| 246 | |
246 | |
| 247 | my $wwdb = $self->{wwdb}; |
247 | my $wwdb = $self->{wwdb}; |
| 248 | my $effectiveUser = $self->{r}->param("effectiveUser"); |
248 | my $effectiveUser = $self->{r}->param("effectiveUser"); |
| … | |
… | |
| 317 | $problem->status($pg->{state}->{recorded_score}); |
317 | $problem->status($pg->{state}->{recorded_score}); |
| 318 | $problem->num_correct($pg->{state}->{num_of_correct_ans}); |
318 | $problem->num_correct($pg->{state}->{num_of_correct_ans}); |
| 319 | $problem->num_incorrect($pg->{state}->{num_of_incorrect_ans}); |
319 | $problem->num_incorrect($pg->{state}->{num_of_incorrect_ans}); |
| 320 | $wwdb->setProblem($problem); |
320 | $wwdb->setProblem($problem); |
| 321 | # write to the transaction log, just to make sure |
321 | # write to the transaction log, just to make sure |
| 322 | writeLog($self->{courseEnvironment}, "transaction", |
322 | writeLog($self->{ce}, "transaction", |
| 323 | $problem->id."\t". |
323 | $problem->id."\t". |
| 324 | $problem->set_id."\t". |
324 | $problem->set_id."\t". |
| 325 | $problem->login_id."\t". |
325 | $problem->login_id."\t". |
| 326 | $problem->source_file."\t". |
326 | $problem->source_file."\t". |
| 327 | $problem->value."\t". |
327 | $problem->value."\t". |
| … | |
… | |
| 335 | ); |
335 | ); |
| 336 | } |
336 | } |
| 337 | } |
337 | } |
| 338 | # logging student answers |
338 | # logging student answers |
| 339 | my $pastAnswerLog = undef; |
339 | my $pastAnswerLog = undef; |
| 340 | if (defined( $self->{courseEnvironment}->{webworkFiles}->{logs}->{'pastAnswerList'} )) { |
340 | if (defined( $self->{ce}->{webworkFiles}->{logs}->{'pastAnswerList'} )) { |
| 341 | |
341 | |
| 342 | $pastAnswerLog = $self->{courseEnvironment}->{webworkFiles}->{logs}->{'pastAnswerList'}; |
342 | $pastAnswerLog = $self->{ce}->{webworkFiles}->{logs}->{'pastAnswerList'}; |
| 343 | |
343 | |
| 344 | if ($submitAnswers and defined($pastAnswerLog) ) { |
344 | if ($submitAnswers and defined($pastAnswerLog) ) { |
| 345 | my $answerString = ""; |
345 | my $answerString = ""; |
| 346 | my %answerHash = %{ $pg->{answers} }; |
346 | my %answerHash = %{ $pg->{answers} }; |
| 347 | $answerString = $answerString . $answerHash{$_}->{original_student_ans}."\t" |
347 | $answerString = $answerString . $answerHash{$_}->{original_student_ans}."\t" |
| 348 | foreach (sort keys %answerHash); |
348 | foreach (sort keys %answerHash); |
| 349 | writeLog($self->{courseEnvironment}, "pastAnswerList", |
349 | writeLog($self->{ce}, "pastAnswerList", |
| 350 | '|'.$problem->login_id. |
350 | '|'.$problem->login_id. |
| 351 | '|'.$problem->set_id. |
351 | '|'.$problem->set_id. |
| 352 | '|'.$problem->id.'|'."\t". |
352 | '|'.$problem->id.'|'."\t". |
| 353 | time()."\t". |
353 | time()."\t". |
| 354 | $answerString, |
354 | $answerString, |
| … | |
… | |
| 447 | $self->viewOptions(),CGI::end_div(), |
447 | $self->viewOptions(),CGI::end_div(), |
| 448 | CGI::endform(); |
448 | CGI::endform(); |
| 449 | |
449 | |
| 450 | print CGI::start_div({class=>"problemFooter"}); |
450 | print CGI::start_div({class=>"problemFooter"}); |
| 451 | # feedback form |
451 | # feedback form |
| 452 | my $ce = $self->{courseEnvironment}; |
452 | my $ce = $self->{ce}; |
| 453 | my $root = $ce->{webworkURLs}->{root}; |
453 | my $root = $ce->{webworkURLs}->{root}; |
| 454 | my $courseName = $ce->{courseName}; |
454 | my $courseName = $ce->{courseName}; |
| 455 | my $feedbackURL = "$root/$courseName/feedback/"; |
455 | my $feedbackURL = "$root/$courseName/feedback/"; |
| 456 | |
456 | |
| 457 | # arguments for answer inspection button |
457 | # arguments for answer inspection button |
| … | |
… | |
| 629 | ); |
629 | ); |
| 630 | } |
630 | } |
| 631 | |
631 | |
| 632 | sub previewAnswer($$) { |
632 | sub previewAnswer($$) { |
| 633 | my ($self, $answerResult) = @_; |
633 | my ($self, $answerResult) = @_; |
| 634 | my $ce = $self->{courseEnvironment}; |
634 | my $ce = $self->{ce}; |
| 635 | my $effectiveUser = $self->{effectiveUser}; |
635 | my $effectiveUser = $self->{effectiveUser}; |
| 636 | my $set = $self->{set}; |
636 | my $set = $self->{set}; |
| 637 | my $problem = $self->{problem}; |
637 | my $problem = $self->{problem}; |
| 638 | my $displayMode = $self->{displayMode}; |
638 | my $displayMode = $self->{displayMode}; |
| 639 | |
639 | |