[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 1980 Revision 2011
1################################################################################ 1################################################################################
2# WeBWorK Online Homework Delivery System 2# WeBWorK Online Homework Delivery System
3# Copyright © 2000-2003 The WeBWorK Project, http://openwebwork.sf.net/ 3# Copyright © 2000-2003 The WeBWorK Project, http://openwebwork.sf.net/
4# $CVSHeader: webwork-modperl/lib/WeBWorK/ContentGenerator/Problem.pm,v 1.121 2004/04/07 22:18:46 gage Exp $ 4# $CVSHeader: webwork-modperl/lib/WeBWorK/ContentGenerator/Problem.pm,v 1.122 2004/04/28 15:51:19 gage Exp $
5# 5#
6# This program is free software; you can redistribute it and/or modify it under 6# This program is free software; you can redistribute it and/or modify it under
7# the terms of either: (a) the GNU General Public License as published by the 7# the terms of either: (a) the GNU General Public License as published by the
8# Free Software Foundation; either version 2, or (at your option) any later 8# Free Software Foundation; either version 2, or (at your option) any later
9# version, or (b) the "Artistic License" which comes with this package. 9# version, or (b) the "Artistic License" which comes with this package.
150 if (defined $problemSeed) { 150 if (defined $problemSeed) {
151 $problem->problem_seed($problemSeed); 151 $problem->problem_seed($problemSeed);
152 } 152 }
153 } else { 153 } else {
154 # students can't view problems not assigned to them 154 # students can't view problems not assigned to them
155 die "Set $setName is not assigned to $effectiveUserName" 155 # die "Set $setName is not assigned to $effectiveUserName" unless defined $set;
156 unless defined $set;
157 die "Problem $problemNumber in set $setName is not assigned to $effectiveUserName" 156 # die "Problem $problemNumber in set $setName is not assigned to $effectiveUserName" unless defined $problem;
158 unless defined $problem; 157
158 # We don't want to die if this set does not exist or isn't defined for this user
159 # we'll just return a page with nothing but an error on it.
160 $self->{invalidSet} = (grep /$setName/, $db->listUserSets($effectiveUserName)) == 0;
161 $self->{invalidProblem} = (grep /$problemNumber/, $db->listUserProblems($effectiveUserName, $setName)) == 0;
162
159 } 163 }
160 164
161 $self->{userName} = $userName; 165 $self->{userName} = $userName;
162 $self->{effectiveUserName} = $effectiveUserName; 166 $self->{effectiveUserName} = $effectiveUserName;
163 $self->{user} = $user; 167 $self->{user} = $user;
182 $self->{redisplay} = $redisplay; 186 $self->{redisplay} = $redisplay;
183 $self->{submitAnswers} = $submitAnswers; 187 $self->{submitAnswers} = $submitAnswers;
184 $self->{checkAnswers} = $checkAnswers; 188 $self->{checkAnswers} = $checkAnswers;
185 $self->{previewAnswers} = $previewAnswers; 189 $self->{previewAnswers} = $previewAnswers;
186 $self->{formFields} = $formFields; 190 $self->{formFields} = $formFields;
191
192 # now that we've set all the necessary variables quit out if the set or problem is invalid
193 return if $self->{invalidSet} || $self->{invalidProblem};
187 194
188 ##### permissions ##### 195 ##### permissions #####
189 196
190 # are we allowed to view this problem? 197 # are we allowed to view this problem?
191 $self->{isOpen} = time >= $set->open_date || $permissionLevel > 0; 198 $self->{isOpen} = time >= $set->open_date || $permissionLevel > 0;
330} 337}
331 338
332sub options { 339sub options {
333 my ($self) = @_; 340 my ($self) = @_;
334 341
342 return "" if $self->{invalidProblem};
343
335 return join("", 344 return join("",
336 CGI::start_form("POST", $self->{r}->uri), 345 CGI::start_form("POST", $self->{r}->uri),
337 $self->hidden_authen_fields, 346 $self->hidden_authen_fields,
338 CGI::hr(), 347 CGI::hr(),
339 CGI::start_div({class=>"viewOptions"}), 348 CGI::start_div({class=>"viewOptions"}),
364 my ($self) = @_; 373 my ($self) = @_;
365 my $r = $self->r; 374 my $r = $self->r;
366 my $db = $r->db; 375 my $db = $r->db;
367 my $urlpath = $r->urlpath; 376 my $urlpath = $r->urlpath;
368 377
378 # can't show sibling problems if the set is invalid
379 return "" if $self->{invalidSet};
380
369 my $courseID = $urlpath->arg("courseID"); 381 my $courseID = $urlpath->arg("courseID");
370 my $setID = $self->{set}->set_id; 382 my $setID = $self->{set}->set_id;
371 my $eUserID = $r->param("effectiveUser"); 383 my $eUserID = $r->param("effectiveUser");
372 my @problemIDs = sort { $a <=> $b } $db->listUserProblems($eUserID, $setID); 384 my @problemIDs = sort { $a <=> $b } $db->listUserProblems($eUserID, $setID);
373 385
394 my $r = $self->r; 406 my $r = $self->r;
395 my $db = $r->db; 407 my $db = $r->db;
396 my $urlpath = $r->urlpath; 408 my $urlpath = $r->urlpath;
397 409
398 my $courseID = $urlpath->arg("courseID"); 410 my $courseID = $urlpath->arg("courseID");
399 my $setID = $self->{set}->set_id; 411 my $setID = $self->{set}->set_id if !($self->{invalidSet});
400 my $problemID = $self->{problem}->problem_id; 412 my $problemID = $self->{problem}->problem_id if !($self->{invalidProblem});
401 my $eUserID = $r->param("effectiveUser"); 413 my $eUserID = $r->param("effectiveUser");
402 414
403 my ($prevID, $nextID); 415 my ($prevID, $nextID);
404 416
417 if (!$self->{invalidProblem}) {
405 my @problemIDs = $db->listUserProblems($eUserID, $setID); 418 my @problemIDs = $db->listUserProblems($eUserID, $setID);
406 foreach my $id (@problemIDs) { 419 foreach my $id (@problemIDs) {
407 $prevID = $id if $id < $problemID 420 $prevID = $id if $id < $problemID
408 and (not defined $prevID or $id > $prevID); 421 and (not defined $prevID or $id > $prevID);
409 $nextID = $id if $id > $problemID 422 $nextID = $id if $id > $problemID
410 and (not defined $nextID or $id < $nextID); 423 and (not defined $nextID or $id < $nextID);
411 } 424 }
412 425 }
426
413 my @links; 427 my @links;
414 428
415 if ($prevID) { 429 if ($prevID) {
416 my $prevPage = $urlpath->newFromModule(__PACKAGE__, 430 my $prevPage = $urlpath->newFromModule(__PACKAGE__,
417 courseID => $courseID, setID => $setID, problemID => $prevID); 431 courseID => $courseID, setID => $setID, problemID => $prevID);
418 push @links, "Previous Problem", $r->location . $prevPage->path, "navPrev"; 432 push @links, "Previous Problem", $r->location . $prevPage->path, "navPrev";
419 } else { 433 } else {
420 push @links, "Previous Problem", "", "navPrev"; 434 push @links, "Previous Problem", "", "navPrev";
421 } 435 }
422 436
423 push @links, "Problem List", $r->location . $urlpath->parent->path, "navProbList"; 437 push @links, "Problem List", $r->location . $urlpath->parent->path, "navProbList";
424 438
425 if ($nextID) { 439 if ($nextID) {
426 my $nextPage = $urlpath->newFromModule(__PACKAGE__, 440 my $nextPage = $urlpath->newFromModule(__PACKAGE__,
427 courseID => $courseID, setID => $setID, problemID => $nextID); 441 courseID => $courseID, setID => $setID, problemID => $nextID);
428 push @links, "Next Problem", $r->location . $nextPage->path, "navNext"; 442 push @links, "Next Problem", $r->location . $nextPage->path, "navNext";
429 } else { 443 } else {
430 push @links, "Next Problem", "", "navNext"; 444 push @links, "Next Problem", "", "navNext";
431 } 445 }
432 446
433 my $tail = "&displayMode=".$self->{displayMode}; 447 my $tail = "&displayMode=".$self->{displayMode};
434 return $self->navMacro($args, $tail, @links); 448 return $self->navMacro($args, $tail, @links);
435} 449}
436 450
437sub title { 451sub title {
438 my ($self) = @_; 452 my ($self) = @_;
453
454 # using the url arguments won't break if the set/problem are invalid
455 my $setID = $self->r->urlpath->arg("setID");
456 my $problemID = $self->r->urlpath->arg("problemID");
439 457
440 my $setID = $self->{set}->set_id; 458 #my $setID = $self->{set}->set_id;
441 my $problemID = $self->{problem}->problem_id; 459 #my $problemID = $self->{problem}->problem_id;
442 460
443 return "$setID : $problemID"; 461 return "$setID : $problemID";
444} 462}
445 463
446sub body { 464sub body {
447 my $self = shift; 465 my $self = shift;
448 my $r = $self->r; 466 my $r = $self->r;
449 my $ce = $r->ce; 467 my $ce = $r->ce;
450 my $db = $r->db; 468 my $db = $r->db;
451 my $urlpath = $r->urlpath; 469 my $urlpath = $r->urlpath;
470
471 if ($self->{invalidSet}) {
472 return CGI::div({class=>"ResultsWithError"},
473 CGI::p("The selected problem set (" . $urlpath->arg("setID") . ") is not a valid set for " . $r->param("effectiveUser") . "."));
474 }
452 475
476 if ($self->{invalidProblem}) {
477 return CGI::div({class=>"ResultsWithError"},
478 CGI::p("The selected problem (" . $urlpath->arg("problemID") . ") is not a valid problem for set " . $self->{set}->set_id . "."));
479 }
480
453 unless ($self->{isOpen}) { 481 unless ($self->{isOpen}) {
454 return CGI::div({class=>"ResultsWithError"}, 482 return CGI::div({class=>"ResultsWithError"},
455 CGI::p("This problem is not available because the problem set that contains it is not yet open.")); 483 CGI::p("This problem is not available because the problem set that contains it is not yet open."));
456 } 484 }
457 # unpack some useful variables 485 # unpack some useful variables

Legend:
Removed from v.1980  
changed lines
  Added in v.2011

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9