Symbolfoto
  Menü aufklappen     TU Start
Geselliges und Stammtischplaner

Chorstammtisch

Nach der Dienstagsprobe gibt es einen regelmäßigen Chorstammtisch, der in den letzten Semestern im Quartier stattfindet. Dort sind normalerweise ab 20:45 Uhr ein paar Tische für uns reserviert, so dass wir uns dem edlen Gerstensaft, den leckeren Speisen oder auch nur dem - während der Probe mühsam unterdrückten - Geplapper hingeben können.

(Wenn es im Sommer auch noch spät zum Draußen-Sitzen einlädt, könnte auch die Terasse des Herman's mal wieder locken…)

Während der chor-freien Zeit (manchmal auch ‚Semesterferien’ genannt) gibt es im Prinzip zur gleichen Zeit (Dienstags, 19:30 Uhr) einen Ferienstammtisch. Eine Info-Box (auf der Startseite) zeigt jeweils den aktuellen Status (Teilnehmerliste) und den wechselnden Treffpunkt dieses Ferienstammtischs an.

 

Der Stammtischplaner

5.4 umgesetzt werden // Update: 26.03.2018 - Anpassung für UTF-8 (andere Ersetzungen, keine für Umlaute) // Funktion nicht doppelt definieren! if (!function_exists('WikiFormatString')) { // Globale Variablen für die WikiFormat-Erkennung $lastline = ""; // wird u.U. für Folgezeilen-Verkettung benutzt (erst verketten, dann auswerten) $isintable = 0; // Gibt an, ob eine Tabelle begonnen wurde (1 = erste Tabelle; 2= zweite, eingebettete Tabelle...) $isinlist = 0; // Gibt an, ob in Liste (und in welcher Listen-Ebene) $maxstrlen = 300000; // Gibt die maximale Stringlänge and (die praktisch hoffentlich nicht überschritten wird) /** * Diese Methode liefert aus einer Zeile in Wiki-Syntax eine formatierte HTML-Zeile zurück * (oder Leerstring, wenn Folgezeile berücksichtigt werden muss). * $withparagraph kann als "false" übergeben werden, wenn nur die allgemeine Formatierung ersetzt werden soll! */ function WikiFormatString( $line, $withparagraph = TRUE ) { global $lastline; global $isintable; global $isinlist; global $maxstrlen; if ($lastline != "") { $hline = $lastline.$line; } else { $hline = $line; } if (substr($hline, -2) == ' _') { // Folgezeile gefordert? // Diese Zeile (ohne Fortsetzungszeichen) merken und auf die nächste Zeile warten $lastline = substr($hline, 0, -2); $hline = ""; } else { // Zeile analysieren! $hline = htmlentities($hline, ENT_COMPAT | ENT_HTML401, 'UTF-8'); // Step 1: Suchmuster, die mit ganzen Zeilen zu tun haben! $suchmuster = array('/^= (\S.*\S) =$/', // Heading 1 (i.e.: Zeilenanfang,= ,Text, =,Zeilenende) '/^== (\S.*\S) ==$/', // Heading 2 (i.e.: Zeilenanfang,== ,Text, ==,Zeilenende) '/^=== (\S.*\S) ===$/', // Heading 3 (i.e.: Zeilenanfang,=== ,Text, ===,Zeilenende) '/^\[\[Anchor:\s*(\S.*\S)\s*\]\]$/i', // Anchor (oder auch anchor, nach dem Doppelpunkt sind Leerzeichen erlaubt) '/^-----.*$/', // Horizontal Ruler #1 (i.e: mindestens 5 Striche am Zeilenanfang, Rest wird ignoriert!) '/^=====.*$/'); // Horizontal Ruler #2 (i.e: mindestens 5 Dopp.-Striche am Zeilenanfang, Rest wird ignoriert!) $ersetzung = array('

$1

', '

$1

', '

$1

', '', '
', '
'); $hline = preg_replace($suchmuster, $ersetzung, $hline); // Step 2: Suchmuster, die eine (SHORT-)Tabelle beginnen (beeinflusst die Folgezeilen!) // (SHORTTABLE ist eine zweispaltige Tabelle in der die Spalten durch senkr. Striche | getrennt sind) $suchmuster = array('/^SHORTTABLE$/', // Kurztabelle ohne CSS-Format '/^SHORTTABLE\s*c:\s*(\S.*?\S)\s*$/'); // Kurztabelle mit Format (i.e.: SHORTTABLE c:) $ersetzung = array('', '
'); $vstr = $hline; //$anzahl = 0; //$hline = preg_replace($suchmuster, $ersetzung, $hline, -1, $anzahl); $hline = preg_replace($suchmuster, $ersetzung, $hline); //echo "

Anzahl Tabellenersetzungen = $anzahl

"; //if ($anzahl > 0) { if ($hline != $vstr) { // ab jetzt Table Formate prüfen! $isintable = 1; } //echo "

Anzahl Is in Tabelle = $isintable

"; // Step 3: Suchmuster, die Konstukte mit [[ ]] ersetzen $suchmuster = array('/\[\[Image:\s*(.*?)\s*\|(.*?)\|(.*?)x(.*?)\|c:(.*?)\]\]/', // Image mit '/\[\[Image:\s*(.*?)\s*\|(.*?)\|(.*?)x(.*?)\|(.*?)\]\]/', // Image mit '/\[\[+(?=.*?http:)(.*?)\|(.*?)\]\]/', // externer Link '/\[\[c:\s*(\S.*?\S)\s*\|\s*(\S.*?\S)\s*\]\]/', // Bereich mit CSS Format (span) '/\[\[(.*?)\|(.*?)\]\]/', // Link mit anderem Text '/\[\[(.*?)\]\]/'); // Link mit gleichem Text $ersetzung = array('$2', '$2', '$2', '$2', '$2', '$1'); // Ersetzung nicht direkt, damit Schachtelung erhalten bleibt! #echo "

Gesamt: $hline

\n"; while ( (strpos($hline,"[[") !== false) && (strpos($hline,"]]") !== false) ) { // Solange es mindestens ein Klammerpaar gibt $i = 0; $startpos = $maxstrlen; $endpos = -1; while ($i < (strlen($hline))) { if ($endpos == -1) { if (substr($hline,$i,2) == "[[") { $startpos = $i; } #if (substr($hline,$i,2) == "]]") { $endpos = $i; } } if ( ($endpos == -1) && ($startpos != $maxstrlen) ) { if (substr($hline,$i,2) == "]]") { $endpos = $i; } } $i++; } if (($startpos == $maxstrlen) || ($endpos == -1)) { #echo "

Fehler: Start = $startpos, Ende = $endpos

\n"; break; } $vorstr = substr($hline,0,$startpos); $nachstr = substr($hline,$endpos+2); $wikistr = substr($hline,$startpos,$endpos-$startpos+2); #echo "

Parts: '$vorstr '$wikistr' $nachstr

\n"; $hline = $vorstr.preg_replace($suchmuster, $ersetzung, $wikistr).$nachstr; #echo "

Neu: '$hline

\n"; } //$hline = preg_replace($suchmuster, $ersetzung, $hline); if ($isintable > 0) { // Tabllenformate prüfen? //echo "Ja, isintable!"; // Step 4a: Tabellenende? $suchmuster = array('/^ENDTABLE$/'); // Tabellenende ? $ersetzung = array('
'); $vstr = $hline; //$anzahl = 0; //$hline = preg_replace($suchmuster, $ersetzung, $hline, -1, $anzahl); $hline = preg_replace($suchmuster, $ersetzung, $hline); //if ($anzahl > 0) { if ($hline != $vstr) { // ab jetzt Table beendet! $isintable = 0; } // Step 4b: Suchmuster, für eine Tabellenzeile $suchmuster = array('/^(?!<)(\S.*?\S*)\s*(?=\|)/', // Anfang mehrspaltige Tabellenzeile (i.e.: Zeilenanfang, Textteil,'|') '/\|\s*(\S.*?\S*)\s*(?=\|)/', // Mittelzelle in Tabellenzeile (i.e.: '|', Textteil, '|') '/\|\s*(\S.*?\S*)$/'); // Ende mehrspaltige Tabellenzeile (i.e.: '|', Textteil, Zeilenende) $ersetzung = array('$1', '$1', '$1'); $hline = preg_replace($suchmuster, $ersetzung, $hline); } // Step 5: Suchmuster für Listen // Default ebene, falls keine Listenersetzung greift! $neuelistebene = 0; // Von den folgenden Ersetzungen kann in einer Zeile jeweils nur eine zutreffen. Zum Schluß werden die nötigen //
    oder
Tags ergänzt um von der alten Listenebene (aus isinlist) zur neuen Ebene zukommen! $vstr = $hline; $suchmuster = '/^\*\s+(\S.*?\S*)\s*$/'; $ersetzung = '
  • $1'; //$anzahl = 0; //$hline = preg_replace($suchmuster, $ersetzung, $hline, -1, $anzahl); $hline = preg_replace($suchmuster, $ersetzung, $hline); //if ($anzahl > 0) { if ($hline != $vstr) { $neuelistebene = 1; } $vstr = $hline; //$anzahl = 0; //$hline = preg_replace($suchmuster, $ersetzung, $hline, -1, $anzahl); $suchmuster = '/^\*\*\s+(\S.*?\S*)\s*$/'; $hline = preg_replace($suchmuster, $ersetzung, $hline); //if ($anzahl > 0) { if ($hline != $vstr) { $neuelistebene = 2; } $vstr = $hline; //$anzahl = 0; //$hline = preg_replace($suchmuster, $ersetzung, $hline, -1, $anzahl); $suchmuster = '/^\*\*\*\s+(\S.*?\S*)\s*$/'; $hline = preg_replace($suchmuster, $ersetzung, $hline); //if ($anzahl > 0) { if ($hline != $vstr) { $neuelistebene = 3; } $vstr = $hline; //$anzahl = 0; //$hline = preg_replace($suchmuster, $ersetzung, $hline, -1, $anzahl); $suchmuster = '/^\*\*\*\*\s+(\S.*?\S*)\s*$/'; $hline = preg_replace($suchmuster, $ersetzung, $hline); //if ($anzahl > 0) { if ($hline != $vstr) { $neuelistebene = 4; } // Jetzt Ebenausgleich zufügen! $einrueckstr = ""; $ausrueckstr = ""; if ($neuelistebene > $isinlist) { $einrueckstr = str_repeat("
      ",$neuelistebene - $isinlist)."\n"; } elseif ($isinlist > $neuelistebene) { if ($neuelistebene == 0) { $ausrueckstr = "".str_repeat("
    ",$isinlist - $neuelistebene)."\n"; } else { $ausrueckstr = str_repeat("",$isinlist - $neuelistebene)."\n"; } } if (($isinlist == $neuelistebene) && ($neuelistebene != 0)) { // Ebene unverändert, dann Listenpunkt abschließen $hline = "
  • \n".$hline; } $isinlist = $neuelistebene; // neue Ebene für nächste Zeile merken $hline = $einrueckstr.$hline; // Die nächsten Ersetzungen nur durchführen wenn Paragraphen gefordert sind! if ($withparagraph) { // Step 6: Komplett CSS-formatierte Absätze $hline = preg_replace('/^c:\s*(\S.*?\S)\s*\|\s*(\S.*?\S)\s*$/','

    $2

    ', $hline); // Step 7: Zeilen, die nicht
    • >
      leer oder schon als

      , formatiert sind, als Standardparagraph umrahmen $hline = preg_replace('%^(?!\s*<\/a>|

      |$1

      ', $hline); } // Nach der Paragraph-Erkennung den Ausrückstring davorsetzen! $hline = $ausrueckstr.$hline; // Step 8: Kurzformatierungen ersetzen /* $suchmuster = array('/(\s|^)\*@(\S.*?\S)@\*(\s|$)/i', // fett + rot '/(\s|^)\*_(\S.*?\S)_\*(\s|$)/i', // fett + kursiv '/(\s|^)\*(\S.*?\S)\*(\s|$)/i', // fett '/(\s|^)_(\S.*?\S)_(\s|$)/i', // kursiv '/(\s|^)@(\S.*?\S)@(\s|$)/i', // rot '/__/', // Geschütztes Leerzeichen '/\^\^/'); // Zeilenumbruch
      $ersetzung = array('$1$2$3', '$1$2$3', '$1$2$3', '$1$2$3', '$1$2$3', ' ', '
      '); */ $suchmuster = array('/__/', // Geschütztes Leerzeichen '/(?<=\s|^|[(";>])\*@(\S.*?\S)@\*(?=\s|$|[<.,!?")&])/', // fett + rot '/(?<=\s|^|[(";>])\*_(\S.*?\S)_\*(?=\s|$|[<.,!?")&])/', // fett + kursiv '/(?<=\s|^|[(";>])\*(\S.*?\S)\*(?=\s|$|[<.,!?")&])/', // fett '/(?<=\s|^|[(";>])_(\S.*?\S)_(?=\s|$|[<.,!?")&])/', // kursiv '/(?<=\s|^|[(";>])@(\S.*?\S)@(?=\s|$|[<.,!?")&])/', // rot '/\^\^/'); // Zeilenumbruch
      $ersetzung = array(' ', '$1', '$1', '$1', '$1', '$1', '
      '); $hline = preg_replace($suchmuster, $ersetzung, $hline); $ret = $hline; $lastline = ""; } // Zeilenumbruch nur für die HTML-Ausgabe - falls es jemand sieht... if ($hline != "") { $ret = $hline."\n"; } return $ret; } } ?> --------------------

      \n"; #echo "
      ";
      #print_r ($_POST);
      #echo "
      "; #echo "

      --------------------

      \n"; #echo "
      ";
      #print_r ($_SERVER);
      #echo "
      "; #echo "

      --------------------

      \n"; // ============================= Initialisierungen aus Pagewizard ======================================= // zu ersetzende Konstanten aus PageWizard $filename = "stammtisch.txt"; // Dateiname auf Textfile mit den Stammtischdaten $logfilename = "$$logfilename$$"; $daystep = 7; // Vorwärts step (7 = Woche, 14 = 2 Wochen) # $resultpage = "$$resultpage$$"; // jetzt die Sprachauswahl! $language = "de"; // ============================= weitere Initialisierungen ======================================= $dow = ""; // Day of week; used later $ownpath = basename($_SERVER["SCRIPT_NAME"]); // Seiten-Adresse für Formular-Action #echo "

      Mein Dateiname: $ownpath

      \n"; #echo "

      --------------------

      \n"; // ============================= Beginn Textdefinitionen ======================================= if ($language == "en") { $btnreg = "I'll take part"; $btndereg = "I won't be there"; $btndel = "Delete"; $btnmsg = "Leave Message"; $labelname = "Participant (e.g. first name):"; $labelnote = "Note (optional) or message (click below):"; $labeldate = "Message expiration date
      or meeting date (optional):"; $txtnextmeet = "Next meeting:"; $txtparticipant = "Participants"; $txtnoparticpant = "Deregistered"; $txtmessage = "Messages"; $txtannounce = "Announcements"; $txtnoteplus = "Note"; $txtnoteminus = "Note"; $txtexpires = "Expires"; $txtparticip = "participating"; $txtabsent = "absent"; $txtdate = "Date"; $msgnote = "Note:"; $msgempty = "No participants registered yet!"; $msgstepping = "Stepped to next meeting date, list of participants updated!!"; $msgnotechanged = "changed note!"; $msgregistering = "Registered:"; $msgregistered = "already registered!"; $msgderegistered = "deregistered!"; $msgderegfinally = "deregistered finally!"; $msgderegadvance = "deregistered in advance."; $msgalreadydereg = "already deregistered!"; $msgderegagain = "deregistered again!"; $msgerr_forminput = "Please fix input errors:"; $msgerrderegadv = "Please specify note when deregistering in advance!"; $msgerr_noname = "Name not specified (required input)!"; $msgerr_nonote = "Note not specified (message function requires message text)!"; $msgerr_date = "Invalid date "; $errdate[1] = "(illegal characters or format; allowed: 'DD.MM.YYYY', 'DD.MM.YY' or 'DD.MM.')!"; $errdate[2] = "(is not a valid date; e.g. not existing day/month)!"; $errdate[3] = "(date should be specified for 'next meeting' or another meeting in the future)!"; $errdate[4] = "(wrong day-of-week: "; $errdate[5] = "(not a meeting date; try other week before or after)!"; $errdate[6] = "(date is too far ahead; use message function instead)!"; $errdate[7] = "(date is in the past; message will never be displayed)!"; $weekday[0] = "Sunday"; $weekday[1] = "Monday"; $weekday[2] = "Tuesday"; $weekday[3] = "Wednesday"; $weekday[4] = "Thursday"; $weekday[5] = "Friday"; $weekday[6] = "Saturday"; } else { $btnreg = "Zusagen"; $btndereg = "Absagen"; $btndel = "Löschen"; $btnmsg = "Nachricht hinterlassen"; $labelname = "Teilnehmer (z.B. Vorname(n) und Initial):"; $labelnote = "Bemerkung (optional) oder Nachricht (unten klicken):"; $labeldate = "Nachricht-Verfallsdatum
      oder Stammtisch-Datum (optional):"; $txtnextmeet = "Termin:"; $txtparticipant = "Teilnehmer"; $txtnoparticpant = "Absagen"; $txtmessage = "Nachrichten"; $txtannounce = "Ankündigungen"; $txtnoteplus = "Bemerkung"; $txtnoteminus = "Bemerkung"; $txtexpires = "verfällt"; $txtparticip = "zugesagt"; $txtabsent = "abgesagt"; $txtdate = "Datum"; $msgnote = "Hinweis:"; $msgempty = "Noch keine Anmeldungen!"; $msgstepping = "Nächster Termin wurde berechnet, Teilnehmerliste aktualisiert!"; $msgnotechanged = "Bemerkung geändert!"; $msgregistering = "Angemeldet:"; $msgregistered = "ist bereits angemeldet!"; $msgderegistered = "abgemeldet!"; $msgderegfinally = "hat sich endgültig abgemeldet!"; $msgerr_forminput = "Eingabefehler korrigieren:"; $msgderegadvance = "hat sich vorsorglich abgemeldet."; $msgalreadydereg = "ist bereits abgemeldet!"; $msgderegagain = "wieder abgemeldet!"; $msgerrderegadv = "Bemerkung ist erforderlich beim vorsorglichen Abmelden!"; $msgerr_noname = "Kein Name angegeben (Pflichtangabe)!"; $msgerr_nonote = "Kein Nachrichtentext angegeben (Nachricht-Funktion ohne Nachricht ist nicht sinnvoll)!"; $msgerr_date = "Ungültiges Datum "; $errdate[1] = "(unzulässige Zeichen oder falsches Format; erlaubt: 'TT.MM.JJJJ', 'TT.MM.JJ' or 'TT.MM.')!"; $errdate[2] = "(ist kein zuläsiges Datum; z.B. nicht existierender Tag/Monat)!"; $errdate[3] = "(als Datum erwartet: Datum des nächsten Stammtischs oder eines anderen Stammtisches in der Zukunft)!"; $errdate[4] = "(falscher Wochentag: "; $errdate[5] = "(kein Stammtischtermin; ggf. andere Woche davor oder danach angeben)!"; $errdate[6] = "(Datum ist zu weit in der Zukunft; bitte statt An-/Abmeldung die Nachrichten-Funktion benutzen)!"; $errdate[7] = "(Datum liegt in der Vergangenheit; die Nachricht würde niemals angezeigt)!"; $weekday[0] = "Sonntag"; $weekday[1] = "Montag"; $weekday[2] = "Dienstag"; $weekday[3] = "Mittwoch"; $weekday[4] = "Donnerstag"; $weekday[5] = "Freitag"; $weekday[6] = "Samstag"; } // ============================= Beginn Funktionen ======================================= // Filtert Unnützes und Illegales aus einem Eingabestring function filteredstring($str) { $hstr = trim($str); $hstr = stripslashes($hstr); $hstr = strip_tags($hstr); $hstr = preg_replace('/ +/',' ', $hstr); $hstr = preg_replace('/÷/','.', $hstr); // Das Trennzeichen (ASCII 247) könnte Liste stören, darum ersetzen! return $hstr; } // Liefert den Wochentag eines vollständigen Datums dd.mm.YYYY zurück (0 = So, 6 = Sa) function GetDayOfWeek($datstr) { $chunk = explode('.',$datstr); return date("w",mktime(0,0,0,$chunk[1],$chunk[0],$chunk[2])); } // Funktion nicht doppelt definieren! if (!function_exists('GetDateStamp')) { // Liefert den Timestamp des Tages zurück function GetDateStamp($datstr) { $chunk = explode('.',$datstr); return @mktime(0,0,0,$chunk[1],$chunk[0],$chunk[2]); } } // Ermittelt, ob ein gültiges Datum übergeben wurde, den passenden Wochentag hat (return TRUE) und setzt einen vollständigen String (ggf. incl. Jahr) function IsValidDate( $dat, $defaultdate, $step, &$result, &$err ) { $err = 0; if ($dat == "") { // Ohne Angabe default Datum übernehmen ("leer" oder "nachstes Meeting") $result = $defaultdate; return TRUE; // Das default Datum muss per def. gültig sein! } $result = ""; // Ungültige Zeichen prüfen $regex = '/^\d{1,2}\.\d{1,2}\.(\d{2}|\d{4}|)$/'; preg_match($regex,$dat, $regs); //echo "

      Datumsformatprüfung Formular="$dat" Match="".$regs[0].""

      \n"; if ($regs[0] != $dat) { $err = 1; // Formatfehler; ungültige Zeichen return FALSE; // Fehler entdeckt, also Ende } //Datum zerlegen (Resultat der Formatprüfung weiterbenutzen) $dparts = explode('.',$regs[0]); $day = $dparts[0]; $month = $dparts[1]; if ($dparts[2] == "") { $year = date("Y"); // Kein Jahr angegeben: Aktuelles Jahr nehmen } elseif ((intval($dparts[2]) >= 0) && (intval($dparts[2]) <= 99)) { $year = "20".$dparts[2]; // zweistelliges Jahr: 20xx annehmen } else { $year = $dparts[2]; // vierstelliges Jahr: übernehmen } // Gültiges Datum prüfen if (!checkdate((int)$month,(int)$day,(int)$year)) { $err = 2; // Datumfehler; ungültige Werte //echo "

      Datumsformatprüfung Tag="$day" Monat="$month" Jahr="$year"

      \n"; return FALSE; // Fehler entdeckt, also Ende } $datestamp = mktime(0,0,0,$month,$day,$year); $result = date("d.m.Y",$datestamp); // Falls Defaultdatum angegeben, weitere Prüfungen if ($defaultdate != "") { // Liegt Termin in der Vergangenheit? $chunk = explode('.',$defaultdate); $defaultstamp = mktime(0,0,0,$chunk[1],$chunk[0],$chunk[2]); if ($datestamp < $defaultstamp) { $err = 3; // Datumfehler; Termin in Vergangenheit falscher Wochentag return FALSE; // Fehler entdeckt, also Ende } // Wochentag prüfen if (GetDayOfWeek($result) != GetDayOfWeek($defaultdate)) { $err = 4; // Datumfehler; falscher Wochentag return FALSE; // Fehler entdeckt, also Ende } // Liegt Termin an einem der nachsten 10 Termine? $found = FALSE; $isinrange = FALSE; for ($i = 0; $i < 10; $i++) { $nextstamp = mktime(0,0,0,$chunk[1],(int)$chunk[0]+$i*(int)$step,$chunk[2]); if ($nextstamp == $datestamp) { $found = TRUE; } if ($datestamp < $nextstamp) { $isinrange = TRUE; } } if (!$found) { if ($isinrange) { $err = 5; // Datumfehler; kein Stammtischtermin } else { $err = 6; // Datumfehler; zu weit in der Zukunft } return FALSE; // Fehler entdeckt, also Ende } } else { // Ohne Default prüfen, ob überhaupt noch angezeigt wird if ($datestamp < mktime(23,59,0,date("n"),date("j")-1)) { $err = 7; // Datumfehler; Termin in Vergangenheit falscher Wochentag return FALSE; // Fehler entdeckt, also Ende } } //echo "

      (DIAG Verfallszeitpunkt: $day.$month.$year $hour:$min - Timestamp:$enddate

      \n"; return TRUE; // ...wenn bis hierher keine Fehler entdeckt wurden } // ============================= Beginn Script ======================================= // erst mal keine Eingabefehler annehmen $inputerror = FALSE; $errstr = ""; // Alle Formularfelder normalerweise leer $val_name = ""; $val_date = ""; $val_bem = ""; // Annehmen, dass die Liste nicht neu geschrieben werden muss!? $rewritefile = false; // Als erstes die Stammtisch-Datei lesen und prüfen, ob Termin überschritten wurde (dann Liste löschen und neuen Termin setzen!) $datei = file($filename); $filedate = explode(".",$datei[0]); $cmpdate = mktime(23, 59, 59, $filedate[1], $filedate[0], $filedate[2]); if (time() > $cmpdate) { // Mitternacht des aktuell geplanten Stammtischs überschritten? // Nächsten Termin bestimmen $nextdate = date("d.m.Y",mktime(0, 0, 0, $filedate[1], $filedate[0]+$daystep, $filedate[2])); $datei[0] = $nextdate; // Listeninhalt bereinigen (alle abgelaufenen Eintrage löschen) for ($i = 1; $i < count($datei); $i++) { $line = explode('÷',$datei[$i]); // ID÷Typ÷Name÷Datum÷Bemerkung if (trim($line[1]) != "Na") { if (GetDateStamp($line[3]) < GetDateStamp($nextdate)) { $datei[$i] = ""; // Zeile löschen, die sich auf das vorangegangene Meeting bezieht } } else { if (GetDateStamp($line[3]) < mktime(0,0,0)) { $datei[$i] = ""; // Zeile löschen, die vor "Heute" abgelaufen ist! } } } // Stammtisch-Datei neu schreiben! $rewritefile = true; # $handle = fopen ($filename, "w"); # fputs($handle,trim($nextdate)); # fclose($handle); echo "

      $msgnote $msgstepping

      "; } else { // zur Datumsprüfung das Datum aus der Liste benutzen $nextdate = trim($datei[0]); } $editing = FALSE; if (isset($_GET["what"])) { if ($_GET["what"] == "edit") { // Liste durchsuchen nach ID $editing = TRUE; $editID = $_GET["id"]; for ($i = 1; $i < count($datei); $i++) { $parts = explode('÷',$datei[$i]); // ID÷Typ÷Name÷Datum÷Bemerkung if (trim($parts[0]) == $editID) { $val_name = "value=\"".htmlspecialchars(trim($parts[2]))."\""; if (trim($parts[3]) != $nextdate) { $val_date = "value=\"".trim($parts[3])."\""; } else { $val_date = ""; } $val_bem = "value=\"".htmlspecialchars(trim($parts[4]))."\""; } } } } // Wurde Formular abgeschickt? if (isset($_POST["name"])) { // Das Feld "name" ist immer dabei, wenn auch evtl. leer $inputline = ""; $editform = FALSE; // Wurde ein editiertes Formular geschickt? $postID = ""; if (isset($_POST["ID"])) { $editform = TRUE; $postID = $_POST["ID"]; } // Welcher Button wurde geklickt? $action = 0; // 0 = Nichts tun; 1 = Register; 2 = Deregister; 3 = Message; 4 = Delete; 5 = Abort if (isset($_POST["On"])) { $action = 1; } elseif (isset($_POST["Off"])) { $action = 2; } elseif (isset($_POST["Msg"])) { $action = 3; } elseif (isset($_POST["Delete"])) { $action = 4; } elseif (isset($_POST["Abort"])) { $action = 5; } // Formulardaten überprüfen (Name) $name = filteredstring($_POST["name"]); if ($name == "") { $inputerror = TRUE; $errstr .= $msgerr_noname; $val_name = "value=\"???\" style=\"color:red;\""; } else { $val_name = "value=\"".htmlspecialchars($name)."\""; } $inputline .= "$name÷"; // Formulardaten überprüfen (Datum) $formdate = filteredstring($_POST["date"]); $realdate = ""; $errnum = 0; if ($action == 3) { if (!IsValidDate($formdate,"",$daystep,$realdate,$errnum)) { $inputerror = TRUE; $errstr .= ($errstr == "")?"":"^^"; $errstr .= $msgerr_date.$errdate[$errnum]; $val_date = "value=\"$formdate\" style=\"color:red;\""; $realdate = $formdate; } else { $val_date = "value=\"$formdate\""; $realdate = ($formdate == "")?$nextdate:$realdate; // default Wert = nächstes Meeting } } elseif (($action == 1) || ($action == 2)) { if (!IsValidDate($formdate,$nextdate,$daystep,$realdate,$errnum)) { $inputerror = TRUE; $dow = ($errnum == 4)?$weekday[(int)date('w',GetDateStamp($realdate))]:""; //echo "

      Wochentag: $dow (".date('w',GetDateStamp($realdate))."; Date: $realdate

      \n"; $errstr .= ($errstr == "")?"":"^^"; $errstr .= $msgerr_date.$errdate[$errnum]; $errstr .= ($errnum == 4)?$dow.")!":""; $val_date = "value=\"$formdate\" style=\"color:red;\""; $realdate = $formdate; } else { $val_date = "value=\"$formdate\""; } } $inputline .= "$realdate÷"; // Ermitteln der zu benutzenden ID (entweder ID einer editierten Zeile, die ID des passenden Eintrags oder die nächste freie ID) $inlist = -1; if ($editform) { // Wird gerade editiert? $workID = $postID; $hint = "(posted)"; // Zeilennummer zur ID ermitteln for($i=1; $i < count($datei); $i++) { if (trim($datei[$i]) != "") { // Leere Zeilen ignorieren! $parts = explode("÷",$datei[$i]); if (trim($parts[0]) == $postID) { $inlist = $i; // Gefundene Zeilennummer merken } } } } else { // Normale Formular $maxid = 0; for($i=1; $i < count($datei); $i++) { if (trim($datei[$i]) != "") { // Leere Zeilen ignorieren! $parts = explode("÷",$datei[$i]); list($intid) = sscanf($parts[0], "%d"); // einerseits die nächsthöhere ID ermitteln if ($intid > $maxId) { $maxid = $intid; } // andererseits prüfen, ob schon in der Liste enthalten if ( (($action == 1)||($action == 2)) && (($parts[1] == "An")||($parts[1] == "Ab")) || // Zu- und Absagen überschreiben (($action == 3) && ($parts[1] == "Na")) ) { // Nachrichten überschreiben if ( (strtoupper(trim($parts[2])) == strtoupper($name)) && // Sind Name und Datum des Formulars gleich wie in der Zeile (trim($parts[3]) == $realdate)) { $inlist = $i; $workID = trim($parts[0]); $hint = "(detected)"; } } } } if ($inlist == -1) { $workID = trim(sprintf ('%03d',$maxid+1)); $hint = "(new)"; } } # echo "

      Used ID will be: $workID $hint, current action: $action.

      \n"; // Formulardaten überprüfen (Bemerkung - diese Prüfung ist abhängig davon, ob ein Eintrag schon vorhanden war oder nicht!) $bemerk = filteredstring($_POST["comment"]); if (($action == 3) && ($inlist == -1) && (($bemerk == "")||($bemerk == "???"))) { // Fehler: Leere Nachricht, wenn noch nicht in Liste $inputerror = TRUE; $errstr .= ($errstr == "")?"":"^^"; $errstr .= $msgerr_nonote; $val_bem = "value=\"???\" style=\"color:red;\""; } elseif (($action == 2) && ($inlist == -1) && (($bemerk == "")||($bemerk == "???"))) { // Fehler: Keine Bemerkung beim vorsorglichen Abmelden $inputerror = TRUE; $errstr .= ($errstr == "")?"":"^^"; $errstr .= $msgerrderegadv; $val_bem = "value=\"???\" style=\"color:red;\""; } else { $val_bem = "value=\"".htmlspecialchars($bemerk)."\""; } if (!$inputerror) { // dann alle Formularfelder nur leer ausgeben (Daten werden in Liste übernommen!) $val_name = ""; $val_date = ""; $val_bem = ""; // Hier die weitere Auswertung $hinweis = ""; $fehler = ""; // Aufbau der Inputzeile: ID÷Typ÷Name÷Datum÷Bemerkung if ($action == 1) { // Zusagen $inputline = $workID."÷An÷".$name."÷".$realdate."÷".$bemerk; $rewritefile = true; if ($inlist == -1) { $datei[] = $inputline; // Zeile ergänzen } else { $datei[$inlist] = $inputline; // bestehende Zeile ersetzen } } elseif ($action == 2) { // Absagen $inputline = $workID."÷Ab÷".$name."÷".$realdate."÷".$bemerk; $rewritefile = true; if ($inlist == -1) { if ($bemerk != "") { $datei[] = $inputline; // Zeile ergänzen } else { $fehler = "$msgerrderegadv"; // Fehler "Abmeldung ohne Bemerkung" } } else { if ($bemerk != "") { $datei[$inlist] = $inputline; // bestehende Zeile ersetzen } else { $inputline = $workID."÷--÷--÷".$realdate."÷--"; $datei[$inlist] = $inputline; // bestehende Zeile löschen } } } elseif ($action == 3) { // Nachricht hinterlassen $inputline = $workID."÷Na÷".$name."÷".$realdate."÷".$bemerk; $rewritefile = true; if ($inlist == -1) { $datei[] = $inputline; // Zeile ergänzen (Bemerkung muss da sein, sonst wäre schon mit Inputfehler abgebrochen!) } else { if ($bemerk != "") { $datei[$inlist] = $inputline; // bestehende Zeile ersetzen } else { $inputline = $workID."÷--÷--÷".$realdate."÷--"; $datei[$inlist] = $inputline; // bestehende Zeile löschen } } } elseif ($action == 4) { // Delete! (kann es nur nach Editieren geben!) for ($i = 1; $i < count($datei); $i++) { $parts = explode('÷',$datei[$i]); // ID÷Typ÷Name÷Datum÷Bemerkung if (trim($parts[0]) == $postID) { $rewritefile = true; $datei[$i] = $postID."÷--÷--÷".$parts[3]."÷--"; // Zeile als gelöscht markieren (ID und Datum übrig lassen, wird später beim Stepping gelöscht) } } } // Jetzt für abgeschickte Formulare nach Duplikaten suchen und löschen if ($editform) { # echo "

      Vor dem Bereinigen:

      "; # echo "
      ";
      #            print_r ($datei);
      #            echo "
      "; for ($i = 1; $i < count($datei); $i++) { $parts = explode('÷',$datei[$i]); // ID÷Typ÷Name÷Datum÷Bemerkung if ( (($action == 1)||($action == 2)) && (($parts[1] == "An")||($parts[1] == "Ab")) || // Zu- und Absagen überschreiben (($action == 3) && ($parts[1] == "Na")) ) { // Nachrichten überschreiben if ( (strtoupper(trim($parts[2])) == strtoupper($name)) && // Sind Name und Datum des Formulars gleich wie in der Zeile (trim($parts[3]) == $realdate) && (trim($parts[0]) != $workID)) { // und es ist NICHT die gerade geänderte Zeile? $rewritefile = true; $datei[$i] = trim($parts[0])."÷--÷--÷".$parts[3]."÷--"; // Zeile als gelöscht markieren (ID und Datum übrig lassen, wird später beim Stepping gelöscht) } } } # echo "

      Nach dem Bereinigen:

      "; # echo "
      ";
      #            print_r ($datei);
      #            echo "
      "; } } else { if ($editform) { // Ist der Fehler bei einer Ã"nderung aufgetreten? $editing = TRUE; $editID = $postID; // Die ID aus der ungültigen Editierung wieder ans Formuler geben! } } } // Muss die Datei neu geschreiben werden? if ($rewritefile == true) { // Stammtisch-Datei neu schreiben! $handle = fopen ($filename, "w"); fputs($handle,trim($datei[0])); for($i = 1; $i < count($datei) ; $i++) { if (trim($datei[$i]) != "") { fputs($handle,"\n".trim($datei[$i])); } } fclose($handle); } echo "
      \n"; echo " \n"; echo " \n"; echo " \n"; $cnt_reg = 0; $cnt_dereg = 0; $cnt_future = 0; $cnt_msg = 0; for($i=1; $i < count($datei); $i++) { if (trim($datei[$i]) != "") { // Für nicht leere Zeilen: $parts = explode("÷",$datei[$i]); // ID-Typ-Name-Datum-Bemerkung $id = $parts[0]; $editstr = "\"Editieren\""; if (($parts[1] == "An") && ($parts[3] == $nextdate)) { $cnt_reg++; echo " \n"; } elseif (($parts[1] == "Ab") && ($parts[3] == $nextdate)) { $cnt_dereg++; } elseif ($parts[1] == "Na") { $cnt_msg++; } elseif ((($parts[1] == "An")||($parts[1] == "Ab")) && ($parts[3] != $nextdate)) { $cnt_future++; } } } if ($cnt_reg == 0) { echo " \n"; } // Jetzt ggf. die Absage-Liste if ($cnt_dereg > 0) { echo " \n"; echo " \n"; for($i=1; $i < count($datei); $i++) { if (trim($datei[$i]) != "") { // Für nicht leere Zeilen: $parts = explode("÷",$datei[$i]); $id = $parts[0]; $editstr = "\"Editieren\""; if (($parts[1] == "Ab") && ($parts[3] == $nextdate)) { echo " \n"; } } } } // Jetzt ggf. die Message-Liste if ($cnt_msg > 0) { echo " \n"; echo " \n"; for($i=1; $i < count($datei); $i++) { if (trim($datei[$i]) != "") { // Für nicht leere Zeilen: $parts = explode("÷",$datei[$i]); $id = $parts[0]; $editstr = "\"Editieren\""; if (($parts[1] == "Na") && (GetDateStamp($parts[3]) >= mktime(0,0,0))) { echo " \n"; } } } } // Jetzt ggf. die Ankündigungs-Liste if ($cnt_future > 0) { echo " \n"; echo " \n"; for($i=1; $i < count($datei); $i++) { if (trim($datei[$i]) != "") { // Für nicht leere Zeilen: $parts = explode("÷",$datei[$i]); $id = $parts[0]; $editstr = "\"Editieren\""; if (($parts[1] == "An") && ($parts[3] != $nextdate)) { echo " \n"; } } } for($i=1; $i < count($datei); $i++) { if (trim($datei[$i]) != "") { // Für nicht leere Zeilen: $parts = explode("÷",$datei[$i]); $id = $parts[0]; $editstr = "\"Editieren\""; if (($parts[1] == "Ab") && ($parts[3] != $nextdate)) { echo " \n"; } } } } echo "
      ".$txtnextmeet." ".$datei[0]."
       
      ".$txtparticipant."   ".$txtnoteplus." 
      ".$parts[2]." ".WikiFormatString(trim($parts[4]),FALSE)."".$editstr."
      $msgempty
       
      ".$txtnoparticpant."   ".$txtnoteminus." 
      ".$parts[2]." ".WikiFormatString(trim($parts[4]),FALSE)."".$editstr."
       
      ".$txtmessage."$txtexpires ".$txtnoteminus." 
      ".$parts[2]."".$parts[3]."".WikiFormatString(trim($parts[4]),FALSE)."".$editstr."
       
      ".$txtannounce."$txtdate ".$txtnoteminus." 
      ".$parts[2]."".$parts[3]."($txtparticip) ".WikiFormatString(trim($parts[4]),FALSE)."".$editstr."
      ".$parts[2]."".$parts[3]."($txtabsent) ".WikiFormatString(trim($parts[4]),FALSE)."".$editstr."
      \n"; if ($hinweis != "") { echo "

      ".$hinweis."

      \n"; } if ($fehler != "") { echo "

      ".$fehler."

      \n"; } if ($inputerror) { $errorstring = "[[c:redbold|$msgerr_forminput]] ^^ [[c:red|$errstr]]"; echo WikiFormatString($errorstring); } // Hier das Eingabeformular für die An-und Abmeldung // echo "

      Name: $val_name - Datum: $val_date - Bem: $val_bem

      \n"; echo "

      "; echo "

      $labelname
      "; echo "
      "; echo "

      $labelnote
      "; echo ""; echo "

      "; echo "

      \n"; echo ""; if ($editing) { echo " "; echo "\n"; } echo "

      "; echo "

      $labeldate
      "; echo " "; echo "\n"; echo "

      "; echo "
      "; ?>

       

       

       

      Konzertnachlese

      Direkt nach dem Semesterabschlusskonzert gibt es die Gelegenheit, die Erlebnisse des Konzertabends in größerer Runde Revue passieren zu lassen, und - nach angemessener körperlicher Stärkung - der „Manöverkritik“ unseres Chorleiters zu lauschen.

      Damit alle Sängerinnen und Sänger (sowie ein paar Freunde und Angehörige) das Chor-Semester bei einem gemeinsamen Abendessen (oder Abendgetränken) ausklingen lassen können, wird in einem Café oder Restaurant in Uni-Nähe ein entsprechend großer Raum für den Chor reserviert.

      Im Dialog

      Auch Anthony Trecek-King ist gern bereit, bei der Konzertnachlese seine Kritik zu den aufgeführten Stücken zu geben.

      Weihnachtsfeier

      Am letzten Probentag vor Weihnachten (also nur im Wintersemester) findet nach der regulären Probe die lang erwartete Chor-Weihnachtsfeier statt. Der Probenraum wird schnell umgeräumt, und dann werden zu Ehren der bevorstehenden Feiertage allerlei weihnachtliche Leckereien, wie selbstgebackene Kekse, Lebkuchen, Clementinen, Punsch und Glühwein kredenzt!


      Aktualisiert: 20.06.2018 - Karsten Huth
      Seite generiert mit: PageWizard V1.0 - zuletzt am: 04.07.2018 - Seitenvorlage: 27.06.2018
      Seitenlayout angelehnt an das Corporate Design der TU Braunschweig, erweitert als responsives Design.
      hoch zum Seitenanfang
    Infoboxen schließen×

    Der Stammtisch

    Im Semester normalerweise im Anschluss an die Probe:

    Dienstags, ca. 20:45 Uhr im „Quartier“, Bültenweg 89, 38106 BS.

    Der Ferien-Stammtisch

    So würde die Liste auf der Chor-Homepage aussehen:

    Abfrage einer Stammtischplaner-Textdatei (neue Version) und anzeige einer Kurzliste // Funktion nicht doppelt definieren! if (!function_exists('GetDateStamp')) { // Liefert den Timestamp des Tages zurück function GetDateStamp($datstr) { $chunk = explode('.',$datstr); return @mktime(0,0,0,$chunk[1],$chunk[0],$chunk[2]); } } $shortliston = ""; $shortlistoff = ""; $cntmessage = 0; // Evtl. geänderte Datei neu laden! $planerdatei = file("stammtisch.txt"); $planerdate = trim($planerdatei[0]); // An- und Abmeldungen trennen $anmeld = array(); $abmeld = array(); for($i=1; $i < count($planerdatei); $i++) // jeweils nur die Einträge für den aktuellen Termin aussortieren { $parts = explode("÷",$planerdatei[$i]); if ((trim($parts[1]) == "An") && (trim($parts[3]) == $planerdate)) { $anmeld[] = trim($parts[2]); // Nur den Namen rausziehen } if ((trim($parts[1]) == "Ab") && (trim($parts[3]) == $planerdate)) { $abmeld[] = trim($parts[2]); // Nur den Namen rausziehen } if ((trim($parts[1]) == "Na") && (GetDateStamp($parts[3]) >= GetDateStamp($planerdate))) { $cntmessage++; // Nur angezeigte Nachrichten zählen #echo "

    Msg ".$parts[2].",".$parts[1]."

    "; } } if (count($anmeld) > 0) { for($i=0; $i < count($anmeld); $i++) { if ($i !=0) { $shortliston .="
    "; } $shortliston .= $anmeld[$i]; } } else { $shortliston = "Noch keine Teilnehmer!"; } // Jetzt ggf. die Absage-Liste if (count($abmeld) > 0) { for($i=0; $i < count($abmeld); $i++) { if ($i !=0) { $shortlistoff .="
    "; } $shortlistoff .= $abmeld[$i]; } } echo "

    Nächster Termin:

    "; echo "

    ".$planerdate."

    "; echo "

    Teilnehmer

    "; echo "

    ".$shortliston."

    "; if ($shortlistoff != "") { echo "

    Absagen

    "; echo "

    ".$shortlistoff."

    "; } if ($cntmessage > 0) { $text = ($cntmessage == 1)?"Nachricht":"Nachrichten"; echo "

    $cntmessage $text

    "; echo "

     

    "; } ?>