#!/usr/local/bin/webwork-perl
##this program creates a web page with an editor for a
##WeBWorK problem. it is called by processProblem8.pl
use strict;
use lib '.'; use webworkInit; # WeBWorKInitLine
use CGI qw(:standard escapeHTML unescapeHTML);
use MIME::Base64 qw( encode_base64 decode_base64) ;
use Global;
use Auth;
use Safe;
$main::safeCompartment = 0;
$main::safeCompartment = new Safe;
#Set to 1 to log timing data. Set to 0 to disable log.
$main::logTimingData = 0;
# begin Timing code
if( $main::logTimingData == 1 ) {
use Benchmark;
$main::beginTime = new Benchmark;
}
# end Timing code
my $cgi = new CGI;
my %inputs = $cgi -> Vars();
# get information from CGI inputs (see also below for additional information)
my $Course = $inputs{'course'};
my $User = $inputs{'user'};
my $Session_key = $inputs{'key'};
my $randpsvn = 22222; #int rand(1111,9999);
my $psvn = $inputs{'probSetKey'}; #psvn stands for Problem Set Version Number
my $probNum = 1;
$probNum = $inputs{'probNum'} if defined($inputs{'probNum'});
my $nextProbNum = $probNum + 1 if defined($probNum);
my $previousProbNum = $probNum - 1 if defined($probNum);
my $mode = "HTML";
$mode = $inputs{'Mode'} if defined( $inputs{'Mode'} );
my $showEdit = $inputs{'showEdit'};
my $seed = $inputs{'seed'} if defined( $inputs{'seed'} );
my $Rows = $Global::editor_window_rows;
$Rows = $inputs{'Rows'} if defined( $inputs{'Rows'} );
my $Columns = $Global::editor_window_columns;
$Columns = $inputs{'Columns'} if defined( $inputs{'Columns'} );
# verify that information has been received
unless($Course && $User && $Session_key && $psvn) {
&wwerror( "$0, missing data",
"The script did not receive the proper input data.
course is $Course, user is $User, session key is $Session_key, psvn is $psvn",'','',
query_string() );
}
# establish environment for this script
&Global::getCourseEnvironment($Course);
my $macroDirectory = getCourseMacroDirectory();
my $databaseDirectory = getCourseDatabaseDirectory();
my $htmlDirectory = getCourseHtmlDirectory();
my $htmlURL = getCourseHtmlURL();
my $scriptDirectory = getWebworkScriptDirectory();
my $templateDirectory = getCourseTemplateDirectory();
my $courseScriptsDirectory = getCourseScriptsDirectory();
require "${courseScriptsDirectory}$Global::displayMacros_pl";
require "${scriptDirectory}$Global::DBglue_pl";
require "${scriptDirectory}$Global::classlist_DBglue_pl";
require "${scriptDirectory}$Global::HTMLglue_pl";
require "${scriptDirectory}$Global::FILE_pl";
#require "${scriptDirectory}qz2sub.pl"; #require this only if it actually used
my $permissionsFile = &Global::getCoursePermissionsFile($Course);
my $permissions = &get_permissions($User,$permissionsFile);
my $keyFile = &Global::getCourseKeyFile($Course);
# log access
&Global::log_info('', query_string);
unless ($User eq "practice666" ) {
#verify session key
&verify_key($User, $Session_key, "$keyFile", $Course);
}
&attachProbSetRecord($psvn);
# get problem name
my $probFileName = &getProblemFileName($probNum,$psvn);
$probFileName = $inputs{'probFileName'} if defined($inputs{'probFileName'});
# get the text source of the problem
my $source = '';
my $comment = '';
#print "content-type: text/html\n\ninputs of action is $inputs{action}
" if defined($inputs{action});
if ( ($inputs{'action'} eq 'Revert to original and Resize window') || !(defined($inputs{'source'}) ) ) {
$comment = '
', $cgi -> textarea(-name=>'source', -default=>$display_source, -rows=>$Rows, -columns=>$Columns, -override =>1 ), #-wrap=>'virtual' '
', $cgi -> hidden(-name => 'refreshLatex2HTML', -value => 1), $cgi -> hidden(-name => 'readSourceFromHTMLQ', -value => 1 ), '
',
$cgi -> submit(-name=>'action', -value=>'Refresh problem');
if ($permissions == $Global::instructor_permissions) {
print ' ', $cgi -> submit(-name=>'action', -value=>'Save updated version');
print ' ', $cgi -> submit(-name=>'action', -value=>'Save as'),
$cgi -> textfield(-name=>'new file name', -size => 40, -value=> "$probFileName"),
'
For "Save as", choose a new file name.';
}
print "\r\n",$cgi -> endform(),"\r\n","\r\n",;
print
"\r\n",
$cgi -> startform(-action=>"$Global::problemEditor_CGI"),
"\r\n",
$cgi -> hidden(-name=>'probNum', -value=>$probNum),
$cgi -> hidden(-name=>'probSetKey', -value=>$psvn),
# get course, user, key
&sessionKeyInputs(\%inputs),
$cgi -> hidden(-name=>'Mode', -value=>'HTML'),
$cgi -> hidden(-name=>'seed', -value=>$seed),
hidden(-name=>'source', -value=>$source),
$cgi -> submit(-name=>'action', -value=>'Revert to original and Resize window'),
' Rows: ',
$cgi -> textfield(-name=>'Rows', -default=>$Rows, -size => 3),
' Columns: ',
$cgi -> textfield(-name=>'Columns', -default=>$Columns, -size => 3),
"\r\n",,
$cgi -> endform(),
&htmlBOTTOM($0, \%inputs);
# begin Timing code
if( $main::logTimingData == 1 ) {
my $endTime = new Benchmark;
&Global::logTimingInfo($main::beginTime,$endTime,'problemEditor.pl',$Course,$User);
}
# end Timing code
exit;
###############################
##subroutines
##this subroutine is from processProblem
##why is it called processProblem_htmlTOP? is there a generic htmlTOP?
sub processProblem_htmlTOP {
my ($title, $bg_url) = @_;
my $background_url = $bg_url || $Global::background_plain_url;
#my $out = header(-type=>'text/html');
my $out = <Error: The problem ${templateDirectory}$probFileName could not be found!
");
# }
# ##append old version to problemfilename.pg.bak:
# open BAKFILE, ">>${templateDirectory}${probFileName}.bak" or
# wwerror($0, "Could not open ${templateDirectory}${probFileName}.bak for appending.");
# my ($sec, $min, $hour, $mday, $mon, $year)=localtime(time);
# print BAKFILE "##################################################################\n",
# "##########Date:: $mday-$mon-$year, $hour:$min:$sec#########", "\n\n\n";
# print BAKFILE $org_source;
# close BAKFILE;
# chmod 0660, "${templateDirectory}${probFileName}.bak";
# ##copy new version to the file problemfilename.pg
# open PROBLEM, ">${templateDirectory}$probFileName" or die
# wwerror($0, "Could not open ${templateDirectory}$probFileName for writing.
# Check that the permissions for this problem are 660 (-rw-rw----)");
# print PROBLEM $source;
# close PROBLEM;
# chmod 0660, "${templateDirectory}${probFileName}";
#
# }