Parent Directory
|
Revision Log
More changes to prevent unneccesary database requests -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 my %problems; 45 foreach my $set (@sets) { 46 my $problems{$set} = [$db->listGlobalProblems($set->set_id)]; 47 my $count = 0; 48 $counts{$set->set_id} = $db->listSetUsers($set->set_id); 49 } 50 51 # Sort @sets based on the sort parameter 52 # Invalid sort types will just cause an unpredictable ordering, which is no big deal. 53 @sets = sort { 54 if ($sort eq "set_id") { 55 return $a->$sort cmp $b->$sort; 56 }elsif ($sort =~ /_date$/) { 57 return $a->$sort <=> $b->$sort; 58 } elsif ($sort eq "num_probs") { 59 return scalar(@{$problems{$a->set_id}}) <=> scalar(@{$problems{$b->set_id}}); 60 } elsif ($sort eq "num_students") { 61 return $counts{$a->set_id} <=> $counts{$b->set_id}; 62 } 63 } @sets; 64 65 my $table = CGI::Tr({}, 66 CGI::th("Sel.") 67 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=set_id"}, "ID")) 68 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=open_date"}, "Open Date")) 69 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=due_date"}, "Due Date")) 70 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=answer_date"}, "Answer Date")) 71 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=num_probs"}, "Num. Problems")) 72 . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=num_students"}, "Assigned to:")) 73 ) . "\n"; 74 75 my @users = $db->listUsers; 76 foreach my $set (@sets) { 77 my @problems = @{$problems{$set->set_id}}; 78 my $count = $counts{$set->set_id}; 79 80 my $userCountMessage; 81 if ($count == 0) { 82 $userCountMessage = "Not assigned"; 83 } elsif ($count == scalar(@users)) { 84 $userCountMessage = "All users"; 85 } elsif ($count == 1) { 86 $userCountMessage = "1 user"; 87 } elsif ($count > scalar(@users) || $count < 0) { 88 $userCountMessage = CGI::em("Impossible number of users: $count"); 89 } else { 90 $userCountMessage = "$count users"; 91 } 92 93 $table .= CGI::Tr({}, 94 CGI::td({}, 95 CGI::checkbox({ 96 "name"=>"selectedSet", 97 "value"=>$set->set_id, 98 "label"=>"", 99 "checked"=>"0" 100 }) 101 ) 102 . CGI::td({}, CGI::a({href=>"$setEditorURL".$set->set_id."/?".$self->url_authen_args}, $set->set_id)) 103 . CGI::td({}, formatDateTime($set->open_date)) 104 . CGI::td({}, formatDateTime($set->due_date)) 105 . CGI::td({}, formatDateTime($set->answer_date)) 106 . CGI::td({}, scalar(@problems)) 107 . CGI::td({}, $userCountMessage) 108 ) . "\n" 109 } 110 $table = CGI::table({"border"=>"1"}, "\n".$table."\n"); 111 112 my $form = CGI::start_form({"method"=>"POST", "action"=>""})."\n" # This form is for deleting sets, and points to itself 113 . $table."\n" 114 . CGI::br()."\n" 115 . $self->hidden_authen_fields."\n" 116 . CGI::submit({"name"=>"deleteSelected", "label"=>"Delete Selected"})."\n" 117 . CGI::end_form()."\n" 118 . CGI::start_form({"method"=>"POST", "action"=>$addURL})."\n" 119 . $self->hidden_authen_fields."\n" 120 . CGI::submit({"name"=>"addSet", "label"=>"New"})."\n" 121 . CGI::end_form()."\n" 122 . CGI::start_form({"method"=>"POST", "action"=>$importURL})."\n" 123 . $self->hidden_authen_fields."\n" 124 . CGI::submit({"name"=>"importSet", "label"=>"Import"})."\n" 125 . CGI::end_form()."\n"; 126 print $form; 127 print CGI::br(); 128 129 return ""; 130 } 131 132 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |