#!/usr/local/bin/webwork-perl
## This file is profFormEditClasslistFiles.pl
## It provides access to utilities for downloading Classlist files
##
####################################################################
# Copyright @ 1995-1998 University of Rochester
# All Rights Reserved
####################################################################
use lib '.'; use webworkInit; # WeBWorKInitLine
use CGI qw(:standard);
use Global;
use Auth;
use strict;
use File::Copy;
# begin Timing code
use Benchmark;
my $beginTime = new Benchmark;
# end Timing code
&CGI::ReadParse;
my %inputs =%main::in;
# 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 @array = %inputs;
# print "inputs are @array";
# verify that information has been received
unless($Course && $User && $Session_key) {
&wwerror("$0","The script did not receive the proper input data.","","");
}
# establish environment for this script
&Global::getCourseEnvironment($inputs{'course'});
my $cgiURL = getWebworkCgiURL;
my $databaseDirectory = getCourseDatabaseDirectory;
my $htmlURL = getCourseHtmlURL;
my $scriptDirectory = getWebworkScriptDirectory;
my $templateDirectory = getCourseTemplateDirectory;
my $DAT = getDat;
my $dd = getDirDelim;
require "${scriptDirectory}$Global::DBglue_pl";
require "${scriptDirectory}$Global::FILE_pl";
require "${scriptDirectory}$Global::HTMLglue_pl";
require "${scriptDirectory}$Global::SCRtools_pl";
# log access
&Global::log_info('', query_string);
my $permissionsFile = &Global::getCoursePermissionsFile($inputs{'course'});
my $permissions = &get_permissions($inputs{'user'}, $permissionsFile);
my $keyFile = &Global::getCourseKeyFile($inputs{'course'});
my $defaultClasslistFile = getCourseClasslistFile($Course);
#verify session key
&verify_key($inputs{'user'}, $inputs{'key'}, $keyFile, $inputs{'course'});
# verify permissions are correct
if ($permissions != $Global::instructor_permissions ) {
print "permissions = $permissions instructor_permissions = $Global::instructor_permissions\n";
print &html_NO_PERMISSION;
exit(0);
}
# get the rest of the information from the submitted form
my $fileName = $inputs{'fileName'};
my $action = $inputs{'action'};
my $readWrite = $inputs{'readWrite'};
## if totals file is the only one selected, view it immediately
OPTIONSWITCH: {
if ($action eq '') {
&selectFilesForm();
last OPTIONSWITCH;
}
if ($action eq 'readFromFile') {
&createFormFromFile("${templateDirectory}$fileName");
last OPTIONSWITCH;
}
if ($action eq 'saveToFile') {
&saveToFile(\%inputs);
last OPTIONSWITCH;
}
if ($action eq 'duplicateLastRow') {
&duplicateLastRow(\%inputs);
last OPTIONSWITCH;
}
if ($action eq 'addEmptyRow') {
&addEmptyRow(\%inputs);
last OPTIONSWITCH;
}
if ($action eq 'deleteLastRow') {
&deleteLastRow(\%inputs);
last OPTIONSWITCH;
}
}
# begin Timing code
my $endTime = new Benchmark;
&Global::logTimingInfo($beginTime,$endTime,"profClasslist.pl",$inputs{'course'},$inputs{'user'});
# end Timing code
exit;
## subroutines
sub selectFilesForm {
# print HTML text
print &htmlTOP("Select Classlist File for simple editing");
# print navigation buttons
print qq!
!;
print <
EOF
print <
!;
&printSubmitButtons;
}
sub printSubmitButtons {
print <
Select files:
EOF
print &htmlBOTTOM("profFormEditClasslistFiles.pl", \%inputs);
}
sub selectionError {
print"content-type:\n\nError: You must make a selection!
\n";
print "
ENDOFHTML
print &htmlBOTTOM("profFormEditClasslistFiles.pl", \%inputs);
}
sub createFormFromFile {
my ($fileName) = @_;
&printTopOfForm();
print 'Three backups of your file will be kept, but please be careful.
The format is: Student_ID Last_Name First_Name Status Comment Section Recitation Email_Address Student_Login
';
my $string = &delim2html($fileName,'htmlform');
print "${string}
";
&printSubmitButtons();
&printBottomOfForm();
}
sub createFormFromDelimitedArray {
my ($inArrayref,$fileName) = @_;
&printTopOfForm();
print 'Three backups of your file will be kept, but please be careful.
The format is: Student_ID Last_Name First_Name Status Comment Section Recitation Email_Address Student_Login
';
my $shortFileName = $fileName;
if ($shortFileName =~ m|$dd|) {
$shortFileName =~ m|$dd([^$dd]*)$|; ## extract filename from full path name
$shortFileName = $1;
}
$shortFileName =~ s|\..*||; ## remove extension
my $string = &delimitedArray2html($inArrayref, $shortFileName,'htmlform');
print "${string}
";
&printSubmitButtons();
&printBottomOfForm();
}
sub saveToFile {
my ($inputsref) = @_;
my $outString = &htmlForm2delim($inputsref);
#print "$outString";
#print "readWrite is $readWrite";
unless ($readWrite eq 'readWrite') {
&readWriteError();
exit;
}
my $fulFileName = $inputs{'fileName'};
my $shortFileName = $fulFileName;
if ($shortFileName =~ m|$dd|) {
$shortFileName =~ m|$dd([^$dd]*)$|; ## extract filename from full path name
$shortFileName = $1;
}
$shortFileName =~ s|\..*||; ## remove extension
$fulFileName = "${templateDirectory}$fulFileName";
my @outArray = split /\n/, $outString;
my $msg = checkClasslistArray($Global::noOfFieldsInClasslist,\@outArray,'form');
unless ($msg eq 'OK') {
$msg .= "
GO BACK AND CORRECT YOUR FORM.
FILE NOT SAVED.";
&wwerror("$0","$msg","","", query_string());
}
## now that we know the file has a valid format, we can save it
&backupFile("$fulFileName"); ##make up to three backups
my $gid = $Global::numericalGroupID;
$gid = $Global::numericalGroupID; ## hack to remove warning message about $Global::numericalGroupID used only once
my $tmpFileName = "${fulFileName}.tmp";
&createFile($tmpFileName, $Global::classlist_file_permission, $gid);
open(CLASSLISTFH,">$tmpFileName") or
&wwerror("$0","Can't open $tmpFileName");
print CLASSLISTFH "$outString";
close CLASSLISTFH;
move("$tmpFileName","$fulFileName") or
&wwerror("$0","Can't save $fulFileName");
&readWriteSuccess($fulFileName);
}
sub readWriteError {
print"content-type:\n\nNo changes made: You are in read only mode
\n";
print "Use your browser's BacK Button to return to the previous page or
";
print "
ENDOFHTML
print &htmlBOTTOM("profFormEditClasslistFiles.pl", \%inputs);
}
sub readWriteSuccess {
my ($savedFile) = @_;
print"content-type:\n\nSuccess, file saved.
\n";
print "The contentsof your page have been saved in the file:
$savedFile";
print "
ENDOFHTML
print &htmlBOTTOM("profFormEditClasslistFiles.pl", \%inputs);
}
sub duplicateLastRow {
my ($inputsref) = @_;
my $inString = &htmlForm2delim($inputsref);
# print "$inString";
my @inArray = split("\n",$inString);
my $row = $inArray[$#inArray];
push @inArray, $row;
&createFormFromDelimitedArray(\@inArray,$fileName);
exit;
}
sub addEmptyRow {
my ($inputsref) = @_;
my $inString = &htmlForm2delim($inputsref);
# print "$inString";
my @inArray = split("\n",$inString);
my $row = $inArray[$#inArray];
$row =~ s|[^,]*?,|,|g;
$row =~ s|,[^,]*|,|g;
push @inArray, $row;
&createFormFromDelimitedArray(\@inArray,$fileName);
exit;
}
sub deleteLastRow {
my ($inputsref) = @_;
my $inString = &htmlForm2delim($inputsref);
#print "$inString";
my @inArray = split("\n",$inString);
pop @inArray;
&createFormFromDelimitedArray(\@inArray,$fileName);
exit;
}
sub printTopOfForm {
print "content-type: text/html \n\n" ;
# print navigation buttons
print qq!
Read Only Mode for saveToFile
Read/Write Mode for saveToFile
Changes are not saved until the "saveToFile" button is pressed and you see the message "Success, file saved".
EOF
}
sub printBottomOfForm {
print <