[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 1015 - (download) (as text) (annotate)
Wed Jun 4 20:19:27 2003 UTC (9 years, 11 months ago) by malsyned
File size: 4899 byte(s)
The UserList module now has a single button, "Assign to all users", that
does what it says it does.  This should allow people to create new
problems and problem sets and edit them without ever needing the old
system, assuming that they are importing an existing course into
webwork2.
-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 use WeBWorK::DB::Record::Set;
   15 
   16 sub initialize {
   17   my $self = shift;
   18   my $r = $self->{r};
   19   my $db = $self->{db};
   20   my $ce = $self->{ce};
   21   my $courseName = $ce->{courseName};
   22 
   23   if (defined($r->param('deleteSelected'))) {
   24     foreach my $wannaDelete ($r->param('selectedSet')) {
   25       $db->deleteGlobalSet($wannaDelete);
   26     }
   27   } elsif (defined($r->param('makeNewSet'))) {
   28     my $newSetRecord = WeBWorK::DB::Record::Set->new();
   29     my $newSetName = $r->param('newSetName');
   30     $newSetRecord->set_id($newSetName);
   31     $newSetRecord->set_header("");
   32     $newSetRecord->problem_header("");
   33     $newSetRecord->open_date("0");
   34     $newSetRecord->due_date("0");
   35     $newSetRecord->answer_date("0");
   36     $db->addGlobalSet($newSetRecord) unless $db->getGlobalSet($newSetName);
   37   }
   38 
   39 }
   40 
   41 sub title {
   42   my $self = shift;
   43   return "Instructor Tools - Problem Set List for ".$self->{ce}->{courseName};
   44 }
   45 
   46 sub body {
   47   my $self = shift;
   48   my $r = $self->{r};
   49   my $db = $self->{db};
   50   my $ce = $self->{ce};
   51   my $root = $ce->{webworkURLs}->{root};
   52   my $courseName = $ce->{courseName};
   53   my $user = $r->param('user');
   54   my $key  = $r->param('key');
   55   my $effectiveUserName = $r->param('effectiveUser');
   56   my $URL = $r->uri;
   57   my $instructorBaseURL = "$root/$courseName/instructor";
   58   my $importURL = "$instructorBaseURL/problemSetImport/";
   59   my $addURL = "$instructorBaseURL/problemSetAdd/";
   60   my $sort = $r->param('sort') ? $r->param('sort') : "due_date";
   61 
   62   # Slurp each set record for this course in @sets
   63   # Gather data from the database
   64   my @users = $db->listUsers;
   65   my @sets;
   66   my %counts;
   67   my %problemCounts;
   68   foreach my $set_id ($db->listGlobalSets) {
   69     my $set = $db->getGlobalSet($set_id);
   70     push @sets, $set;
   71     $problemCounts{$set_id} = scalar($db->listGlobalProblems($set_id));
   72     my $count = 0;
   73     $counts{$set_id} = $db->listSetUsers($set_id);
   74   }
   75 
   76   # Sort @sets based on the sort parameter
   77   # Invalid sort types will just cause an unpredictable ordering, which is no big deal.
   78   @sets = sort {
   79     if ($sort eq "set_id") {
   80       return $a->$sort cmp $b->$sort;
   81     }elsif ($sort =~ /_date$/) {
   82       return $a->$sort <=> $b->$sort;
   83     } elsif ($sort eq "num_probs") {
   84       return $problemCounts{$a->set_id} <=> $problemCounts{$b->set_id};
   85     } elsif ($sort eq "num_students") {
   86       return $counts{$a->set_id} <=> $counts{$b->set_id};
   87     }
   88   } @sets;
   89 
   90   my $table = CGI::Tr({},
   91     CGI::th("Sel.")
   92     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=set_id"},       "ID"))
   93     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=open_date"},    "Open Date"))
   94     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=due_date"},     "Due Date"))
   95     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=answer_date"},  "Answer Date"))
   96     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=num_probs"},    "Num. Problems"))
   97     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=num_students"}, "Assigned to:"))
   98   ) . "\n";
   99 
  100   foreach my $set (@sets) {
  101     my $count = $counts{$set->set_id};
  102 
  103     my $userCountMessage = $self->userCountMessage($count, scalar(@users));
  104 
  105     $table .= CGI::Tr({},
  106       CGI::td({},
  107         CGI::checkbox({
  108           "name"=>"selectedSet",
  109           "value"=>$set->set_id,
  110           "label"=>"",
  111           "checked"=>"0"
  112         })
  113       )
  114       . CGI::td({}, CGI::a({href=>$r->uri.$set->set_id."/?".$self->url_authen_args}, $set->set_id))
  115       . CGI::td({}, formatDateTime($set->open_date))
  116       . CGI::td({}, formatDateTime($set->due_date))
  117       . CGI::td({}, formatDateTime($set->answer_date))
  118       . CGI::td({}, CGI::a({href=>$r->uri.$set->set_id."/problems/?".$self->url_authen_args}, $problemCounts{$set->set_id}))
  119       . CGI::td({}, CGI::a({href=>$r->uri.$set->set_id."/users/?".$self->url_authen_args}, $userCountMessage))
  120     ) . "\n"
  121   }
  122   $table = CGI::table({"border"=>"1"}, "\n".$table."\n");
  123 
  124   my $form = CGI::start_form({"method"=>"POST", "action"=>$r->uri})."\n" # This form is for deleting sets, and points to itself
  125     . $table."\n"
  126     . CGI::br()."\n"
  127     . $self->hidden_authen_fields."\n"
  128     . CGI::submit({"name"=>"deleteSelected", "label"=>"Delete Selected"})."\n"
  129     . CGI::end_form()."\n"
  130     . CGI::start_form({"method"=>"POST", "action"=>$r->uri})."\n"
  131     . $self->hidden_authen_fields."\n"
  132     . "New Set Name: "
  133     . CGI::input({type=>"text", name=>"newSetName", value=>""})
  134     . CGI::submit({"name"=>"makeNewSet", "label"=>"Create"})."\n"
  135     . CGI::end_form()."\n"
  136     . CGI::start_form({"method"=>"POST", "action"=>$importURL})."\n"
  137     . $self->hidden_authen_fields."\n"
  138     . CGI::submit({"name"=>"importSet", "label"=>"Import"})."\n"
  139     . CGI::end_form()."\n";
  140   print $form;
  141 
  142   return "";
  143 }
  144 
  145 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9