Die Lösung: Eine Erweiterung der Form-Extension um 2 Postprocessoren: Der eine schickt Emails im Namen des eingeloggten Users an einen anderen User und sendet gleichzeitig eine Bestätigungsnachricht an den Sender (ohne aber die Emailadresse des Originalempfängers preis zu geben). Der 2. Postprocessor verhindert, dass ein User mehr als 1 Nachricht alle 60 Sekunden verschickt und baut gleich noch eine Statistik auf.
Im Typoscript sieht das Formular so aus:
prefix = tx_form
confirmation = 0
postProcessor {
1 = minimumdelaychecker
1 {
delay=60
errorPageID = 226
}
2 = memberMail
2 {
recipientEmailField = EmpfaengerID
senderEmail = sender@domain
senderName = Absendername
subject = Direktnachricht von Domain Mitglied:
replyToField = absenderemail
messages {
success = Deine Nachricht wurde erfolgreich an das Mitglied gesendet. Du erhälst von der Email eine Kopie
}
}
}
10 = FIELDSET
10 {
legend {
value = Private Nachricht an ein anderes Mitglied senden
}
20 = TEXTLINE
20 {
name = absenderemail
readonly = readonly
value = {TSFE:fe_user|user|email}
label.value = Deine Emailadresse
}
30 = TEXTLINE
30 {
name = name
readonly = readonly
value = {TSFE:fe_user|user|first_name} {TSFE:fe_user|user|last_name}
label.value = Dein Name
}
32 = TEXTLINE
32 {
name = Empfänger
readonly=readonly
value = {gp:receiverName}
label.value = Empfänger
}
40 = TEXTAREA
40 {
cols = 50
rows = 10
name = Nachricht
label.value = Nachricht
}
41 = HIDDEN
41 {
name = EmpfaengerID
value = {gp:receiverID}
}
50 = SUBMIT
50 {
name = Submit
value = Abschicken
}
}
Das Formular selbst ist sehr einfach gehalten. Wie man Variablen im Formular auswertet, habe ich in diesem Blogbeitrag erklärt.
Der "Minimumdelaychecker" ist ein Postprocessor, der eine kleine Statistik erstellt, wer wie viele Nachrichten verschickt hat und wann die letzte Nachricht geschickt wurde. Dazu werden in der fe_users-Tabelle die 2 Felder user_system_number_of_messages und user_system_last_message_timestamp erwartet. Diese Felder können natürlich auch umbenannt werden, dann muss aber auch der Postprocessor angepasst werden. Diesen Postprocessor gibt es hier zum runterladen. Wenn jemand innerhalb der im Typoscript definierten Zeit (Variable "delay") 2 Nachrichten schickt, wird er auf die Seite mit der in der ebenfalls in Typoscript (errorPageID) definierten Seite umgeleitet.
Der 2. Postprocessor ersetzt den Standard Mail Postprocessor. Runterladen könnt ihr ihn hier. Dieser Postprocessor setzt zum einen als Absender nicht die Emailadresse, die vorher im Formular angezeigt wurde, sondern diejenige, die für den eingeloggten User hinterlegt ist. So wird verhindert, dass jemand die Daten im Form vor dem senden editiert. Das geht in HTML auch dann, wenn der die Felder - wie im Beispiel - gesperrt sind.
Was noch fehlt? Der Aufruf der des Formulars. Hier habe ich es mir einfach gemacht:. Aus einer anderen Extension heraus rufe ich die Seite, die das Formular enthält auf und übergebe per URL die ID (und den Namen des Empfängers):
?receiverID=272&receiverName=Dein%20Name
Ich hoffe, die Beschreibung ist ausführlich genug. Wenn nicht, fragt ruhig :)