Parent Directory
|
Revision Log
Hit the #nav macro with a cluebat RE: webworkURLs->htdocs vs. imageprefix="" -Dennis
1 ################################################################################ 2 # WeBWorK mod_perl (c) 2000-2002 WeBWorK Project 3 # $Id$ 4 ################################################################################ 5 6 package WeBWorK::ContentGenerator::ProblemSet; 7 8 =head1 NAME 9 10 WeBWorK::ContentGenerator::ProblemSet - display an index of the problems in a 11 problem set. 12 13 =cut 14 15 use strict; 16 use warnings; 17 use base qw(WeBWorK::ContentGenerator); 18 use Apache::Constants qw(:common); 19 use CGI qw(); 20 use WeBWorK::ContentGenerator; 21 use WeBWorK::DB::WW; 22 use WeBWorK::DB::Classlist; 23 24 sub initialize { 25 my ($self, $setName) = @_; 26 my $courseEnvironment = $self->{courseEnvironment}; 27 my $r = $self->{r}; 28 my $userName = $r->param("user"); 29 my $effectiveUserName = $r->param("effectiveUser"); 30 31 ##### database setup ##### 32 33 my $cldb = WeBWorK::DB::Classlist->new($courseEnvironment); 34 my $wwdb = WeBWorK::DB::WW->new($courseEnvironment); 35 my $authdb = WeBWorK::DB::Auth->new($courseEnvironment); 36 37 my $user = $cldb->getUser($userName); 38 my $effectiveUser = $cldb->getUser($effectiveUserName); 39 my $set = $wwdb->getSet($effectiveUserName, $setName); 40 my $permissionLevel = $authdb->getPermissions($userName); 41 42 $self->{cldb} = $cldb; 43 $self->{wwdb} = $wwdb; 44 $self->{authdb} = $authdb; 45 46 $self->{userName} = $userName; 47 $self->{user} = $user; 48 $self->{effectiveUser} = $effectiveUser; 49 $self->{set} = $set; 50 $self->{permissionLevel} = $permissionLevel; 51 52 ##### permissions ##### 53 54 $self->{isOpen} = time >= $set->open_date || $permissionLevel > 0; 55 } 56 57 sub path { 58 my ($self, $setName, $args) = @_; 59 60 my $ce = $self->{courseEnvironment}; 61 my $root = $ce->{webworkURLs}->{root}; 62 my $courseName = $ce->{courseName}; 63 return $self->pathMacro($args, 64 "Home" => "$root", 65 $courseName => "$root/$courseName", 66 $setName => "", 67 ); 68 } 69 70 sub nav { 71 my ($self, $setName, $args) = @_; 72 73 my $ce = $self->{courseEnvironment}; 74 my $root = $ce->{webworkURLs}->{root}; 75 my $courseName = $ce->{courseName}; 76 my @links = ("Problem Sets" , "$root/$courseName", "navUp"); 77 my $tail = ""; 78 79 return $self->navMacro($args, $tail, @links); 80 } 81 82 83 sub siblings { 84 my ($self, $setName) = @_; 85 86 my $ce = $self->{courseEnvironment}; 87 my $root = $ce->{webworkURLs}->{root}; 88 my $courseName = $ce->{courseName}; 89 90 print CGI::strong("Problem Sets"), CGI::br(); 91 92 my $wwdb = $self->{wwdb}; 93 my $effectiveUser = $self->{r}->param("effectiveUser"); 94 my @sets; 95 push @sets, $wwdb->getSet($effectiveUser, $_) foreach ($wwdb->getSets($effectiveUser)); 96 foreach my $set (sort { $a->open_date <=> $b->open_date } @sets) { 97 if (time >= $set->open_date) { 98 print CGI::a({-href=>"$root/$courseName/".$set->id."/?" 99 . $self->url_authen_args}, $set->id), CGI::br(); 100 } else { 101 print $set->id, CGI::br(); 102 } 103 } 104 } 105 106 sub title { 107 my ($self, $setName) = @_; 108 109 return $setName; 110 } 111 112 sub info { 113 my ($self, $setName) = @_; 114 115 my $r = $self->{r}; 116 my $ce = $self->{courseEnvironment}; 117 118 return "" unless $self->{isOpen}; 119 120 my $wwdb = $self->{wwdb}; 121 my $cldb = $self->{cldb}; 122 my $effectiveUser = $cldb->getUser($r->param("effectiveUser")); 123 my $set = $wwdb->getSet($effectiveUser->id, $setName); 124 my $psvn = $wwdb->getPSVN($effectiveUser->id, $setName); 125 126 my $screenSetHeader = $set->problem_header || $ce->{webworkFiles}->{screenSnippets}->{setHeader}; 127 my $displayMode = $ce->{pg}->{options}->{displayMode}; 128 129 return "" unless defined $screenSetHeader and $screenSetHeader; 130 131 # decide what to do about problem number 132 my $problem = WeBWorK::Problem->new( 133 id => 0, 134 set_id => $set->id, 135 login_id => $effectiveUser->id, 136 source_file => $screenSetHeader, 137 # the rest of Problem's fields are not needed, i think 138 ); 139 140 my $pg = WeBWorK::PG->new( 141 $ce, 142 $effectiveUser, 143 $r->param('key'), 144 $set, 145 $problem, 146 $psvn, 147 {}, # no form fields! 148 { # translation options 149 displayMode => $displayMode, 150 showHints => 0, 151 showSolutions => 0, 152 processAnswers => 0, 153 }, 154 ); 155 156 # handle translation errors 157 if ($pg->{flags}->{error_flag}) { 158 return $self->errorOutput($pg->{errors}, $pg->{body_text}); 159 } else { 160 return $pg->{body_text}; 161 } 162 } 163 164 sub body { 165 my ($self, $setName) = @_; 166 my $r = $self->{r}; 167 my $courseEnvironment = $self->{courseEnvironment}; 168 my $effectiveUser = $r->param('effectiveUser'); 169 my $wwdb = $self->{wwdb}; 170 171 return CGI::p(CGI::font({-color=>"red"}, "This problem set is not available because it is not yet open.")) 172 unless ($self->{isOpen}); 173 174 my $hardcopyURL = 175 $courseEnvironment->{webworkURLs}->{root} . "/" 176 . $courseEnvironment->{courseName} . "/" 177 . "hardcopy/$setName/?" . $self->url_authen_args; 178 print CGI::p(CGI::a({-href=>$hardcopyURL}, "Download a hardcopy"), 179 "of this problem set."); 180 181 print CGI::start_table(); 182 print CGI::Tr( 183 CGI::th("Name"), 184 CGI::th("Attempts"), 185 CGI::th("Remaining"), 186 CGI::th("Status"), 187 ); 188 189 my $set = $wwdb->getSet($effectiveUser, $setName); 190 my @problemNumbers = $wwdb->getProblems($effectiveUser, $setName); 191 foreach my $problemNumber (sort { $a <=> $b } @problemNumbers) { 192 my $problem = $wwdb->getProblem($effectiveUser, $setName, $problemNumber); 193 print $self->problemListRow($set, $problem); 194 } 195 196 print CGI::end_table(); 197 198 # feedback form 199 my $ce = $self->{courseEnvironment}; 200 my $root = $ce->{webworkURLs}->{root}; 201 my $courseName = $ce->{courseName}; 202 my $feedbackURL = "$root/$courseName/feedback/"; 203 print 204 CGI::startform("POST", $feedbackURL), 205 $self->hidden_authen_fields, 206 CGI::hidden("module", __PACKAGE__), 207 CGI::hidden("set", $set->id), 208 CGI::p({-align=>"right"}, 209 CGI::submit(-name=>"feedbackForm", -label=>"Send Feedback") 210 ), 211 CGI::endform(); 212 213 return ""; 214 } 215 216 sub problemListRow($$$) { 217 my $self = shift; 218 my $set = shift; 219 my $problem = shift; 220 221 my $name = $problem->id; 222 my $interactiveURL = "$name/?" . $self->url_authen_args; 223 my $interactive = CGI::a({-href=>$interactiveURL}, "Problem $name"); 224 my $attempts = $problem->num_correct + $problem->num_incorrect; 225 my $remaining = $problem->max_attempts < 0 226 ? "unlimited" 227 : $problem->max_attempts - $attempts; 228 my $status = $problem->status * 100 . "%"; 229 230 return CGI::Tr(CGI::td({-nowrap=>1}, [ 231 $interactive, 232 $attempts, 233 $remaining, 234 $status, 235 ])); 236 } 237 238 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |