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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1714 - (download) (as text) (annotate)
Fri Jan 16 00:43:06 2004 UTC (9 years, 5 months ago) by gage
File size: 6250 byte(s)
Added a larger title to this page.

    1 ################################################################################
    2 # WeBWorK Online Homework Delivery System
    3 # Copyright © 2000-2003 The WeBWorK Project, http://openwebwork.sf.net/
    4 # $CVSHeader: webwork-modperl/lib/WeBWorK/ContentGenerator/ProblemSets.pm,v 1.35 2003/12/12 02:24:29 gage Exp $
    5 #
    6 # This program is free software; you can redistribute it and/or modify it under
    7 # the terms of either: (a) the GNU General Public License as published by the
    8 # Free Software Foundation; either version 2, or (at your option) any later
    9 # version, or (b) the "Artistic License" which comes with this package.
   10 #
   11 # This program is distributed in the hope that it will be useful, but WITHOUT
   12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
   13 # FOR A PARTICULAR PURPOSE.  See either the GNU General Public License or the
   14 # Artistic License for more details.
   15 ################################################################################
   16 
   17 package WeBWorK::ContentGenerator::ProblemSets;
   18 use base qw(WeBWorK::ContentGenerator);
   19 
   20 =head1 NAME
   21 
   22 WeBWorK::ContentGenerator::ProblemSets - Display a list of built problem sets.
   23 
   24 =cut
   25 
   26 use strict;
   27 use warnings;
   28 use CGI qw();
   29 use WeBWorK::Utils qw(readFile formatDateTime sortByName);
   30 
   31 sub path {
   32   my ($self, $args) = @_;
   33 
   34   my $ce = $self->{ce};
   35   my $root = $ce->{webworkURLs}->{root};
   36   my $courseName = $ce->{courseName};
   37   return $self->pathMacro($args,
   38     "Home" => "$root",
   39     $courseName => "",
   40   );
   41 }
   42 
   43 sub title {
   44   my $self        = shift;
   45   my $r           = $self ->{r};
   46   my $db          = $self ->{db};
   47   my $user        = $r    -> param("user");
   48   my $courseName  = $self ->{ce} -> {courseName};
   49 
   50   return "WeBWorK welcomes user $user to $courseName" ;
   51 }
   52 
   53 sub body {
   54   my $self = shift;
   55   my $r = $self->{r};
   56   my $courseEnvironment = $self->{ce};
   57   my $db = $self->{db};
   58   my $user = $r->param("user");
   59   my $effectiveUser = $r->param("effectiveUser");
   60   my $sort = $r->param("sort") || "status";
   61   my $permissionLevel = $db->getPermissionLevel($user)->permission(); # checked???
   62   $permissionLevel =0 unless defined $permissionLevel;
   63 
   64   if (defined $courseEnvironment->{courseFiles}->{motd}
   65     and $courseEnvironment->{courseFiles}->{motd}) {
   66     my $motd = eval { readFile($courseEnvironment->{courseFiles}->{motd}) };
   67     $@ or print $motd;
   68   }
   69 
   70   $sort = "status" unless $sort eq "status" or $sort eq "name";
   71   my $baseURL = $r->uri . "?" . $self->url_authen_args();
   72   my $nameHeader = ($sort eq "name") ? CGI::u("Name") : CGI::a({-href=>"$baseURL&sort=name"}, "Name");
   73   my $statusHeader = ($sort eq "status") ? CGI::u("Status") : CGI::a({-href=>"$baseURL&sort=status"}, "Status");
   74 
   75   print CGI::startform(-method=>"POST", -action=>$r->uri."hardcopy/");
   76   print $self->hidden_authen_fields;
   77   print CGI::start_table();
   78   print CGI::Tr(
   79     CGI::th("Sel."),
   80     CGI::th($nameHeader),
   81     CGI::th($statusHeader),
   82     #CGI::th("Hardcopy"),
   83   );
   84 
   85   my @setIDs = $db->listUserSets($effectiveUser);
   86 
   87   my @userSetIDs = map {[$effectiveUser, $_]} @setIDs;
   88   $WeBWorK::timer->continue("Begin collecting merged sets") if defined($WeBWorK::timer);
   89   my @sets = $db->getMergedSets( @userSetIDs );
   90   $WeBWorK::timer->continue("Begin sorting merged sets") if defined($WeBWorK::timer);
   91 
   92   @sets = sortByName("set_id", @sets) if $sort eq "name";
   93   @sets = sort byduedate @sets if $sort eq "status";
   94   $WeBWorK::timer->continue("End preparing merged sets") if defined($WeBWorK::timer);
   95 
   96   foreach my $set (@sets) {
   97     die "set $set not defined" unless $set;
   98     print $self->setListRow($set, ($permissionLevel > 0),
   99       ($permissionLevel > 0));
  100   }
  101 
  102   print CGI::end_table();
  103   my $pl = ($permissionLevel > 0 ? "s" : "");
  104   print CGI::p(CGI::submit("hardcopy", "Download Hardcopy for Selected Set$pl"));
  105   print CGI::endform();
  106 
  107   # feedback form
  108   my $ce = $self->{ce};
  109   my $root = $ce->{webworkURLs}->{root};
  110   my $courseName = $ce->{courseName};
  111   my $feedbackURL = "$root/$courseName/feedback/";
  112 
  113 
  114   #print feedback form
  115   print
  116     CGI::start_form(-method=>"POST", -action=>$feedbackURL),"\n",
  117     $self->hidden_authen_fields,"\n",
  118     CGI::hidden("module",             __PACKAGE__),"\n",
  119     CGI::hidden("set",                ''),"\n",
  120     CGI::hidden("problem",            ''),"\n",
  121     CGI::hidden("displayMode",        $self->{displayMode}),"\n",
  122     CGI::hidden("showOldAnswers",     ''),"\n",
  123     CGI::hidden("showCorrectAnswers", ''),"\n",
  124     CGI::hidden("showHints",          ''),"\n",
  125     CGI::hidden("showSolutions",      ''),"\n",
  126     CGI::p({-align=>"left"},
  127       CGI::submit(-name=>"feedbackForm", -label=>"Email instructor")
  128     ),
  129     CGI::endform(),"\n";
  130 
  131   return "";
  132 }
  133 
  134 sub setListRow($$$) {
  135   my ($self, $set, $multiSet, $preOpenSets) = @_;
  136 
  137   my $name = $set->set_id;
  138 
  139   my $interactiveURL = "$name/?" . $self->url_authen_args;
  140   #my $hardcopyURL = "hardcopy/$name/?" . $self->url_authen_args;
  141 
  142   my $openDate = formatDateTime($set->open_date);
  143   my $dueDate = formatDateTime($set->due_date);
  144   my $answerDate = formatDateTime($set->answer_date);
  145 
  146   #my $checkbox = CGI::checkbox(-name=>"hcSet", -value=>$set->set_id, -label=>"");
  147 
  148   my $control = "";
  149   if ($multiSet) {
  150     $control = CGI::checkbox(
  151       -name=>"hcSet",
  152       -value=>$name,
  153       -label=>"",
  154     );
  155   } else {
  156     $control = CGI::radio_group(
  157       -name=>"hcSet",
  158       -values=>[$name],
  159       -default=>"-",
  160       -labels=>{$name => ""},
  161     );
  162   }
  163 
  164   my $interactive = CGI::a({-href=>$interactiveURL}, "set $name");
  165 
  166   my $status;
  167   if (time < $set->open_date) {
  168     $status = "opens at $openDate";
  169     $control = "" unless $preOpenSets;
  170     $interactive = $name unless $preOpenSets;
  171   } elsif (time < $set->due_date) {
  172     $status = "open, due $dueDate";
  173   } elsif (time < $set->answer_date) {
  174     $status = "closed, answers at $answerDate";
  175   } else {
  176     $status = "closed, answers available";
  177   }
  178 
  179   return CGI::Tr(CGI::td([
  180     $control,
  181     $interactive,
  182     $status,
  183   ]));
  184 }
  185 sub info {
  186   my $self = shift;
  187   my $r = $self->{r};
  188   my $courseEnvironment = $self->{ce};
  189 
  190   if (defined $courseEnvironment->{courseFiles}->{course_info}
  191     and $courseEnvironment->{courseFiles}->{course_info}) {
  192     my $course_info = eval { readFile($courseEnvironment->{courseFiles}->{course_info}) };
  193     $@ or print $course_info;
  194   }
  195   '';
  196 }
  197 sub byname { $a->set_id cmp $b->set_id; }
  198 sub byduedate { $a->due_date <=> $b->due_date; }
  199 
  200 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9