[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 1410 - (download) (as text) (annotate)
Mon Jul 21 22:08:58 2003 UTC (9 years, 11 months ago) by malsyned
File size: 6356 byte(s)
Redirect to the Scoring content generator if the scoreSelected button is
pressed

    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 Apache::Constants qw(REDIRECT);
   13 use CGI qw();
   14 use WeBWorK::Utils qw(formatDateTime);
   15 
   16 sub header {
   17   my $self = shift;
   18   my $r = $self->{r};
   19   my $ce = $self->{ce};
   20   my $courseName = $ce->{courseName};
   21   my $root = $ce->{webworkURLs}->{root};
   22 
   23   if (defined $r->param('scoreSelected')) {
   24     warn "scoreSelected\n";
   25     $r->header_out(Location => "$root/$courseName/instructor/scoring?".$self->url_args);
   26     $self->{noContent} = 1;
   27     return REDIRECT;
   28   }
   29   $r->content_type("text/html");
   30   $r->send_http_header();
   31 }
   32 
   33 sub initialize {
   34   my $self = shift;
   35   my $r = $self->{r};
   36   my $db = $self->{db};
   37   my $ce = $self->{ce};
   38   my $authz = $self->{authz};
   39   my $courseName = $ce->{courseName};
   40   my $user = $r->param('user');
   41 
   42   unless ($authz->hasPermissions($user, "create_and_delete_problem_sets")) {
   43     $self->{submitError} = "You aren't authorized to create or delete problems";
   44     return;
   45   }
   46 
   47   if (defined($r->param('deleteSelected'))) {
   48     foreach my $wannaDelete ($r->param('selectedSet')) {
   49       $db->deleteGlobalSet($wannaDelete);
   50     }
   51   } elsif (defined($r->param('scoreSelected'))) {
   52 
   53   }elsif (defined($r->param('makeNewSet'))) {
   54     my $newSetRecord = $db->{set}->{record}->new();
   55     my $newSetName = $r->param('newSetName');
   56     $newSetRecord->set_id($newSetName);
   57     $newSetRecord->set_header("");
   58     $newSetRecord->problem_header("");
   59     $newSetRecord->open_date("0");
   60     $newSetRecord->due_date("0");
   61     $newSetRecord->answer_date("0");
   62     eval {$db->addGlobalSet($newSetRecord)};
   63   }
   64 }
   65 
   66 sub path {
   67   my ($self, $args) = @_;
   68 
   69   my $ce = $self->{ce};
   70   my $root = $ce->{webworkURLs}->{root};
   71   my $courseName = $ce->{courseName};
   72   return $self->pathMacro($args,
   73     "Home"          => "$root",
   74     $courseName     => "$root/$courseName",
   75     'instructor'    => "$root/$courseName/instructor",
   76     'sets'      => ''
   77   );
   78 }
   79 
   80 sub title {
   81   my $self = shift;
   82   return "Instructor Tools - Problem Set List for ".$self->{ce}->{courseName};
   83 }
   84 
   85 sub body {
   86   my $self = shift;
   87   my $r = $self->{r};
   88   my $db = $self->{db};
   89   my $ce = $self->{ce};
   90   my $authz = $self->{authz};
   91   my $root = $ce->{webworkURLs}->{root};
   92   my $courseName = $ce->{courseName};
   93   my $user = $r->param('user');
   94   my $key  = $r->param('key');
   95   my $effectiveUserName = $r->param('effectiveUser');
   96   my $URL = $r->uri;
   97   my $instructorBaseURL = "$root/$courseName/instructor";
   98   my $importURL = "$instructorBaseURL/problemSetImport/";
   99   my $sort = $r->param('sort') ? $r->param('sort') : "due_date";
  100 
  101   my @set_definition_files    = $self->read_dir($ce->{courseDirs}->{templates},'\\.def');
  102   return CGI::em("You are not authorized to access the instructor tools") unless $authz->hasPermissions($user, "access_instructor_tools");
  103 
  104   # Slurp each set record for this course in @sets
  105   # Gather data from the database
  106   my @users = $db->listUsers;
  107   my @sets;
  108   my %counts;
  109   my %problemCounts;
  110   foreach my $set_id ($db->listGlobalSets) {
  111     my $set = $db->getGlobalSet($set_id);
  112     push @sets, $set;
  113     $problemCounts{$set_id} = scalar($db->listGlobalProblems($set_id));
  114     my $count = 0;
  115     $counts{$set_id} = $db->listSetUsers($set_id);
  116   }
  117 
  118   # Sort @sets based on the sort parameter
  119   # Invalid sort types will just cause an unpredictable ordering, which is no big deal.
  120   @sets = sort {
  121     if ($sort eq "set_id") {
  122       return $a->$sort cmp $b->$sort;
  123     }elsif ($sort =~ /_date$/) {
  124       return $a->$sort <=> $b->$sort;
  125     } elsif ($sort eq "num_probs") {
  126       return $problemCounts{$a->set_id} <=> $problemCounts{$b->set_id};
  127     } elsif ($sort eq "num_students") {
  128       return $counts{$a->set_id} <=> $counts{$b->set_id};
  129     }
  130   } @sets;
  131 
  132   my $table = CGI::Tr({},
  133     CGI::th("Sel.")
  134     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=set_id"},       "ID"))
  135     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=open_date"},    "Open Date"))
  136     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=due_date"},     "Due Date"))
  137     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=answer_date"},  "Answer Date"))
  138     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=num_probs"},    "Num. Problems"))
  139     . CGI::th(CGI::a({"href"=>$URL."?".$self->url_authen_args."&sort=num_students"}, "Assigned to:"))
  140   ) . "\n";
  141 
  142   foreach my $set (@sets) {
  143     my $count = $counts{$set->set_id};
  144 
  145     my $userCountMessage = $self->userCountMessage($count, scalar(@users));
  146 
  147     $table .= CGI::Tr({},
  148       CGI::td({},
  149         CGI::checkbox({
  150           "name"=>"selectedSet",
  151           "value"=>$set->set_id,
  152           "label"=>"",
  153           "checked"=>"0"
  154         })
  155       )
  156       . CGI::td({}, CGI::a({href=>$r->uri.$set->set_id."/?".$self->url_authen_args}, $set->set_id))
  157       . CGI::td({}, formatDateTime($set->open_date))
  158       . CGI::td({}, formatDateTime($set->due_date))
  159       . CGI::td({}, formatDateTime($set->answer_date))
  160       . CGI::td({}, CGI::a({href=>$r->uri.$set->set_id."/problems/?".$self->url_authen_args}, $problemCounts{$set->set_id}))
  161       . CGI::td({}, CGI::a({href=>$r->uri.$set->set_id."/users/?".$self->url_authen_args}, $userCountMessage))
  162     ) . "\n"
  163   }
  164   $table = CGI::table({"border"=>"1"}, "\n".$table."\n");
  165 
  166   my $form = join("",
  167     CGI::start_form({"method"=>"POST", "action"=>$r->uri}),"\n", # This form is for deleting sets, and points to itself
  168     $table,"\n",
  169     CGI::br(),"\n",
  170     $self->hidden_authen_fields,"\n",
  171     CGI::submit({"name"=>"deleteSelected", "label"=>"Delete Selected"}),"\n",
  172     CGI::submit({"name"=>"scoreSelected", "label"=>"Score Selected"}),"\n",
  173     CGI::end_form(),"\n",
  174     CGI::start_form({"method"=>"POST", "action"=>$r->uri}),"\n",
  175     $self->hidden_authen_fields,"\n",
  176     "New Set Name: ",
  177     CGI::input({type=>"text", name=>"newSetName", value=>""}),
  178     CGI::submit({"name"=>"makeNewSet", "label"=>"Create"}),"\n",
  179     CGI::end_form(),"\n",
  180     CGI::start_form({"method"=>"POST", "action"=>$importURL}),"\n",
  181     $self->hidden_authen_fields,"\n",
  182     CGI::submit({"name"=>"importSet", "label"=>"Import"}),"\n",
  183     CGI::popup_menu(-name=>'set_definition_file',
  184                          -values=>\@set_definition_files,
  185     ),' as set ',
  186     CGI::input({type=>"text", name=>"importedSetName", value=>""}),
  187     CGI::end_form(),"\n"
  188   );
  189   print $form;
  190 
  191   return "";
  192 }
  193 
  194 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9