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

View of /trunk/webwork2/lib/WeBWorK/ContentGenerator/ProblemSets.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 701 - (download) (as text) (annotate)
Fri Jan 10 21:39:29 2003 UTC (10 years, 4 months ago) by sh002i
File size: 3962 byte(s)
An MOTD can be displayed on the problem sets page. Define
$courseFiles{motd} to point to a file containing the message.
-sam

    1 ################################################################################
    2 # WeBWorK mod_perl (c) 2000-2002 WeBWorK Project
    3 # $Id$
    4 ################################################################################
    5 
    6 package WeBWorK::ContentGenerator::ProblemSets;
    7 
    8 =head1 NAME
    9 
   10 WeBWorK::ContentGenerator::ProblemSets - Display a list of built problem sets.
   11 
   12 =cut
   13 
   14 use strict;
   15 use warnings;
   16 use base qw(WeBWorK::ContentGenerator);
   17 use Apache::Constants qw(:common);
   18 use CGI qw();
   19 use WeBWorK::ContentGenerator;
   20 use WeBWorK::DB::WW;
   21 use WeBWorK::Utils qw(readFile formatDateTime);
   22 
   23 sub initialize {
   24   my $self = shift;
   25   my $courseEnvironment = $self->{courseEnvironment};
   26 
   27   # Open a database connection that we can use for the rest of
   28   # the content generation.
   29 
   30   my $wwdb = new WeBWorK::DB::WW $courseEnvironment;
   31   $self->{wwdb} = $wwdb;
   32 }
   33 
   34 sub path {
   35   my ($self, $args) = @_;
   36 
   37   my $ce = $self->{courseEnvironment};
   38   my $root = $ce->{webworkURLs}->{root};
   39   my $courseName = $ce->{courseName};
   40   return $self->pathMacro($args,
   41     "Home" => "$root",
   42     $courseName => "",
   43   );
   44 }
   45 
   46 sub title {
   47   my $self = shift;
   48   my $courseEnvironment = $self->{courseEnvironment};
   49 
   50   return $courseEnvironment->{courseName};
   51 }
   52 
   53 sub body {
   54   my $self = shift;
   55   my $r = $self->{r};
   56   my $courseEnvironment = $self->{courseEnvironment};
   57   my $user = $r->param("user");
   58   my $sort = $r->param("sort") || "status";
   59   my $wwdb = $self->{wwdb};
   60 
   61   my $motd = eval { readFile($courseEnvironment->{courseFiles}->{motd}) };
   62   $@ or print $motd;
   63 
   64   $sort = "status" unless $sort eq "status" or $sort eq "name";
   65   my $baseURL = $r->uri . "?" . $self->url_authen_args();
   66   my $nameHeader = ($sort eq "name") ? "Name" : CGI::a({-href=>"$baseURL&sort=name"}, "Name");
   67   my $statusHeader = ($sort eq "status") ? "Status" : CGI::a({-href=>"$baseURL&sort=status"}, "Status");
   68 
   69   print CGI::startform(-method=>"POST", -action=>$r->uri."hardcopy/");
   70   print $self->hidden_authen_fields;
   71   print CGI::start_table();
   72   print CGI::Tr(
   73     CGI::th("Sel."),
   74     CGI::th($nameHeader),
   75     CGI::th($statusHeader),
   76     CGI::th("Hardcopy"),
   77   );
   78 
   79   my @sets;
   80   push @sets, $wwdb->getSet($user, $_) foreach ($wwdb->getSets($user));
   81   @sets = sort byname @sets if $sort eq "name";
   82   @sets = sort byduedate @sets if $sort eq "status";
   83   foreach my $set (@sets) {
   84     print $self->setListRow($set);
   85   }
   86 
   87   print CGI::end_table();
   88   print CGI::p(CGI::submit("hardcopy", "Download Harcopy for Selected Sets"));
   89   print CGI::endform();
   90 
   91   # feedback form
   92   my $ce = $self->{courseEnvironment};
   93   my $root = $ce->{webworkURLs}->{root};
   94   my $courseName = $ce->{courseName};
   95   my $feedbackURL = "$root/$courseName/feedback/";
   96   print
   97     CGI::startform("POST", $feedbackURL),
   98     $self->hidden_authen_fields,
   99     CGI::hidden("module", __PACKAGE__),
  100     CGI::p({-align=>"right"},
  101       CGI::submit(-name=>"feedbackForm", -label=>"Send Feedback")
  102     ),
  103     CGI::endform();
  104 
  105   return "";
  106 }
  107 
  108 sub setListRow($$) {
  109   my $self = shift;
  110   my $set = shift;
  111 
  112   my $name = $set->id;
  113 
  114   my $interactiveURL = "$name/?" . $self->url_authen_args;
  115   my $hardcopyURL = "hardcopy/$name/?" . $self->url_authen_args;
  116 
  117   my $openDate = formatDateTime($set->open_date);
  118   my $dueDate = formatDateTime($set->due_date);
  119   my $answerDate = formatDateTime($set->answer_date);
  120 
  121   my $checkbox = CGI::checkbox(-name=>"set", -value=>$set->id, -label=>"");
  122   my $interactive = CGI::a({-href=>$interactiveURL}, $name);
  123   my $hardcopy = CGI::a({-href=>$hardcopyURL}, "download");
  124 
  125   my $status;
  126   if (time < $set->open_date) {
  127     $status = "opens at $openDate";
  128     $checkbox = "";
  129     $interactive = $name;
  130     $hardcopy = "";
  131   } elsif (time < $set->due_date) {
  132     $status = "open, due at $dueDate";
  133   } elsif (time < $set->answer_date) {
  134     $status = "closed, answers at $answerDate";
  135   } else {
  136     $status = "closed, answers available";
  137   }
  138 
  139   return CGI::Tr(CGI::td([
  140     $checkbox,
  141     $interactive,
  142     $status,
  143     $hardcopy,
  144   ]));
  145 }
  146 
  147 sub byname { $a->id cmp $b->id; }
  148 sub byduedate { $a->due_date <=> $b->due_date; }
  149 
  150 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9