Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen
<?php
/*
* Event-Kalender - kalenderform.php (utf-8)
* - https://werner-zenk.de
Dieses Script wird in der Hoffnung verteilt, dass es nützlich sein wird, aber ohne irgendeine Garantie;
ohne auch nur die implizierte Gewährleistung der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
Weitere Informationen finden Sie in der GNU General Public License.
Siehe Datei: license.txt - http://www.gnu.org/licenses/gpl.html
Diese Datei und der gesamte "Event-Kalender" ist urheberrechtlich geschützt (c) Werner Zenk alle Rechte vorbehalten.
Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
*/
// modify RaHa ->
// Modifikation SENDE-EVENT-MAIL
function sendeeventmail() {
global $db, $TABLE_PREFIX, $startMonat, $startTag, $startJahr, $volltag, $HTML_TAGS, $name, $gruppe, $wiederholung, $benachrichtigung, $privat, $KATEGORIEN, $KATEGORIE_EMAIL, $PRIORITAET, $PRIORITAET_KATEGORIE_FARBE, $ABSENDER;
if ($benachrichtigung !== 1) { return; }
if (strpos($_POST["ort"], "@") > 0 ) {
$MAIL_EMPFAENGER = trim($_POST["ort"]);
// hier sollte noch eine Überprüfung hin, ob die Adresse vorhanden ist
} else {
$ist_kategorie = $_POST["kategorie"];
$ist_kategorie = array_keys($KATEGORIEN, $ist_kategorie);
if (isset($ist_kategorie[0])) { $ist_kategorie = $ist_kategorie[0]; } else { return; }
if (!isset($KATEGORIE_EMAIL[$ist_kategorie])) { return; }
$MAIL_EMPFAENGER = $KATEGORIE_EMAIL[$ist_kategorie];
}
if (isset($_POST["eintragen"])) {
// Datum zusammensetzen
$start = $startJahr . '-' . sprintf("%02s", $startMonat) . '-' . sprintf("%02s", $startTag) . ' ' . (isset($_POST["volltag"]) ? '00:00' : $_POST["stunde"] . ':' . $_POST["minute"]);
$ende = $startJahr . '-' . sprintf("%02s", $startMonat) . '-' . sprintf("%02s", $startTag) . ' ' . (isset($_POST["volltag"]) ? '00:00' : $_POST["stunde2"] . ':' . $_POST["minute2"]);
} else {
// Datum zusammensetzen
$start = $_POST["jahr"] . '-' . sprintf("%02s", $_POST["monat"]) . '-' . sprintf("%02s", $_POST["tag"]) . ' ' . (isset($_POST["volltag"]) ? '00:00' : $_POST["stunde"] . ':' . $_POST["minute"]);
$ende = $_POST["jahr"] . '-' . sprintf("%02s", $_POST["monat"]) . '-' . sprintf("%02s", $_POST["tag"]) . ' ' . (isset($_POST["volltag"]) ? '00:00' : $_POST["stunde2"] . ':' . $_POST["minute2"]);
}
$start = str_replace("00:00", "", $start);
$ende = str_replace("00:00", "", $ende);
include_once "kalendersende-event-mail.php";
return;
}
// <- modify RaHa
/*
* Anmeldung
*/
if (isset($_POST["anmelden"])) {
// Benutzer überprüfen
if (
isset($NAME_PASS[trim($_POST["name"])]) &&
$NAME_PASS[trim($_POST["name"])] === $_POST["passwort"]
) {
$_SESSION["name"] = $_POST["name"];
echo '<!-- P -->'; // OK
} else {
echo '<!-- X -->'; // KO
}
}
/*
* Abmeldung
*/
if (isset($_POST["abmelden"])) {
if (session_destroy()) {
$_SESSION = [];
echo '<!-- O -->'; // Die Abmeldung war erfolgreich.
}
}
/*
* Event eintragen
*/
if (isset($_POST["eintragen"])) {
// Benutzer überprüfen
if (BENUTZER == true) {
// Datum überprüfen
if (
checkdate($_POST["monat"], $_POST["tag"], $_POST["jahr"]) &&
$_POST["jahr"] >= $JAHR_MIN &&
$_POST["jahr"] <= $JAHR_MAX
) {
// Ganztägig / Wiederholung / Benachrichtigung / Privat
$_POST["beschreibung"] = strip_tags(trim($_POST["beschreibung"]), $HTML_TAGS);
$volltag = isset($_POST["volltag"]) ? 1 : 0;
$wiederholung = isset($_POST["wiederholung"]) ? 1 : 0;
$benachrichtigung = isset($_POST["benachrichtigung"]) ? 1 : 0;
$privat = isset($_POST["privat"]) ? 1 : 0;
// Name ermitteln
if (isset($_POST["name"])) {
$name = $_POST["name"];
// Wenn der Name fehlt
if (empty($_POST["name"])) {
$name = $_SESSION["name"];
}
} else {
$name = $_SESSION["name"];
}
// Dauer des Events
$dauer = !ctype_digit($_POST["dauer"]) ? '1' : $_POST["dauer"];
// Serienevents
if (
$dauer >= 1 &&
$dauer <= $SERIENEVENTS
) {
$startTag = $_POST["tag"];
$startMonat = $_POST["monat"];
$startJahr = $_POST["jahr"];
$zaehler = 0;
$gruppe = date("YmdHis") . mt_rand(100, 999);
$starttime = mktime(0, 0, 0, $startMonat, $startTag, $startJahr);
if (!isset($_POST["tageauswahl"])) {
for ($i = 0; $i < $_POST["repeatcount"]; $i++) {
$startJahr = date("Y", $starttime);
$startMonat = date("m", $starttime);
$startTag = date("d", $starttime);
$everyTime = intval($_POST["repeatnr"]);
$everyTime = ($everyTime < 1) ? 1 : $everyTime;
if ($_POST["repeat"] == "NORMAL") {
$_POST["repeatnr"] = 1;
$_POST["repeatcount"] = 1;
} else {
eventEintragen();
$tagtime = $starttime;
for ($y = 1; $y < $dauer; $y++) {
$tagtime = strtotime("+ 1 day", $tagtime);
$startJahr = date("Y", $tagtime);
$startMonat = date("m", $tagtime);
$startTag = date("d", $tagtime);
eventEintragen();
}
}
switch ($_POST["repeat"]) {
case "NORMAL":
for ($y = 0; $y < $dauer; $y++) {
eventEintragen();
$starttime = strtotime("+ 1 day", $starttime);
$startJahr = date("Y", $starttime);
$startMonat = date("m", $starttime);
$startTag = date("d", $starttime);
}
break;
case "TAG":
$days = "+" . strval($everyTime) . " day";
$starttime = strtotime($days, $starttime);
break;
case "WOCHE":
$weeks = "+" . $everyTime . " week";
$starttime = strtotime($weeks, $starttime);
break;
case "MONAT4W":
$everyTime = intval($_POST["repeatnr"]) * 4;
$everyTime = ($everyTime < 1) ? 1 : $everyTime;
$weeks = "+" . $everyTime . " week";
$starttime = strtotime($weeks, $starttime);
break;
case "MONAT":
$months = "+" . $everyTime . " month";
$starttime = strtotime($months, $starttime);
break;
case "MONTAG":
$monday = "+" . $everyTime . " Monday";
$starttime = strtotime($monday, $starttime);
break;
case "DIENSTAG":
$tuesday = "+" . $everyTime . " Tuesday";
$starttime = strtotime($tuesday, $starttime);
break;
case "MITTWOCH":
$wednesday = "+" . $everyTime . " Wednesday";
$starttime = strtotime($wednesday, $starttime);
break;
case "DONNERSTAG":
$thursday = "+" . $everyTime . " Thursday";
$starttime = strtotime($thursday, $starttime);
break;
case "FREITAG":
$friday = "+" . $everyTime . " Friday";
$starttime = strtotime($friday, $starttime);
break;
case "SAMSTAG":
$saturday = "+" . $everyTime . " Saturday";
$starttime = strtotime($saturday, $starttime);
break;
case "SONNTAG":
$sunday = "+" . $everyTime . " Sunday";
$starttime = strtotime($sunday, $starttime);
break;
}
}
} else {
// Tageauswahl (mehrere Tage wurden ausgewählt)
if (isset($_POST["tage"])) {
// Eintragen
foreach ($_POST["tage"] as $tag) {
// Datum zusammensetzen
$start = $tag . ' ' . (isset($_POST["volltag"]) ? '00:00' : $_POST["stunde"] . ':' . $_POST["minute"]) . ':' . '01';
$ende = $tag . ' ' . (isset($_POST["volltag"]) ? '00:00' : $_POST["stunde2"] . ':' . $_POST["minute2"]) . ':' . '00';
// Farben tauschen
tauschePrioritaetFarbe_kategorieFarbe();
$insert = $db->prepare("INSERT INTO `" . $TABLE_PREFIX . "_kalender`
SET
`start`= :start,
`ende`= :ende,
`volltag`= :volltag,
`name`= :name,
`event`= :event,
`beschreibung`= :beschreibung,
`adresse`= :adresse,
`prioritaet`= :prioritaet,
`gruppe`= :gruppe,
`benachrichtigung`= :benachrichtigung,
`privat`= :privat,
`aufgabe`= :aufgabe,
`kategorie`= :kategorie");
$insert->execute([
':start' => $start,
':ende' => $ende,
':volltag' => $volltag,
':name' => $name,
':event' => strip_tags($_POST["event"]),
':beschreibung' => strip_tags(trim($_POST["beschreibung"]), $HTML_TAGS),
':adresse' => $_POST["adresse"],
':prioritaet' => $_POST["prioritaet"],
':gruppe' => $gruppe,
':benachrichtigung' => $benachrichtigung,
':privat' => $privat,
':aufgabe' => $_POST["aufgabe"],
':kategorie' => $_POST["kategorie"]
]);
}
$dauer = count($_POST["tage"]);
} else {
die('<!-- X2 -->'); // Ungültiges Datum
}
}
$ef = ($dauer == 1) ? 'E' : 'F';
echo $_POST["jahr"] . '|' . $_POST["monat"] . '|' . $ef;
// modify RaHa ->
// Modifikation SENDE-EVENT-MAIL
sendeeventmail();
// <- modify RaHa
} else {
echo '<!-- X6 -->'; // Die Anzahl der Tage benötigt einen gültigen Wert!
}
} else {
echo '<!-- X2 -->'; // Ungültiges Datum
}
}
}
/*
* Event kopieren oder bearbeiten
*/
if (isset($_POST["bearbeiten"])) {
// Datum überprüfen
if (
checkdate($_POST["monat"], $_POST["tag"], $_POST["jahr"]) &&
$_POST["jahr"] >= $JAHR_MIN &&
$_POST["jahr"] <= $JAHR_MAX
) {
// Benutzer überprüfen
if (BENUTZER == true) {
// Name und Gruppe aus der DB-Tabelle holen
$select = $db->prepare("SELECT `name`, `gruppe`
FROM `" . $TABLE_PREFIX . "_kalender`
WHERE `id` = :id");
$select->execute([':id' => $_POST["id"]]);
$status = $select->fetch();
// Berechtigung des Benutzers überprüfen
if (
$_SESSION["name"] === $status["name"] ||
$_SESSION["name"] === $NAME
) { // Admin.
// Datum zusammensetzen
$start = $_POST["jahr"] . '-' . zZ($_POST["monat"]) . '-' . zZ($_POST["tag"]) . ' ' . (isset($_POST["volltag"]) ? '00:00' : $_POST["stunde"] . ':' . $_POST["minute"]) . ':' . '01';
$ende = $_POST["jahr"] . '-' . zZ($_POST["monat"]) . '-' . zZ($_POST["tag"]) . ' ' . (isset($_POST["volltag"]) ? '00:00' : $_POST["stunde2"] . ':' . $_POST["minute2"]) . ':' . '00';
// Ganztägig / Wiederholung / Benachrichtigung / Privat
$volltag = isset($_POST["volltag"]) ? 1 : 0;
$wiederholung = isset($_POST["wiederholung"]) ? 1 : 0;
$benachrichtigung = isset($_POST["benachrichtigung"]) ? 1 : 0;
$privat = isset($_POST["privat"]) ? 1 : 0;
// Name ermitteln
if (isset($_POST["name"])) {
$name = $_POST["name"];
if (empty($_POST["name"])) {
$name = $_SESSION["name"];
}
} else {
$name = $_SESSION["name"];
}
// Event kopieren
if (isset($_POST["kopieren"])) {
// Gruppe zuweisen
$gruppe = $status["gruppe"];
if (isset($_POST["neuegruppe"])) {
$gruppe = date("YmdHis") . mt_rand(100, 999);
}
$insert = $db->prepare("INSERT INTO `" . $TABLE_PREFIX . "_kalender`
SET
`start`= :start,
`ende`= :ende,
`volltag`= :volltag,
`name`= :name,
`event`= :event,
`beschreibung`= :beschreibung,
`adresse`= :adresse,
`prioritaet`= :prioritaet,
`gruppe`= :gruppe,
`wiederholung`= :wiederholung,
`benachrichtigung`= :benachrichtigung,
`privat`= :privat,
`aufgabe`= :aufgabe,
`kategorie`= :kategorie");
if ($insert->execute([
':start' => $start,
':ende' => $ende,
':volltag' => $volltag,
':name' => $name,
':event' => strip_tags($_POST["event"]),
':beschreibung' => strip_tags(trim($_POST["beschreibung"]), $HTML_TAGS),
':adresse' => $_POST["adresse"],
':prioritaet' => $_POST["prioritaet"],
':gruppe' => $gruppe,
':wiederholung' => $wiederholung,
':benachrichtigung' => $benachrichtigung,
':privat' => $privat,
':aufgabe' => $_POST["aufgabe"],
':kategorie' => $_POST["kategorie"]
])) {
echo intval($_POST["jahr"]) . '|' . intval($_POST["monat"]) . '|K';
}
}
// Event bearbeiten
else {
// Farben tauschen
tauschePrioritaetFarbe_kategorieFarbe();
$update = $db->prepare("UPDATE `" . $TABLE_PREFIX . "_kalender`
SET
`start`= :start,
`ende`= :ende,
`volltag`= :volltag,
`name`= :name,
`event`= :event,
`beschreibung`= :beschreibung,
`adresse`= :adresse,
`prioritaet`= :prioritaet,
`wiederholung`= :wiederholung,
`benachrichtigung`= :benachrichtigung,
`privat`= :privat,
`aufgabe`= :aufgabe,
`kategorie`= :kategorie
WHERE
`id` = :id");
if ($update->execute([
':start' => $start,
':ende' => $ende,
':volltag' => $volltag,
':name' => $name,
':event' => strip_tags($_POST["event"]),
':beschreibung' => $_POST["beschreibung"],
':adresse' => $_POST["adresse"],
':prioritaet' => $_POST["prioritaet"],
':wiederholung' => $wiederholung,
':benachrichtigung' => $benachrichtigung,
':privat' => $privat,
':aufgabe' => $_POST["aufgabe"],
':kategorie' => $_POST["kategorie"],
':id' => $_POST["id"]
])) {
echo intval($_POST["jahr"]) . '|' . intval($_POST["monat"]) . '|A';
}
}
// modify RaHa ->
// Modifikation SENDE-EVENT-MAIL
sendeeventmail();
// <- modify RaHa
} else {
echo '<!-- X3 -->'; // Keine Berechtigung zum ändern
}
}
} else {
echo '<!-- X2 -->'; // Ungültiges Datum
}
}
/*
* Event löschen
*/
if (
isset(
$_POST["loeschen"],
$_POST["bestaetigung"]
) || // Bestätigung zum löschen
isset($_POST["gruppe_del"])
) {
// Benutzer überprüfen
if (BENUTZER == true) {
// Jahr, Monat und Name aus der DB-Tabelle holen
$select = $db->prepare("SELECT YEAR(`start`) AS jahr, MONTH(`start`) AS monat, `name`
FROM `" . $TABLE_PREFIX . "_kalender`
WHERE `id` = :id");
$select->execute([':id' => $_POST["id"]]);
$status = $select->fetch();
// Berechtigung des Benutzers überprüfen
if (
$_SESSION["name"] === $status["name"] ||
$_SESSION["name"] === $NAME
) { // Admin.
// Löschen
if (isset($_POST["gruppe_del"])) {
$delete = $db->prepare("DELETE FROM `" . $TABLE_PREFIX . "_kalender`
WHERE `gruppe`= :gruppe");
if ($delete->execute([':gruppe' => $_POST["gruppe"]])) {
echo $status["jahr"] . '|' . $status["monat"] . '|M';
}
} else {
$delete = $db->prepare("DELETE FROM `" . $TABLE_PREFIX . "_kalender`
WHERE `id`= :id");
if ($delete->execute([':id' => $_POST["id"]])) {
echo $status["jahr"] . '|' . $status["monat"] . '|L';
}
}
} else {
echo '<!-- X4 -->'; // Sie haben keine Berechtigung diesen Event zu löschen!
}
}
}
/*
* Suche
*/
if (isset($_POST["suchbegriff"])) {
// Nach dem Marker (*) suchen und entfernen
$asterisk = substr_count($_POST["suchbegriff"], '*') > 0 ? true : false;
$suchbegriff = trim(str_replace("*", "", $_POST["suchbegriff"]));
// Ungültige HTML-Zeichen umwandeln
$suchbegriff = trim(htmlspecialchars($suchbegriff, ENT_HTML5, 'UTF-8'));
if ($suchbegriff != "") {
// Tipps zur Suche
$tippsZurSuche = '<details>
<summary>Tipps zur Suche</summary>
<p>Es kann nach einem <em>Event</em>, einer <em>Beschreibung</em> einem <em>Namen</em> einer <em>Kategorie</em>, einer <em>URL</em>, <br>
einer <em>Adresse</em>, einem <em>Schlüsselwort</em>, einem <em>Datum</em>, einer <em>Uhrzeit</em> oder einem Emoji 😉<br>
gesucht werden.</p>
<p>Beachten Sie dabei die Groß.- und Kleinschreibung sowie die Rechtschreibung!</p>
<p>Fügen Sie ein <span style="color: var(--highlight-color)">*</span> (Sternchen) hinzu, um im gesamten Kalender zu suchen.</p>
<p>Ein <span style="color: var(--highlight-color)">%</span> (Prozent-Zeichen) als Platzhalter für ein oder mehrere Zeichen, <br>
wenn Sie den Suchbegriff nicht genau kennen (z. B.: <em>Ph</em><span style="color: var(--highlight-color)">%</span><em>onie</em> für <em>Philharmonie</em>)<br>
oder einen <span style="color: var(--highlight-color)">_</span> (Unterstrich) für ein einzelnes Zeichen.</p>
<p>Um nach einem bestimmten Datum zu suchen geben Sie: <span style="color: var(--highlight-color)"><span title="Jahr">YYYY</span>-<span title="Monat">MM</span>-<span title="Tag">DD</span></span> ein<br>
(z. B.: <strong>' . date("Y-m-d") . '</strong>). Einen Monatstag erhalten Sie mit: <span style="color: var(--highlight-color)">-<span title="Monat">MM</span>-<span title="Tag">DD</span></span> (z. B.: <strong>' . date("-m-d") . '</strong>)<br>
oder: <span style="color: var(--highlight-color)">-%-<span title="Tag">DD</span></span> für einen Tag (z. B.: <strong>-%-' . date("d") . '</strong>).</p>
<p>Eine bestimmte Uhrzeit finden Sie mit: <span style="color: var(--highlight-color)"><span title="Stunden">HH</span>:<span title="Minuten">II</span></span> (z. B.: <strong>' . date("H:i") . '</strong>) oder <span style="color: var(--highlight-color)"><span title="Stunden">HH</span>:%</span><br>
(z. B.: <strong>' . date("H:") . '%</strong>) wenn die Minuten unbekannt sind.<br>
Das Komplette Datumsformat schaut folgend aus: <span style="color: var(--highlight-color)"><span title="Jahr (Y, 4-stellig)">YYYY</span>-<span title="Monat (M, 2-stellig)">MM</span>-<span title="Tag (D, 2-stellig)">DD</span> <span title="Stunden (H, 2-stellig)">HH</span>:<span title="Minuten (I, 2-stellig)">II</span>:<span title="Sekunden (S, 2-stellig)">SS</span></span>.</p>
</details>';
// Anzahl der Wörter ermitteln
$search = preg_split('/[\s]+/', $suchbegriff);
// Nur im ausgewählten Jahr oder im gesamten Kalender suchen
$arrays = isset($_POST["genau"]) ? [":suchbegriff" => $suchbegriff] : [":suchbegriff" => '%' . $suchbegriff . '%'];
$sqlAndYear = $asterisk == true ? '' : "AND YEAR(`start`) = :jahr";
$asterisk == false ? $arrays[":jahr"] = $_POST["jahr"] : null;
$ascdesc = isset($_POST["absteigend"]) ? 'DESC' : 'ASC';
$sqlOrderByLimit = " ORDER BY `" . $_POST["sortierung"] . "` " . $ascdesc . " LIMIT 250";
$sqlAlike = isset($_POST["genau"]) ? "=" : "LIKE";
// Nach mehreren Wörtern suchen
if (
count($search) > 1 &&
count($search) < 13 &&
mb_strlen($suchbegriff) >= 5 &&
!isset($_POST["genau"])
) {
// Wörter mit der Stopwortliste filtern
$stoppwortliste = array("anderes", "beides", "braucht", "darüber", "des", "dort", "einen", "etwas", "gekonnt", "hätte", "ich", "innerhalb", "ist", "kann", "konnten", "mein", "möchten", "nachdem", "nutzt", "seine", "solange", "somit", "unser", "vorher", "was", "wen", "wieder", "würde", "zwischen", "ab", "aber", "abgerufen", "abgerufene", "abgerufener", "abgerufenes", "acht", "ähnlich", "alle", "allein", "allem", "allen", "aller", "allerdings", "allerlei", "alles", "allgemein", "allmählich", "allzu", "als", "alsbald", "also", "am", "an", "ander", "andere", "anderem", "anderen", "anderer", "andererseits", "anderes", "anderm", "andern", "andernfalls", "anders", "anerkannt", "anerkannte", "anerkannter", "anerkanntes", "anfangen", "anfing", "angefangen", "angesetze", "angesetzt", "angesetzten", "angesetzter", "ansetzen", "anstatt", "arbeiten", "auch", "auf", "aufgehört", "aufgrund", "aufhören", "aufhörte", "aufzusuchen", "aus", "ausdrücken", "ausdrückt", "ausdrückte", "ausgenommen", "außen", "ausser", "außer", "ausserdem", "außerdem", "außerhalb", "author", "autor", "bald", "bearbeite", "bearbeiten", "bearbeitete", "bearbeiteten", "bedarf", "bedürfen", "bedurfte", "befragen", "befragte", "befragten", "befragter", "begann", "beginnen", "begonnen", "behalten", "behielt", "bei", "beide", "beiden", "beiderlei", "beides", "beim", "beinahe", "beitragen", "beitrugen", "bekannt", "bekannte", "bekannter", "bekennen", "benutzt", "bereits", "berichten", "berichtet", "berichtete", "berichteten", "besonders", "besser", "bestehen", "besteht", "beträchtlich", "bevor", "bezüglich", "bietet", "bin", "bis", "bisher", "bislang", "bist", "bleiben", "blieb", "bloß", "bloss", "böden", "brachte", "brachten", "brauchen", "braucht", "bräuchte", "bringen", "bsp.", "bzw", "ca.", "da", "dabei", "dadurch", "dafür", "dagegen", "daher", "dahin", "damals", "damit", "danach", "daneben", "dank", "danke", "danken", "dann", "dannen", "daran", "darauf", "daraus", "darf", "darfst", "darin", "darüber", "darüberhinaus", "darum", "darunter", "das", "dass", "daß", "dasselbe", "davon", "davor", "dazu", "dein", "deine", "deinem", "deinen", "deiner", "deines", "dem", "demnach", "demselben", "den", "denen", "denn", "dennoch", "denselben", "der", "derart", "derartig", "derem", "deren", "derer", "derjenige", "derjenigen", "derselbe", "derselben", "derzeit", "des", "deshalb", "desselben", "dessen", "desto", "deswegen", "dich", "die", "diejenige", "dies", "diese", "dieselbe", "dieselben", "diesem", "diesen", "dieser", "dieses", "diesseits", "dinge", "dir", "direkt", "direkte", "direkten", "direkter", "doch", "doppelt", "dort", "dorther", "dorthin", "drauf", "drei", "dreißig", "drin", "dritte", "drüber", "drunter", "du", "dunklen", "durch", "durchaus", "dürfen", "durfte", "dürfte", "durften", "eben", "ebenfalls", "ebenso", "ehe", "eher", "eigenen", "eigenes", "eigentlich", "ein", "einbaün", "eine", "einem", "einen", "einer", "einerseits", "eines", "einfach", "einführen", "einführte", "einführten", "eingesetzt", "einig", "einige", "einigem", "einigen", "einiger", "einigermaßen", "einiges", "einmal", "eins", "einseitig", "einseitige", "einseitigen", "einseitiger", "einst", "einstmals", "einzig", "ende", "entsprechend", "entweder", "er", "ergänze", "ergänzen", "ergänzte", "ergänzten", "erhält", "erhalten", "erhielt", "erhielten", "erneut", "eröffne", "eröffnen", "eröffnet", "eröffnete", "eröffnetes", "erst", "erste", "ersten", "erster", "es", "etc", "etliche", "etwa", "etwas", "euch", "euer", "eure", "eurem", "euren", "eurer", "eures", "fall", "falls", "fand", "fast", "ferner", "finde", "finden", "findest", "findet", "folgende", "folgenden", "folgender", "folgendes", "folglich", "fordern", "fordert", "forderte", "forderten", "fortsetzen", "fortsetzt", "fortsetzte", "fortsetzten", "fragte", "frau", "frei", "freie", "freier", "freies", "fuer", "fünf", "für", "gab", "gängig", "gängige", "gängigen", "gängiger", "gängiges", "ganz", "ganze", "ganzem", "ganzen", "ganzer", "ganzes", "gänzlich", "gar", "gbr", "geb", "geben", "geb
lieben", "gebracht", "gedurft", "geehrt", "geehrte", "geehrten", "geehrter", "gefallen", "gefälligst", "gefällt", "gefiel", "gegeben", "gegen", "gehabt", "gehen", "geht", "gekommen", "gekonnt", "gemacht", "gemäß", "gemäss", "gemocht", "genommen", "genug", "gern", "gesagt", "gesehen", "gestern", "gestrige", "getan", "geteilt", "geteilte", "getragen", "gewesen", "gewissermaßen", "gewollt", "geworden", "ggf", "gib", "gibt", "gleich", "gleichwohl", "gleichzeitig", "glücklicherweise", "gmbh", "gratulieren", "gratuliert", "gratulierte", "gut", "gute", "guten", "hab", "habe", "haben", "haette", "halb", "hallo", "hast", "hat", "hätt", "hatte", "hätte", "hatten", "hätten", "hattest", "hattet", "hen", "heraus", "herein", "heute", "heutige", "hier", "hiermit", "hiesige", "hin", "hinein", "hinten", "hinter", "hinterher", "hoch", "höchstens", "hundert", "ich", "igitt", "ihm", "ihn", "ihnen", "ihr", "ihre", "ihrem", "ihren", "ihrer", "ihres", "im", "immer", "immerhin", "important", "in", "indem", "indessen", "info", "infolge", "innen", "innerhalb", "ins", "insofern", "inzwischen", "irgend", "irgendeine", "irgendwas", "irgendwen", "irgendwer", "irgendwie", "irgendwo", "ist", "ja", "jährig", "jährige", "jährigen", "jähriges", "je", "jede", "jedem", "jeden", "jedenfalls", "jeder", "jederlei", "jedes", "jedoch", "jemand", "jene", "jenem", "jenen", "jener", "jenes", "jenseits", "jetzt", "kam", "kann", "kannst", "kaum", "kein", "keine", "keinem", "keinen", "keiner", "keinerlei", "keines", "keineswegs", "klar", "klare", "klaren", "klares", "klein", "kleinen", "kleiner", "kleines", "koennen", "koennt", "koennte", "koennten", "komme", "kommen", "kommt", "konkret", "konkrete", "konkreten", "konkreter", "konkretes", "könn", "können", "könnt", "konnte", "könnte", "konnten", "könnten", "künftig", "lag", "lagen", "langsam", "längst", "längstens", "lassen", "laut", "lediglich", "leer", "legen", "legte", "legten", "leicht", "leider", "lesen", "letze", "letzten", "letztendlich", "letztens", "letztes", "letztlich", "lichten", "liegt", "liest", "links", "mache", "machen", "machst", "macht", "machte", "machten", "mag", "magst", "mal", "man", "manche", "manchem", "manchen", "mancher", "mancherorts", "manches", "manchmal", "mann", "margin", "mehr", "mehrere", "mein", "meine", "meinem", "meinen", "meiner", "meines", "meist", "meiste", "meisten", "meta", "mich", "mindestens", "mir", "mit", "mithin", "mochte", "möchte", "möchten", "möchtest", "mögen", "möglich", "mögliche", "möglichen", "möglicher", "möglicherweise", "morgen", "morgige", "muessen", "muesst", "muesste", "muss", "muß", "müssen", "musst", "mußt", "müßt", "musste", "müsste", "müßte", "mussten", "müssten", "nach", "nachdem", "nacher", "nachhinein", "nächste", "nacht", "nahm", "nämlich", "natürlich", "neben", "nebenan", "nehmen", "nein", "neu", "neue", "neuem", "neuen", "neuer", "neues", "neun", "nicht", "nichts", "nie", "niemals", "niemand", "nimm", "nimmer", "nimmt", "nirgends", "nirgendwo", "noch", "nötigenfalls", "nun", "nur", "nutzen", "nutzt", "nützt", "nutzung", "ob", "oben", "oberhalb", "obgleich", "obschon", "obwohl", "oder", "oft", "ohne", "per", "pfui", "plötzlich", "pro", "reagiere", "reagieren", "reagiert", "reagierte", "rechts", "regelmäßig", "rief", "rund", "sage", "sagen", "sagt", "sagte", "sagten", "sagtest", "sämtliche", "sang", "sangen", "schätzen", "schätzt", "schätzte", "schätzten", "schlechter", "schließlich", "schnell", "schon", "schreibe", "schreiben", "schreibens", "schreiber", "schwierig", "sechs", "sect", "sehe", "sehen", "sehr", "sehrwohl", "seht", "sei", "seid", "sein", "seine", "seinem", "seinen", "seiner", "seines", "seit", "seitdem", "seite", "seiten", "seither", "selber", "selbst", "senke", "senken", "senkt", "senkte", "senkten", "setzen", "setzt", "setzte", "setzten", "sich", "sicher", "sicherlich", "sie", "sieben", "siebte", "siehe", "sieht", "sind", "singen", "singt", "so", "sobald", "sodaß", "soeben", "sofern", "sofort", "sog", "sogar", "solange", "solc", "solch", "solche", "solchem", "solchen", "solcher",
"solches", "soll", "sollen", "sollst", "sollt", "sollte", "sollten", "solltest", "somit", "sondern", "sonst", "sonstwo", "sooft", "soviel", "soweit", "sowie", "sowohl", "später", "spielen", "startet", "startete", "starteten", "statt", "stattdessen", "steht", "steige", "steigen", "steigt", "stets", "stieg", "stiegen", "such", "suchen", "tages", "tat", "tät", "tatsächlich", "tatsächlichen", "tatsächlicher", "tatsächliches", "tausend", "teile", "teilen", "teilte", "teilten", "titel", "toll", "total", "trage", "tragen", "trägt", "trotzdem", "trug", "tun", "tust", "tut", "txt", "übel", "über", "überall", "überallhin", "überdies", "übermorgen", "übrig", "übrigens", "ueber", "um", "ums", "umso", "unbedingt", "und", "ungefähr", "unmöglich", "unmögliche", "unmöglichen", "unmöglicher", "unnötig", "uns", "unse", "unsem", "unsen", "unser", "unsere", "unserem", "unseren", "unserer", "unseres", "unserm", "unses", "unten", "unter", "unterbrach", "unterbrechen", "unterhalb", "unwichtig", "usw", "vergangen", "vergangene", "vergangener", "vergangenes", "vermag", "vermögen", "vermutlich", "veröffentlichen", "veröffentlicher", "veröffentlicht", "veröffentlichte", "veröffentlichten", "veröffentlichtes", "verrate", "verraten", "verriet", "verrieten", "version", "versorge", "versorgen", "versorgt", "versorgte", "versorgten", "versorgtes", "viel", "viele", "vielen", "vieler", "vieles", "vielleicht", "vielmals", "vier", "völlig", "vollständig", "vom", "von", "vor", "voran", "vorbei", "vorgestern", "vorher", "vorne", "vorüber", "wachen", "waere", "während", "währenddessen", "wann", "war", "wär", "wäre", "waren", "wären", "warst", "warum", "was", "weder", "weg", "wegen", "weil", "weiß", "weiter", "weitere", "weiterem", "weiteren", "weiterer", "weiteres", "weiterhin", "welche", "welchem", "welchen", "welcher", "welches", "wem", "wen", "wenig", "wenige", "weniger", "wenigstens", "wenn", "wenngleich", "wer", "werde", "werden", "werdet", "weshalb", "wessen", "weswegen", "wichtig", "wie", "wieder", "wieso", "wieviel", "wiewohl", "will", "willst", "wir", "wird", "wirklich", "wirst", "wo", "wodurch", "wogegen", "woher", "wohin", "wohingegen", "wohl", "wohlweislich", "wolle", "wollen", "wollt", "wollte", "wollten", "wolltest", "wolltet", "womit", "woraufhin", "woraus", "worin", "wurde", "würde", "wurden", "würden", "z.B.", "zahlreich", "zehn", "zeitweise", "ziehen", "zieht", "zog", "zogen", "zu", "zudem", "zuerst", "zufolge", "zugleich", "zuletzt", "zum", "zumal", "zur", "zurück", "zusammen", "zuviel", "zwanzig", "zwar", "zwei", "zwischen", "zwölf");
$searchfield = array();
foreach ($search as $s) {
// Hinzufügen wenn es nicht in der Stoppwortliste ist
if (
mb_strlen($s) >= 1 &&
!in_array(mb_strtolower($s), $stoppwortliste)
) {
$searchfield[] = $s;
}
}
// Platzhalter
$total_words = count($searchfield);
$placeholder = [":p1", ":p2", ":p3", ":p4", ":p5", ":p6", ":p7", ":p8", ":p9", ":p10", ":p11", ":p12"];
if (
$total_words > 0 &&
$total_words <= count($placeholder)
) {
// SQL zusammensetzen ...
$SQL = "SELECT `start`, `ende`, `volltag`, `name`, `event`, `beschreibung`, `adresse`, `prioritaet`, `wiederholung`, `benachrichtigung`, `privat`, `aufgabe`, `kategorie`, `gruppe`, `id` FROM `" . $TABLE_PREFIX . "_kalender` WHERE (";
foreach ($searchfield as $key => $searchword) {
$SQL .= "`event` LIKE " . $placeholder[$key] . " OR ";
$SQL .= "`beschreibung` LIKE " . $placeholder[$key];
if ($key != ($total_words - 1)) {
$SQL .= " OR ";
}
}
// ... und ausführen
$select = $db->prepare($SQL . ") " . SQL_AND_INDIVIDUAL . SQL_AND_PRIVATE . $sqlAndYear . $sqlOrderByLimit);
foreach ($searchfield as $key => $wort) {
$like = "%" . $wort . "%";
$select->bindValue($placeholder[$key], $like);
}
if ($asterisk == false) {
$select->bindValue(":jahr", $_POST["jahr"]);
}
$select->execute();
$events = $select->fetchAll();
}
}
// Nach einem Wort suchen
else {
if (isset($_POST["aktuell"])) {
$select = $db->prepare("SELECT `start`, `ende`, `volltag`, `name`, `event`, `beschreibung`, `adresse`, `prioritaet`, `wiederholung`, `benachrichtigung`, `privat`, `aufgabe`, `kategorie`, `gruppe`, `id`
FROM `" . $TABLE_PREFIX . "_kalender`
WHERE ((TO_DAYS(`start`) - TO_DAYS(NOW())) >= 0
AND (
`name` " . $sqlAlike . " :suchbegriff OR
`event` " . $sqlAlike . " :suchbegriff OR
`beschreibung` " . $sqlAlike . " :suchbegriff OR
`adresse` " . $sqlAlike . " :suchbegriff OR
`kategorie` " . $sqlAlike . " :suchbegriff)
" . SQL_AND_INDIVIDUAL . SQL_AND_PRIVATE . " " . $sqlAndYear . ")
" . $sqlOrderByLimit);
} else {
$select = $db->prepare("SELECT `start`, `ende`, `volltag`, `name`, `event`, `beschreibung`, `adresse`, `prioritaet`, `wiederholung`, `benachrichtigung`, `privat`, `aufgabe`, `kategorie`, `gruppe`, `id`
FROM `" . $TABLE_PREFIX . "_kalender`
WHERE (
`start` " . $sqlAlike . " :suchbegriff OR
`ende` " . $sqlAlike . " :suchbegriff OR
`name` " . $sqlAlike . " :suchbegriff OR
`event` " . $sqlAlike . " :suchbegriff OR
`beschreibung` " . $sqlAlike . " :suchbegriff OR
`adresse` " . $sqlAlike . " :suchbegriff OR
`gruppe` " . $sqlAlike . " :suchbegriff OR
`kategorie` " . $sqlAlike . " :suchbegriff)
" . SQL_AND_INDIVIDUAL . SQL_AND_PRIVATE . " " . $sqlAndYear . "
" . $sqlOrderByLimit);
}
// Abfrage ausführen
$select->execute($arrays);
$events = $select->fetchAll();
}
// Anzahl der gefundenen Events
$gefunden = $select->rowCount();
// Navigation
echo sprintf(NAVIGATION, '', '', '', KOPIEREN, AUSGABEX) .
'<div id="aktevents"><mark class="mark">Suche:</mark> <q><em style="' . ($gefunden == 0 ? 'text-decoration: Underline Wavy Red;' : '') . ' letter-spacing: 1px;">' .
htmlspecialchars($suchbegriff, ENT_HTML5, 'UTF-8') . '</em></q>';
// Wurde etwas gefunden
if ($gefunden > 0) {
$begrenzung = ($gefunden >= 15) ? '<br>' . auswahlBegrenzung($gefunden) : '';
$gruppenoptionen = (BENUTZER == true) ? '<br><span class="optionLink print" onPointerDown="gruppenOptionEinAus()" title="Gruppenoptionen anzeigen Taste: G">Gruppenoptionen</span>' : '';
echo '<br><mark class="mark">' . $gefunden . ($gefunden == 1 ? ' Ergebnis' : ' Ergebnisse') . ($asterisk == false ? ' für das Jahr ' . $_POST["jahr"] : ' im Kalender') . '</mark>' . $begrenzung . $gruppenoptionen;
echo '<form id="eKmarkierung" method="post" class="counter"><div class="flex">';
foreach ($events as $nr => $event) {
if (in_array($nr, range(25, 5000, 25))) {
echo '</div><hr><div class="flex">';
}
echo anzeigen(
false,
$event["start"],
$event["ende"],
$event["volltag"],
$event["name"],
$event["event"],
$event["beschreibung"],
$event["adresse"],
$event["prioritaet"],
$event["wiederholung"],
$event["benachrichtigung"],
$event["privat"],
$event["aufgabe"],
$event["kategorie"],
$event["gruppe"],
$event["id"],
$PRIORITAET,
$BENUTZER,
$KALENDERBLATT,
$_POST["jahr"],
ADMIN
);
}
echo '</div></form>' . OPTIONEN . $tippsZurSuche . '</div>';
} else {
echo '<p><mark class="mark">➥</mark> Keine Events' . ($asterisk == false ? ' im Jahr ' . $_POST["jahr"] : ' im Kalender') . ' gefunden die dem Suchbegriff entsprechen.</p>';
// Meinten Sie ...
$select = $db->query("SELECT `name`, `event`, `beschreibung`, `kategorie`, `adresse`
FROM `" . $TABLE_PREFIX . "_kalender`
WHERE " . (BENUTZER == true ? '`privat` >= 0' : '`privat` = 0'));
$events = $select->fetchAll();
if ($select->rowCount() > 0) {
// Das Ergebnis einer Zeichenkette hinzufügen
$text = "";
foreach ($events as $event) {
$text .= " " . $event["name"] . " " . $event["event"] . " " . $event["beschreibung"] . " " . $event["kategorie"] . " " . $event["adresse"];
}
// Zeichen entfernen
$text = str_replace(['"', "'", '?', '!', '%', '.', ':', ',', ';', '+', '#', '@', '*', '^', '°', '(', ')', '[', ']', '<', '>', '/', '\\'], " ", $text);
$brain = [];
$woerter = explode(" ", $text);
$woerter = array_map('strip_tags', $woerter);
$woerter = array_map('entferneBBcodes', $woerter);
$woerter = array_map('trim', $woerter);
$woerter = array_unique($woerter);
// Wörter vergleichen
foreach ($woerter as $wort) {
// Mit metaphone() und soundex()
if (
metaphone($suchbegriff) == metaphone($wort) ||
soundex($suchbegriff) == soundex($wort)
) {
if (mb_strlen($wort) > 1) {
if (
!is_numeric($wort) &&
$wort != "*1."
) {
$brain[] = $wort;
}
}
}
}
// Suchbegriff entfernen
$index = array_search($suchbegriff, $brain);
if ($index !== false) {
array_splice($brain, $index, 1);
}
// Wörter anzeigen
$anzahl = count($brain);
if ($anzahl > 0) {
$zaehler = 0;
echo '<p>Meinten Sie ';
foreach ($brain as $think) {
echo '<span class="suchenLink" onPointerDown="sucheStarten(`' . $think .
($asterisk == true ? '*' : '') . '`)" title="Events mit dem Begriff ' . $think . ' anzeigen">' . $think . '</span>';
if (($zaehler + 2) == $anzahl) {
echo ' oder ';
} elseif (($zaehler + 1) < $anzahl) {
echo ', ';
}
$zaehler++;
}
echo '?</p>';
}
}
echo $tippsZurSuche . '</div>';
}
}
}
/*
* Formulare zeigen
*/
if (isset($_GET["form"])) {
$lokalesDatum = '<span title="Lokales Datum und Uhrzeit Wecker anzeigen Taste: V" id="datumLokal" class="mobile" onPointerDown="wecker()"><span id="eKdatum"></span><span id="eKzeit"></span></span>';
switch ($_GET["form"]) {
// Eintragen
case 'eintragen':
if (!BENUTZER) return false;
// Navigation
echo sprintf(NAVIGATION, $lokalesDatum, '', '', '', AUSGABEX) .
'<form id="eKform" method="post" enctype="application/x-www-form-urlencoded" accept-charset="utf-8" lang="de-DE">';
$datalist = datenliste($_GET["jahr"], $db, $TABLE_PREFIX);
$volltag = $_GET["stunde"] > 0 ? false : true;
$pflichtfeldBeschreibung = (in_array('beschreibung', $PLICHTFELDER)) ? ' required="required"' : '';
$pflichtfeldTitel = (in_array('beschreibung', $PLICHTFELDER)) ? '(Erforderlich)' : '(Optional)';
echo '<div><mark class="mark">Event eintragen</mark></div>
<p>' .
auswahlTag($_GET["tag"], true) . auswahlMonat($_GET["monat"]) . auswahlJahr($_GET["jahr"]) . '
</p>
<p class="formLineHeight">
<label title="Event eintragen oder auswählen (Erforderlich) Zugriffstaste: E"><span class="mobile">Event: </span><input type="text" name="event" id="event" list="datenliste" size="28" maxlength="100" required="required" placeholder="Event eintragen oder auswählen" spellcheck="true" accesskey="e"></label>
' . $datalist .
'<span class="volltag ausblenden_volltag">' . auswahlUhrzeit($volltag, zZ($_GET["stunde"]), zZ($_GET["minute"])) . auswahlUhrzeit2() . ' <span id="eKdifferenz"></span></span></span>
</p>
<details class="formLineHeight">
<summary accesskey="o"><u>O</u>ptionen</summary>
<span class="ausblenden_dauer"><label title="Dauer des Events (Optional) Anzahl in Tagen (Maximal ' . $SERIENEVENTS . ' Tage). Zugriffstaste: T"><u>T</u>age: <input type="number" name="dauer" id="dauer" value="1" min="1" max="' . $SERIENEVENTS . '" required="required" placeholder="Zahl!" onInput="mehrTage(this.value)" onwheel="eingabefeldMrAendern(event, `dauer`, 1);mehrTage(this.value)" accesskey="t"></label></span>
<span id="eKmehrtage"></span>
<span class="ausblenden_wiederholung"><input type="checkbox" name="wiederholung" id="wiederholung" accesskey="j"> <label for="wiederholung" title="Jährlicher Event (Optional) Für Geburtstage, Feiertage etc. Zugriffstaste: J"><u>J</u>ährlicher Event</label></span>
<span class="ausblenden_adresse">' . adresseEintragen("", $db, $TABLE_PREFIX, $ADRESSDATENBANK) . '</span>
<span class="ausblenden_prioritaet">' . auswahlPrioritaet($PRIORITAET, $_GET["jahr"], false, true, 0) . '</span>
<span class="ausblenden_aufgabe">' . auswahlAufgabe("0", false) . '</span><br>
<span class="ausblenden_kategorie">' . auswahlKategorien('') . '</span> 
<span class="ausblenden_privat"><input type="checkbox" name="privat" id="privat"' . ($EINZELPERSON_ANZEIGE == "ja" ? ' checked="checked"' : '') . ' accesskey="p"> <label for="privat" title="Privater Event (Optional). Diesen Event nicht öffentlich anzeigen. Zugriffstaste: P"><u>P</u>rivat</label></span>
' . checkboxBenachrichtigung($ABSENDER, 0) . '
' . benutzerEintragen($BENUTZER_EDIT, $_SESSION["name"], $NAME, $db, $TABLE_PREFIX) . '
' . auswahlWiederholung() . '
</details>
<span id="formVorschau"></span>
<p class="formLineHeight"><label><u>B</u>eschreibung:<br>
<textarea name="beschreibung" id="textarea" class="textarea ausblenden_beschreibung"' . $pflichtfeldBeschreibung . ' placeholder="Eine Beschreibung des Events ' . $pflichtfeldTitel . '" accesskey="b" onInput="beschreibungAlsEvent();textCounter();"></textarea></label>
</p>
<input type="hidden" name="eintragen">';
break;
// Bearbeiten
case 'bearbeiten':
if (!BENUTZER) return false;
// Navigation
echo sprintf(NAVIGATION, $lokalesDatum, '', '', '', AUSGABEX) .
'<form id="eKform" method="post" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">';
$select = $db->prepare("SELECT `start`, `ende`, `volltag`, `name`, `event`, `beschreibung`, `adresse`, `prioritaet`, `wiederholung`, `benachrichtigung`, `privat`, `aufgabe`, `kategorie`, `id`
FROM `" . $TABLE_PREFIX . "_kalender`
WHERE `id` = :id
LIMIT 1");
$select->execute([':id' => $_GET["id"]]);
$event = $select->fetch();
sscanf($event["start"], "%4s-%2s-%2s %2s:%2s", $dbJahr, $dbMonat, $dbTag, $dbStunde, $dbMinute);
sscanf($event["ende"], "%4s-%2s-%2s %2s:%2s", $a, $b, $c, $dbStunde2, $dbMinute2);
$differenz = stundenDifferenz(substr($event["start"], 11, 5), substr($event["ende"], 11, 5));
$wiederholung = $event["wiederholung"] == 1 ? ' checked="checked"' : '';
$privat = $event["privat"] == 1 ? ' checked="checked"' : '';
$volltag = $event["volltag"] == 1 ? true : false;
$datalist = datenliste($dbJahr, $db, $TABLE_PREFIX);
$berechtigung = ($_SESSION["name"] === $event["name"] || $_SESSION["name"] === $NAME) ? '' : '<p id="berechtigung">Sie haben keine Berechtigung diesen Event zu bearbeiten!</p>';
$pflichtfeldBeschreibung = (in_array('beschreibung', $PLICHTFELDER)) ? ' required="required"' : '';
$pflichtfeldTitel = (in_array('beschreibung', $PLICHTFELDER)) ? '(Erforderlich)' : '(Optional)';
echo '<div><mark class="mark">Event bearbeiten</mark>
<span class="navLink ig_loeschen" onPointerDown="zeigeFormular(`loeschen`,' . abs($dbTag) . ',' . abs($dbMonat) . ',' . $dbJahr . ',' . $event["id"] . ')" title="Event löschen"></span>
<span class="navLink ig_neu" onPointerDown="zeigeFormular(`eintragen`,' . abs($dbTag) . ',' . abs($dbMonat) . ',' . $dbJahr . ',null)" title="Event für diesen Tag eintragen"></span></div>
' . $berechtigung . '
<p>' .
auswahlTag($dbTag, false) . auswahlMonat($dbMonat) . auswahlJahr($dbJahr) . '
</p>
<p class="formLineHeight">
<label title="Event eintragen oder auswählen (Erforderlich) Zugriffstaste: E"><span class="mobile">Event: </span><input type="text" name="event" id="event" list="datenliste" value="' . htmlspecialchars($event["event"], ENT_HTML5, 'UTF-8') . '" size="28" maxlength="100" required="required" placeholder="Event eintragen oder auswählen" spellcheck="true" accesskey="e"></label>
' . $datalist . '
<span class="volltag ausblenden_volltag">' . auswahlUhrzeit($volltag, $dbStunde, $dbMinute) . auswahlUhrzeit2($dbStunde2, $dbMinute2) . ' <span id="eKdifferenz">' . $differenz . '</span></span></span>
</p>
<details class="formLineHeight">
<summary accesskey="o"><u>O</u>ptionen</summary>
<span class="ausblenden_kopieren"><input type="checkbox" name="kopieren" id="kopieren" accesskey="k" onClick="mehrAnzeigen(`neueGruppeOption`);kopierenAnzeigen()"> <label for="kopieren" title="Event zum ausgewählten Datum kopieren (Optional, die Gruppe wird beibehalten). Zugriffstaste: K"><u>K</u>opieren</label>  </span>
<span class="nowrap ausblenden_wiederholung"><input type="checkbox" name="wiederholung" id="wiederholung"' . $wiederholung . ' accesskey="j"> <label for="wiederholung" title="Jährlicher Event (Optional) Für Geburtstage, Feiertage etc. Zugriffstaste: J"><u>J</u>ährlicher Event</label></span>
<span id="neueGruppeOption" style="display:none"><input type="checkbox" name="neuegruppe" id="neuegruppe" accesskey="g"> <label for="neuegruppe" title="Eine neue Gruppe für diesen Event erstellen (Optional). Zugriffstaste: G">Neue <u>G</u>ruppe erstellen</label></span>
<span class="ausblenden_adresse">' . adresseEintragen($event["adresse"], $db, $TABLE_PREFIX, $ADRESSDATENBANK) . '</span>
<span class="ausblenden_prioritaet">' . auswahlPrioritaet($PRIORITAET, $dbJahr, false, true, $event["prioritaet"]) . '</span>
<span class="ausblenden_aufgabe">' . auswahlAufgabe($event["aufgabe"], true) . '</span><br>
<span class="ausblenden_kategorie">' . auswahlKategorien($event["kategorie"]) . '</span> 
<span class="ausblenden_privat"><input type="checkbox" name="privat" id="privat"' . $privat . ' accesskey="p"> <label for="privat" title="Privater Event (Optional). Diesen Event nicht öffentlich anzeigen. Zugriffstaste: P"><u>P</u>rivat</label></span>
' . checkboxBenachrichtigung($ABSENDER, $event["benachrichtigung"]) . '
' . benutzerEintragen($BENUTZER_EDIT, $_SESSION["name"], $NAME, $db, $TABLE_PREFIX) . '
</details>
<span id="formVorschau"></span>
<p class="formLineHeight"><label><u>B</u>eschreibung:<br>
<textarea name="beschreibung" id="textarea" class="textarea ausblenden_beschreibung"' . $pflichtfeldBeschreibung . ' placeholder="Eine Beschreibung des Events ' . $pflichtfeldTitel . '" accesskey="b" onInput="beschreibungAlsEvent();textCounter();" onFocus="textCounter();">' . htmlspecialchars($event["beschreibung"], ENT_HTML5, 'UTF-8') . '</textarea></label>
</p>
<input type="hidden" name="id" value="' . $event["id"] . '">
<input type="hidden" name="bearbeiten">';
break;
// Löschen
case 'loeschen':
if (!BENUTZER) return false;
// Navigation
echo sprintf(NAVIGATION, $lokalesDatum, '', '', '', AUSGABEX) .
'<form id="eKform" method="post" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">';
$select = $db->prepare("SELECT `start`, `ende`, `volltag`, `name` , `event`, `beschreibung`, `prioritaet`, `wiederholung`, `benachrichtigung`, `gruppe`, `id`
FROM `" . $TABLE_PREFIX . "_kalender`
WHERE `id` = :id");
$select->execute([':id' => $_GET["id"]]);
$event = $select->fetch();
// Gruppe (Anzahl)
$select = $db->query("SELECT COUNT(`gruppe`) AS anzahl FROM `" . $TABLE_PREFIX . "_kalender` WHERE `gruppe` = " . $event["gruppe"]);
$gruppe = $select->fetch();
sscanf($event["start"], "%4s-%2s-%2s %2s:%2s", $dbJahr, $dbMonat, $dbTag, $dbStunde, $dbMinute);
$start = substr($event["start"], 11, 8) != "00:00:01" ? substr($event["start"], 11, 5) : '';
$ende = substr($event["ende"], 11, 8) != "00:00:00" ? ' bis ' . substr($event["ende"], 11, 5) : '';
$uhr = !empty($start) || !empty($ende) ? ' <span class="nowrap ig_uhrzeit" title="' . date("T - e") . '"> ' . $start . $ende . ' Uhr' : '';
$abgelaufen = eventAktuell($dbTag, $dbMonat, $dbJahr, $dbStunde, $dbMinute, $event["ende"], $event["volltag"]);
$benachrichtigung = $event["benachrichtigung"] == 1 ? ' <span title="E-Mail Benachrichtigung" style="cursor:help" class="ig_benachrichtigung"></span>' : '';
$kw = kalenderwoche($dbTag, $dbMonat, $dbJahr);
$woche = ' <span class="navLink selLink" onPointerDown="zeigeKW(' . $dbJahr . ',' . $kw . ')" title="Woche ' . $kw . ' anzeigen">W ' . $kw . '</span>';
$wiederholung = $event["wiederholung"] == 1 ? ' <span title="Jährliche Wiederholung" style="cursor:help" class="ig_wiederhohlung"></span>' : '';
$name = $BENUTZER == "ja" ? ' [<em title="Erstellt von: ' . $event["name"] . '">' . $event["name"] . '</em>]' : '';
$prioritaet1 = $event["prioritaet"] > 0 ? '<span style="' . stickyFarbverlauf($PRIORITAET[$event["prioritaet"]]) . 'color:#FFFFFF;"> ' : '';
$prioritaet2 = strlen($prioritaet1) > 10 ? '<span title="Priorität ' . $event["prioritaet"] . '" class="prioritaet">| ' . $event["prioritaet"] . '</span> </span>' : '';
$gruppeCheckbox = $gruppe["anzahl"] > 1 ? '<br><input type="checkbox" name="gruppe_del" id="lbl_gdel" accesskey="g"> <label for="lbl_gdel" class="achtung" title="Das Löschen aller Events kann nicht rückgängig gemacht werden und bedarf einer Bestätigung.">Alle ' . $gruppe["anzahl"] . ' Events dieser <u>G</u>ruppe löschen</label><br><span class="optionLink" onClick="zeigeGruppe(`' . $event["gruppe"] . '`,`false`)">Gruppe anzeigen</span>' : '';
$berechtigung = ($_SESSION["name"] === $event["name"] || $_SESSION["name"] === $NAME) ? '' : '<p id="berechtigung">Sie haben keine Berechtigung diesen Event zu löschen!</p>';
echo '<div><mark class="mark">Event löschen</mark>
<span class="navLink ig_bearbeiten" onPointerDown="zeigeFormular(`bearbeiten`,' . abs($dbTag) . ',' . abs($dbMonat) . ',' . $dbJahr . ',' . $event["id"] . ')" title="Event bearbeiten"></span>
<span class="navLink ig_neu" onPointerDown="zeigeFormular(`eintragen`,' . abs($dbTag) . ',' . abs($dbMonat) . ',' . $dbJahr . ',null,null,null,true)" title="Event für diesen Tag eintragen"></span></div>
' . $berechtigung . '
<p><span class="ig_kalender"></span>
<span class="navLink selLink" onPointerDown="zeigeTagesansicht(' . abs($dbTag) . ',' . abs($dbMonat) . ',' . $dbJahr . ',event)" title="Tag anzeigen">' . datum($dbTag, $dbMonat, $dbJahr) . '</span>' . $woche . ' ' . $wiederholung . $uhr . $abgelaufen . $benachrichtigung . '</span>
</p>
<div>
' . $prioritaet1 . '<span class="eventText">' . $event["event"] . '</span>' . $prioritaet2 . $name . '
' . (strlen($event["beschreibung"]) > 0 ? '<details class="event_loeschen"><summary>Beschreibung anzeigen</summary><div>' . formatierung($event["beschreibung"]) . '</div></details>' : '') . '
</div>
<p>
<span title="Das Löschen des Events kann nicht rückgängig gemacht werden und bedarf einer Bestätigung.">
<mark class="mark">➥</mark> Bestätigung: <input type="checkbox" name="bestaetigung" id="lbl_del" accesskey="e">
<label for="lbl_del" class="achtung">Diesen <u>E</u>vent löschen</label></span>
' . $gruppeCheckbox . '
</p>
<input type="hidden" name="gruppe" value="' . $event["gruppe"] . '">
<input type="hidden" name="id" value="' . $event["id"] . '">
<input type="hidden" name="loeschen">';
break;
// Anmeldung und Abmeldung
case 'anmelden':
// Navigation
echo sprintf(NAVIGATION, $lokalesDatum, '', '', '', AUSGABEX) .
'<form id="eKform" method="post" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">';
if (!BENUTZER == true) :
echo '<div><mark class="mark" title="Anmeldedaten für den Event-Kalender eingeben">Anmeldung</mark></div>
<p class="formLineHeight">
<label for="benutzername" title="Benutzername Bitte füllen Sie dieses Feld aus.">Benutzername:
<input type="text" name="name" id="benutzername" required="required" autocomplete="username" tabindex="1" spellcheck="false" tabindex="1"></label><br>
<label for="passwort" title="Passwort (Kennwort) Bitte füllen Sie dieses Feld aus.">Passwort:  
<input type="password" name="passwort" id="passwort" required="required" autocomplete="current-password" tabindex="2"></label>
<input type="hidden" name="anmelden">
</p>';
else :
echo '<div id="buttons"><mark class="mark"><em>' . $_SESSION["name"] . '</em> abmelden?</mark></div>
<input type="hidden" name="abmelden">';
endif;
break;
}
// Abbrechen und Absenden
if (isset($_GET["form"])) {
switch ($_GET["form"]) {
case 'eintragen':
$absendenButton = ' title="Event eintragen. Zugriffstaste: E" accesskey="e"><u>E</u>intragen';
break;
case 'bearbeiten':
$absendenButton = ' title="Event aktualisieren. Zugriffstaste: A" accesskey="a"><u>A</u>ktualisieren';
break;
case 'loeschen':
$absendenButton = ' title="Event löschen ausführen. Zugriffstaste: A" accesskey="a"><u>A</u>usführen';
break;
case 'anmelden':
$absendenButton = (BENUTZER == true) ? ' title="Benutzer abmelden Zugriffstaste: A" accesskey="a" autofocus="autofocus"><u>A</u>bmelden' : ' title="Benutzer anmelden Zugriffstaste: A" accesskey="a"><u>A</u>nmelden';
break;
}
}
echo '<div id="buttons">' .
(($_GET["form"] == "eintragen" || $_GET["form"] == "bearbeiten") && $VORSCHAU_BUTTON == "ja" ? bbCode() : '') .
'<button type="reset" title="Vorgang abbrechen. Bitte doppelt klicken! Taste: ESC" onDblClick="anzeigeBeenden(`anzeige`);scrollToDo(`kalender`)">Abbrechen</button>  
<button type="button" id="okbutton" class="senden" onClick="sendeFormular()"' . $absendenButton . '</button>
</div>
</form>';
}