Parent Directory
|
Revision Log
1. fixed some formatting in Problem 2. hardcopy allows correct answers, hints, solutions to be shown 3. privileged users are allowed to view/download "not yet open" sets -sam
1 ################################################################################ 2 # WeBWorK mod_perl (c) 2000-2002 WeBWorK Project 3 # $Id$ 4 ################################################################################ 5 6 package WeBWorK::ContentGenerator::ProblemSets; 7 8 =head1 NAME 9 10 WeBWorK::ContentGenerator::ProblemSets - Display a list of built problem sets. 11 12 =cut 13 14 use strict; 15 use warnings; 16 use base qw(WeBWorK::ContentGenerator); 17 use Apache::Constants qw(:common); 18 use CGI qw(); 19 use WeBWorK::ContentGenerator; 20 use WeBWorK::DB::WW; 21 use WeBWorK::DB::Auth; 22 use WeBWorK::Utils qw(readFile formatDateTime); 23 24 sub initialize { 25 my $self = shift; 26 my $courseEnvironment = $self->{courseEnvironment}; 27 28 # Open a database connection that we can use for the rest of 29 # the content generation. 30 31 $self->{wwdb} = new WeBWorK::DB::WW $courseEnvironment; 32 $self->{authdb} = new WeBWorK::DB::Auth $courseEnvironment; 33 } 34 35 sub path { 36 my ($self, $args) = @_; 37 38 my $ce = $self->{courseEnvironment}; 39 my $root = $ce->{webworkURLs}->{root}; 40 my $courseName = $ce->{courseName}; 41 return $self->pathMacro($args, 42 "Home" => "$root", 43 $courseName => "", 44 ); 45 } 46 47 sub title { 48 my $self = shift; 49 my $courseEnvironment = $self->{courseEnvironment}; 50 51 return $courseEnvironment->{courseName}; 52 } 53 54 sub body { 55 my $self = shift; 56 my $r = $self->{r}; 57 my $courseEnvironment = $self->{courseEnvironment}; 58 my $user = $r->param("user"); 59 my $effectiveUser = $r->param("effectiveUser"); 60 my $sort = $r->param("sort") || "status"; 61 my $wwdb = $self->{wwdb}; 62 my $authdb = $self->{authdb}; 63 my $permissionLevel = $authdb->getPermissions($user); 64 65 if (defined $courseEnvironment->{courseFiles}->{motd} 66 and $courseEnvironment->{courseFiles}->{motd}) { 67 my $motd = eval { readFile($courseEnvironment->{courseFiles}->{motd}) }; 68 $@ or print $motd; 69 } 70 71 $sort = "status" unless $sort eq "status" or $sort eq "name"; 72 my $baseURL = $r->uri . "?" . $self->url_authen_args(); 73 my $nameHeader = ($sort eq "name") ? CGI::u("Name") : CGI::a({-href=>"$baseURL&sort=name"}, "Name"); 74 my $statusHeader = ($sort eq "status") ? CGI::u("Status") : CGI::a({-href=>"$baseURL&sort=status"}, "Status"); 75 76 print CGI::startform(-method=>"POST", -action=>$r->uri."hardcopy/"); 77 print $self->hidden_authen_fields; 78 print CGI::start_table(); 79 print CGI::Tr( 80 CGI::th("Sel."), 81 CGI::th($nameHeader), 82 CGI::th($statusHeader), 83 #CGI::th("Hardcopy"), 84 ); 85 86 my @sets; 87 push @sets, $wwdb->getSet($effectiveUser, $_) foreach ($wwdb->getSets($effectiveUser)); 88 @sets = sort byname @sets if $sort eq "name"; 89 @sets = sort byduedate @sets if $sort eq "status"; 90 foreach my $set (@sets) { 91 print $self->setListRow($set, ($permissionLevel > 0), 92 ($permissionLevel > 0)); 93 } 94 95 print CGI::end_table(); 96 my $pl = ($permissionLevel > 0 ? "s" : ""); 97 print CGI::p(CGI::submit("hardcopy", "Download Harcopy for Selected Set$pl")); 98 print CGI::endform(); 99 100 # feedback form 101 my $ce = $self->{courseEnvironment}; 102 my $root = $ce->{webworkURLs}->{root}; 103 my $courseName = $ce->{courseName}; 104 my $feedbackURL = "$root/$courseName/feedback/"; 105 print 106 CGI::startform("POST", $feedbackURL), 107 $self->hidden_authen_fields, 108 CGI::hidden("module", __PACKAGE__), 109 CGI::p({-align=>"right"}, 110 CGI::submit(-name=>"feedbackForm", -label=>"Send Feedback") 111 ), 112 CGI::endform(); 113 114 return ""; 115 } 116 117 sub setListRow($$$) { 118 my ($self, $set, $multiSet, $preOpenSets) = @_; 119 120 my $name = $set->id; 121 122 my $interactiveURL = "$name/?" . $self->url_authen_args; 123 #my $hardcopyURL = "hardcopy/$name/?" . $self->url_authen_args; 124 125 my $openDate = formatDateTime($set->open_date); 126 my $dueDate = formatDateTime($set->due_date); 127 my $answerDate = formatDateTime($set->answer_date); 128 129 #my $checkbox = CGI::checkbox(-name=>"hcSet", -value=>$set->id, -label=>""); 130 131 my $control = ""; 132 if ($multiSet) { 133 $control = CGI::checkbox( 134 -name=>"hcSet", 135 -value=>$name, 136 -label=>"", 137 ); 138 } else { 139 $control = CGI::radio_group( 140 -name=>"hcSet", 141 -values=>[$name], 142 -default=>"-", 143 -labels=>{$name => ""}, 144 ); 145 } 146 147 my $interactive = CGI::a({-href=>$interactiveURL}, $name); 148 #my $hardcopy = CGI::a({-href=>$hardcopyURL}, "download"); 149 150 my $status; 151 if (time < $set->open_date) { 152 $status = "opens at $openDate"; 153 $control = "" unless $preOpenSets; 154 $interactive = $name unless $preOpenSets; 155 #$hardcopy = ""; 156 } elsif (time < $set->due_date) { 157 $status = "open, due at $dueDate"; 158 } elsif (time < $set->answer_date) { 159 $status = "closed, answers at $answerDate"; 160 } else { 161 $status = "closed, answers available"; 162 } 163 164 return CGI::Tr(CGI::td([ 165 $control, 166 $interactive, 167 $status, 168 #$hardcopy, 169 ])); 170 } 171 172 sub byname { $a->id cmp $b->id; } 173 sub byduedate { $a->due_date <=> $b->due_date; } 174 175 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |