Das ist der Quelltext
Das Problem ist im unteren Bereich
Die Ausgabe des Unterricht Arrays geht nicht.Ich habe die Stelle mit einem Kommentar versehen.
ich entschuldige mich wür die schlechte Formatierung
#!/usr/bin/perl -w
require('config.pl'); # Konfigurations-Datei laden
require('init.pl'); # werte an Skript anpassen
require('privateSubs.pl'); # für dateSearch(), actWeek()
$MAX_STUNDE = 16; # max. Stundenanzahl am Tag
$MAX_TAG = 6; # Schultage pro Woche
@date = &dateSearch($DATE_DB); # holen der "Datums"
my($aktWoche) = &actWeek($DATE_DB, @date); # holen der aktuellen Wochennummer
read (STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
#$query_string = "Klasse=1BFF1&schulwoche=2"; # <- Debug-Query
$query_string = &QueryHexToChar($query_string);
my($kategorie, $suchbegriff, $schulwoche) = ($query_string =~ /(.*)=(.*)&schulwoche=(.*)/g);
if(!defined($suchbegriff)) # wenn der Suchbegriff leer ist (kam bei den Daten
{$suchbegriff = ""} # aus dem Schuljahr 2003-2004 vor) wird '$suchbegriff
# ein leerer String zugewiesen. (ansonsten mekert Perl!)
&dataSearch($kategorie, $suchbegriff, $schulwoche); # Daten suchen
#&pdfdruck($kategorie, $suchbegriff, $schulwoche);
&printTimetable($kategorie, $schulwoche, $suchbegriff, $aktWoche);# Stundenplan ausgeben
exit(0); # Programmende
################################################################################
# validWk() - Prüft ob eine bestimmte Woche in einer Wochenkennug vorkommt. #
# #
# Parameter: Wochenkennung, Schulwochennummer #
# Rückgabewert: 0 wenn die Woche nicht vorkommt, #
# 1 wenn sie vorkommt. #
################################################################################
sub validWk {
my($gesWk, $woche) = @_;
my($valid) = 0;
open(INFILE2, "<" . $WK_DB) or
die "Die Unterroutine 'validWk()' im Perl-Skript $0 konnte die Datei".
" $WK_DB nicht oeffnen!\n";
$zeile = <INFILE2>; # Erste Zeile überspringen.
my(@wochen);
while(<INFILE2>) {
# Werte vorbereiten:
$zeile = $_;
chomp($zeile);
$zeile =~ s/("|')//g; # Ansonsten kann der Browser das
# als "Zeicheketten-Ende"-Markierung,..
# interpretieren.
my(@datensatz) = split(/;/, $zeile);
my($aktWk) = $datensatz[$WK_DB_WOCHENKENNUNG_SPALTE];
substr($aktWk,0,1) = ""; # 'K' entfernen
if($aktWk eq $gesWk) {
@wochen = split(/,/, $datensatz[$WK_DB_WOCHEN_SPALTE]);
last;
}
}#while
close(INFILE2);
# gucken ob Woche vorhanden
foreach(@wochen) {
if($_ == $woche) {
$valid = 1;
last;
}
}#foreach
return($valid);
}
################################################################################
# dataSearch() - Durchsucht die Stunden-Datenbank nach allen Fächern, Räumen, #
# Lehrern bzw. Klassen, Gruppen und Wochenkennungen #
# eines bestimmten Lehrers, Raumes oder einer Klasse, und #
# schreibt die Daten in ein 4 Dimensionales Array '@unterricht'.#
# #
# Parameter: Kategorie (Klasse, Raum oder Lehrer) #
# Suchbegriff (z.B. 2BKI2) #
# Schulwoche (1-... oder "alle") #
# Rückgabewert: Keiner #
################################################################################
sub dataSearch {
my($kategorie , $suchbegriff, $schulwoche) = @_;
my($spalte) = 0;
# festlegen in welcher Spalte der Suchbegriff liegt
if($kategorie eq "Lehrer") { $spalte = $ST_DB_LEHRERKUERZEL_SPALTE }
elsif($kategorie eq "Klasse") { $spalte = $ST_DB_KLASSE_SPALTE }
elsif($kategorie eq "Raum") { $spalte = $ST_DB_RAUM_SPALTE }
else {
die "Die Unterroutine 'dataSearch()' im Perl-Skript $0 hat ungueltige".
" Daten erhalten!\n";
}
open(INFILE1, "<" . $ST_DB) or
die "Die Unterroutine 'dataSearch()' im Perl-Skript $0 konnte die Datei".
" $ST_DB nicht oeffnen!\n";
$zeile = <INFILE1>; # Erste Zeile überspringen.
while(<INFILE1>) {
$zeile = $_;
chomp($zeile);
$zeile =~ s/("|')//g; # amsonsten kann der Browser dies
# als "Zeichenketten-Ende"-Markierung
# interpretiern -> macht große Probleme
# wenn sowas innerhalb von Javascript
# (-Aufrufen) vorkommt.
my(@datensatz) = split(/;/, $zeile);
if($datensatz[$spalte] eq $suchbegriff) {
my($wk) = $datensatz[$ST_DB_WOCHENKENNUNG_SPALTE];
if($schulwoche eq "alle" or &validWk($wk, $schulwoche)) {
my($eintrag) = 0;
my($tag) = $datensatz[$ST_DB_TAG_SPALTE]; # Tag & Stunde rausfiltern
my($stunde) = $datensatz[$ST_DB_STUNDE_SPALTE];
# ein bisschen was zu Zeigern und mehrdemensionalen Arrays ;-)
# (Da Perl eine inteligente Speicherverwaltung hat, kann man schon mal
# Elemente leer lassen, also macht das nichts wenn ich sage:
# $unterricht[$stunde][$tag] = ...
# Dadurch würde man bei anderen Programmiersprachen Speicher verschenken.
push(@{$unterricht[$stunde][$tag]}, [$datensatz[$ST_DB_RAUM_SPALTE], # - Raum
$datensatz[$ST_DB_FACH_SPALTE], # - Fach
$datensatz[$ST_DB_LEHRERKUERZEL_SPALTE],# - Lehrer
$datensatz[$ST_DB_KLASSE_SPALTE], # - Klasse
$datensatz[$ST_DB_GRUPPE_SPALTE], # - Gruppe
$wk]); # - Wochenkennung
}#if
}#if
}#while
close(INFILE1); # Datenbank wieder schließen
}
################################################################################
# #
# PDFDRUCK() Erstellen der PDF-Datei #
# . # # #
# #
################################################################################
sub pdfdruck
{
use PDF::Create;
use strict;
use CGI::Carp qw(fatalsToBrowser);
my $ipaddr = $ENV{'REMOTE_ADDR'}; # Speichern der IP-Adresse
my $sta = 71;
my $wta = 134;
# neue PDF-Datei erzeugen, Dateiname = SPLAN(IP-Adresse).pdf (z.B. SPLAN158.122.181.59.pdf)
my $pdf = new PDF::Create('filename' => "SPLAN$ipaddr.pdf",
'Version' => 1.2,
'PageMode' => 'UseOutlines',
'Author' => '_Projekt_Author',
'Title' => '_Projekt_Titel');
#'a4' => [ 0, 0, 595, 842 ]
my $root = $pdf->new_page('MediaBox' => [ 0, 0, 842, 595 ]);
# Fuege eine neue Seite hinzu, die ihre Attribute von $root erhaelt
my $page = $root->new_page;
# Definieren von 2 Schriftarten/Formatierungen
# Schriftart 1 - Helvetica - Typ 1 - WinANSIEcoding
my $f1 = $pdf->font('Subtype' => 'Type1',
'Encoding' => 'WinAnsiEncoding',
'BaseFont' => 'Helvetica');
# Schriftart 2 - Helvetica (fett) - Typ 1 - WinANSIEncoding
my $f2 = $pdf->font('Subtype' => 'Type1',
'Encoding' => 'WinAnsiEncoding',
'BaseFont' => 'Helvetica-Bold');
# Definieren einer Tabelle mit Inhalt
my $toc = $pdf->new_outline('Title' => 'Document',
'Destination' => $page);
$toc->new_outline('Title' => 'Section 1');
my $s2 = $toc->new_outline('Title' => 'Section 2',
'Status' => 'closed');
$s2->new_outline('Title' => 'Subsection 1');
#Ueberschrift
$page->stringc($f2, 16, 400, 570,"SPlan");
#Wochentage
$page->stringc($f2, 12, $wta*0 + 88, 550,"Mo");
$page->stringc($f2, 12, $wta*1 + 88, 550,"Di");
$page->stringc($f2, 12, $wta*2 + 88, 550,"Mi");
$page->stringc($f2, 12, $wta*3 + 88, 550,"Do");
$page->stringc($f2, 12, $wta*4 + 88, 550,"Fr");
$page->stringc($f2, 12, $wta*5 + 88, 550,"Sa");
#Umrandung der Wochentage Endx,Endy,Anfangx,Anfangsy
for(my $k = 0;$k < 6;$k++)
{
$page->line($k * $wta + 25,547,$k * $wta + 25,563);
$page->line($k * $wta + 155,547,$k * $wta + 25,547);
$page->line($k * $wta + 155,563,$k * $wta + 155,547);
$page->line($k * $wta + 25,563,$k * $wta + 155,563);
}
#Studenanzahl
for(my $i = 0;$i < 6;$i++)
{
$page->stringc($f2, 10, 10, 507 - ($i * $sta), "$i"+1);
}
#Umrandung der Stundennummerierung
for(my $m = 0;$m < 6;$m++)
{
$page->line(4,472 - ($m * $sta),4,540 - ($m * $sta)); #linke linie horizontal
$page->line(16,472 - ($m * $sta),4,472 - ($m * $sta));#untere linie vertikal
$page->line(16,540 - ($m * $sta),16,472 - ($m * $sta));#rechte linie horizontal
$page->line(4,540 - ($m * $sta),16,540 - ($m * $sta));#obere linie vertikal
}
# Umrandung des Inhalts
for(my $p = 0;$p < 6;$p++)
{
for(my $o = 0;$o < 6;$o++)
{
$page->line($o * $wta + 25,472 - ($p * $sta),$o * $wta + 25,540 - ($p * $sta));
$page->line($o * $wta + 155,472 - ($p * $sta),$o * $wta + 25,472 - ($p * $sta));
$page->line($o * $wta + 155,540 - ($p * $sta),$o * $wta + 155,472 - ($p * $sta));
$page->line($o * $wta + 25,540 - ($p * $sta),$o * $wta + 155,540 - ($p * $sta));
}
}
#Ausfuellen der Felder
$page->stringc($f1, 10,10,250,"$kategorie, $suchbegriff, $schulwoche");
# Copyright
$page->stringc($f1, 12,500,100,'by Fabien Tassin <fta@sofaraway.org>dddd');
# Hinzufuegen einer neuen Seite
my $page2 = $root->new_page;
$page2->line(0, 0, 842, 595);
$page2->line(0, 595, 842, 0);
$toc->new_outline('Title' => 'Section 3');
$pdf->new_outline('Title' => 'Summary');
# Hinzufuegen der fehlenden PDF-Objekte, Footer und Schliessen der Datei
$pdf->close;
}
################################################################################
# gMeDates() - Gibt ein Array mit den 'Datums' der übergebenen Woche #
# zB.: "Mo 06.02.04 | Di 07.02.04 | ..." zurück. #
# #
# Parameter: Wochennummer #
# Rückgabewert: Array mit 6 Elementen jeweils Strings mit #
# Datum #
################################################################################
sub gMeDates {
my($week) = shift(@_);
my(@day) = ("Mo","Di","Mi","Do","Fr","Sa");
# Da die Schulwochen beginnend bei 1 übergeben werden, muss ich für das
# Skript '$week' um 1 "erniedrigen. Das geht am fixesten so:
if($week-- ne "alle") { # Wenn Schulwoche != "alle" hänge an die Werte des
# Arrays '@day' die zugegörigen "Datums"
# ansonsten belasse das Array, so wie es ist.
my($ctr) = 0; # ctr steht für "counter"
foreach(@day) {
$_ = sprintf("%s %s", $_ , $date[$week][$ctr++]);
substr($_,9,2)=""; # Jahr in Format: jj statt jjjj
}#for
}#if
return(@day);
}
################################################################################
# printTimetable() - Gibt die Unterrichtsdaten in '@unterricht' in einem #
# Stundenplan aus. #
# #
# Parameter: Kategorie, Schulwoche #
# Rückgabewert: Keiner #
################################################################################
sub printTimetable {
use PDF::Create;
use CGI::Carp qw(fatalsToBrowser);
my(@tage) = ("Mo","Di","Mi","Do","Fr","Sa");
my($kategorie, $schulwoche, $suchbegriff, $aktWoche) = @_;
my(@day) = gMeDates($schulwoche); # "Daten" suchen
my($actDay) = -1;
my($zeile1);
my($zeile2);
my($zeile3);
print "Content-type: text/html\n\n",
"<html>\n",
"<head>\n",
"<title>Stundenplan</title>\n",
'<meta http-equiv="cache-control" content="no-cache">',"\n",
'<link rel="stylesheet" type="text/css" href="',$SPLAN_DIR,'Stundenplan.css">',"\n",
'<script type="text/javascript">',"\n",
"<!--\n\n",
" function setStatus() {\n",
" if(top.statusFrameGeladen && top.schulwocheFrameGeladen) {\n",
" var kat;\n",
" var suchbg;\n";
# komische Aufteilung, ich weiß, aber dann muss ich später nicht nochmal vergleichen.
# Und so schlage ich "2 Fliegen mit einer Klatsche":
# Das mit den Zeilen, und die Sache mit den Bezeichnungen für den Status. ;-)
if($kategorie eq "Klasse") {
$zeile1 = 1; # Fach
$zeile2 = 2; # Lehrer
$zeile3 = 0; # Raum
print ' var bez = "der Klasse: ";'."\n";
}
elsif($kategorie eq "Lehrer") {
$zeile1 = 3; # Klasse
$zeile2 = 1; # Fach
$zeile3 = 0; # Raum
print ' var bez = "des Lehrers: ";'."\n";
}
elsif($kategorie eq "Raum") {
$zeile1 = 3; # Klasse
$zeile2 = 2; # Lehrer
$zeile3 = 1; # Fach
print ' var bez = "des Raumes: ";'."\n";
}
else {
die "Die Unterroutine 'printTimetable()' im Perl-Skript $0 hat".
" unzulaessige Daten erhalten!\n";
}
if($schulwoche eq "alle") {
print ' var woche = " gesamtes Schuljahr ', substr($date[0][0], 6, 4),'/', substr($date[$#date][5], 6, 4),'";',"\n",
" parent.schulwocheFrame.document.schulwocheForm.schulwocheSelect.options.selectedIndex = 0;\n";
}
else { # Damit volles Datum in StatusZeile (ich setze die 'selectedIndex's damit die Schulwoche immer synchron mit dem Stundenplan ist) -> aktualisieren / vor / zurück
print ' parent.schulwocheFrame.document.schulwocheForm.schulwocheSelect.options.selectedIndex = "',$schulwoche,'";',"\n",
" parent.search.document.suchbegriffForm.schulwoche.value = parent.schulwocheFrame.document.schulwocheForm.schulwocheSelect.value;\n",
' var woche = " Schulwoche: " + parent.schulwocheFrame.document.schulwocheForm.schulwocheSelect.options[parent.schulwocheFrame.document.schulwocheForm.schulwocheSelect.options.selectedIndex].text;',"\n",
}
print ' parent.statusFrame.document.statusForm.statusZeile.value = "Stundenplan " + bez + "',$suchbegriff,'" + woche;',"\n", # hier nicht &setToHTML!
" }\n",
' else setTimeout("setStatus();", 100);',"\n",
" }\n\n",
" function imitUser(x, y) {\n",
" kat = x\n",
" suchbg = y\n",
" if(top.kategorieFrameGeladen) {\n",
" if(parent.kategorie.document.forms[0].Kategorie.value != kat) {\n",# kann ja einer Die Kategorie
" parent.kategorie.document.forms[0].Kategorie.value = kat;\n", # gewächselt haben.
" parent.kategorie.document.forms[0].submit();\n",
" }\n",
" setSuchbg();\n",
" }\n",
' else setTimeout("imitUser(kat, suchbg);", 100);',"\n",
" }\n\n",
" function setSuchbg() {\n",
# Wenn die Richtige Kategorie geladen wurde:
" if(parent.search.document.suchbegriffForm.elements[0].name == kat) {\n",
" parent.search.document.suchbegriffForm.elements[0].value = suchbg;\n",
" nd();\n", # Wir sagen ja weiter unten im Skript, das das Popup
# (bei mehr als vier Einträgen), wenn es geöffnet
# wird, die Status-Zeile des Browsers auf die Überschrift
# des Popups setzen soll. Wenn jetzt aber der User auf
# ein Objekt in diesem Popup klickt, und weitergeleitet
# wird bleibt der Eintrag in der Status-Zeile des Browsers
# weiterhin, deswegen müssen wir diesen löschen.
# Wieso gerade hier?: Sonst kommt es dem User vor als
# ob er nur das Popup geschlossen hätte.
" parent.search.syncWeekSetStatusNSubmit();\n",
" }\n",
' else setTimeout("setSuchbg();", 100);',"\n",
" }\n\n",
"//-->\n",
"</script>\n",
"</head>\n",
'<body onLoad="setStatus();">',"\n",
'<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>',"\n",
'<script language="JavaScript" src="/splan/overlib.js"><!-- overLIB (c) Erik Bosrup --></script>',"\n",
'<table class="stundenplanTabelle">',"\n",
" <tr>\n",
" <td></td>\n";
# wenn aktuelle Woche, aktuellen Tag herausfinden:
if($aktWoche == $schulwoche-1) {
my(@puffer) = gmtime(time());
# atuelles Datum im Foramt dd.mm.jjjj sichern
my($actDate) = sprintf("%02d.%02d.%02d", $puffer[3], $puffer[4]+1, $puffer[5]%100);
# Woche nach diesem Tag durchsuchen:
for(my($i) = 0; $i < $MAX_TAG; $i++) {
my($dayBuffer) = $day[$i];
substr($dayBuffer,0,3) = '';
# wenn gefunden Tag merken (die Nummer, nicht das Datum):
if($dayBuffer eq $actDate) { $actDay = $i; last }
}
}
for(my($i) = 0; $i < $MAX_TAG; $i++) { # Wochentage ausgeben
if($i == $actDay) { print ' <td class="stundenplanKopfAktuellerTag">',$day[$i],"</td>\n" }
else { print ' <td class="stundenplanKopf">',$day[$i],"</td>\n" }
}
print " </tr>\n";
for($stunde = 1; $stunde <= $MAX_STUNDE; $stunde++) {
print " <tr>\n",
' <td class="stundenZelle">',$stunde,"</td>\n"; # Stunden-Spalte ausgeben
for($tag = 1; $tag <= $MAX_TAG; $tag++) {
if($tag-1 == $actDay) { print ' <td class="unterrichtZelleAktuellerTag">',"\n" }
else { print ' <td class="unterrichtZelle">',"\n" }
if(defined($unterricht[$stunde][$tag])) {
my($str) = gMe4($stunde, $tag, 0, $zeile1, $zeile2, $zeile3, $schulwoche);
my($plusStr) = ' ';
if(defined($unterricht[$stunde][$tag][4])) { # wenn mehr als vier Einträge
my($input) = '';
for(my($eintrag) = 4; defined($unterricht[$stunde][$tag][$eintrag]); $eintrag += 4) {
$input = $input . gMe4($stunde,$tag,$eintrag,$zeile1,$zeile2,$zeile3,$schulwoche). '<hr>';
}
$input =~ s/'/;;;/g;
$input =~ s/"/\\'/g;
substr($input, length($input)-4, 4) = ""; # letztes <hr> entfernen
# hier fehlen überall Zeilensprünge, nicht damit Lesen schwerer fällt,
# sondern weil dieser String an overLIB übergeben wird (dem
# Tooltip-"Ding"). Und dieses "Tooltip"-Ding ist ein Aufruf einer
# Javascript Funktion.
# -> in Paramtern von Javascript-Funktion,.. darf man keine
# Zeielensprünge machen.
MAX_STUNDE
$plusStr = '<a class="plus" href="javascript:void(0);" onclick="return overlib(\''.$input. # Sorry
'\', FGCLASS, \'TooltipHintergrund\', BGCLASS, \'TooltipRahmen\', CAPTIONFONTCLASS, '.
'\'TooltipUeberschrift\', TEXTFONTCLASS, \'TooltipSchrift\', STICKY, CLOSECLICK, CAPTION,'.
' \''.$day[$tag-1].' '.$stunde.'. Stunde\', RIGHT, CLOSEFONT, \'Arial\', CLOSECOLOR, \'#D4D0C8\','.
' CLOSETITLE, \'schließt diese Box\', CLOSETEXT, \'x \', CLOSESIZE, \'10px\', WIDTH, 150, AUTOSTATUSCAP);"'.
' onmouseout="nd();">+</a>'; # CLOSEFONTCLASS, \'TooltipSchliessenText\', <- wurde als Klasse ignoriert! deswegen direkt drin ###
}
$str =~ s/\+/$plusStr/g;
print $str;
}#if
print ' </td>'."\n";
}#for
print ' </tr>'."\n";
}#for
print '</table>'."\n";
print '</body>'."\n";
print '</html>'."\n";
######################################################################## Hier wird die PDF erzeugt #
############################
my $ipaddr = $ENV{'REMOTE_ADDR'}; # Speichern der IP-Adresse
my $sta = 36;
my $wta = 130;
#my $len = $#unterricht+1;
# neue PDF-Datei erzeugen, Dateiname = SPLAN(IP-Adresse).pdf (z.B. SPLAN158.122.181.59.pdf)
my $pdf = new PDF::Create('filename' => "SPLAN$ipaddr.pdf",
'Version' => 1.2,
'PageMode' => 'UseOutlines',
'Author' => '_Projekt_Author',
'Title' => '_Projekt_Titel',
);
my $root = $pdf->new_page('MediaBox' => [ 0, 0, 842, 595 ]);
# Füge eine neue Seite hinzu, die ihre Attribute von $root erhält
my $page = $root->new_page;
# Definieren von 2 Schriftarten/Formatierungen
my $f1 = $pdf->font('Subtype' => 'Type1',
'Encoding' => 'WinAnsiEncoding',
'BaseFont' => 'Helvetica');
my $f2 = $pdf->font('Subtype' => 'Type1',
'Encoding' => 'WinAnsiEncoding',
'BaseFont' => 'Helvetica-Bold');
my $f3 = $pdf->font('Subtype' => 'Type1',
'Encoding' => 'WinAnsiEncoding',
'BaseFont' => 'Courier');
my $f4 = $pdf->font('Subtype' => 'Type1',
'Encoding' => 'WinAnsiEncoding',
'BaseFont' => 'Courier-Bold');
# Definieren einer Tabelle mit Inhalt
my $toc = $pdf->new_outline('Title' => 'Document',
'Destination' => $page);
$toc->new_outline('Title' => 'Section 1');
my $s2 = $toc->new_outline('Title' => 'Section 2',
'Status' => 'closed');
$s2->new_outline('Title' => 'Subsection 1');
#(vordefinierte Schriftart, Schriftgroesse, Position-X, Position-Y, "Text");
$page->stringc($f2, 12, 400, 568, "SPLAN $kategorie $suchbegriff Schulwoche: $schulwoche");
#Studenanzahl
for(my $i = 0;$i < 14;$i++)
{
if(0!=$i)
{
$page->stringc($f2, 10, 18, 554 - ($i * $sta), "$i");
}
}
# Header-Zeile
$page->line(25, 560, 25, 585);
$page->line(805, 560, 25, 560);
$page->line(805, 585, 805, 560);
$page->line(25, 585, 805, 585);
for(my $w = 0;$w < 6;$w++)
{
$page->line(25 + ($w * $wta), 540, 25 + ($w * $wta), 558);
$page->line(155 + ($w * $wta), 540, 25 + ($w * $wta), 540);
$page->line(155 + ($w * $wta), 558, 155 + ($w * $wta), 540);
$page->line(25 + ($w * $wta), 558, 155 + ($w * $wta), 558);
}
@wochentag = ("Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
my $wtindex = 0; # Wochentagindex
foreach my $wochentag (@wochentage)
{
$page->stringc($f4, 10, $wta * $wtindex + 88, 545, "$wochentag");
$wtindex++;
}
#Hier sollte irgendwie der @unterricht ausgegeben werden !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# foreach $irgend(@arrray)
#{
# $bula = \@irgend;
# $page->stringc($f4, 10,20 + 88, 545, "$unterricht[4][4][1]");
#}
# for my $ref1 (0..scalar(@unterricht)-1)
# {
# for my $ref2 (0..scalar(@{$unterricht[$ref1]})-1)
# {
# for my $ref3 (0..scalar(@{$unterricht[$ref1][$ref2]})-1)
# {
# for my $ref4 (0..scalar(@{$unterricht[$ref1][$ref2][$ref3]})-1)
# {
# $irgend=$irgend+20;
# $page->stringc($f3, 12, 40, 500 - ($irgend * 2), "@{$unterricht[$ref1][$ref2][$ref3]#[$ref4]}");
# }
# }
# }
#}
# my $point;
# for my $row(@unterricht)
# {
# for my $number(@{$row})
# {
# for my $elen({@$number})
# {
# my $string = join":",@$elem;
#
# $point = $point+10;
#
# $page->stringc($f2, 12, 400-$point, 568-$point, "$string");
# }
# }
# }
for(my $p = 0;$p < 6;$p++)
{
for(my $o = 1;$o < 14;$o++)
{
$page->stringc($f3, 8, 45 + ($p * $wta), 530 - (($o - 1) * $sta), "$unterricht[1][1][0][3]");
$page->stringc($f3, 8, 35 + ($p * $wta), 521 - (($o - 1) * $sta), "$unterricht[1][1][0][1]");
$page->stringc($f3, 8, 35 + ($p * $wta), 512 - (($o - 1) * $sta), "$unterricht[1][1][0][0]");
$page->stringc($f3, 8, 33 + ($p * $wta), 504 - (($o - 1) * $sta), "$unterricht[1][1][0][5]");
$page->line(25 + ($p * $wta), 538 - ($o * $sta), 25 + ($p * $wta), 574 - ($o * $sta));
$page->line(155 + ($p * $wta), 538 - ($o * $sta), 25 + ($p * $wta), 538 - ($o * $sta));
$page->line(155 + ($p * $wta), 574 - ($o * $sta), 155 + ($p * $wta), 538 - ($o * $sta));
$page->line(25 + ($p * $wta), 574 - ($o * $sta), 155 + ($p * $wta), 574 - ($o * $sta));
}
}
my $abstand=0;
my $counter=0;
# Footer-Zeile
$page->line(25, 15, 25, 60);
$page->line(805, 15, 25, 15);
$page->line(805, 60, 805, 15);
$page->line(25, 60, 805, 60);
# innerhalb von Footer
$page->line(125, 17, 125, 57);
$page->line(255, 17, 125, 17);
$page->line(255, 57, 255, 17);
$page->line(125, 57, 255, 57);
$page->stringc($f3,9,142,50,"Lehrer");
$page->stringc($f3,9,142,42,"Fach ");
$page->stringc($f3,9,142,34,"Raum ");
$page->stringc($f3,9,142,26,"Turnus");
#letzter Eintrag
$page->stringc($f2,9,145,5,"PDF erstellt mit PDF::Create (by Fabien Tassin)");
# Hinzufuegen einer neuen Seite
my $page2 = $root->new_page;
$page2->line(0, 0, 842, 595);
$page2->line(0, 595, 842, 0);
$toc->new_outline('Title' => 'Section 3');
$pdf->new_outline('Title' => 'Summary');
# Hinzufuegen der fehlenden PDF-Objekte, Footer und Schliessen der Datei
$pdf->close;
}
################################################################################
# gMe4() - Gibt die <= 4 Unterrichts-Einträge schön formatiert als #
# HTML-Tabelle zurück. #
# #
# Parameter: Stunde, Tag, Start-Eintrag, #
# was ausgegeben werden soll, #
# Damit meine ich Indizes im Array '@unterricht'! #
# -> nicht z.B. schreiben: "Klasse", "Raum", ...! #
# (in richtiger Reihenfolge) #
# Schulwoche #
# Rückgabewert: HTML-Tabelle in Form einer Zeichekette #
# #
# Vorsicht Schwindelgefahr!!! #
# ============================ #
################################################################################
sub gMe4 {
my($stunde) = shift(@_);
my($tag) = shift(@_);
my($eintrag) = shift(@_);
my(@zeile) = (shift(@_), shift(@_), shift(@_));
my($schulwoche) = shift(@_);
my(@kategorie) = ("Raum","_ERROR_","Lehrer","Klasse"); # "_ERROR_" kann normalerweise
# NIE! auftreten.
my($str) = '<table class="unterrichtsStundeTabelle">';
for(my($zeilenNr) = 0; $zeilenNr < 4; $zeilenNr++) { # für die 4 Zeilen/Daten
$str = sprintf("%s<tr>", $str); # Beginne neue Zeile
# Für die vier Einträge:
for(my($j) = 0; $j < 4 && defined($unterricht[$stunde][$tag][$eintrag+$j]); $j++) {
my($input); # weil '$input' die Gültigkeit in dieser Forschleife braucht.
# Wenn ich sie hier nicht bekannt geben würde, wäre sie nur für die
# kurze "Lebenszeit" der folgenden 'if' & 'else'-Verzweigungen vorhanden.
if($zeilenNr != 3) {
$input = &setToHTML($unterricht[$stunde][$tag][$eintrag+$j][$zeile[$zeilenNr]]);
if($zeile[$zeilenNr] != 1) {
# ich weiß, schlechter Programmierstil!:
$input = sprintf("<a href=\"javascript:imitUser('%s', '%s');\">%s</a>",
&setToHTML($kategorie[$zeile[$zeilenNr]]), $input, $input)
}
}
else {
$input = &setToHTML($unterricht[$stunde][$tag][$eintrag+$j][5]); # Wochenkennung
# wenn ich einen Leeren Wert zuweise mekert Perl, deswegen die Abfrage:
if($unterricht[$stunde][$tag][$eintrag+$j][4] ne "") # Gruppe
{ $input = sprintf("%s/%s", $input, &setToHTML($unterricht[$stunde][$tag][$eintrag+$j][4])) }
if($eintrag == 0 && $j == 3) { $input = $input . ' +' } # bei 4tem Eintrag "plus" anhängen,
$irgend # wirklich nur beim 4ten! Nicht in den
# Tooltip-Boxen dann auch noch.
}
$str = sprintf("%s<td class=\"unterrichtsStundeZelle\">%s</td>", $str, $input);
}#for
$str = sprintf("%s</tr>", $str);
}#for
$str = sprintf("%s</table>", $str);
return($str);
}
Datum: 09.04.2008-11:05
