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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 795 - (download) (as text) (annotate)
Fri Mar 21 21:40:01 2003 UTC (10 years, 2 months ago) by malsyned
File size: 6283 byte(s)
Hit the #nav macro with a cluebat
RE: webworkURLs->htdocs vs. imageprefix=""
-Dennis

    1 ################################################################################
    2 # WeBWorK mod_perl (c) 2000-2002 WeBWorK Project
    3 # $Id$
    4 ################################################################################
    5 
    6 package WeBWorK::ContentGenerator::ProblemSet;
    7 
    8 =head1 NAME
    9 
   10 WeBWorK::ContentGenerator::ProblemSet - display an index of the problems in a
   11 problem set.
   12 
   13 =cut
   14 
   15 use strict;
   16 use warnings;
   17 use base qw(WeBWorK::ContentGenerator);
   18 use Apache::Constants qw(:common);
   19 use CGI qw();
   20 use WeBWorK::ContentGenerator;
   21 use WeBWorK::DB::WW;
   22 use WeBWorK::DB::Classlist;
   23 
   24 sub initialize {
   25   my ($self, $setName) = @_;
   26   my $courseEnvironment = $self->{courseEnvironment};
   27   my $r = $self->{r};
   28   my $userName = $r->param("user");
   29   my $effectiveUserName = $r->param("effectiveUser");
   30 
   31   ##### database setup #####
   32 
   33   my $cldb   = WeBWorK::DB::Classlist->new($courseEnvironment);
   34   my $wwdb   = WeBWorK::DB::WW->new($courseEnvironment);
   35   my $authdb = WeBWorK::DB::Auth->new($courseEnvironment);
   36 
   37   my $user            = $cldb->getUser($userName);
   38   my $effectiveUser   = $cldb->getUser($effectiveUserName);
   39   my $set             = $wwdb->getSet($effectiveUserName, $setName);
   40   my $permissionLevel = $authdb->getPermissions($userName);
   41 
   42   $self->{cldb} = $cldb;
   43   $self->{wwdb} = $wwdb;
   44   $self->{authdb} = $authdb;
   45 
   46   $self->{userName}        = $userName;
   47   $self->{user}            = $user;
   48   $self->{effectiveUser}   = $effectiveUser;
   49   $self->{set}             = $set;
   50   $self->{permissionLevel} = $permissionLevel;
   51 
   52   ##### permissions #####
   53 
   54   $self->{isOpen} = time >= $set->open_date || $permissionLevel > 0;
   55 }
   56 
   57 sub path {
   58   my ($self, $setName, $args) = @_;
   59 
   60   my $ce = $self->{courseEnvironment};
   61   my $root = $ce->{webworkURLs}->{root};
   62   my $courseName = $ce->{courseName};
   63   return $self->pathMacro($args,
   64     "Home" => "$root",
   65     $courseName => "$root/$courseName",
   66     $setName => "",
   67   );
   68 }
   69 
   70 sub nav {
   71   my ($self, $setName, $args) = @_;
   72 
   73   my $ce = $self->{courseEnvironment};
   74   my $root = $ce->{webworkURLs}->{root};
   75   my $courseName = $ce->{courseName};
   76   my @links = ("Problem Sets" , "$root/$courseName", "navUp");
   77   my $tail = "";
   78 
   79   return $self->navMacro($args, $tail, @links);
   80 }
   81 
   82 
   83 sub siblings {
   84   my ($self, $setName) = @_;
   85 
   86   my $ce = $self->{courseEnvironment};
   87   my $root = $ce->{webworkURLs}->{root};
   88   my $courseName = $ce->{courseName};
   89 
   90   print CGI::strong("Problem Sets"), CGI::br();
   91 
   92   my $wwdb = $self->{wwdb};
   93   my $effectiveUser = $self->{r}->param("effectiveUser");
   94   my @sets;
   95   push @sets, $wwdb->getSet($effectiveUser, $_) foreach ($wwdb->getSets($effectiveUser));
   96   foreach my $set (sort { $a->open_date <=> $b->open_date } @sets) {
   97     if (time >= $set->open_date) {
   98       print CGI::a({-href=>"$root/$courseName/".$set->id."/?"
   99         . $self->url_authen_args}, $set->id), CGI::br();
  100     } else {
  101       print $set->id, CGI::br();
  102     }
  103   }
  104 }
  105 
  106 sub title {
  107   my ($self, $setName) = @_;
  108 
  109   return $setName;
  110 }
  111 
  112 sub info {
  113   my ($self, $setName) = @_;
  114 
  115   my $r = $self->{r};
  116   my $ce = $self->{courseEnvironment};
  117 
  118   return "" unless $self->{isOpen};
  119 
  120   my $wwdb = $self->{wwdb};
  121   my $cldb = $self->{cldb};
  122   my $effectiveUser = $cldb->getUser($r->param("effectiveUser"));
  123   my $set  = $wwdb->getSet($effectiveUser->id, $setName);
  124   my $psvn = $wwdb->getPSVN($effectiveUser->id, $setName);
  125 
  126   my $screenSetHeader = $set->problem_header || $ce->{webworkFiles}->{screenSnippets}->{setHeader};
  127   my $displayMode     = $ce->{pg}->{options}->{displayMode};
  128 
  129   return "" unless defined $screenSetHeader and $screenSetHeader;
  130 
  131   # decide what to do about problem number
  132   my $problem = WeBWorK::Problem->new(
  133     id => 0,
  134     set_id => $set->id,
  135     login_id => $effectiveUser->id,
  136     source_file => $screenSetHeader,
  137     # the rest of Problem's fields are not needed, i think
  138   );
  139 
  140   my $pg = WeBWorK::PG->new(
  141     $ce,
  142     $effectiveUser,
  143     $r->param('key'),
  144     $set,
  145     $problem,
  146     $psvn,
  147     {}, # no form fields!
  148     { # translation options
  149       displayMode     => $displayMode,
  150       showHints       => 0,
  151       showSolutions   => 0,
  152       processAnswers  => 0,
  153     },
  154   );
  155 
  156   # handle translation errors
  157   if ($pg->{flags}->{error_flag}) {
  158     return $self->errorOutput($pg->{errors}, $pg->{body_text});
  159   } else {
  160     return $pg->{body_text};
  161   }
  162 }
  163 
  164 sub body {
  165   my ($self, $setName) = @_;
  166   my $r = $self->{r};
  167   my $courseEnvironment = $self->{courseEnvironment};
  168   my $effectiveUser = $r->param('effectiveUser');
  169   my $wwdb = $self->{wwdb};
  170 
  171   return CGI::p(CGI::font({-color=>"red"}, "This problem set is not available because it is not yet open."))
  172     unless ($self->{isOpen});
  173 
  174   my $hardcopyURL =
  175     $courseEnvironment->{webworkURLs}->{root} . "/"
  176     . $courseEnvironment->{courseName} . "/"
  177     . "hardcopy/$setName/?" . $self->url_authen_args;
  178   print CGI::p(CGI::a({-href=>$hardcopyURL}, "Download a hardcopy"),
  179     "of this problem set.");
  180 
  181   print CGI::start_table();
  182   print CGI::Tr(
  183     CGI::th("Name"),
  184     CGI::th("Attempts"),
  185     CGI::th("Remaining"),
  186     CGI::th("Status"),
  187   );
  188 
  189   my $set = $wwdb->getSet($effectiveUser, $setName);
  190   my @problemNumbers = $wwdb->getProblems($effectiveUser, $setName);
  191   foreach my $problemNumber (sort { $a <=> $b } @problemNumbers) {
  192     my $problem = $wwdb->getProblem($effectiveUser, $setName, $problemNumber);
  193     print $self->problemListRow($set, $problem);
  194   }
  195 
  196   print CGI::end_table();
  197 
  198   # feedback form
  199   my $ce = $self->{courseEnvironment};
  200   my $root = $ce->{webworkURLs}->{root};
  201   my $courseName = $ce->{courseName};
  202   my $feedbackURL = "$root/$courseName/feedback/";
  203   print
  204     CGI::startform("POST", $feedbackURL),
  205     $self->hidden_authen_fields,
  206     CGI::hidden("module", __PACKAGE__),
  207     CGI::hidden("set",    $set->id),
  208     CGI::p({-align=>"right"},
  209       CGI::submit(-name=>"feedbackForm", -label=>"Send Feedback")
  210     ),
  211     CGI::endform();
  212 
  213   return "";
  214 }
  215 
  216 sub problemListRow($$$) {
  217   my $self = shift;
  218   my $set = shift;
  219   my $problem = shift;
  220 
  221   my $name = $problem->id;
  222   my $interactiveURL = "$name/?" . $self->url_authen_args;
  223   my $interactive = CGI::a({-href=>$interactiveURL}, "Problem $name");
  224   my $attempts = $problem->num_correct + $problem->num_incorrect;
  225   my $remaining = $problem->max_attempts < 0
  226     ? "unlimited"
  227     : $problem->max_attempts - $attempts;
  228   my $status = $problem->status * 100 . "%";
  229 
  230   return CGI::Tr(CGI::td({-nowrap=>1}, [
  231     $interactive,
  232     $attempts,
  233     $remaining,
  234     $status,
  235   ]));
  236 }
  237 
  238 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9