Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?php
/*
 *  Event-Kalender - Einstellungen - verbindung.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) 2021 Werner Zenk alle Rechte vorbehalten.
  Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.

 *
 * Hier können Sie den Event-Kalender individuell anpassen.
   Achtung: Fehlerhafte Angaben können Probleme verursachen!
   Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 */

// modify RaHa ->
require_once "verbindung_myfunctions.inc.php";
// <- modify RaHa

/* Jedem angemeldeten Benutzer nur seine Events anzeigen (ja/nein)
   Die Events müssen vom  Benutzer als "Privat" markiert werden! */
$EINZELPERSON_ANZEIGE = "nein"; // nein

/* Den Namen des Benutzers beim Event anzeigen (ja/nein) */
$BENUTZER = "ja"; // nein

/* Den Namen des Benutzers im Formular (durch den Admin.) anpassen (ja/nein) */
$BENUTZER_EDIT = "nein"; // nein

/* Die Beschreibung nur den angemeldeten Benutzern anzeigen (ja/nein) */
$BESCHREIBUNG_ANZEIGE = "nein"; // nein

/* Adressdatenbank einbinden (ja/nein)
    Im Formularfeld: "Adresse" werden die Adressen zur Auswahl angezeigt.
 */
$ADRESSDATENBANK = "ja"; // nein


/*
 * Kalender
 */

/* Kalender Beschriftung
   Eine Beschriftung, ein Bild eintragen oder leer lassen. */
$KALENDER_BESCHRIFTUNG = '<img src="ev-header.png">'; // leer!
/* Zur Aktivierung das Kommentarzeichen (#) entfernen */
# $KALENDER_BESCHRIFTUNG = '<img src="bild.jpg">'; // Bild

/* Monatsbilder - Jeden Monat ein anderes Bild anzeigen */
# $KALENDER_BESCHRIFTUNG = '<div id="monatsbilder"></div>'; // <div id="monatsbilder"></div>

/* Feiertage anzeigen (ja/nein) */
$FEIERTAGE = "ja"; // ja

/* Kalenderblatt anzeigen (ja/nein) */
$KALENDERBLATT = "ja"; // ja

/* Die Namen der Wochentage ausschreiben (ja/nein) */
$WOCHENTAGSNAMEN = "nein"; // nein

/* Vorschau-Button (und BB-Code Button) im Formular anzeigen (ja/nein)
   Für weitere Details, siehe Datei: "lies_mich.txt" */
$VORSCHAU_BUTTON = "ja"; // nein

/* Anzahl der aktuellen Events der nächsten Tage (Minimale Angabe) */
$AKTUELLE_EVENTS_TAGE = 14; // 14

/* Event mit einem Permalink (https://de.wikipedia.org/wiki/Permalink) anzeigen (ja/nein) */
$PERMALINK = "ja"; // ja

/*
 * Darstellung und Formate
 */
// modify RaHa ->
require_once "verbindung_darformate.inc.php";
// <- modify RaHa

/* Standortbestimmung für die Anzeige von Sonnenauf.- und Sonnenuntergang (im Kalenderblatt)
   Die geografische Länge und Breite des Standorts ermitteln Sie z.B. im Programm "Google Earth" oder
   unter: https://werner-zenk.de/javascript/geolocation_api_bei_knopfdruck_koordianten_ausgeben.php */
$GEO_BREITE = "49.95"; // 49.95
$GEO_LAENGE = "10.95"; // 10.95
$REGION = ""; // Stadt, Ort, Region, Bezirk, ... (oder leer lassen!)

/* Anzahl der Serienevents (aufeinander folgende Tage)
   die der Benutzer maximal eingeben kann. */
$SERIENEVENTS = 365;

/* Datumsformat
   1 = "20 Dezember 2021 (So.)"
   2 = "20 Dezember 2021 Sonntag"
   3 = "Sonntag, 20 Dezember 2021"
   4 = "20.12.2021 So."
   5 = "20.12.2021" */
$DATUMSFORMAT = 1; // 1

/* Stundenformat (zur Auswahl im Kalendertag)
   1 = 10:10, 10:20, 10:30, 10:40, 10:50
   2 = 10:05, 10:10, 10:15, 10:20, 10:25, 10:30, 10:35, 10:40, 10:45, 10:50, 10:55
   3 = 10:15, 10:30, 10:45 */
$STUNDENFORMAT = 1; // 1

/* Events können nur eintragen werden, wenn sich
   das Jahr zwischen den folgenden Angaben befindet: */
$JAHR_MIN = 1900; // 1900 oder z.B.: date("Y") für das aktuelle Jahr
$JAHR_MAX = 2100; // 2100 oder z.B.: date("Y")+10 für das aktuelle Jahr + 10 Jahre

/*
 * E-Mail Benachrichtigung (Beta2!)
   Für weitere Details, siehe Datei: "lies_mich.txt" */


// modify RaHa -> muss für SENDE-EVENT-MAIL gesetzt werden!
/* E-Mail Adresse (eine beim Provider registrierte E-Mail Adresse).
   Leer lassen, wenn die Option nicht angezeigt werden soll. */
$ABSENDER = "automail@checkip.net"; // user@example.com

// Empfänger der Nachricht
$EMPFAENGER = "mail@checkip.net"; // user2@example2.com
 // <- modify RaHa
 
/* Wie viele Tage soll vor dem Event eine Benachrichtigung
   versendet werden (Werte von 0 bis 30) */
$TAGE_DAVOR = 1; // 1


/*
 * Experten Einstellungen
 */

/* Alte Events löschen (ja/nein) */
$DEL_EVENTS = "nein"; // nein

/* Löschen nach X-Tagen */
$DEL_TAGE = 365; // 365, Minimum: 1, Max.: 1000 Tage

/* Pflichtfelder im Formular
   Die Kommentarzeichen (#) bei Pflichtfeldern entfernen. */
$PLICHTFELDER = [
# 'beschreibung',
# 'adresse',
# 'prioritaet',
# 'kategorie',
# 'aufgabe',
];

/* Folgende HTML-Tags können vom Benutzer verwendet werden.
   Aus Sicherheitsgründen wird empfohlen diese Option nicht zu verwenden! */
$HTML_TAGS = ""; // z.B: <img><b><u><ol><li><del><mark>

/* Wie lange sollen Cookies gespeichert werden, Anzahl in Tagen. */
$COOKIE_TAGE = 10; // 10

/* Name der Datenbank-Tabelle (Vorzeichen)
   Ändern wenn z.B.: eine Tabelle mit dem Namen: "mai20_kalender" bereits existiert!
   (Nach der Installation bitte nicht mehr ändern!) */
$TABLE_PREFIX = "mai20"; // mai20 - Letzte Änderung an der DB-Tabelle: Mai 2020

/* Zeitzone setzen
   Infos unter: http://php.net/manual/de/timezones.europe.php */
date_default_timezone_set("Europe/Berlin");

/* PHP-Meldungen zum testen anzeigen (0/E_ALL) */
$error = E_ALL; // E_ALL = anzeigen
if (isset($_SERVER["SERVER_NAME"])) { error_reporting($_SERVER["SERVER_NAME"] == 'localhost' ? E_ALL : $error); }

/* Bei einer fehlerhaften Verbindung zur Datenbank eine Nachricht ausgeben (ja/nein) */
$FEHLER_VERBINDUNG = "ja"; // ja

/* Beginn der Woche (Kalenderwoche)
   Damit lässt sich die Woche im Kalender nicht ändern,
   es wird nur der Modus bei der MySQL - Anweisung: "WEEK(datetime, Modus)" verändert!
   https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_week */
$KW_MODUS = 3; // 3

/* PHP-Version überprüfen */
if (version_compare(PHP_VERSION, '7.3') < 0) {
 die('<p><strong>Event-Kalender</strong><br>&#10008; Aktuelle PHP-Version: ' . PHP_VERSION . '<br>&#10004; Voraussetzung mind.: &nbsp; 7.3</p>');
}

/* Zeichenkodierung der aktuellen Datei überprüfen */
if (bin2hex('ä') !== 'c3a4') {
 die('<p><strong>Event-Kalender</strong><br>&#10008; Die Datei: "<em>' . basename(__FILE__) . '</em>" muss unbedingt mit der Zeichenkodierung "<em>UTF-8</em> (ohne Signatur (BOM))" gespeichert werden!<br>
 Siehe: <a href="https://werner-zenk.de/tipps/schriftzeichen_richtig_darstellen.php" target="_blank">Schriftzeichen richtig darstellen</a></p>');
}

// modify RaHa ->
require_once "dbinfo.inc.php";
require_once "verbindung_myfunctions2.inc.php";
require_once "verbindung_autoinstaller.inc.php";
// <- modify RaHa

?>


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 &#128521;<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&#10;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">&#10149;</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&#10;Wecker anzeigen&#10;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)&#10;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)&#10;Anzahl in Tagen (Maximal ' . $SERIENEVENTS . ' Tage).&#10;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> &nbsp;
            <span class="ausblenden_wiederholung"><input type="checkbox" name="wiederholung" id="wiederholung" accesskey="j"> <label for="wiederholung" title="Jährlicher Event (Optional)&#10;Für Geburtstage, Feiertage etc.&#10;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>&emsp;
            <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).&#10;Diesen Event nicht öffentlich anzeigen.&#10;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>&nbsp; 
    <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)&#10;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,&#10;die Gruppe wird beibehalten).&#10;Zugriffstaste: K"><u>K</u>opieren</label>&emsp; </span>
            <span class="nowrap ausblenden_wiederholung"><input type="checkbox" name="wiederholung" id="wiederholung"' . $wiederholung . ' accesskey="j"> <label for="wiederholung" title="Jährlicher Event (Optional)&#10;Für Geburtstage, Feiertage etc.&#10;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).&#10;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>&emsp;
            <span class="ausblenden_privat"><input type="checkbox" name="privat" id="privat"' . $privat . ' accesskey="p"> <label for="privat" title="Privater Event (Optional).&#10;Diesen Event nicht öffentlich anzeigen.&#10;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) ? '&nbsp;<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 ? '&nbsp; <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&nbsp;' . $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;">&nbsp;' : '';
      $prioritaet2 = strlen($prioritaet1) > 10 ? '<span title="Priorität ' . $event["prioritaet"] . '" class="prioritaet">| ' . $event["prioritaet"] . '</span>&nbsp;</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&#10;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>&nbsp; 
    <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&#10;werden und bedarf einer Bestätigung.">
     <mark class="mark">&#10149;</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&#10;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)&#10;Bitte füllen Sie dieses Feld aus.">Passwort:&emsp;&emsp;&nbsp;&nbsp;
        <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.&#10;Zugriffstaste: E" accesskey="e"><u>E</u>intragen';
        break;
      case 'bearbeiten':
        $absendenButton = ' title="Event aktualisieren.&#10;Zugriffstaste: A" accesskey="a"><u>A</u>ktualisieren';
        break;
      case 'loeschen':
        $absendenButton = ' title="Event löschen ausführen.&#10;Zugriffstaste: A" accesskey="a"><u>A</u>usführen';
        break;
      case 'anmelden':
        $absendenButton = (BENUTZER == true) ? ' title="Benutzer abmelden&#10;Zugriffstaste: A" accesskey="a" autofocus="autofocus"><u>A</u>bmelden' : ' title="Benutzer anmelden&#10;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.&#10;Bitte doppelt klicken!&#10;Taste: ESC" onDblClick="anzeigeBeenden(`anzeige`);scrollToDo(`kalender`)">Abbrechen</button> &emsp;
  <button type="button" id="okbutton" class="senden" onClick="sendeFormular()"' . $absendenButton . '</button>
 </div>
</form>';
}


Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?php

// Keine Ausführung via URL
if (strpos($_SERVER["SCRIPT_FILENAME"], "kalendersende-event-mail") > 0 ) { echo "NO"; exit; }
 
/*
 *  SENDE-EVENT-MAIL für Eventkalender - E-Mail Benachrichtigung - kalendersende-event-mail.php
 *  © RaHa

  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 ist urheberrechtlich geschützt, alle Rechte vorbehalten.
  Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.

  * Hier können Sie beliebig den Inhalt der E-Mail ändern
  * Achtung: Fehlerhafte Angaben können Probleme verursachen!
  * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.

 */

     $beschreibung = preg_replace('/\[.*?\](.*)\[\/.*?\]/isU', '$1', $_POST["beschreibung"]); // BB-Codes
     $beschreibung = str_replace(["\r", "\n", "  "], " ", $beschreibung); // Zeilenumbrüche

     $sendfile = 'ev-header.pdf';
     $sendfile_size = filesize($sendfile);
     $filehandle = fopen($sendfile, "r");
     $sendcontent = fread($filehandle, $sendfile_size);
     fclose($filehandle);

     $sendcontent = chunk_split(base64_encode($sendcontent));
     $sendfilename = basename($sendfile);

     $Subject = strip_tags($_POST["event"]);
     $SendTo = $MAIL_EMPFAENGER;
     $From = 'automail@checkip.net';
     $ReplayTo = $ABSENDER;

     $eol = PHP_EOL;
     $eolbody = "<br>";
     
     $boundary = strtoupper(md5(uniqid(time())));

     $mail_header = "From:".$From.$eol;
     $mail_header .= "Reply-To: ".$ReplayTo.$eol; 
     $mail_header .= "X-Sender: checkip.net".$eol; 
     $mail_header .= "X-Mailer: PHP/".phpversion().$eol; 
     $mail_header .= "MIME-Version: 1.0".$eol;
     $mail_header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"";

     $mail_body = 'Event: ' . strip_tags($_POST["event"]) . $eolbody . '';
     $mail_body .= $eolbody;
     $mail_body .= 'Beginn: ' . $start .  $eolbody . '';
     $mail_body .= 'Ende: '. $ende .  $eolbody . '';
     $mail_body .= $eolbody;
     $mail_body .= !empty($beschreibung) ? wordwrap($beschreibung, 75, $eol) . $eolbody : '';
     if (isset($_POST["adresse"])) {
          $mail_body .= !empty($_POST["adresse"]) ? 'Adresse: ' . $_POST["adresse"] . $eolbody : '';
     }
     if (isset($_POST["prioritaet"])) {
          $mail_body .= $_POST["prioritaet"] > 0 ? 'Priorität: ' . $_POST["prioritaet"] . $eolbody : '';
     }
     if (isset($_POST["privat"])) {
          $mail_body .= $_POST["privat"] == 1 ? 'Privater Event' . $eolbody : '';
     }
     if (isset($_POST["aufgabe"])) {
          $mail_body .= $_POST["aufgabe"] == 1 ? 'Dieses Event ist eine Aufgabe' . $eolbody : '';
     }
     if (isset($_POST["kategorie"])) {
          $mail_body .= !empty($_POST["kategorie"]) ? 'Kategorie: ' . $_POST["kategorie"] . $eolbody : '';
     }
     $mail_body .= $eolbody . $eolbody;
     $mail_body .= 'Gesendet vom Event-Kalender unter '.$_SERVER['SERVER_NAME']. $eolbody;
     $mail_body .= $From.$eolbody.$eolbody.$eol;

     $mail_message = "--".$boundary.$eol;
     $mail_message .= "Content-Type: text/html; charset=UTF-8".$eol;
     $mail_message .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
     $mail_message .= $mail_body.$eol;
     $mail_message .= "--".$boundary.$eol;
     $mail_message .= "Content-Type: application/pdf; name=\"".$sendfilename."\"".$eol;
     $mail_message .= "Content-Transfer-Encoding: base64".$eol;
     $mail_message .= "Content-Disposition: attachment; filename=\"".$sendfilename."\"".$eol.$eol;
     $mail_message .= $sendcontent.$eol;
     $mail_message .= "--".$boundary."--";

     if (mail($SendTo,$Subject,$mail_message,$mail_header)) {
          // LOG, ausdokumentieren wenn keine Log-Datei gewünscht
          file_put_contents("event-kalender_mail.log", $eol . $eol . "GESENDET" . $eol . date("Y-m-d H:i:s", time()) . $eol . $SendTo .  $eol . str_replace($eolbody, $eol, $mail_body) .  $eol, FILE_APPEND);
     } else {
          // LOG, ausdokumentieren wenn keine Log-Datei gewünscht
          file_put_contents("event-kalender_mail.log", $eol . $eol . "FEHLER" . $eol . $eol . date("Y-m-d H:i:s", time()) . $eol . $SendTo .  $eol . str_replace($eolbody, $eol, $mail_body) .  $eol, FILE_APPEND);
     }

     unset($beschreibung,$sendfile,$sendfile_size,$filehandle,$sendcontent,$sendfilename,$Subject,$SendTo,$From,$ReplayTo,$eol,$eolbody,$boundary,$mail_header,$mail_body,$mail_message);

?>