#!/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! [Up]

!; print <Simple editing of classlist files for $Course

EOF print <


Select files:

EOF ## find the available files opendir CLASSLISTDIR, $templateDirectory or wwerror($0,"Can't open directory $templateDirectory","",""); my @allFiles = grep !/^\./, readdir CLASSLISTDIR; closedir CLASSLISTDIR; ## sort the files my @classlistFiles = grep /\.lst$/,@allFiles; my @sortedNames = sort @classlistFiles; ## put the default classlist file first if it exists my $shortFileName = $defaultClasslistFile; if ($shortFileName =~ m|$dd|) { $shortFileName =~ m|$dd([^$dd]*)$|; ## extract filename from full path name $shortFileName = $1; } my @newSortedNames = grep !/^$shortFileName$/, @sortedNames; if ($#newSortedNames != $#sortedNames) { unshift @newSortedNames,$shortFileName; @sortedNames = @newSortedNames; } ## print list of files print qq! \n!; ## resume printing the rest of the form print < EOF print &htmlBOTTOM("profFormEditClasslistFiles.pl", \%inputs); } sub selectionError { print"content-type:\n\n

Error: You must make a selection!

\n"; print "

"; print &sessionKeyInputs(\%inputs); print <<"ENDOFHTML";

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\n

No changes made: You are in read only mode

\n"; print "Use your browser's BacK Button to return to the previous page or
"; print "

"; print &sessionKeyInputs(\%inputs); print <<"ENDOFHTML";

ENDOFHTML print &htmlBOTTOM("profFormEditClasslistFiles.pl", \%inputs); } sub readWriteSuccess { my ($savedFile) = @_; print"content-type:\n\n

Success, file saved.

\n"; print "The contentsof your page have been saved in the file:
$savedFile"; print "

"; print &sessionKeyInputs(\%inputs); print <<"ENDOFHTML";

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! [Up]

!; &printSubmitButtons; } sub printSubmitButtons { print <
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 < EOF print &htmlBOTTOM("profFormEditClasslistFiles.pl", \%inputs); }