Parent Directory
|
Revision Log
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 |