=== LAGATH Mail Form Anhang ===
Tags: email, wp_mail, attachment, formular, pdf
Requires at least: 6.7
Tested up to: 7.1
Requires PHP: 8.0
Stable tag: 2.6
License: GPLv2
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Haengt abhaengig von der uebermittelten Formular-ID eine Datei aus dem Upload-Verzeichnis an ausgehende E-Mails an.

== Description ==

Das Plugin klinkt sich in den `wp_mail`-Filter ein. Wird ein Formular per POST
abgeschickt und enthaelt es ein Feld mit einer hinterlegten Formular-ID, haengt
das Plugin die dazu konfigurierte Datei an die ausgehende E-Mail an.

Voraussetzung ist, dass WordPress zum Versand `wp_mail()` verwendet - das ist
der Standard. Entstanden ist das Plugin, weil sich dies beim Theme Avada nicht
ueber einen eigenen Filter umsetzen liess.

**Was das Plugin nicht anfasst**

Systemmails bleiben aussen vor. Ein Anhang wird nur ergaenzt, wenn alle
folgenden Bedingungen zutreffen:

* Die Anfrage ist ein echtes POST.
* Sie kommt nicht aus dem Backend (AJAX und REST sind ausgenommen).
* Sie laeuft nicht ueber `wp-login.php` - Passwort-Zuruecksetzung,
  Registrierung und Anmeldebestaetigungen bekommen also nie einen Anhang.
* Sie stammt nicht aus einer geplanten Aufgabe oder von WP-CLI.
* Das konfigurierte Feld enthaelt eine hinterlegte Formular-ID.

**Was angehaengt werden darf**

Nur Dateien innerhalb des Upload-Verzeichnisses und nur mit einer
zugelassenen Endung. Verzeichniswechsel wie `../` werden entfernt, und
ausfuehrbare Dateien sind ausgeschlossen.

== Installation ==

1. Den Ordner `lagath-mail-form-anhang` nach `wp-content/plugins/` hochladen.
2. Das Plugin im Menue "Plugins" aktivieren.
3. Das Formular einmal absenden.
4. Unter Einstellungen > LAGATH Mail Form Anhang unter "Erkannte Formular-IDs"
   nachsehen, welcher Wert eingegangen ist, ihn in die Zuordnung uebernehmen
   und die Datei ueber "Aus Mediathek wählen" auswaehlen.

Die Datei muss unter Medien vorhanden sein.

== Frequently Asked Questions ==

= Woher kommt die Formular-ID? =

Aus einem Feld, das das Formular mitschickt - standardmaessig `form_id`.
Heisst das Feld in der eingesetzten Formularloesung anders, laesst sich der
Name in den Einstellungen anpassen.

Wichtig: Das HTML-Attribut `id` eines Formulars, also etwa
`<form id="2266d93">`, wird beim Absenden **nicht** uebertragen. Massgeblich
ist allein, was das Formular als Feld sendet.

= Ich weiss nicht, welche ID mein Formular sendet =

Das Formular einmal absenden und danach unten auf der Einstellungsseite unter
"Erkannte Formular-IDs" nachsehen. Dort stehen die Werte, die tatsaechlich
eingegangen sind, mit Zeitpunkt. Von dort lassen sie sich direkt in die
Zuordnung uebernehmen. Kommt nichts an, sendet das Formular kein passendes
Feld - dann muss im Formular ein verstecktes Feld ergaenzt oder der Feldname
in den Einstellungen angepasst werden.

= Warum wird meine Datei nicht angehaengt? =

Auf der Einstellungsseite steht hinter jedem Dateipfad, ob die Datei gefunden
und zugelassen ist. Moegliche Gruende: Die Datei liegt ausserhalb des
Upload-Verzeichnisses, existiert nicht oder hat eine nicht zugelassene
Endung. Bei aktiviertem `WP_DEBUG` steht der Grund zusaetzlich im
Fehlerprotokoll.

= Welche Dateitypen sind zugelassen? =

Gaengige Dokument-, Tabellen- und Bildformate sowie ZIP. Die Liste laesst
sich per Filter anpassen:

`add_filter( 'lagath_mfa_erlaubte_dateiendungen', function ( $endungen ) {
    return array( 'pdf' );
} );`

= Kann ich die Einschraenkung auf bestimmte Anfragen aendern? =

Ja, ueber den Filter `lagath_mfa_anfrage_kommt_in_frage`. Er bekommt das Ergebnis
der eingebauten Pruefung und kann es ueberschreiben.

= Hinterlaesst das Plugin Spuren in der Datenbank? =

Vier Optionen und einen Update-Cache. Der Cache wird bei der Deaktivierung
entfernt, die Optionen beim Loeschen des Plugins.

= Ich hatte Version 2.1 im Einsatz. Muss ich etwas neu einstellen? =

Nein. Die Optionen hiessen frueher `wp_mail_attachment_mappings` und
`wp_mail_max_forms`. Sie werden beim ersten Laden automatisch uebernommen und
die alten Eintraege entfernt.

== Changelog ==

= 2.6 =
* Das Plugin heisst jetzt LAGATH Mail Form Anhang. Die Einstellungsseite liegt entsprechend unter Einstellungen > LAGATH Mail Form Anhang.
* Verzeichnis, Dateinamen, Textdomaene und saemtliche internen Kennungen heissen jetzt lagath-mail-form-anhang beziehungsweise lagath_. Fuer WordPress ist das ein neues Plugin: Die vorherige Fassung muss deaktiviert und geloescht werden, und die Einstellungen sind einmalig neu einzutragen. Ein Update von der TM-Fassung aus gibt es deshalb nicht.

= 2.5 =
* Die Update-Pruefung greift jetzt auch unter WP-CLI. Dort sind is_admin() und wp_doing_cron() beide false, weshalb `wp plugin update` das Plugin bisher stillschweigend uebersprungen hat.
* In der Plugin-Liste erscheint jetzt immer der Link "Details" mit Beschreibung, Changelog und Banner. Bisher tauchte er nur auf, wenn zufaellig ein Update anstand, sonst stand dort der Verweis auf die Plugin-Website.
* Der Verweis "Plugin-Website aufrufen" entfaellt; die Website ist ueber die Autorenangabe erreichbar.
* Autorenangabe lautet jetzt "LAGATH, Lars Tornow" und verweist auf plugins.lagath.de.

= 2.4 =
* Der vollstaendige Lizenztext liegt dem Paket jetzt als Datei LICENSE bei. Die GPLv2 verlangt das bei jeder Weitergabe; bisher war nur die Lizenz benannt, nicht mitgeliefert.
* Der GPL-Gewaehrleistungsausschluss steht jetzt auch im Kopf der Hauptdatei. Er fehlte dort bisher.

= 2.3 =
* Die Datei wird jetzt ueber die Mediathek ausgewaehlt statt als Pfad eingetippt. Gespeichert wird die Mediathek-ID, der Pfad bleibt als Rueckfallebene fuer bestehende Eintraege erhalten.
* Neu: "Erkannte Formular-IDs". Das Plugin schneidet mit, welche IDs tatsaechlich eingehen, und bietet sie zur Uebernahme an. Damit laesst sich klaeren, welchen Wert ein Formular ueberhaupt sendet.
* Die Statusanzeige beruecksichtigt jetzt beide Quellen.

= 2.2 =
* Update-Pruefung repariert: Slug und Plugin-Schluessel wurden aus dem Unterverzeichnis `includes/` abgeleitet und waren dadurch falsch - Updates wurden nie angeboten und die Detailansicht blieb leer.
* Zwischenspeicherung aktiviert. Bisher loeste jeder Seitenaufruf im Backend eine eigene HTTP-Anfrage an den Update-Server aus.
* Fehlgeschlagene Abfragen werden eine Stunde zwischengespeichert, statt bei jedem Aufruf erneut in den Timeout zu laufen.
* Fataler Fehler behoben: Wurde `wp_mail()` mit einem einzelnen Anhang als Zeichenkette aufgerufen, brach der Versand ab.
* Der Filter greift nur noch bei POST-Anfragen aus dem Frontend. Systemmails ueber `wp-login.php`, Backend-Aktionen, Cron und WP-CLI bleiben unangetastet.
* Pfadangaben werden gegen das Upload-Verzeichnis geprueft. Verzeichniswechsel wie `../` sind nicht mehr moeglich.
* Nur noch zugelassene Dateitypen werden angehaengt; ausfuehrbare Dateien sind ausgeschlossen.
* Der Name des Formularfeldes ist jetzt einstellbar - bisher war `form_id` fest verdrahtet.
* Die Einstellungsseite zeigt je Zuordnung an, ob die Datei gefunden und zugelassen ist.
* Optionen tragen jetzt ein eigenes Praefix statt des Core-Praefixes `wp_mail_`. Vorhandene Werte werden automatisch uebernommen.
* Formular-IDs mit Sonderzeichen werden korrekt zugeordnet (fehlendes `wp_unslash`).
* Protokollausgaben nur noch bei aktiviertem `WP_DEBUG`.
* `Update URI` ergaenzt, damit ein gleichnamiger Slug auf wordpress.org das Plugin nicht ueberschreiben kann.
* Alle Ausgaben der Server-Antwort werden escaped, fehlende Felder loesen keine PHP-Warnungen mehr aus.
* Update-Pruefung nur noch im Backend und beim Cron, Site-Transients fuer Multisite.
* `uninstall.php`, `readme.txt` und vollstaendige Plugin-Header ergaenzt.
* Backend-CSS auf die eigene Seite begrenzt.

= 2.1 =
* Kleine Anpassungen.

= 2.0 =
* Anzahl der Formular-Anhang-Kombination jetzt frei einstellbar.

= 1.9 =
* Jetzt fuer 10 Formulare.

= 1.8 =
* Pruefung auf Updates ergaenzt.
* Anpassung der Beschreibung.
* Anpassung der Einstellungen.

== Upgrade Notice ==

= 2.5 =
Noetig nur, wenn Updates ueber WP-CLI eingespielt werden. Funktional sonst unveraendert.

= 2.4 =
Ergaenzt den vollstaendigen Lizenztext im Paket. Funktional unveraendert.

= 2.3 =
Dateiauswahl ueber die Mediathek und ein Mitschnitt der tatsaechlich empfangenen Formular-IDs.

= 2.2 =
Repariert die Update-Pruefung, behebt einen Fehler der den Mailversand abbrechen konnte und grenzt ein, an welche E-Mails ueberhaupt angehaengt wird. Bestehende Einstellungen werden automatisch uebernommen.
