First Commit

This commit is contained in:
2025-11-02 22:52:08 +01:00
commit 73fbbf1be2
5821 changed files with 977526 additions and 0 deletions

View File

@@ -0,0 +1,511 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Sternwarte Welzheim</title>
<!--[if IE 5]>
<link href="css/ie5.css" rel="stylesheet" type="text/css"/>
<![endif]-->
<!--[if IE]>
<style type="text/css">
<link href="css/ie.css" rel="stylesheet" type="text/css"/>
</style>
<![endif]-->
<link href="css/jquery-ui.min.css" rel="stylesheet" type="text/css"/>
<link href="css/sternwarte1.css" rel="stylesheet" type="text/css"/>
<script src="javascript/jquery-1.11.0.min.js"></script>
<script src="javascript/jquery-ui-1.10.0.custom.min.js"></script>
<script src="javascript/sternwarte.js"></script>
</head>
<body class="thrColFixHdr">
<div id="container">
<?php include 'header.php'; ?>
<?php include 'navi.php'; ?>
<div id="sidebar2">
<?php include 'fdatum.php'; ?>
<?php include 'himmelerg.php'; ?>
</div>
<div id="datenschutz"></div>
<?php
include 'phpmailer/dosendmail.php';
// ---------- globale Konstanten
$vorlauf = 24;
$monthstoadd = '+ 1 month';
?>
<?php
// Aus den 3 Einträgen aus der 'fdatum' table ein leserliches Datum erzeugen
// Parameter:
// $wt -> Wochentag
// $dat -> Datum
// $ti -> Uhrzeit
// Return: Datuns/Zeit-String
function buildDate($wt,$dat,$ti) {
$dat = preg_replace('#^(\d{4})(\d{2})(\d{2})$#', '\3.\2.\1', $dat);
$r = substr($wt,0,2) . ", " . $dat . " " . $ti;
return $r;
}
function holdasdatum($fid) {
global $db;
$sql_sel = "SELECT datum FROM fdatum1 where id = '$fid'";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
$data = $result->fetch_row()[0];
return intval($data);
}
// Aus der DB aus der Table 'fdatum' den Eintrag für $fid holen
// und als Datum/Zeit-String übergeben
// Parameter:
// $fid -> id des Führungsdatums in der Datenbank-Tabelle
// Return: Datum/zeit-String
function holDate($fid) {
global $db;
$sql_sel = "SELECT wtag, datum, uhrzeit FROM fdatum1 where id = '$fid'";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
$ret = array();
$ret[] = $data['wtag'];
$ret[] = $data['datum'];
$ret[] = $data['uhrzeit'];
$ret[] = buildDate($data['wtag'], $data['datum'], $data['uhrzeit']);
return $ret;
}
// die Daten der nächsten Führungen für $monthstoadd Monate in ein Array holen
// Parameter -
// Retunrn: Array mit allen Werte aus der Table
function getNextFuehrungen() {
global $db, $vorlauf, $monthstoadd;
$erg = array();
$toadd = '+' . $vorlauf . 'hour';
$dt = new DateTime($toadd);
$datum_heute = $dt->format('Ymd');
$enddatum = new DateTime('now');
$enddatum->modify($monthstoadd);
$enddatum = new DateTime('2022-03-05'); //<<<<<<<<<<<<<<<<<<<<<<
$enddatum = $enddatum->format('Ymd');
$sql_sel = "SELECT * FROM fdatum1 where datum >='$datum_heute' && datum <= '$enddatum' order by datum ASC";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
// 'select'-Tag für die Führungen bauen
// Paramter:
// $fuehrungen -> Array mit den kommenden Führungen
// Return: String mit dem HTML-Code
function bauNextFuehrungen($fuehrungen, $maxP, $selected) {
$r = "<label for='ftermin' class='labeltext'>" .
"<strong>Führungsdatum</strong></label>" .
"<select name='ftermin' id='ftermin'>";
foreach ($fuehrungen as $f) {
$count = $f['count'];
$r .= "<option value='" . $f['id'] . "'";
if($count >= $maxP) {
$r .= "disabled";
}
if($selected && ($f['id'] == $selected)) {
$r .= ' selected="selected" ';
}
$r .= ">" . buildDate($f['wtag'], $f['datum'], $f['uhrzeit']);
$r .= " &nbsp;&nbsp;&nbsp;Frei: ";
$r .= $maxP-$count;
$r .= "</option>";
}
$r .= "</select>";
return $r;
}
// Zählen, wieviele Personen zu einem Führungstermin angemeldet sind
// Parameter:
// $fid -> id des Führungsdatum
// Return: Anzahl der Personen
function getCountsPerDate($fdate) {
global $db;
$sql_stmt = "SELECT SUM(anzahl) AS count FROM anmeldungen WHERE fdatum='$fdate'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
return $data['count'];
}
// prüfen, og der User schon eine Buchung gemacht hat
// Geprüft wird die Email-Adresse. Es werden nur Buchungen in
// Zukunft geprüft.
function isDoppelBuchung($email) {
global $db;
$ret = [];
$ret['doppelt'] = false;
$now = date('Ymd');
$sql_stmt = "SELECT * FROM anmeldungen WHERE email = '$email' AND fdatum >= $now";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
return $data;
}
// die kompletten Daten eines Teilnehmers anhand der ID ais der DB holen
?>
<div id="mainContent">
<?
// Hier werden alle notwendigen Variablen eingesammelt ------------------------
if (isset($_POST['submit'])) {
$stern_name = $_REQUEST['name'];
$stern_vorname = $_REQUEST['vorname'];
$stern_strasse = $_REQUEST['strasse'];
$stern_ort = $_REQUEST['ort'];
$stern_plz = $_REQUEST['plz'];
$stern_tel = $_REQUEST['tel'];
$stern_mail = $_REQUEST['mail'];
$stern_teil = $_REQUEST['teil'];
$xxx = array();
$xxx[] = holDate($_REQUEST['ftermin']);
$stern_datum_date = holdasdatum($_REQUEST['ftermin']);
$stern_datum = $xxx[0][3];
$stern_fdlink = $_REQUEST['ftermin'];
$stern_submit = $_REQUEST['submit'];
$stern_actionstern = $_REQUEST['stern_actionstern'];
$stern_remarks = $_REQUEST['remarks'];
} else {
$stern_name = '';
$stern_vorname = '';
$stern_strasse = '';
$stern_ort = '';
$stern_plz = '';
$stern_tel = '';
$stern_mail = '';
$stern_teil = '';
$stern_datum = '';
$stern_datum_date = 19000101;
$stern_submit = '';
$stern_fdlink = '';
$stern_actionstern = '';
$stern_remarks = '';
}
// Hier werden default Werte gesetzt ------------------------
$stern_error_msg = '';
$stern_meldung = '';
$stern_errors = 0;
$andererTermin = "bitte wählen Sie einen anderen Termin";
// ----------------------------------------------------------
switch ($stern_actionstern) {
case 'senden':
// Hier wir geprüft, ob alle Felder ausgefüllt sind ------------------------
if (trim($stern_name) == '') {
$stern_error_msg .= 'Bitte geben Sie Ihren Namen ein.<br />';
$stern_errors++;
}
if (trim($stern_strasse) == '') {
$stern_error_msg .= 'Bitte geben Sie eine Straße ein.<br />';
$stern_errors ++;
}
if (trim($stern_plz) == '') {
$stern_error_msg .= 'Bitte geben Sie eine Postleitzahl ein.<br />';
$stern_errors ++;
}
if (! preg_match("/^[0-9]{5}$/", $stern_plz)) {
$stern_error_msg .= 'Bitte geben Sie bei der Postleitzahl mindestens fünf Ziffern und keine Buchstaben ein.<br />';
$stern_errors ++;
}
if (trim($stern_ort) == '') {
$stern_error_msg .= 'Bitte geben Sie einen Ort ein.<br />';
$stern_errors ++;
}
if (!preg_match("/^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}/",
strtolower($stern_mail))) {
$stern_error_msg .= 'Bitte geben Sie eine gültige E-Mail-Adresse ein.<br />';
$stern_errors++;
}
$belegt = getCountsPerDate($stern_datum_date);
$rest = $maxBesucher-$belegt;
if((trim($stern_teil) + $belegt) > $maxBesucher) {
if ($rest <= 0) {
$stern_error_msg .= "Die Führung ist ausgebucht, $andererTermin<br />";
} else {
$stern_error_msg .= "Die Führung ist schon mit $belegt Personen belegt, es ";
if ($rest == 1) {
$stern_error_msg .= "kann nur noch 1 Person ";
} else {
$stern_error_msg .= "können höchstens noch $rest Personen ";
}
$stern_error_msg .= "angemeldet werden.<br />";
}
$stern_errors++;
}
$teilnehmer = isDoppelBuchung($stern_mail);
if($teilnehmer != null) {
$stern_error_msg = "Die ist eine Doppelbuchung. Sie wird <strong>nicht</strong> gespeichert.<br /><br />
Wenn Sie Ihre ursprünglichen Buchung ändern oder stornieren wollen, so senden Sie bitte eine Email an <a href='mailto:anmeldung@sternwarte.de'>anmeldung@sternwarte.de</a><br />
<p><a class='button' href='/index.php'>Abbruch</a></p>";
$stern_errors++;
}
$nun = strtotime("now");
list($w,$d,$t,$s) = holDate($stern_fdlink);
$fz = strtotime("$d" . "t" . substr($t,0,2) . "00");
$dauer = ($fz - $nun) / 3600;
if ($dauer <= $vorlauf) {
$stern_error_msg .= "Die Anmeldung muss <strong>spätestens</strong> $vorlauf Stunden vor Beginn der Führung erfolgen - $andererTermin.<br />";
$stern_errors++;
}
if ($stern_errors == 0) {
$sql_stmt = "INSERT INTO anmeldungen (name, vorname, strasse, plz, stadt, telefon, email, anzahl, fid, remarks, angemeldet, fdatum)" .
" values('$stern_name', '$stern_vorname', '$stern_strasse', '$stern_plz', '$stern_ort', '$stern_tel'," .
"'$stern_mail', '$stern_teil', '$stern_fdlink', '$stern_remarks', CURDATE(), '$stern_datum_date')";
$ins = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$sql_stmt = "UPDATE fdatum1 SET count = count + '$stern_teil' WHERE datum = '$stern_datum_date'";
$ins = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$person = $stern_teil == 1 ? "Person" : "Personen";
$body = "\r\nName, Vorname: $stern_name, $stern_vorname \r\n" .
"Strasse: $stern_strasse \r\n" .
"Ort: $stern_plz $stern_ort \r\n" .
"Telefon: $stern_tel \r\n" .
"E-mail: $stern_mail \r\n" .
"Gewünschter Termin: $stern_datum \r\n" .
"Teilnehmerzahl: $stern_teil \r\n" .
"Bemerkungen: $stern_remarks \r\n";
$bodya = "Sehr geehrte Dame, sehr geehrter Herr, \r\n\r\n" .
"hiermit bestätigen wir Ihre Anmeldung zu einer Führung auf der Sternwarte Welzheim für\r\n\r\n" .
"$stern_vorname $stern_name am " . preg_replace("/(\d+) Uhr/","um $0",$stern_datum) . " für $stern_teil $person " .
// $stern_teil == 1 ? "Person" : "Personen" .
".\r\n\r\n" .
"Bitte bringen Sie diese Bestätigung als Ausdruck oder digital zur Führung mit. \r\n".
"Ohne diese Bestätigung und 2G-Zertifikat erfolgt ausnahmslos k e i n Einlass.\r\n\r\n" .
"Die Führung findet NUR bei sternklarem Himmel statt. Falls der Himmel bedeckt ist \r\n" .
"und die Führung ausfällt, bitten wir Sie um eine neue Anmeldung.\r\n\r\n" .
"Die Hygienevorschriften sind zu beachten: die Teilnehmer müssen eine medizinische Maske,\r\n" .
"die Mund u n d Nase bedeckt, tragen und den vorgeschriebenen Abstand halten.\r\n\r\n" .
"Nicht teilnehmen dürfen Personen, die in den letzten vierzehn Tagen Kontakt mit einem Coronavirus-Infizierten \r\n" .
"hatten oder Infektionssymptome zeigen.\r\n\r\n" .
"Sollten Sie Fragen haben oder die Anmeldung stornieren wollen, senden Sie bitte eine Email an anmeldung@sternwarte-welzheim.de \n\r\n" .
"Mit freundlichen Grüßen\r\n\r\n" .
"Beobachterteam der Sternwarte Welzheim\r\n\r\n" .
"www.sternwarte-welzheim.de";
$betreff = "Anmeldung zu einer Führung auf der Sternwarte Welzheim";
$betreffBeo = "Anmeldung zur Führung in Welzheim am $stern_datum";
mb_internal_encoding('UTF-8');
$betreff = mb_encode_mimeheader($betreff, 'UTF-8', 'Q');
// Mail an den Anfragenden
sendmail($betreff, $defaultabsender, $bodya, [], ['rexfue@gmail.com'], [$stern_mail]);
// Mail an einige BEOs und an die Liste
$beoliste = array(
//"andrea.ess@t-online.de",
//"sonderfuehrung@sternwarte-welzheim.de",
//"martin.gertz@gmx.de",
// "schittenhelm.klaus@gmx.de",
// "planetarium@stuttgart.de",
//"info@planetarium-stuttgart.de",
//"HUK@observatory-stuttgart.de",
"anmeldung@sternwarte-welzheim.de",
);
sendmail($betreffBeo, $defaultabsender, $body, $beoliste, [], ["rexfue@gmail.com"] );
$stern_meldung = "<p>Vielen Dank für Ihre Anmeldung. <br /><br />
Wir freuen uns über Ihren Besuch auf der Sternwarte Welzheim am<br />
<div style='text-align:center;'>" .
preg_replace('/(\d+) Uhr/','um $0',$stern_datum) .
" mit $stern_teil $person.
</div> <br />
Wir haben Ihnen die Anmelde-Bestätigung per Email zugesandt.</p>
<p><a class='button' href='/index.php'>Zurück</a></p>";
// Antwortseite
?>
<?PHP echo $stern_meldung;
?>
<?PHP
// Ende Antwortseite
break;
} // Ende if ($errors == 0)
else {
// Layout der Fehlermeldung
$stern_error_msg = '<div id="fehler">' . $stern_error_msg . '</div>';
}
// Wenn ein Fehler aufgetreten ist ($errors != 0), folgt jetzt der default Teil
// d.h. das Eingabeformular wird nochmals angezeigt mit einer Fehlermeldung.
// ----------------------------------------------------------------------------
default:
?>
<p style="text-align:center; font-size:120%;">
<strong>Anmeldung zu einer Führung auf der Sternwarte Welzheim</strong>
</p>
<p>
Wegen der Corona-Pandemie dürfen nur angemeldeten Personen an einer Führung in der
Sternwarte Welzheim teilnehmen. Bitte geben Sie unten Ihre Kontaktdaten an.
Nach Maßgabe der aktuellen Corona-Verordnung werden Ihre Daten vier Wochen gespeichert
und anschließend gelöscht.
</p>
<p><strong>Zur Zeit git die 2G-Regel, d.h. es haben nur Personen Zutritt, die nachweislich gegen Corona geimpft oder genesen sind.
Ein 2G-Zertifikat muss vorgelegt werden.</strong><br />
Aus diesem Grund können auch nur Kinder im schulpflichtigen Alter die Sternwarte besuchen.
</p>
<p>
An einer Führung dürfen nur maximal <?php echo $maxBesucher;?> Personen teilnehmen, damit der
vorgeschriebene Sicherheitsabstand eingehalten werden kann. Sollte die von
Ihnen ausgewählte Führung bereits ausgebucht sein, wählen Sie bitte einen anderen Termin.
</p>
<p>
Wenn Sie alle Felder ausgefüllt und abgeschickt haben (mit dem "Anmeldung senden"-Knopf),
erhalten Sie eine Anmeldebestätigung per e-mail. Diese bitte unbedingt zur Führung
ausgedruckt oder in digitaler Form mitbringen!
<div style="text-align:center;"><strong>Ohne die mitgebrachte Anmeldebestätigung und dem Impfzertifikat erfolgt ausnahmslos
k e i n Einlass.</strong></div>
</p>
<p>
Die Hygienevorschriften sind zu beachten: Jeder Teilnehmer muss eine
medizinische Maske, die Mund <strong>und</strong> Nase bedeckt, tragen
und den vorgeschriebenen Abstand einhalten.
Nicht teilnehmen dürfen Personen, die in den letzten vierzehn Tagen Kontakt
mit einem Coronavirus-Infizierten hatten oder Infektionssymptome zeigen.
</p>
<hr/>
<p>Die Führungen auf der Sternwarte Welzheim finden nur bei
sternklarem Himmel statt. Sollte die Führung wegen des Wetters ausfallen, bitten wir
Sie, sich für einen neuen Termin nochmals anzumelden.
</p>
<p>
Bitte beachten Sie, dass der Weg zur Sternwarte Welzheim <strong>mit
Kraftfahrzeugen nicht befahren werden darf</strong>. Sie können
Ihre Fahrzeuge auf dem Parkplatz der Sternwarte abstellen. Von hier
führt ein 430 m langer Fußweg zur Sternwarte. Die Temperatur in den
Beobachtungskuppeln entspricht der Außentemperatur. Besonders in
kalten Winternächten ist warme Bekleidung und warmes Schuhwerk
dringend zu empfehlen.
</p>
<p>Die Fernrohre in den Beobachtungskuppeln sind nur über Treppen zu
erreichen. Es besteht leider keine Möglichkeit, Rollstühle in die
Kuppeln mitzunehmen. Für Kleinkinder sind Sternführungen nicht
geeignet.</p>
<p>Betrieb und Arbeit auf der Sternwarte erfolgen ehrenamtlich.
Unterhalt und Aktivit&auml;ten auf der Sternwarte sind nur durch
Ihre Unterstützung m&ouml;glich. Wir bitten daher um eine ensprechende Spende.
</p>
<p>
<?PHP echo $stern_error_msg ?>
</p>
<strong>Anmeldung:</strong>
<span class="textklein">(Alle Felder mit '*' müssen ausgefüllt werden)</span><br />
<br />
<div id="formular" class="fltrt">
<form action="anmeldung.php#form" method="post">
<?
echo bauNextFuehrungen(getNextFuehrungen(), $maxBesucher, $stern_fdlink);
?>
<br />
<div id="unterfuedat" class="textklein">Bitte beachten Sie, dass eine
Anmeldung bis spätestens <? echo $vorlauf?> Stunden vor Führungsbeginn erfolgt sein muss!<br/>
Schon belegte Termine können nicht ausgewählt werden (sie werden grau dargestellt).</div><br/>
<br />
<label for="name" class="labeltext">Zuname *</label>
<input
type="text" maxlength="50" name="name"
value="<? echo $stern_name; ?>" id="name" class="textfeld200"/> <br/>
<label for="vorname" class="labeltext">Vorname</label>
<input
type="text" maxlength="50" name="vorname"
value="<? echo $stern_vorname; ?>" id="vorname" class="textfeld200"/><br/>
<br/>
<label for="strasse" class="labeltext"> Straße / Haus-Nr. *</label>
<input type="text" maxlength="60" name="strasse"
value="<? echo $stern_strasse; ?>" id="strasse" class="textfeld200"/><br/>
<label for="ort" class="labeltext">PLZ / Ort *</label>
<input
type="text" maxlength="5" name="plz" id="plz"
value="<?php echo $stern_plz; ?>" class="textfeld20"/>
<input
type="text" maxlength="60" name="ort" id="ort"
value="<?php echo $stern_ort; ?>" class="textfeld100"/> <br/>
<label
for="tel" class="labeltext"> Telefonnummer</label>
<input
type="text" maxlength="50" name="tel" value="<? echo $stern_tel; ?>"
id="tel" class="textfeld200"/> <br/>
<br />
<label for="mail" class="labeltext">E-Mail-Adresse *</label>
<input
type="text" maxlength="120" name="mail"
value="<? echo $stern_mail; ?>" id="mail" class="textfeld200"/><br />
<br />
<label for="teil" class="labeltext">Teilnehmerzahl *<br/> <span
class="textklein">(max. <? echo $maxBesucher ?> Personen)</span></label>
<input type="number" step="1" min="1" max="<? echo $maxBesucher ?>" maxlength="120"
name="teil" value="<? echo $stern_teil == "" ? "1" : $stern_teil; ?>" id="teil" class="textfeld20"/> <br/>
<br />
<div id="bemerk">
<label for="remarks" class="labeltext">Bemerkungen</label>
<textarea name="remarks" id="remarks" rows="2" cols="40" class="textfeld200"></textarea><br/>
<br />
</div>
Eine Sternführung findet nur bei <b>sternklarem</b> Wetter statt.<br/>
<p>
Sollten Sie eine Änderung oder Stornierung ihrer Anmeldung wünschen, senden Sie bitte eine E-mail an <a href="mailto:anmeldung@sternwarte-welzheim.de">anmeldung@sternwarte-welzheim.de</a>.
Wenn Sie an dem gebuchten Termin verhindert sind, bitten wir Sie, rechtzeitig eine Abmeldung zu senden.
</p>
<p>
<strong>Das Betreten der Sternwarte erfolgt auf eigene
Gefahr. Die Sternführung wird von ehrenamtlichen
Kräften durchgeführt. Bei Ausfall einer Führung kann kein Schadenersatz
geleistet werden.</strong>
</p>
<div id="sendebutton">
<input type="hidden" name="stern_actionstern" value="senden">
<input type="submit" name="submit" value="Anmeldung senden" class="inputtext">
</div>
<button type="button" class="inputtext cancel" onclick="window.location.href='/index.php';">Abbruch</button>
<br /><br />
<p>
Hinweis zum Datenschutz: <a href="" id="dschu">Datenschutzerklärung</a>
</p>
<p class="lastchange">Letzte Änderungen: 2021-11-29 rxf</p>
</form>
</div>
<?
// ----------------------------------------------------------------------------
} // Ende switch($page)
?>
<!-- end #mainContent -->
</div>
<!-- Dieses clear-Element sollte direkt auf das #mainContent-div folgen, um das #container-div anzuweisen, alle untergeordneten Floats aufzunehmen. -->
<br class="clearfloat"/>
<!-- end #container -->
</div>
</body>
</html>