[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 1756 - (download) (as text) (annotate)
Sun Jan 25 20:00:14 2004 UTC (9 years, 4 months ago) by gage
File size: 8244 byte(s)
Removed extraneous warning message

    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.39 2004/01/25 15:53:07 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 $ce              = $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   my $root            = $ce->{webworkURLs}->{root};
   64   my $courseName      = $ce->{courseName};
   65 
   66   # Print link to instructor page for instructors
   67   if ($permissionLevel >= 10 ) {
   68 
   69     my $instructorLink = "$root/$courseName/instructor/?" . $self->url_authen_args();
   70     print CGI::p({-align=>'center'},CGI::a({-href=>$instructorLink},'Instructor Tools'));
   71   }
   72   # Print message of the day (motd)
   73   if (defined $ce->{courseFiles}->{motd}
   74     and $ce->{courseFiles}->{motd}) {
   75     my $motd = eval { readFile($ce->{courseFiles}->{motd}) };
   76     $@ or print $motd;
   77   }
   78 
   79   $sort = "status" unless $sort eq "status" or $sort eq "name";
   80   my $baseURL = $r->uri . "?" . $self->url_authen_args();
   81   my $nameHeader = ($sort eq "name") ? CGI::u("Name") : CGI::a({-href=>"$baseURL&sort=name"}, "Name");
   82   my $statusHeader = ($sort eq "status") ? CGI::u("Status") : CGI::a({-href=>"$baseURL&sort=status"}, "Status");
   83 
   84   print CGI::startform(-method=>"POST", -action=>$r->uri."hardcopy/");
   85   print $self->hidden_authen_fields;
   86   print CGI::start_table();
   87   print CGI::Tr(
   88     CGI::th("Sel."),
   89     CGI::th($nameHeader),
   90     CGI::th($statusHeader),
   91     #CGI::th("Hardcopy"),
   92   );
   93 
   94   my @setIDs = $db->listUserSets($effectiveUser);
   95 
   96   my @userSetIDs = map {[$effectiveUser, $_]} @setIDs;
   97   $WeBWorK::timer->continue("Begin collecting merged sets") if defined($WeBWorK::timer);
   98   my @sets = $db->getMergedSets( @userSetIDs );
   99   $WeBWorK::timer->continue("Begin sorting merged sets") if defined($WeBWorK::timer);
  100 
  101   @sets = sortByName("set_id", @sets) if $sort eq "name";
  102   @sets = sort byduedate @sets if $sort eq "status";
  103   $WeBWorK::timer->continue("End preparing merged sets") if defined($WeBWorK::timer);
  104 
  105   foreach my $set (@sets) {
  106     die "set $set not defined" unless $set;
  107     print $self->setListRow($set, ($permissionLevel > 0),
  108       ($permissionLevel > 0));
  109   }
  110 
  111   print CGI::end_table();
  112   my $pl = ($permissionLevel > 0 ? "s" : "");
  113   print CGI::p(CGI::submit("hardcopy", "Download Hardcopy for Selected Set$pl"));
  114   print CGI::endform();
  115 
  116   # feedback form url
  117   my $feedbackURL = "$root/$courseName/feedback/";
  118 
  119   #print feedback form
  120   print
  121     CGI::start_form(-method=>"POST", -action=>$feedbackURL),"\n",
  122     $self->hidden_authen_fields,"\n",
  123     CGI::hidden("module",             __PACKAGE__),"\n",
  124     CGI::hidden("set",                ''),"\n",
  125     CGI::hidden("problem",            ''),"\n",
  126     CGI::hidden("displayMode",        $self->{displayMode}),"\n",
  127     CGI::hidden("showOldAnswers",     ''),"\n",
  128     CGI::hidden("showCorrectAnswers", ''),"\n",
  129     CGI::hidden("showHints",          ''),"\n",
  130     CGI::hidden("showSolutions",      ''),"\n",
  131     CGI::p({-align=>"left"},
  132       CGI::submit(-name=>"feedbackForm", -label=>"Email instructor")
  133     ),
  134     CGI::endform(),"\n";
  135 
  136   return "";
  137 }
  138 
  139 sub setListRow($$$) {
  140   my ($self, $set, $multiSet, $preOpenSets) = @_;
  141 
  142   my $name = $set->set_id;
  143 
  144   my $interactiveURL = "$name/?" . $self->url_authen_args;
  145   #my $hardcopyURL = "hardcopy/$name/?" . $self->url_authen_args;
  146 
  147   my $openDate = formatDateTime($set->open_date);
  148   my $dueDate = formatDateTime($set->due_date);
  149   my $answerDate = formatDateTime($set->answer_date);
  150 
  151   #my $checkbox = CGI::checkbox(-name=>"hcSet", -value=>$set->set_id, -label=>"");
  152 
  153   my $control = "";
  154   if ($multiSet) {
  155     $control = CGI::checkbox(
  156       -name=>"hcSet",
  157       -value=>$name,
  158       -label=>"",
  159     );
  160   } else {
  161     $control = CGI::radio_group(
  162       -name=>"hcSet",
  163       -values=>[$name],
  164       -default=>"-",
  165       -labels=>{$name => ""},
  166     );
  167   }
  168 
  169   my $interactive = CGI::a({-href=>$interactiveURL}, "set $name");
  170 
  171   my $status;
  172   if (time < $set->open_date) {
  173     $status = "opens at $openDate";
  174     $control = "" unless $preOpenSets;
  175     $interactive = $name unless $preOpenSets;
  176   } elsif (time < $set->due_date) {
  177     $status = "open, due $dueDate";
  178   } elsif (time < $set->answer_date) {
  179     $status = "closed, answers at $answerDate";
  180   } else {
  181     $status = "closed, answers available";
  182   }
  183 
  184   return CGI::Tr(CGI::td([
  185     $control,
  186     $interactive,
  187     $status,
  188   ]));
  189 }
  190 sub info {
  191   my $self       = shift;
  192   my $r          = $self->{r};
  193   my $ce         = $self->{ce};
  194   my $db         = $self->{db};
  195   my $user       = $r->param("user");
  196   my $root       = $ce->{webworkURLs}->{root};
  197   my $courseName = $ce->{courseName};
  198   ###########################################################
  199   # The course information and problems are located in the course templates directory.
  200   # Course information has the name  defined by courseFiles->{course_info}
  201   #
  202   # Only files under the template directory ( or linked to this location) can be edited.
  203   #
  204   # editMode = temporaryFile    (view the temp file defined by course_info.txt.user_name.tmp
  205   #                              instead of the file course_info.txt)
  206   # The editFileSuffix is "user_name.tmp" by default.  It's definition should be moved to Instructor.pm #FIXME
  207   ###########################################################
  208   if (defined $ce->{courseFiles}->{course_info}
  209     and $ce->{courseFiles}->{course_info})     {
  210     my $course_info_path  = $ce->{courseDirs}->{templates}
  211                          .'/'. $ce->{courseFiles}->{course_info};
  212     my $editFileSuffix      = $user.'.tmp';  #FIXME -- this could be moved to Instructor.pm
  213     $course_info_path    .= ".$editFileSuffix" if defined($r->param("editMode")) and $r->param("editMode") eq 'temporaryFile';
  214 
  215     my $course_info = eval { readFile($course_info_path) };
  216     $@ or print $course_info;
  217     my $user            = $r->param("user");
  218     my $permissionLevel = $db->getPermissionLevel($user)->permission(); # checked???
  219     $permissionLevel    = 0 unless defined $permissionLevel;
  220       if ($permissionLevel>=10) {
  221       my $editURL = "$root/$courseName/instructor/pgProblemEditor/?"
  222               .$self->url_authen_args
  223               ."&file_type=course_info"
  224       ;
  225       my $editText      = "Edit message file";
  226       $editText         = "Edit temporary message file" if $r->param("editMode") eq 'temporaryFile';
  227       print CGI::br(), CGI::a({-href=>$editURL}, $editText);
  228       }
  229 
  230   }
  231 
  232 
  233   '';
  234 }
  235 sub byname { $a->set_id cmp $b->set_id; }
  236 sub byduedate { $a->due_date <=> $b->due_date; }
  237 
  238 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9