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

View of /trunk/webwork-modperl/lib/WeBWorK/ContentGenerator/Instructor/ProblemSetList.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 950 - (download) (as text) (annotate)
Fri May 30 17:50:57 2003 UTC (10 years ago) by malsyned
File size: 4383 byte(s)
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