From f41f2dca5252713085132b16728fb02e1093f3b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=2EK=C3=BCchel?= Date: Tue, 18 Nov 2014 12:23:24 +0100 Subject: [PATCH] add the option to sophomorix-print to generate custom classlists using LATEX and sophomorix.conf --- sophomorix-base/config/sophomorix.conf | 48 +++++ sophomorix-base/scripts/sophomorix-print | 212 +++++++++++++---------- 2 files changed, 164 insertions(+), 96 deletions(-) diff --git a/sophomorix-base/config/sophomorix.conf b/sophomorix-base/config/sophomorix.conf index 3ea1f085..887c6160 100644 --- a/sophomorix-base/config/sophomorix.conf +++ b/sophomorix-base/config/sophomorix.conf @@ -226,3 +226,51 @@ $moodle_url="https://moodle.bszleo.de/moodl/e"; # admins (Statt @ -> \@, Umlaut ae -> \"a usw. scharf S -> \ss) #$admins_print="Richard Strauss (richard.strauss\@wien.de)"; +############################################################################### +# Daten fuer Klassenlistendruck +# You can use these variables to customize your classlist +# You have to escape a backslash with a backslash and use single quotes. +############################################################################### + +## Any latex code before the table starts +#$print_cl_pretab='\section{Erklärung zur Nutzungsordnung} +#Ich wurde heute in die Nutzungsordnung zur Computer- und +#Internet-Nutzung eingewiesen. Mit den festgelegten Regeln bin ich +#einverstanden. Mir ist bekannt, dass die Schule den Datenverkehr +#protokolliert und durch Stichproben überprüft. Sollte ich gegen die +#Nutzungsregeln verstoßen, verliere ich meine Nutzungsberechtigung. Bei +#Verstoß gegen gesetzliche Bestimmungen sind weitere zivil- oder +#strafrechtliche Folgen nicht auszuschließen.'; +# +## start of the table, e.g. a longtable, tabular,etc. +#$print_cl_header='\begin{longtable}{|r|p{55mm}|p{76mm}|p{40mm}|} +#\hline +#\rule[-2mm]{0mm}{7mm}\textbf{Nr}& \textbf{Name, Vorname} & \textbf{Unterschrift} & \textbf{Datum} \\\\ +#\hline\hline +#\endhead'; +# +## routine to be printed in each row +#sub print_cl_row { +# my $LATEX=$_[0]; +# my $count=$_[1]; +# my $protokoll_zeile=$_[2]; +# ($klasse_protokoll, +# $name_protokoll, +# $loginname_protokoll, +# $passwort_protokoll, +# $geburtsdatum_protokoll +# )=split(/;/,$protokoll_zeile); +# +# my ($firstname,$surname)=split(/\s/,$name_protokoll); +# my $name=$surname.", ".$firstname; +# +# print $LATEX "\\rule[-2mm]{0mm}{10.7mm} $count & $name & & \\\\ \\hline \n"; +#} +# +## end of the table +#$print_cl_footer='\end{longtable}'; +# +## any latex code after the table +#$print_cl_posttab=' +#gez. die Schulleitung, Karlsruhe, den 18.11.2014 +#'; diff --git a/sophomorix-base/scripts/sophomorix-print b/sophomorix-base/scripts/sophomorix-print index 2b163372..73547534 100755 --- a/sophomorix-base/scripts/sophomorix-print +++ b/sophomorix-base/scripts/sophomorix-print @@ -90,6 +90,7 @@ my %schueler_im_system_id=(); my $schueler_protokoll_zeile=0; # Latex-Datei erstellen +my $LATEX; # file handler no bareword my $rand_bemerkung_lehrer=1; # 1=schon gesetzt my $anzahl_karten_pro_seite=0; my $anzahl_karten_pro_zeile=0; @@ -581,8 +582,8 @@ if($Conf::log_level>=3){ # =========================================================================== # *.tex-Datei öffnen -open(LATEX, - ">${DevelConf::druck_pfad}/${output_file_basename}.tex") || die "Fehler: $!"; +open($LATEX, ">", + "${DevelConf::druck_pfad}/${output_file_basename}.tex") || die "Fehler: $!"; if ($classlist ne ""){ # *.mediawiki-Datei öffnen @@ -604,7 +605,7 @@ open(WEBUNIXCSV, ">${DevelConf::druck_pfad}/${output_file_basename}_WebUntis-unix.csv") || die "Fehler: $!"; -print LATEX ('%% This preamble was created from sophomorix-print +print $LATEX ('%% This preamble was created from sophomorix-print \documentclass[11pt,fleqn,oneside,a4paper]{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} @@ -614,6 +615,7 @@ print LATEX ('%% This preamble was created from sophomorix-print \usepackage{graphicx} \usepackage{url} \usepackage{hyperref} +\usepackage{longtable} \pagestyle{fancy} %% Erst mal auf Einzelschüler stellen @@ -621,14 +623,14 @@ print LATEX ('%% This preamble was created from sophomorix-print '); -print LATEX ('\rhead{\bf \large Seite \thepage}'); +print $LATEX ('\rhead{\bf \large Seite \thepage}'); if ($gruppe ne "") { # Klassenangabe gemacht if ($classlist ne ""){ print MEDIAWIKI "===$gruppe===\n"; } - print LATEX (' + print $LATEX (' \chead{\LARGE \bf ',"$gruppe",'} '); } elsif ($classlist ne "") { @@ -636,21 +638,21 @@ if ($gruppe ne "") { print MEDIAWIKI "===$classlist===\n"; - print LATEX (' + print $LATEX (' \chead{\LARGE \bf ',"$classlist",'} '); } else { - print LATEX (' + print $LATEX (' \chead{\LARGE \bf Einzelschüler} '); } my $latex_schoolname=&latexize_string("$Conf::schul_name"); -print LATEX ('\lfoot{',"$latex_schoolname",'}',"\n"); -print LATEX ('\rfoot{'," ${output_file_basename}",'.pdf','}',"\n"); +print $LATEX ('\lfoot{',"$latex_schoolname",'}',"\n"); +print $LATEX ('\rfoot{'," ${output_file_basename}",'.pdf','}',"\n"); -print LATEX (' +print $LATEX (' \setlength{\voffset}{0mm} \setlength{\hoffset}{0mm} \setlength{\oddsidemargin}{0mm} @@ -829,9 +831,16 @@ if ($classlist ne ""){ print MEDIAWIKI "{|border=\"1\"\n"; print MEDIAWIKI "|Nr.\n|Name\n|SP1\n|SP2\n|SP3\n|SP4\n|SP5\n|SP6\n|SP7\n|-\n"; - print LATEX "\\begin{tabular}{|r|p{55mm}|p{116mm}|}\\hline \n"; - print LATEX "\\rule[-2mm]{0mm}{7mm}\\textbf{Nr}& \\textbf{Name, Vorname} & \\\\ \\hline\\hline + if(defined($Conf::print_cl_pretab)) { + print $LATEX $Conf::print_cl_pretab; + } + if(defined($Conf::print_cl_header)) { + print $LATEX $Conf::print_cl_header; + } else { + print $LATEX "\\begin{tabular}{|r|p{55mm}|p{116mm}|}\\hline \n"; + print $LATEX "\\rule[-2mm]{0mm}{7mm}\\textbf{Nr}& \\textbf{Name, Vorname} & \\\\ \\hline\\hline "; + } foreach $eintrag (@drucken_reihenfolge) { $count++; @@ -852,12 +861,23 @@ if ($classlist ne ""){ "in $klasse_protokoll \n"; } - print LATEX "\\rule[-2mm]{0mm}{6.7mm} $count & $name & \\\\ \\hline \n"; + if (defined(&Conf::print_cl_row)){ + &Conf::print_cl_row($LATEX,$count,$schueler_protokoll_zeile); + } else { + print $LATEX "\\rule[-2mm]{0mm}{6.7mm} $count & $name & \\\\ \\hline \n"; + } print MEDIAWIKI "|$count\n|$name\n|\n|\n|\n|\n|\n|\n|\n|-\n"; } - print LATEX "\\end{tabular} \n"; + if(defined($Conf::print_cl_footer)) { + print $LATEX $Conf::print_cl_footer; + } else { + print $LATEX "\\end{tabular} \n"; + } + if(defined($Conf::print_cl_posttab)) { + print $LATEX $Conf::print_cl_posttab; + } print MEDIAWIKI "|}"; @@ -934,12 +954,12 @@ if ($one_per_page==1){ my $latex_passwort_protokoll=&latexize_string($passwort_protokoll); # write header/contents of page - print LATEX '\chead{\LARGE \bf ', + print $LATEX '\chead{\LARGE \bf ', "$name_protokoll ($klasse_protokoll)",'}'; - print LATEX ('\addtocontents{toc}{', + print $LATEX ('\addtocontents{toc}{', "$name_protokoll", ' \dotfill \thepage \par}',"\n"); - print LATEX "\n"; + print $LATEX "\n"; # copy the template my $template_data=$template_content; @@ -948,77 +968,77 @@ if ($one_per_page==1){ $template_data=~s/\@\@user\@\@/${name_protokoll}/g; $template_data=~s/\@\@admins\@\@/${admins}/g; - print LATEX "$template_data \n\n"; + print $LATEX "$template_data \n\n"; - print LATEX ('\datenoneperpage'); + print $LATEX ('\datenoneperpage'); # 1 Name - print LATEX ('{',"$name_protokoll",'}'); + print $LATEX ('{',"$name_protokoll",'}'); # 2 Nicht genutzt - print LATEX ('{}'); + print $LATEX ('{}'); # 3 Klasse - print LATEX ('{',"Klasse: $klasse_protokoll",'}'); + print $LATEX ('{',"Klasse: $klasse_protokoll",'}'); # 4 Login - print LATEX ('{',"Login: \\texttt{$loginname_protokoll}",'}'); + print $LATEX ('{',"Login: \\texttt{$loginname_protokoll}",'}'); # 5 Passwort - print LATEX ('{',"Erst-Passwort: \\texttt{$latex_passwort_protokoll}",'}',"\n"); + print $LATEX ('{',"Erst-Passwort: \\texttt{$latex_passwort_protokoll}",'}',"\n"); # windows - print LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; - print LATEX "Anmeldung an einem Windowsrechner:\n\n"; - print LATEX "\\begin{tabbing}\n"; - print LATEX "\\qquad Benutzername:\\qquad \\= \\texttt{$loginname_protokoll} \\\\ \n"; - print LATEX "\\qquad Kennwort: \\> \\texttt{$latex_passwort_protokoll} \\\\ \n"; - print LATEX "\\qquad Domäne: \\> \\texttt{$smb_domain} \\\\ \n"; - print LATEX "\\end{tabbing}\n\n"; - print LATEX "\\vspace{-6mm}\n\n"; + print $LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; + print $LATEX "Anmeldung an einem Windowsrechner:\n\n"; + print $LATEX "\\begin{tabbing}\n"; + print $LATEX "\\qquad Benutzername:\\qquad \\= \\texttt{$loginname_protokoll} \\\\ \n"; + print $LATEX "\\qquad Kennwort: \\> \\texttt{$latex_passwort_protokoll} \\\\ \n"; + print $LATEX "\\qquad Domäne: \\> \\texttt{$smb_domain} \\\\ \n"; + print $LATEX "\\end{tabbing}\n\n"; + print $LATEX "\\vspace{-6mm}\n\n"; # linux - print LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; - print LATEX "Anmeldung an einem Linuxrechner:\n"; - print LATEX "\\begin{tabbing}\n"; - print LATEX "\\qquad Login:\\qquad\\qquad \\= \\texttt{$loginname_protokoll} \\\\ \n"; - print LATEX "\\qquad Passwort: \\> \\texttt{$latex_passwort_protokoll} \\\\ \n"; - print LATEX "\\end{tabbing}\n"; - print LATEX "\\vspace{-6mm}\n\n"; + print $LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; + print $LATEX "Anmeldung an einem Linuxrechner:\n"; + print $LATEX "\\begin{tabbing}\n"; + print $LATEX "\\qquad Login:\\qquad\\qquad \\= \\texttt{$loginname_protokoll} \\\\ \n"; + print $LATEX "\\qquad Passwort: \\> \\texttt{$latex_passwort_protokoll} \\\\ \n"; + print $LATEX "\\end{tabbing}\n"; + print $LATEX "\\vspace{-6mm}\n\n"; # schulkonsole - print LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; - print LATEX "Pädagogische Funktionen mit der Schulkonsole im Intranet:\n\n"; - print LATEX " URL: \\url{https://${server}:242}\n\n"; + print $LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; + print $LATEX "Pädagogische Funktionen mit der Schulkonsole im Intranet:\n\n"; + print $LATEX " URL: \\url{https://${server}:242}\n\n"; # horde - print LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; - print LATEX "Webmail mit Horde: \n\n"; - print LATEX " URL: \\url{https://${server_external}/horde3}\n\n"; + print $LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; + print $LATEX "Webmail mit Horde: \n\n"; + print $LATEX " URL: \\url{https://${server_external}/horde3}\n\n"; # ogo - #print LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; - #print LATEX " Groupware mit OpenGroupware: \n\n"; - #print LATEX " URL: \\url{https://${server_external}/OpenGroupware}\n\n"; + #print $LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; + #print $LATEX " Groupware mit OpenGroupware: \n\n"; + #print $LATEX " URL: \\url{https://${server_external}/OpenGroupware}\n\n"; # moodle - print LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; - print LATEX " Lernplattform mit Moodle: \n\n"; + print $LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; + print $LATEX " Lernplattform mit Moodle: \n\n"; if (not defined $Conf::moodle_url){ - print LATEX " URL: \\url{https://${server_external}/moodle}\n\n"; + print $LATEX " URL: \\url{https://${server_external}/moodle}\n\n"; } else { - print LATEX " URL: \\url{${Conf::moodle_url}}\n\n"; + print $LATEX " URL: \\url{${Conf::moodle_url}}\n\n"; } # phpmyadmin - #print LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; - #print LATEX " Datenbankzugriff mit phpmyadmin: \n\n"; - #print LATEX " URL: \\url{https://${server}/phpmyadmin}\n\n"; + #print $LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; + #print $LATEX " Datenbankzugriff mit phpmyadmin: \n\n"; + #print $LATEX " URL: \\url{https://${server}/phpmyadmin}\n\n"; # websvn - #print LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; - #print LATEX " Versionskontrolle mit svn per Webfrontend: \n\n"; - #print LATEX " URL: \\url{https://${server}/websvn}\n\n"; + #print $LATEX "\\rule{\\linewidth}{0.25mm} \n\n"; + #print $LATEX " Versionskontrolle mit svn per Webfrontend: \n\n"; + #print $LATEX " URL: \\url{https://${server}/websvn}\n\n"; - print LATEX "\\newpage \n\n"; + print $LATEX "\\newpage \n\n"; } } # End 1 PER PAGE @@ -1091,12 +1111,12 @@ if ($one_per_page==0 and $classlist eq ""){ # Nicht der allererste Eintrag # Auffüllen der Seite while ($anzahl_karten_pro_seite < $entries_per_page){ - print LATEX ('\daten{\rule[2mm]{30mm}{0.5mm}}{}{}{}{}'); - print LATEX ("\n"); + print $LATEX ('\daten{\rule[2mm]{30mm}{0.5mm}}{}{}{}{}'); + print $LATEX ("\n"); $anzahl_karten_pro_seite++; } # Neue Seite beginnen - print LATEX ("\n",'\newpage',"\n\n"); + print $LATEX ("\n",'\newpage',"\n\n"); # Katenzähler/Seite auf 0 $anzahl_karten_pro_seite=0; } @@ -1107,8 +1127,8 @@ if ($one_per_page==0 and $classlist eq ""){ # alles in Großbuchstaben $klasse_head=~tr/a-z/A-Z/; # Kopfzeileneintrag - print LATEX ('\chead{\LARGE \bf ',"$klasse_head",'}'); - print LATEX "\n"; + print $LATEX ('\chead{\LARGE \bf ',"$klasse_head",'}'); + print $LATEX "\n"; # Verantwortlicher Lehrer ermitteln # $edv_lehrer_foot @@ -1116,15 +1136,15 @@ if ($one_per_page==0 and $classlist eq ""){ &Sophomorix::SophomorixPgLdap::fetchadmins_from_adminclass($klasse_protokoll); $edv_lehrer_foot = join(", ",@lehrerliste); - print LATEX ('\cfoot{\bf ', + print $LATEX ('\cfoot{\bf ', "$edv_lehrer_foot", '}'); - print LATEX "\n"; + print $LATEX "\n"; # Eintrag in das Inhaltsverzeichnis - print LATEX ('\addtocontents{toc}{', + print $LATEX ('\addtocontents{toc}{', "$klasse_head", ' \dotfill \thepage \par}',"\n"); - print LATEX "\n"; + print $LATEX "\n"; ####################################################################### } else { # Wenn Einzelschüler @@ -1137,26 +1157,26 @@ if ($one_per_page==0 and $classlist eq ""){ $rand_bemerkung_lehrer=0; # Randbemerkung wurde nicht gemacht # Auffüllen der Seite while ($anzahl_karten_pro_seite < $entries_per_page){ - print LATEX ('\daten{\rule[1mm]{30mm}{0.5mm}}{}{}{}{}'); - print LATEX ("\n"); + print $LATEX ('\daten{\rule[1mm]{30mm}{0.5mm}}{}{}{}{}'); + print $LATEX ("\n"); $anzahl_karten_pro_seite++; } # Neue Seite beginnen - print LATEX ("\n",'\newpage',"\n\n"); + print $LATEX ("\n",'\newpage',"\n\n"); # Kartenzähler/Seite auf 0 $anzahl_karten_pro_seite=0; # Kartenzähler/Zeile auf 0 $anzahl_karten_pro_zeile=0; # Kopfzeileneintrag - print LATEX ('\chead{\LARGE \bf ',"Einzelschüler",'}'); - print LATEX "\n"; - print LATEX ('\cfoot{}'); - print LATEX "\n"; + print $LATEX ('\chead{\LARGE \bf ',"Einzelschüler",'}'); + print $LATEX "\n"; + print $LATEX ('\cfoot{}'); + print $LATEX "\n"; # Eintrag in das Inhaltsverzeichnis - print LATEX ('\addtocontents{toc}{\textbf{', + print $LATEX ('\addtocontents{toc}{\textbf{', "Einzelschüler", '} \dotfill \thepage \par}'); - print LATEX "\n"; + print $LATEX "\n"; # EDV-Lehrerangabe machen, Zähler auf 0 setzen $rand_bemerkung_lehrer=0; # Randbemerkung wurde nicht gemacht } elsif ($eintrag_typ_alt==1) { @@ -1166,14 +1186,14 @@ if ($one_per_page==0 and $classlist eq ""){ # Auffüllen der Zeile if ($anzahl_karten_pro_zeile == 4) {$rand_bemerkung_lehrer=0}; while ($anzahl_karten_pro_zeile !=4) { - print LATEX ('\daten{\rule[2mm]{30mm}{0.5mm}}{}{}{}{}'); - print LATEX ("\n"); + print $LATEX ('\daten{\rule[2mm]{30mm}{0.5mm}}{}{}{}{}'); + print $LATEX ("\n"); $anzahl_karten_pro_seite++; $anzahl_karten_pro_zeile++; $rand_bemerkung_lehrer=0; # Randbemerkung wurde nicht gemacht } if($anzahl_karten_pro_seite == $entries_per_page) { - print LATEX ("\n\n",'\newpage',"\n\n"); + print $LATEX ("\n\n",'\newpage',"\n\n"); $anzahl_karten_pro_seite=0; } $anzahl_karten_pro_zeile=0; @@ -1198,7 +1218,7 @@ if ($one_per_page==0 and $classlist eq ""){ $edv_lehrer_rand = join(",",@lehrerliste); # Verantwortlichen Lehrer einsetzten - print LATEX ("\n", + print $LATEX ("\n", '\edvlehrer{', "$edv_lehrer_rand", '}', @@ -1208,17 +1228,17 @@ if ($one_per_page==0 and $classlist eq ""){ # Datensatz anhängen - print LATEX ('\daten'); + print $LATEX ('\daten'); # 1 Name - print LATEX ('{',"$name_protokoll",'}'); + print $LATEX ('{',"$name_protokoll",'}'); # 2 Nicht genutzt - print LATEX ('{}'); + print $LATEX ('{}'); # 3 Klasse - print LATEX ('{',"Klasse: $klasse_protokoll",'}'); + print $LATEX ('{',"Klasse: $klasse_protokoll",'}'); # 4 Login - print LATEX ('{',"Login: \\texttt{$loginname_protokoll}",'}'); + print $LATEX ('{',"Login: \\texttt{$loginname_protokoll}",'}'); # 5 Passwort - print LATEX ('{',"Erst-Passwort: \\texttt{$latex_passwort_protokoll}",'}',"\n"); + print $LATEX ('{',"Erst-Passwort: \\texttt{$latex_passwort_protokoll}",'}',"\n"); # Eintag ferig, Zähler erhöhen $anzahl_karten_pro_seite++; $anzahl_karten_pro_zeile++; @@ -1242,15 +1262,15 @@ if ($one_per_page==0 and $classlist eq ""){ $name_protokoll; } } # Ende foreach -# Nun sind alle Schüler in der LATEX-Datei eingelesen +# Nun sind alle Schüler in der $LATEX-Datei eingelesen # Allerletzte Seite (vor Inhaltsverzeichnis noch auffüllen) while ($anzahl_karten_pro_seite < $entries_per_page){ - print LATEX ('\daten{\rule[2mm]{30mm}{0.5mm}}{}{}{}{}'); - print LATEX ("\n"); + print $LATEX ('\daten{\rule[2mm]{30mm}{0.5mm}}{}{}{}{}'); + print $LATEX ("\n"); $anzahl_karten_pro_seite++; } @@ -1259,8 +1279,8 @@ while ($anzahl_karten_pro_seite < $entries_per_page){ # =========================================================================== # Letze Seite mit leeren Einträgen füllen while ($anzahl_karten_pro_seite < $entries_per_page){ - print LATEX ('\daten{\rule[2mm]{30mm}{0.5mm}}{}{}{}{}'); - print LATEX ("\n"); + print $LATEX ('\daten{\rule[2mm]{30mm}{0.5mm}}{}{}{}{}'); + print $LATEX ("\n"); $anzahl_karten_pro_seite++; } @@ -1288,16 +1308,16 @@ while ($anzahl_karten_pro_seite < $entries_per_page){ # Dokument beenden und Inhaltsverzeichnis schreiben if ($gruppe ne "") { # Klassenangabe gemacht - print LATEX (' + print $LATEX (' \end{document} '); } elsif ($classlist ne "") { # Klassenangabe gemacht - print LATEX (' + print $LATEX (' \end{document} '); } else { - print LATEX (' + print $LATEX (' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Hier enden die erzeugten Einträge @@ -1332,7 +1352,7 @@ if ($classlist ne ""){ close(MEDIAWIKI); } # Latex-Dokument schließen -close(LATEX); +close($LATEX); # CSV-Dokument schließen close(CSV); close(UNIXCSV);