Parent Directory
|
Revision Log
Redirect to the Scoring content generator if the scoreSelected button is pressed
1 package WeBWorK::ContentGenerator::Instructor::ProblemSetList; 2 use base qw(WeBWorK::ContentGenerator::Instructor); 3 4 =head1 NAME 5 6 WeBWorK::ContentGenerator::Instructor::ProblemSetList - Entry point for Problem and Set editing 7 8 =cut 9 10 use strict; 11 use warnings; 12 use Apache::Constants qw(REDIRECT); 13 use CGI qw(); 14 use WeBWorK::Utils qw(formatDateTime); 15 16 sub header { 17 my $self = shift; 18 my $r = $self->{r}; 19 my $ce = $self->{ce}; 20 my $courseName = $ce->{courseName}; 21 my $root = $ce->{webworkURLs}->{root}; 22 23 if (defined $r->param('scoreSelected')) { 24 warn "scoreSelected\n"; 25 $r->header_out(Location => "$root/$courseName/instructor/scoring?".$self->url_args); 26 $self->{noContent} = 1; 27 return REDIRECT; 28 } 29 $r->content_type("text/html"); 30 $r->send_http_header(); 31 } 32 33 sub initialize { 34 my $self = shift; 35 my $r = $self->{r}; 36 my $db = $self->{db}; 37 my $ce = $self->{ce}; 38 my $authz = $self->{authz}; 39 my $courseName = $ce->{courseName}; 40 my $user = $r->param('user'); 41 42 unless ($authz->hasPermissions($user, "create_and_delete_problem_sets")) { 43 $self->{submitError} = "You aren't authorized to create or delete problems"; 44 return; 45 } 46 47 if (defined($r->param('deleteSelected'))) { 48 foreach my $wannaDelete ($r->param('selectedSet')) { 49 $db->deleteGlobalSet($wannaDelete); 50 } 51 } elsif (defined($r->param('scoreSelected'))) { 52 53 }elsif (defined($r->param('makeNewSet'))) { 54 my $newSetRecord = $db->{set}->{record}->new(); 55 my $newSetName = $r->param('newSetName'); 56 $newSetRecord->set_id($newSetName); 57 $newSetRecord->set_header(""); 58 $newSetRecord->problem_header(""); 59 $newSetRecord->open_date("0"); 60 $newSetRecord->due_date("0"); 61 $newSetRecord->answer_date("0"); 62 eval {$db->addGlobalSet($newSetRecord)}; 63 } 64 } 65 66 sub path { 67 my ($self, $args) = @_; 68 69 my $ce = $self->{ce}; 70 my $root = $ce->{webworkURLs}->{root}; 71 my $courseName = $ce->{courseName}; 72 return $self->pathMacro($args, 73 "Home" => "$root", 74 $courseName => "$root/$courseName", 75 'instructor' => "$root/$courseName/instructor", 76 'sets' => '' 77 ); 78 } 79 80 sub title { 81 my $self = shift; 82 return "Instructor Tools - Problem Set List for ".$self->{ce}->{courseName}; 83 } 84 85 sub body { 86 my $self = shift; 87 my $r = $self->{r}; 88 my $db = $self->{db}; 89 my $ce = $self->{ce}; 90 my $authz = $self->{authz}; 91 my $root = $ce->{webworkURLs}->{root}; 92 my $courseName = $ce->{courseName}; 93 my $user = $r->param('user'); 94 my $key = $r->param('key'); 95 my $effectiveUserName = $r->param('effectiveUser'); 96 my $URL = $r->uri; 97 my $instructorBaseURL = "$root/$courseName/instructor"; 98 my $importURL = "$instructorBaseURL/problemSetImport/"; 99 my $sort = $r->param('sort') ? $r->param('sort') : "due_date"; 100 101 my @set_definition_files = $self->read_dir($ce->{courseDirs}->{templates},'\\.def'); 102 return CGI::em("You are not authorized to access the instructor tools") unless $authz->hasPermissions($user, "access_instructor_tools"); 103 104 # Slurp each set record for this course in @sets 105 # Gather data from the database 106 my @users = $db->listUsers; 107 my @sets; 108 my %counts; 109 my %problemCounts; 110 foreach my $set_id ($db->listGlobalSets) { 111 my $set = $db->getGlobalSet($set_id); 112 push @sets, $set; 113 $problemCounts{$set_id} = scalar($db->listGlobalProblems($set_id)); 114 my $count = 0; 115 $counts{$set_id} = $db->listSetUsers($set_id); 116 } 117 118 # Sort @sets based on the sort parameter 119 # Invalid sort types will just cause an unpredictable ordering, which is no big deal. 120 @sets = sort { 121 if ($sort eq "set_id") { 122 return $a->$sort cmp $b->$sort; 123 }elsif ($sort =~ /_date$/) { 124 return $a->$sort <=> $b->$sort; 125 } elsif ($sort eq "num_probs") { 126 return $problemCounts{$a->set_id} <=> $problemCounts{$b->set_id}; 127 } elsif ($sort eq "num_students") { 128 return $counts{$a->set_id} <=> $counts{$b->set_id}; 129 } 130 } @sets; 131 132 my $table = CGI::Tr({}, 133 CGI::th("Sel.") 134 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=set_id"}, "ID")) 135 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=open_date"}, "Open Date")) 136 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=due_date"}, "Due Date")) 137 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=answer_date"}, "Answer Date")) 138 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=num_probs"}, "Num. Problems")) 139 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=num_students"}, "Assigned to:")) 140 ) . "\n"; 141 142 foreach my $set (@sets) { 143 my $count = $counts{$set->set_id}; 144 145 my $userCountMessage = $self->userCountMessage($count, scalar(@users)); 146 147 $table .= CGI::Tr({}, 148 CGI::td({}, 149 CGI::checkbox({ 150 "name"=>"selectedSet", 151 "value"=>$set->set_id, 152 "label"=>"", 153 "checked"=>"0" 154 }) 155 ) 156 . CGI::td({}, CGI::a({href=>$r->uri.$set->set_id."/?".$self->url_authen_args}, $set->set_id)) 157 . CGI::td({}, formatDateTime($set->open_date)) 158 . CGI::td({}, formatDateTime($set->due_date)) 159 . CGI::td({}, formatDateTime($set->answer_date)) 160 . CGI::td({}, CGI::a({href=>$r->uri.$set->set_id."/problems/?".$self->url_authen_args}, $problemCounts{$set->set_id})) 161 . CGI::td({}, CGI::a({href=>$r->uri.$set->set_id."/users/?".$self->url_authen_args}, $userCountMessage)) 162 ) . "\n" 163 } 164 $table = CGI::table({"border"=>"1"}, "\n".$table."\n"); 165 166 my $form = join("", 167 CGI::start_form({"method"=>"POST", "action"=>$r->uri}),"\n", # This form is for deleting sets, and points to itself 168 $table,"\n", 169 CGI::br(),"\n", 170 $self->hidden_authen_fields,"\n", 171 CGI::submit({"name"=>"deleteSelected", "label"=>"Delete Selected"}),"\n", 172 CGI::submit({"name"=>"scoreSelected", "label"=>"Score Selected"}),"\n", 173 CGI::end_form(),"\n", 174 CGI::start_form({"method"=>"POST", "action"=>$r->uri}),"\n", 175 $self->hidden_authen_fields,"\n", 176 "New Set Name: ", 177 CGI::input({type=>"text", name=>"newSetName", value=>""}), 178 CGI::submit({"name"=>"makeNewSet", "label"=>"Create"}),"\n", 179 CGI::end_form(),"\n", 180 CGI::start_form({"method"=>"POST", "action"=>$importURL}),"\n", 181 $self->hidden_authen_fields,"\n", 182 CGI::submit({"name"=>"importSet", "label"=>"Import"}),"\n", 183 CGI::popup_menu(-name=>'set_definition_file', 184 -values=>\@set_definition_files, 185 ),' as set ', 186 CGI::input({type=>"text", name=>"importedSetName", value=>""}), 187 CGI::end_form(),"\n" 188 ); 189 print $form; 190 191 return ""; 192 } 193 194 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |