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

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

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

Revision 1222 Revision 1223
20use WeBWorK::PG; 20use WeBWorK::PG;
21use WeBWorK::PG::IO; 21use WeBWorK::PG::IO;
22use WeBWorK::Utils qw(writeLog encodeAnswers decodeAnswers ref2string makeTempDirectory); 22use WeBWorK::Utils qw(writeLog encodeAnswers decodeAnswers ref2string makeTempDirectory);
23use WeBWorK::DB::Utils qw(global2user user2global findDefaults); 23use WeBWorK::DB::Utils qw(global2user user2global findDefaults);
24use WeBWorK::Timing; 24use WeBWorK::Timing;
25
25############################################################ 26############################################################
26# 27#
27# user 28# user
28# effectiveUser 29# effectiveUser
29# key 30# key
314 my $root = $ce->{webworkURLs}->{root}; 315 my $root = $ce->{webworkURLs}->{root};
315 my $courseName = $ce->{courseName}; 316 my $courseName = $ce->{courseName};
316 print CGI::strong("Problems"), CGI::br(); 317 print CGI::strong("Problems"), CGI::br();
317 318
318 my $effectiveUser = $self->{r}->param("effectiveUser"); 319 my $effectiveUser = $self->{r}->param("effectiveUser");
319 my @problems;
320# push @problems, $db->getMergedProblem($effectiveUser, $setName, $_)
321# foreach ($db->listUserProblems($effectiveUser, $setName));
322 @problems = $db->listUserProblems($effectiveUser, $setName); # this is much faster 320 my @problemIDs = $db->listUserProblems($effectiveUser, $setName);
323# foreach my $problem (sort { $a->problem_id <=> $b->problem_id } @problems) {
324 foreach my $problem (sort { $a <=> $b } @problems) { 321 foreach my $problem (sort { $a <=> $b } @problemIDs) {
325 print CGI::a({-href=>"$root/$courseName/$setName/".$problem."/?" 322 print CGI::a({-href=>"$root/$courseName/$setName/".$problem."/?"
326 . $self->url_authen_args . "&displayMode=" . $self->{displayMode}}, 323 . $self->url_authen_args . "&displayMode=" . $self->{displayMode}},
327 "Problem ".$problem), CGI::br(); 324 "Problem ".$problem), CGI::br();
328 } 325 }
329 326
330 ''; 327 return "";
331} 328}
332 329
333sub nav { 330sub nav {
334 $WeBWorK::timer0->continue("begin nav subroutine") if $timer0_ON; 331 $WeBWorK::timer0->continue("begin nav subroutine") if $timer0_ON;
335 my $self = shift; 332 my $self = shift;
336 my $args = $_[-1]; 333 my $args = $_[-1];
337 my $setName = $self->{set}->set_id; 334 my $setName = $self->{set}->set_id;
338 my $problemNumber = $self->{problem}->problem_id; 335 my $problemNumber = $self->{problem}->problem_id;
339 336
346 my $effectiveUser = $self->{r}->param("effectiveUser"); 343 my $effectiveUser = $self->{r}->param("effectiveUser");
347 my $tail = "&displayMode=".$self->{displayMode}; 344 my $tail = "&displayMode=".$self->{displayMode};
348 345
349 my @links = ("Problem List" , "$root/$courseName/$setName", "navProbList"); 346 my @links = ("Problem List" , "$root/$courseName/$setName", "navProbList");
350 347
351 # FIXME: this could be faster 348 my @problemIDs = $db->listUserProblems($effectiveUser, $setName);
352 my $prevProblem = $db->getMergedProblem($effectiveUser, $setName, $problemNumber-1); 349 my ($prevID, $nextID);
353 my $nextProblem = $db->getMergedProblem($effectiveUser, $setName, $problemNumber+1); 350 foreach my $id (@problemIDs) {
351 $prevID = $id if $id < $problemNumber
352 and (not defined $prevID or $id > $prevID);
353 $nextID = $id if $id > $problemNumber
354 and (not defined $nextID or $id < $nextID);
355 }
354 unshift @links, "Previous Problem" , ($prevProblem 356 unshift @links, "Previous Problem" , ($prevID
355 ? "$root/$courseName/$setName/".$prevProblem->problem_id 357 ? "$root/$courseName/$setName/".$prevID
356 : "") , "navPrev"; 358 : "") , "navPrev";
357 push @links, "Next Problem" , ($nextProblem 359 push @links, "Next Problem" , ($nextID
358 ? "$root/$courseName/$setName/".$nextProblem->problem_id 360 ? "$root/$courseName/$setName/".$nextID
359 : "") , "navNext"; 361 : "") , "navNext";
360 362
361 my $result = $self->navMacro($args, $tail, @links); 363 my $result = $self->navMacro($args, $tail, @links);
362 $WeBWorK::timer0->continue("end nav subroutine") if $timer0_ON; 364 $WeBWorK::timer0->continue("end nav subroutine") if $timer0_ON;
363 return $result; 365 return $result;
364
365} 366}
366 367
367sub title { 368sub title {
368 my $self = shift; 369 my $self = shift;
369 my $setName = $self->{set}->set_id; 370 my $setName = $self->{set}->set_id;
456 } 457 }
457 } 458 }
458 # logging student answers 459 # logging student answers
459 my $pastAnswerLog = undef; 460 my $pastAnswerLog = undef;
460 if (defined( $self->{ce}->{webworkFiles}->{logs}->{'pastAnswerList'} )) { 461 if (defined( $self->{ce}->{webworkFiles}->{logs}->{'pastAnswerList'} )) {
461
462 $pastAnswerLog = $self->{ce}->{webworkFiles}->{logs}->{'pastAnswerList'}; 462 $pastAnswerLog = $self->{ce}->{webworkFiles}->{logs}->{'pastAnswerList'};
463
464 if ($submitAnswers and defined($pastAnswerLog) ) { 463 if ($submitAnswers and defined $pastAnswerLog) {
465 my $answerString = ""; 464 my $answerString = "";
466 my %answerHash = %{ $pg->{answers} }; 465 my %answerHash = %{ $pg->{answers} };
467 $answerString = $answerString . $answerHash{$_}->{original_student_ans}."\t" 466 $answerString = $answerString . $answerHash{$_}->{original_student_ans}."\t"
468 foreach (sort keys %answerHash); 467 foreach (sort keys %answerHash);
469 $answerString = '' unless defined($answerString); # insure string is defined. 468 $answerString = '' unless defined($answerString); # insure string is defined.
471 '|'.$problem->user_id. 470 '|'.$problem->user_id.
472 '|'.$problem->set_id. 471 '|'.$problem->set_id.
473 '|'.$problem->problem_id.'|'."\t". 472 '|'.$problem->problem_id.'|'."\t".
474 time()."\t". 473 time()."\t".
475 $answerString, 474 $answerString,
476
477 ); 475 );
478
479 } 476 }
480
481 } 477 }
482 # end logging student answers 478 # end logging student answers
479
483 $WeBWorK::timer0->continue("end answer processing") if $timer0_ON; 480 $WeBWorK::timer0->continue("end answer processing") if $timer0_ON;
481
484 ##### output ##### 482 ##### output #####
485 483
486 print CGI::start_div({class=>"problemHeader"}); 484 print CGI::start_div({class=>"problemHeader"});
487 485
488 # custom message for editor 486 # custom message for editor

Legend:
Removed from v.1222  
changed lines
  Added in v.1223

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9