Benutzer:Kirmse/flehrer01
Zur Navigation springen
Zur Suche springen
das Script
#!/usr/bin/perl -w use strict; # ---------------- Konfigurationsbereich ---------------------- # Anzahl der Spalten in der Tabelle fuer die Auswahl der Klassen my $anzspalten = 6; # das Kommando, dass an den LDAP abgesetzt wird my $kommando = "ich werden den doch hoffentlich noch bekommen :)"; # ---------------- Initialisierungsbereich -------------------- my ($lehrer,@daten,%schueler,$klassen,$teilnehmer,$projekte); my ($datei1,$datei2,$zeit,$liste1,$liste2,$formular); # wir basteln uns eine Zeitmarkierung z.B. 2005-11-5--9-27 my ($sek,$min,$st,$tag,$monat,$jahr,$wt,$tj,$sz) = localtime(time); $zeit = ($jahr+1900).'-'.($monat+1).'-'.$tag.'--'.$st.'-'.$min; # der Dateiname fuer die Zuordnung Schueler-Klasse $datei1 = 'schueler.'.$zeit.'.txt'; # der Dateiname fuer die Zuordnung Projektgruppe-Klasse $datei2 = 'teilnehmer.'.$zeit.'.txt'; # ---------------- Hauptprogramm ------------------------------ # es holt sich das Login des Lehrers (aus der Umgebungsvariablen?) # $lehrer = ... # es setzt ein Shellkommando an den LDAP ab @daten = &hole_daten($kommando); # es erstellt eine Schülerliste (Login -> Klasse) %schueler = &erstelle_schuelerliste(@daten); # diese Schülerliste wird abgespeichert &speichern_schuelerliste($datei1,%schueler); # es erstellt eine Klassenliste (z.B. 5a, 5b, 6a, ...) $liste1 = &erstelle_klassenliste(%schueler); # es erstellt ein Formular $formular = &erstelle_formular($liste1,$anzspalten); print $formular; # ---------------- Prozeduren --------------------------------- #-------------------------------------------------------------------- # Funktion: holt mit einem Shell-Aufruf die Daten aus dem LDAP # Aufruf: @daten = &hole_ldif-Daten($kommando); # Input: der Shellaufruf als String # Output: quasi ein "LDIF-File" als Liste # Bemerk.: Shellaufruf mit eval, d.h. kein Abbruch bei Fehler # : !!! z.Zeit einfach ein passwd-Aufruf als Dummy !!! # Update: 12.11.2005 #-------------------------------------------------------------------- sub hole_daten { my $kommando = shift; # es wird hier als Dummy erstmal eine LDIF-Datei eingelesen. # solange die nicht zur Verfügung steht, eine passwd open (DATEI,'<passwd') or die "passwd konnte nicht geoeffnet werden"; my @daten = <DATEI>; close DATEI; return @daten } #-------------------------------------------------------------------- # Funktion: holt aus dem ldif-File die Logins und die Klasse # Aufruf: %schueler = &erstelle_schuelerliste_aus_ldif(@daten); # Input: das ldif-file als Liste # Output: einen Hash %schueler Login -> Klasse # Bemerk.: derzeit nicht eingebunden, es ist nur eine # Vermutung, dass das LDIF so aussieht # Update: 12.11.2005 #-------------------------------------------------------------------- sub erstelle_schuelerliste_aus_ldif { my @daten = @_; my ($login,$klasse,%schueler); # fuer jede Zeile der Daten tue foreach my $zeile (@daten) { # wenn die Zeile mit gecos beginnt, dann if ($zeile =~ /^gecos:(.*)$/) { # zerlege den Klammerausdruck beim Komma in Login und Klasse ($login,$klasse) = split ',' , $1; # erstelle die Zuordnung Login -> Klasse (Hash: %schueler) $schueler{$login} = $klasse; } } # den Hash (die Zuordnung) %schueler geben wir zurueck return %schueler } #-------------------------------------------------------------------- # Funktion: holt aus der passwd die Logins und die Klasse # Aufruf: %schueler = &erstelle_schuelerliste(@daten); # Input: die passwd als Liste: @daten # Output: einen Hash %schueler Login -> Klasse # Bemerk.: hat nur Dummy-funktion, da kein LDIF-file zur Verfuegung # Update: 10.11.2005 #-------------------------------------------------------------------- sub erstelle_schuelerliste { my @daten = @_; my ($login,$klasse,%schueler,@temp); # fuer jede Zeile der Daten tue foreach my $zeile (@daten) { # wir zerlegen die Zeile @temp = split ':', $zeile; # wenn die Zeile mit gecos beginnt, dann if ($temp[3] == 102) { # zerlege den Klammerausdruck beim Komma in Login und Klasse ($login,$klasse) = split ',' , $temp[4]; # erstelle die Zuordnung Login -> Klasse (Hash: %schueler) if (defined($klasse)) { $schueler{$login} = $klasse } } } # den Hash (die Zuordnung) %schueler geben wir zurueck return %schueler } #-------------------------------------------------------------------- # Funktion: speichert den Hash %schueler # Aufruf: &speichern_schuelerliste(%schueler); # Input: das ldif-file als Liste # Output: enen Hash %schueler Login -> Klasse # Bemerk.: hat nur Dummy-funktion, da kein LDIF-file zur Verfuegung # Update: 10.11.2005 #-------------------------------------------------------------------- sub speichern_schuelerliste { my $datei = shift; my %schueler = @_; # oeffne die Datei $datei zum schreiben oder Abbruch mit Fehlermeldung open (DATEI,">$datei") or die "die Datei $datei konnte nicht geschrieben werden.\n$!"; # fuer jeden User des Hashs tue foreach my $user (keys %schueler) { # schreibe in die Datei das Login ein Leerzeichen und seine Klasse print DATEI $user, ' ', $schueler{$user}, "\n" } # schliesse die Datei close DATEI; } sub erstelle_klassenliste { my %schueler = @_; my %klassen = (); my $liste = ""; my $klasse = ""; # fuer jeden Schueler des Hashs tue foreach my $user (keys %schueler) { # speichere die Klasse des Schuelers in $klasse $klasse = $schueler{$user}; # bringe die Klasse in den Hash %klassen (vernichte Doubletten) $klassen{$klasse} = 1; } # fuer jede Klasse aus dem Hash %klassen foreach my $klasse (keys %klassen) { # hänge den Schluessel (also die Klasse) und ein Komma an $liste $liste .= $klasse.',' } # das letzte Komma war zuviel, also weg chop($liste); # gibt diesen String mit den Klassen zurueck return $liste } sub erstelle_formular { my $liste = shift; my $AnzSp = shift; my $header = "Content-type: text/html\n\n"; my $formular = ""; # das Formular wird als HERE-Dokument definiert. # dieses geht bis "ENDE", danach wird die Tabelle fuer die # Klassen gebaut. Dieses HERE-Dokument ist reines HTML! $formular .= <<ENDE;
jetzt kommt leider Murks, weil das HERE-Dokument nicht richtig angezeigt wird (wegen den HTML-Befehlen). Da muss ich mir doch noch was einfallen lassen.
ein Screenshot
--Kirmse 00:32, 13. Nov 2005 (CET)