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

View of /trunk/webwork2/lib/WeBWorK/ContentGenerator/Instructor/ProblemSetEditor.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 860 - (download) (as text) (annotate)
Sun May 18 03:26:22 2003 UTC (10 years ago) by gage
File size: 4248 byte(s)
This is the shell of an editor which will construct a "set definition file".
It shows a list of the problems which are available in the templates
directory.

To do: 1 - Detect the selected setDirectory and display its problems. Currently
the setDirectory is permanently set to setAlgebra10Intervals.
2 - Implement the problem viewing action of the form
3 - Implement the save definition action of the form.

-- MIke

    1 package WeBWorK::ContentGenerator::Instructor::ProblemSetEditor;
    2 use base qw(WeBWorK::ContentGenerator::Instructor);
    3 
    4 =head1 NAME
    5 
    6 WeBWorK::ContentGenerator::Instructor::ProblemSetEditor - Edit a set definition list
    7 
    8 =cut
    9 
   10 use strict;
   11 use warnings;
   12 use CGI qw();
   13 
   14 sub title {
   15   my $self = shift;
   16   return "Instructor Tools - Problem Set Editor for ".$self->{ce}->{courseName};
   17 }
   18 
   19 sub body {
   20   my $self = shift;
   21   my $initialData = "Enter problem set definition here";
   22   my $textAreaString = qq!<textarea cols="40", rows="20">$initialData</textarea>!;
   23   my $header = "Choose problems from " . $self->{ce}->{courseDirs}->{templates} . " directory" .
   24     "<p>This form is not yet operational";
   25   my $popUpSetDirectoryString = $self->fetchSetDirectories();
   26   my $popUpPGProblemString = $self->fetchPGproblems();
   27   return CGI::p($header),
   28     CGI::start_form(),
   29     CGI::table( {-border=>2},
   30       CGI::Tr({-align=>'CENTER',-valign=>'TOP'},
   31         CGI::td($textAreaString),
   32           CGI::td($popUpSetDirectoryString),
   33           CGI::td($popUpPGProblemString)
   34 
   35             ),
   36             CGI::Tr({-align=>'CENTER',-valign=>'TOP'},
   37                CGI::th(["Open date","Due date", "Answer date"]),
   38 
   39             ),
   40             CGI::Tr({-align=>'CENTER',-valign=>'TOP'},
   41            CGI::td(CGI::textfield(-name=>'open_date', -size=>'20') ),
   42                CGI::td(CGI::textfield(-name=>'due_date', -size=>'20') ),
   43                CGI::td(CGI::textfield(-name=>'answer_date', -size=>'20') ),
   44             )
   45         ),
   46         CGI::p( "Save set definition file ".CGI::submit(-name=>'Save',-value=>'save') ),
   47     CGI::end_form()
   48   ;
   49 
   50 }
   51 
   52 
   53 sub fetchSetDirectories {
   54 
   55   my $self = shift;
   56   my $templateDirectory = $self->{ce}->{courseDirs}->{templates};
   57   opendir SETDEFDIR, $templateDirectory
   58     or return "Can't open directory $templateDirectory";
   59 
   60   my @allFiles = grep !/^\./, readdir SETDEFDIR;
   61   closedir  SETDEFDIR;
   62 
   63   ## filter to find only the set directories
   64   ## -- it is assumed that these directories don't contain a period in their names
   65   ## and that all other files do.  Directories names must also begin with "set".
   66   ## A better plan would be to read only the names of directories, not files.
   67 
   68   ## sort the directories
   69   my @setDefFiles = grep /^set[^\.]*$/, @allFiles;
   70   my @sortedNames = sort @setDefFiles;
   71 
   72   ## print list of files
   73   my  $fileName;
   74 
   75   my ($ind,$label,$date,@stat);
   76 #   my %labels;
   77 #   for $ind (@sortedNames) {
   78 #     $fileName = "${templateDirectory}$ind";
   79 #       if (-e $fileName) {
   80 #         @stat = stat($fileName);
   81 #         $date = $stat[9];
   82 #         $date = formatDateAndTime($date);
   83 #         $date =~ s|\s*at.*||;
   84 #         $label = "  Last Changed $date";
   85 #       }
   86 #     $labels{$ind} = "$ind"; # $label";
   87 #   }
   88 
   89 return CGI::popup_menu(-name=>'setDirectory', -size=>20,
   90    -values=>\@sortedNames,  ) .CGI::br() .
   91     CGI::submit(-name=>'select_set'  , -value =>'Select set')  ;
   92 }
   93 
   94 sub fetchPGproblems {
   95 
   96   my $self = shift;
   97   my $templateDirectory = $self->{ce}->{courseDirs}->{templates};
   98 
   99   ## fix me.  We need to get the current set Directory.
  100   my $setDirectory = 'setAlgebra10Intervals';
  101   ##
  102   opendir SETDEFDIR, "$templateDirectory/$setDirectory"
  103     or return "Can't open directory $templateDirectory/$setDirectory";
  104 
  105   my @allFiles = grep !/^\./, readdir SETDEFDIR;
  106   closedir  SETDEFDIR;
  107 
  108   ## filter to find only pg problems
  109   ## Some problems are themselves in directories (if they have auxiliary
  110   ## .png's for example.  This eventuallity needs to be handled.
  111 
  112   ## sort the directories
  113   my @pgFiles = grep /\.pg$/, @allFiles;
  114   my @sortedNames = sort @pgFiles;
  115 
  116   ## print list of files
  117   my  $fileName;
  118 
  119   my ($ind,$label,$date,@stat);
  120   my %labels;
  121   for $ind (@sortedNames) {
  122     $fileName = "${templateDirectory}$ind";
  123       if (-e $fileName) {
  124         @stat = stat($fileName);
  125         $date = $stat[9];
  126         $date = formatDateAndTime($date);
  127         $date =~ s|\s*at.*||;
  128         $label = "  Last Changed $date";
  129       }
  130     $labels{$ind} = "$ind"; # $label";
  131   }
  132 
  133 return "$setDirectory <br> ".  CGI::popup_menu(-name=>'pgProblems', -size=>20, -multiple=>undef,
  134    -values=>\@sortedNames, -labels=>\%labels ) . CGI::br() .
  135       CGI::submit(-name=>'view_problem'  , -value =>'View problem') . CGI::br() .
  136       CGI::submit(-name=>'choose_problem'  , -value =>'Choose problem')  ;
  137 }
  138 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9