[system] / trunk / webwork2 / lib / WeBWorK / ContentGenerator / Instructor / ProblemSetList.pm Repository:
ViewVC logotype

View of /trunk/webwork2/lib/WeBWorK/ContentGenerator/Instructor/ProblemSetList.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 951 - (download) (as text) (annotate)
Fri May 30 18:05:41 2003 UTC (10 years ago) by malsyned
File size: 4373 byte(s)
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