#!/usr/bin/perl
#  Copyright 2001-2025 Leslie Richardson

#  This file is part of Open Admin for Schools.


my %lex = ('Main' => 'Main',
	   'Error' => 'Error',
	   'Add Reading Tests' => 'Add Reading Tests',
	   'Student' => 'Student',
	   'Reading Level' => 'Reading Level',
	   'Continue' => 'Continue',
	   'Category' => 'Category',	   
	   'Name' => 'Name',
	   'Save' => 'Save',
	   'Score' => 'Score',
	   'Test Date' => 'Test Date',
	   'Values must be from 1-4' => 'Values must be from 1-4',
	   'No User Id' => 'No User Id',
	   'No Password' => 'No Password',
	   'Please Log In' => 'Please Log In',
	   'Grade' => 'Grade',
	   'Homeroom' => 'Homeroom',
	   'Select' => 'Select',
	   'Blank=All' => 'Blank=All',
	   'Check' => 'Check',
	   'Record Exists' => 'Record Exists',
	   'Edit Record' => 'Edit Record',
	   'Required' => 'Required',
	   'Date and Reading Level' => 'Date and Reading Level',
	   'Only' => 'Only',
	   'No Blanks Allowed' => 'No Blanks Allowed',
	   'Skipping' => 'Skipping',
	   'Next Page' => 'Next Page',
	   'Absences' => 'Absences',
	   'Students' => 'Students',
	   

	   );

use DBI;
use CGI;
use Cwd;


my $self = 'fpAdd.pl';

my $q = new CGI;
my %arr = $q->Vars;

my @time = localtime(time);
my $year = $time[5] + 1900;
my $month = $time[4] + 1;
my $currdate = "$year-$month-$time[3]";


eval require "../../etc/admin.conf";
if ( $@ ) {
    print $lex{Error}. " $self: $@<br>\n";
    die $lex{Error}. "$self: $@\n";
}

my $dbtype = 'mysql';
my $dsn = "DBI:$dbtype:dbname=$dbase";
my $dbh = DBI->connect($dsn,$user,$password);

my $userid = $ENV{'REMOTE_USER'};

print $q->header( -charset, $charset );

my $mycss = $css;
if ( getcwd() =~ /tcgi/ ){ # we are in cgi
    $mycss = $tchcss;
}

# Page Header
my $title = qq{Add F&amp;P Reading Tests};
print qq{$doctype\n<html><head><title>$title</title>\n}; 
print qq{<link rel="stylesheet" href="$mycss" type="text/css">\n};

print qq{<link rel="stylesheet" type="text/css" media="all" };
print qq{href="/js/calendar-blue.css" title="blue">\n};
print qq{<script type="text/javascript" src="/js/calendar.js"></script>\n};
print qq{<script type="text/javascript" src="/js/lang/calendar-en.js"></script>\n};
print qq{<script type="text/javascript" src="/js/calendar-setup.js"></script>\n};

print qq{$chartype\n</head><body style="padding:1em 2em;">\n};
print qq{[ <a href="$tchpage">$lex{Main}</a> ]\n};
print qq{<h1>$title</h1>\n};


if ( not $arr{page} ) {
    showStartPage();

} elsif ( $arr{page} == 1 ) {
    delete $arr{page};
    selectStudents();

} elsif ( $arr{page} == 2 ) {
    delete $arr{page};
    enterData();

} elsif ( $arr{page} == 3 ) {
    delete $arr{page};
    writeData();
}

#----------------
sub showFPForm { # called by enterData
#----------------

    my ($studnum, $count) = @_;

    # Start Table
    print qq{<table cellpadding="4" cellspacing="0" border="0" };
    print qq{style="border:1px solid gray;float:left;margin:0.5em;padding:0.3em;">\n};

    # title
    print qq{<tr><td class="bra"><span style="color:#090;">$count</span> Title</td>};
    print qq{<td><input type="text" name="$studnum:$count:title" };
    print qq{style="40ch;"></td></tr>\n};

    # System: NOTE field is actually tsystem
    print qq{<tr><td class="bra">System</td><td><input type="text" name="$studnum:$count:tsystem" };
    print qq{style="width:2ch;text-align:center;"> 1 or 2</td></tr>\n};

    # Book type
    print qq{<tr><td class="bra">Type</td><td><select name="$studnum:$count:bktype">};
    print qq{<option value=""></option>\n};
    print qq{<option value="fiction">Fiction</option><option value="nonfiction">Non-Fiction</option>};
    print qq{</select></td></tr>\n};

    # Reading Level
    print qq{<tr><td class="bra">Reading Level</td><td><input type="text" name="$studnum:$count:readlevel" };
    print qq{style="width:2ch;text-align:center;"></td></tr>\n};

    # Accuracy
    print qq{<tr><td class="bra">Accuracy</td><td><input type="text" name="$studnum:$count:accuracy" \n};
    print qq{style="width:4ch;text-align:left;"></td></tr>\n};

    # Comprehension
    print qq{<tr><td class="bra">Comprehension</td><td><input type="text" };
    print qq{name="$studnum:$count:comprehension" \n};
    print qq{style="width:4ch;text-align:center;"></td></tr>\n};
    
    # Assistance
    print qq{<tr><td class="bra">Assistance</td><td><select name="$studnum:$count:assist">\n};
    print qq{<option value=""></option>\n};
    print qq{<option>Independent</option><option>Instructional</option><option>Hard</option>\n};
    print qq{</select></td></tr>\n};
    
    # Self correction
    print qq{<tr><td class="bra">Self Correction</td><td><input type="text" };
    print qq{name="$studnum:$count:selfcorrection" \n};
    print qq{style="width:4ch;text-align:center;"></td></tr>\n};

    # Fluency
    print qq{<tr><td class="bra">Fluency</td><td><input type="text" name="$studnum:$count:fluency" \n};
    print qq{style="width:4ch;text-align:center;"></td></tr>\n};

    # Rate (trate)
    print qq{<tr><td class="bra">Rate</td><td><input type="text" name="$studnum:$count:trate" \n};
    print qq{style="width:4ch;text-align:center;"></td></tr>\n};

    # Write about Reading
    print qq{<tr><td class="bra">Write About Reading</td><td><input type="text" };
    print qq{name="$studnum:$count:writeabout" \n};
    print qq{style="width:12ch;text-align:left;"></td></tr>\n};

    print qq{</table>\n\n};

    return;
    
}



#----------------
sub showStartPage {
#----------------

    # Get Grades, Homerooms
    my (%grades, %homerooms);
    my $sth = $dbh->prepare("select distinct grade from student 
			    where grade != '' and grade is not NULL");
    $sth->execute;
    if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; }
    while ( my $gr = $sth->fetchrow ) {
	$grades{$gr} = 1;
    }
    my @grades = sort { $a <=> $b } keys %grades;

    my $sth = $dbh->prepare("select distinct homeroom from student 
			    where homeroom != '' and homeroom is not NULL");
    $sth->execute;
    if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; }
    while ( my $hr = $sth->fetchrow ) {
	$homerooms{$hr} = 1;
    }
    my @homerooms = sort { $a <=> $b } keys %homerooms;

    
    print qq{<form action="$self" method="post"> \n};
    print qq{<input type="hidden" name="page" value="1">\n};
    
    print qq{<table cellpadding="4" cellspacing="0" border="0" style="border:1px solid gray;">\n};

    print qq{<tr><td class="bra">Date</td>\n};
    print qq{<td><input type="text" name="date" id="date" size="10">\n};
    print qq{<button type="reset" id="start_trigger">...</button>\n};
    print qq{(yyyy-mm-dd)</td></tr>\n};


    # Students - Grade
    print qq{<tr><td class="bra">$lex{Select} $lex{Students}</td><td></td></tr>\n};
    print qq{<tr><td class="ra">Grade</td><td><select name="grade"><option value=""></option>};
    foreach my $grade ( @grades ) {
	print qq{<option>$grade</option>\n};
    }
    print qq{</select> <b>or</b></td></tr>\n};

    # Select Homeroom
    my $sth = $dbh->prepare("select lastname, firstname from staff s, staff_multi sm 
			    where s.userid = sm.userid and field_name = 'homeroom' 
			    and field_value = ?");

    print qq{<tr><td class="ra">Homeroom</td><td>};
    print qq{<select name="homeroom"><option value=""></option>};
    foreach my $hr ( @homerooms ) {
	$sth->execute($hr);
	if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; }
	my ($lastname, $firstname) = $sth->fetchrow;
	my $hrname = $hr;
	if ( $lastname ) { $hrname = "$hr - $firstname $lastname"; }
	
	print qq{<option value="$hr">$hrname</option>\n};
    }
    print qq{</select>\n};


    print qq{ $lex{'Blank=All'}</td></tr>\n};


    print qq{<tr><td class="bra">$lex{Check} $lex{'Next Page'}</td>\n};
    print qq{<td><input type="checkbox" name="chk" value="checked">\n};
    print qq{</td></tr>\n};    

    print qq{<tr><td></td><td class="la">\n<input type="submit" value="$lex{Continue}"></td></tr>\n};

    print qq{</table>\n};
    print qq{</form>\n};

    print qq{<script type="text/javascript">
     Calendar.setup({
        inputField     :    "date", // id of the input field
        ifFormat       :    "%Y-%m-%d", // format of the input field
        button         :    "start_trigger", // trigger for the calendar (button ID)
        singleClick    :    false,        // double-click mode
        step           :    1             // show all years in drop-down boxes 
    });
   </script>\n};

    print qq{</body></html>\n};

    exit;

} # end of showStartPage



#----------------
sub selectStudents {
#----------------

    # foreach my $key ( sort keys %arr ) { print "K:$key V:$arr{$key}<br>\n"; }

    my $chk = $arr{chk};
    delete $arr{chk};

    # Check for any Blanks in date or reading level
    foreach my $key ('date') { 
	if ( not $arr{$key} ) {
	    print qq{<h3>$lex{Date} <b>$lex{Required}</b></h3>\n};
	    print qq{</body></html>\n};
	    exit;
	}
    }

    # Check for messed up Date Format
    my $errorflag;
    if ( $arr{date} =~ m/\// ) { # slashes rather than hyphens
	$errorflag = 1;
    } else {
	my ($y,$m,$d) = split('-', $arr{date});
	if ( not $m or ( $m < 1 or $m > 12 )) { $errorflag = 1; }
	if ( not $d or ( $d < 1 or $d > 31 )) { $errorflag = 1; }
    }
    if ( $errorflag ) {
	# print qq{<div>Year:$y Month:$m Day:$d</div>\n};
	print qq{<h3>$lex{'Test Date'} $lex{Error}: $arr{date}</h3>\n};
	print qq{</body></html>\n};
	exit;
    }

    my ($sth, $groupname);
    if ( $arr{grade} ) { # we're picking a group
	$sth = $dbh->prepare("select lastname, firstname, studnum from student
          where grade = ? order by lastname, firstname");
	$sth->execute( $arr{grade} );
	$groupname = qq{Grade $arr{grade}};
	
    } elsif ( $arr{homeroom} ) {
	$sth = $dbh->prepare("select lastname, firstname, studnum from student
          where homeroom = ? order by lastname, firstname");
	$sth->execute( $arr{homeroom} );
	$groupname = qq{Homeroom $arr{homeroom}};
	
    } else { # everyone
	$sth = $dbh->prepare("select lastname, firstname, studnum from student
          order by lastname, firstname");
	$sth->execute;
    }
    if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; }

   
    # Form Header
    print qq{<form action="$self" method="post"> \n};
    print qq{<input type="hidden" name="page" value="2">\n};
    print qq{<input type="hidden" name="date" value="$arr{date}">\n};

    print qq{<div style="margin:0.5em;"><input type="submit" value="$lex{Continue}"></div>\n};
    
    print qq{<table cellpadding="3" cellspacing="0" border="0" style="border:1px solid gray;">\n};

    print qq{<tr><td></td><td class="bla">Max # of Books };
    print qq{<input type="text" name="books" style="width:2ch;text-align:center;" value="6">};
    print qq{</td></tr>\n};


    print qq{<tr><th>Summary</th><th>$groupname</th></tr>\n};


    while ( my ( $lastname, $firstname, $studnum ) = $sth->fetchrow ) {
	print qq{<tr><td class="cn"><input type="checkbox" name="$studnum" value="1" $chk></td>\n};
	print qq{<td class="la"><b>$lastname</b>, $firstname ($studnum)</td>};
    }

    print qq{</table>\n};

    print qq{<div><input type="submit" value="$lex{Continue}"></div>\n};
    print qq{</form></body></html>\n};

    exit;

} # end of selectStudents



#------------
sub enterData {
#------------

    #foreach my $key ( sort keys %arr ) { print "K:$key V:$arr{$key}<br>\n"; }

    my $date = $arr{date};
    delete $arr{date};
    my $books = $arr{books}; # number of book forms to produce
    delete $arr{books};
     # Now only student numbers left in hash...

    
    # Print Form Heading
    print qq{<form action="$self" method="post"> \n};
    print qq{<input type="hidden" name="page" value="3">\n};
    print qq{<input type="hidden" name="date" value="$date">\n};

    print qq{<div><input type="submit" value="$lex{Continue}"></div>\n};

    my $sth = $dbh->prepare("select lastname, firstname, grade from studentall where studnum = ?");
    my (%sort, %grade, %name);

    foreach my $studnum ( keys %arr ) {

	# Get Student Name
	$sth->execute( $studnum );
	if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; }
	my ( $lastname, $firstname, $grade ) = $sth->fetchrow;
	$sort{"$lastname$firstname$studnum"} = $studnum;
	$name{$studnum} = qq{<b>$lastname</b>, $firstname};
	$grade{$studnum} = $grade;
    }

    foreach my $key ( sort keys %sort ) {
	my $studnum = $sort{$key};

	print qq{<h3 style="font-size:120%;color:#060;">$name{$studnum} ($studnum)</h3>\n};
	foreach my $count (1..$books) {
	    showFPForm($studnum, $count);
	}

	print qq{<div style="clear:left;"></div>\n};

	
    }

    
    print qq{<div style="clear:left;"><input type="submit" value="$lex{Continue}"></div>\n};
	
    print qq{</form></body></html>\n};

    exit;

}


#------------
sub writeData {
#------------

    #foreach my $key ( sort keys %arr ) { print qq{K:$key V:$arr{$key}<br>\n}; }
        
    my $date = $arr{date};
    delete $arr{date};

    # also need grade and author
    my $author = $ENV{'REMOTE_USER'};

    # Get Grade
    my $sth = $dbh->prepare("select lastname, firstname, grade from studentall where studnum = ?");
    
    my %data;
    foreach my $key ( keys %arr ) {
	if ( not $arr{$key} ) { next; } # skip if no data
	my ($studnum, $idx, $field ) = split(':', $key);
	$data{$studnum}{$idx}{$field} = $arr{$key};
    }

=head    
    # Test Only
    foreach my $studnum ( sort keys %data ) {
	foreach my $idx ( sort keys %{ $data{$studnum}} ) {
	    foreach my $field ( sort keys %{ $data{$studnum}{$idx}} ) {
		print qq{SN:$studnum / $idx / $field / $data{$studnum}{$idx}{$field}<br>\n};
	    }
	}
    }

=cut


    foreach my $studnum ( sort keys %data ) {
	
	$sth->execute($studnum);
	if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; }
	my ($lastname, $firstname, $grade) = $sth->fetchrow;

	# now populate the rest of the arrays.
	foreach my $idx ( sort keys %{ $data{$studnum}} ) {
	    my (@field, @qst, @value);

	    push @field, 'studnum';
	    push @qst, '?';
	    push @value, $studnum;

	    push @field, 'tdate';
	    push @qst, '?';
	    push @value, $date;

	    push @field, 'tauthor';
	    push @qst, '?';
	    push @value, $author;

	    push @field, 'tgrade';
	    push @qst, '?';
	    push @value, $grade;

	    foreach my $field ( sort keys %{ $data{$studnum}{$idx}} ) {
#		print qq{SN:$studnum / $idx / $field / $data{$studnum}{$idx}{$field}<br>\n};
		push @field, $field;
		push @qst, '?';
		push @value, $data{$studnum}{$idx}{$field};
		
	    }

	    # show the array values;
#	    print qq{FLD:@field<br>QST:@qst<br>VAL:@value<br><br>\n};
	    my $fields = join(',',@field);
	    my $qst = join(',',@qst);
	    
	    my $sth = $dbh->prepare("insert into fp_book ($fields) values($qst)");
	    if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; }
	    $sth->execute( @value);
	    if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; }

	    # Notify of the record added.
	    print qq{<p>$firstname <b>$lastname</b> / <b>$idx</b> / <b>Record Added</b>: @value</p>\n};
	    
	}


	
    } # end of studnum loop


    
    print qq{<p>[ <a href="$self">Add More</a> |\n};
    print qq{<a href="$tchpage">$lex{Main}</a> ]</p>\n};


    print qq{</body></html>\n};

    exit;
}
