#!/usr/bin/perl
# Copyright 2001-2008 Leslie Richardson
# This file is part of Open Admin for Schools.
# Open Admin for Schools is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
%lex = ('OA Labels' => 'OA Labels',
'Main' => 'Main',
'Top' => 'Top',
'No Records Found' => 'No Records Found',
'All Records' => 'All Records',
'Error' => 'Error',
'Continue' => 'Continue',
'Select Format' => 'Select Format',
'Separate with Spaces' => 'Separate with Spaces',
'Lastname' => 'Lastname',
'Group' => 'Group',
'Grade' => 'Grade',
'Homeroom' => 'Homeroom',
'Select Students' => 'Select Students',
'Select' => 'Select',
'Sort by' => 'Sort by',
'Select by' => 'Select by',
'Student' => 'Student',
'Select' => 'Select',
'Checked?' => 'Checked?',
'View/Download' => 'View/Download',
'View Log File' => 'View Log File',
'Labels' => 'Labels',
'Font Size' => 'Font Size',
'No Page Found' => 'No Page Found',
'Unable to open label file' => 'Unable to open label file',
'Year End Marks' => 'Year End Marks',
'Mark based on' => 'Mark based on',
'Final Term' => 'Final Term',
'Average' => 'Average',
'of Terms' => 'of Terms',
'Term' => 'Term',
'Final' => 'Final',
);
my $self = 'labels.pl';
my $markfield = 'a1';
# used to force a grid onto labels
my $showGrid = 0;
use DBI;
use CGI;
my $q = new CGI;
print $q->header;
my %arr = $q->Vars;
# Read config variables
eval require "../etc/admin.conf";
if ( $@ ) {
print $lex{Error}. " $@
\n";
die $lex{Error}. " $@\n";
}
eval require "../lib/libmeta.pl";
if ( $@ ) {
print $lex{Error}. " $@
\n";
die $lex{Error}. " $@\n";
}
eval require "../lib/liblatex.pl";
if ( $@ ) {
print $lex{Error}. " $@
\n";
die $lex{Error}. " $@\n";
}
#my ($sec, $min, $hour, $mday, $mon, $year, $wday,
# $yday, $iddst) = localtime(time);
#$year = $year + 1900;
#$mon++;
#$wday++;
#my $currdate = "$dow[$wday], $month[$mon] $mday, $year";
# Display top of page
print "$doctype\n
",$lex{'OA Labels'},"
\n";
print "$chartype\n\n";
print "[ ",$lex{Main}," ]\n";
my $dsn = "DBI:$dbtype:dbname=$dbase";
my $dbh = DBI->connect($dsn,$user,$password);
# Show start page if only beginning.
if ( not $arr{page} ) {
showStartPage();
} elsif ( $arr{page} == 1 ) {
delete $arr{page};
selectStudents();
} elsif ( $arr{page} == 2 ) {
delete $arr{page};
printLabels();
} elsif ( $arr{page} eq 'Mark1' ) { # Mark printing
delete $arr{page};
showGradeMarkMethod();
} elsif ( $arr{page} eq 'Mark2' ) { # print Mark Labels for Cum Folders
delete $arr{page};
printMarkLabels();
} else {
print $lex{Error};
print $lex{'No Page Found'}. "\n";
}
#-----------------
sub printLabels {
#-----------------
my ($dud, $labelfile) = split /\[/, $arr{format};
delete $arr{format};
chop $labelfile;
$labelfile = "../template/label/". $labelfile;
# read file and get description
unless (open (FH,"<$labelfile")) {
print $lex{'Unable to open label file'}. ": $!\n";
die $lex{'Unable to open label file'}. ": $!\n";
}
my $desc = ;
my $format = ;
# Now slurp in rest of file
my $layout;
{ local $/; $layout = ; close FH;}
#print "D:$desc F:$format LO:", $layout, "
\n";
while ( $layout =~ m{\<\#(.*?)\#\>}g ) {
$fields .= $1.',';
}
chop $fields; # remove trailing comma
my $selection = "select $fields from student where studnum = ?";
#print "SEL: $selection
\n";
my $sth = $dbh->prepare( $selection );
my $sortorder = $arr{sortorder};
delete $arr{sortorder};
my $shortname = "MLabels$$";
my $filename = "$shortname.tex";
open(TEX,">$filename") || die "Can't open tex file";
my $fontsize = $arr{fontsize}. 'pt';
delete $arr{fontsize};
#my $papersize = lc( $arr{papersize} ). 'paper';
if ( $defaultpapersize ) {
$papersize = $defaultpapersize;
} else {
$papersize = 'letterpaper';
}
#foreach my $key (sort keys %arr ) { print "K:$key V:$arr{$key}
\n"; }
print TEX "\\documentclass[$fontsize]{article}\n";
print TEX "\\usepackage{geometry}\n\\geometry{$papersize}\n";
print TEX "\\usepackage{inputenc}\n";
print TEX "\\inputencoding{latin1}\n";
print TEX "\\renewcommand{\\familydefault}{\\sfdefault}\n";
print TEX "\\usepackage[newdimens]{labels}\n";
# This printing is now done by printLabelFormat() below (this is Avery label format)
#print TEX "\\LabelRows=10\n\\LabelCols=3\n";
#print TEX "\\LeftPageMargin=4.2mm\n\\RightPageMargin=4.2mm\n";
#print TEX "\\TopPageMargin=12.7mm\n\\BottomPageMargin=12.7mm\n";
#print TEX "\\InterLabelColumn=2.1mm\n\\InterLabelRow=0mm\n";
#print TEX "\\LeftLabelBorder=4mm\n\\RightLabelBorder=4mm\n";
#print TEX "\\TopLabelBorder=2mm\n\\BottomLabelBorder=2mm\n";
printLabelFormat(*TEX, $format );
print TEX "\\LabelInfotrue\n";
if ( $showGrid ) {
print TEX "\\LabelGridtrue\n";
}
print TEX "\\begin{document}\\begin{labels}\n";
# Loop through all students, printing their label.
foreach my $key (sort keys %arr ) {
#print "K:$key V:$arr{$key}
\n";
my ($dud, $studnum) = split /:/, $key;
# Get values for this student
$sth->execute( $studnum );
if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; }
my $hash_ref = $sth->fetchrow_hashref;
# Filter Records
foreach my $key ( keys %{ $hash_ref } ) {
( $hash_ref->{$key} ) = latex_filter( $hash_ref->{$key} );
}
my $newlayout = $layout;
# Now put in field values into layout block
$newlayout =~ s{\<\#(.*?)\#\>}
{ exists($hash_ref->{$1})
? $hash_ref->{$1}
: $1
}gsex;
#$result = 'print TEX <<"EOF";'."\n".$layout."\n".'EOF';
#while (my @arr = $sth->fetchrow ){
# eval $result;
#}
$newlayout =~ s/\n\s*\n/\n/g; # strip blank lines (or lines with whitespace only)
print TEX $newlayout. "\n\n";
}
print TEX "\\end{labels}\n\\end{document}\n";
close TEX;
# Solve download location issues with cgi vs tcgi..
# Get current dir so know what CSS to display;
#if (getcwd() =~ /tcgi/){ # we are in tcgi
# $downloaddir = $tchdownloaddir;
# $webdownloaddir = $tchwebdownloaddir;
#}
system("$pdflatex $filename >pdflog$$.txt");
system("mv $shortname.pdf $downloaddir");
system("mv pdflog$$.txt $downloaddir");
system("rm -f $shortname.*");
print "\n";
print "[ ". $lex{Main};
print " |\n ";
print $lex{'View Log File'}. "\n ]