Parent Directory
|
Revision Log
Took out many many unneccessary database accesses. -Dennis
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 CGI qw(); 13 use WeBWorK::Utils qw(formatDateTime); 14 15 sub title { 16 my $self = shift; 17 return "Instructor Tools - Problem Set List for ".$self->{ce}->{courseName}; 18 } 19 20 sub body { 21 my $self = shift; 22 my $r = $self->{r}; 23 my $db = $self->{db}; 24 my $ce = $self->{ce}; 25 my $root = $ce->{webworkURLs}->{root}; 26 my $courseName = $ce->{courseName}; 27 my $user = $r->param('user'); 28 my $key = $r->param('key'); 29 my $effectiveUserName = $r->param('effectiveUser'); 30 my $URL = $r->uri; 31 my $instructorBaseURL = "$root/$courseName/instructor"; 32 my $setEditorURL = "$instructorBaseURL/problemSetEditor/"; 33 my $importURL = "$instructorBaseURL/problemSetImport/"; 34 my $addURL = "$instructorBaseURL/problemSetAdd/"; 35 my $sort = $r->param('sort') ? $r->param('sort') : "due_date"; 36 37 # Slurp each set record for this course in @sets 38 my @sets; 39 push @sets, $db->getGlobalSet($_) 40 foreach ($db->listGlobalSets); 41 42 # Count the number of users each set is assigned to 43 my %counts; 44 foreach my $set (@sets) { 45 my @problems = $db->listGlobalProblems($set->set_id); 46 my $count = 0; 47 $counts{$set->set_id} = $db->listSetUsers($set->set_id); 48 } 49 50 # Sort @sets based on the sort parameter 51 # Invalid sort types will just cause an unpredictable ordering, which is no big deal. 52 @sets = sort { 53 if ($sort eq "set_id") { 54 return $a->$sort cmp $b->$sort; 55 }elsif ($sort =~ /_date$/) { 56 return $a->$sort <=> $b->$sort; 57 } elsif ($sort eq "num_probs") { 58 return scalar($db->listGlobalProblems($a->set_id)) <=> scalar($db->listGlobalProblems($b->set_id)); 59 } elsif ($sort eq "num_students") { 60 return $counts{$a->set_id} <=> $counts{$b->set_id}; 61 } 62 } @sets; 63 64 my $table = CGI::Tr({}, 65 CGI::th("Sel.") 66 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=set_id"}, "ID")) 67 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=open_date"}, "Open Date")) 68 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=due_date"}, "Due Date")) 69 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=answer_date"}, "Answer Date")) 70 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=num_probs"}, "Num. Problems")) 71 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=num_students"}, "Assigned to:")) 72 ) . "\n"; 73 74 my @users = $db->listUsers; 75 foreach my $set (@sets) { 76 my @problems = $db->listGlobalProblems($set->set_id); 77 my $count = $counts{$set->set_id}; 78 79 my $userCountMessage; 80 if ($count == 0) { 81 $userCountMessage = "Not assigned"; 82 } elsif ($count == scalar(@users)) { 83 $userCountMessage = "All users"; 84 } elsif ($count == 1) { 85 $userCountMessage = "1 user"; 86 } elsif ($count > scalar(@users) || $count < 0) { 87 $userCountMessage = CGI::em("Impossible number of users: $count"); 88 } else { 89 $userCountMessage = "$count users"; 90 } 91 92 $table .= CGI::Tr({}, 93 CGI::td({}, 94 CGI::checkbox({ 95 "name"=>"selectedSet", 96 "value"=>$set->set_id, 97 "label"=>"", 98 "checked"=>"0" 99 }) 100 ) 101 . CGI::td({}, CGI::a({href=>"$setEditorURL".$set->set_id."/?".$self->url_authen_args}, $set->set_id)) 102 . CGI::td({}, formatDateTime($set->open_date)) 103 . CGI::td({}, formatDateTime($set->due_date)) 104 . CGI::td({}, formatDateTime($set->answer_date)) 105 . CGI::td({}, scalar(@problems)) 106 . CGI::td({}, $userCountMessage) 107 ) . "\n" 108 } 109 $table = CGI::table({"border"=>"1"}, "\n".$table."\n"); 110 111 my $form = CGI::start_form({"method"=>"POST", "action"=>""})."\n" # This form is for deleting sets, and points to itself 112 . $table."\n" 113 . CGI::br()."\n" 114 . $self->hidden_authen_fields."\n" 115 . CGI::submit({"name"=>"deleteSelected", "label"=>"Delete Selected"})."\n" 116 . CGI::end_form()."\n" 117 . CGI::start_form({"method"=>"POST", "action"=>$addURL})."\n" 118 . $self->hidden_authen_fields."\n" 119 . CGI::submit({"name"=>"addSet", "label"=>"New"})."\n" 120 . CGI::end_form()."\n" 121 . CGI::start_form({"method"=>"POST", "action"=>$importURL})."\n" 122 . $self->hidden_authen_fields."\n" 123 . CGI::submit({"name"=>"importSet", "label"=>"Import"})."\n" 124 . CGI::end_form()."\n"; 125 print $form; 126 print CGI::br(); 127 128 return ""; 129 } 130 131 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |