piFa Formular - Fehlermeldung und Mailversand
Verfasst: Do 21. Aug 2014, 09:26
Ich habe ein Formular erstellt.
Nachdem ich es ausgefüllt habe, erhalte ich jedoch folgende Meldung im Fenster: Zwei Dinge:
1) Die Fehlermeldung hat fehlende Platzhalter, obwohl diese in in der .po Datei (form_assistent.po) vorhanden ist:
Ab Zeile 404
Auch wenn ich es als m18n(); in das Modul mit reinsetze, und dann übersetze wird es nicht übersetzt.
2) Das weitaus wichtigere Problem:
Die Config des Formulars sieht so aus: Die obige Fehlermeldung soll (soweit ich es verstanden habe) angeben, dass die Empfängeradresse fehlt.
So hab ich denn im Code mal nach der Stelle geschaut, welche die Exception wirft (class.pifa_form.php):
und dort via print_r die Übergebenen Daten ausgegeben:
Auffällig ist, dass beim ersten Durchlauf das Feld "to" leer ist. Der Erste Durchlauf des Arrays bezieht sich übrigens auf den Bereich "Benutzer-Mail", obwohl diese ja mit der Einstellung für Vorlage "keine" deaktiviert sein sollte?!
Ist das nicht so gedacht würde ich in jedem Fall eine checkbox hinzufügen, wo man die beiden Mail-Varianten optional deaktivieren kann.
Der Code um die Benutzermail nicht zu versenden, wenn bei Vorlage "keine" gewählt wurde würde so aussehen :
Datei: class.pifa.mailed_form_processor.php ab Zeile 60 (hinzugefügt wurde die IF-Schachtelung des toMailRecipient-Aufrufs.
Hier fehlt also schon einmal die Abfrage, dass die Exception nur geworfen wird, wenn tatsächlich auch eine Benutzermail gesendet werden soll... womit wir direkt zur nächsten Frage kommen...
Nachdem ich es ausgefüllt habe, erhalte ich jedoch folgende Meldung im Fenster: Zwei Dinge:
1) Die Fehlermeldung hat fehlende Platzhalter, obwohl diese in in der .po Datei (form_assistent.po) vorhanden ist:
Ab Zeile 404
Code: Alles auswählen
#: classes/class.pifa.form.php:545
msgid "MISSING_RECIPIENT_ADDRESS"
msgstr "Empfänger-Adresse fehlt"
2) Das weitaus wichtigere Problem:
Die Config des Formulars sieht so aus: Die obige Fehlermeldung soll (soweit ich es verstanden habe) angeben, dass die Empfängeradresse fehlt.
So hab ich denn im Code mal nach der Stelle geschaut, welche die Exception wirft (class.pifa_form.php):
Code: Alles auswählen
public function toMailRecipient(array $opt) {
print_r($opt);
if (0 == strlen(trim($opt['from']))) {
$msg = Pifa::i18n('MISSING_SENDER_ADDRESS');
throw new PifaMailException($msg);
}
if (0 == strlen(trim($opt['fromName']))) {
$msg = Pifa::i18n('MISSING_SENDER_NAME');
throw new PifaMailException($msg);
}
if (0 == strlen(trim($opt['to']))) {
$msg = Pifa::i18n('MISSING_RECIPIENT_ADDRESS');
throw new PifaMailException($msg);
}
if (0 == strlen(trim($opt['subject']))) {
$msg = Pifa::i18n('MISSING_SUBJECT');
throw new PifaMailException($msg);
}
if (0 == strlen(trim($opt['body']))) {
$msg = Pifa::i18n('MISSING_EMAIL_BODY');
throw new PifaMailException($msg);
}
Ist das nicht so gedacht würde ich in jedem Fall eine checkbox hinzufügen, wo man die beiden Mail-Varianten optional deaktivieren kann.
Der Code um die Benutzermail nicht zu versenden, wenn bei Vorlage "keine" gewählt wurde würde so aussehen :
Datei: class.pifa.mailed_form_processor.php ab Zeile 60 (hinzugefügt wurde die IF-Schachtelung des toMailRecipient-Aufrufs.
Code: Alles auswählen
if(!empty($this->getModule()->getSetting('pifaform_mail_client_template'))){
// send mail
$this->getForm()->toMailRecipient(array(
'from' => $this->getModule()->getSetting('pifaform_mail_client_from_email'),
'fromName' => $this->getModule()->getSetting('pifaform_mail_client_from_name'),
'to' => $values['email'],
'subject' => $subject,
'body' => $body,
'charSet' => 'UTF-8'
));
}
Hier fehlt also schon einmal die Abfrage, dass die Exception nur geworfen wird, wenn tatsächlich auch eine Benutzermail gesendet werden soll... womit wir direkt zur nächsten Frage kommen...
Wo wird die Reciepient-Mailadresse hergeholt?
Schaut man in die Datei class.pifa.mailed_form_processor.php in Zeile 61, wird deutlich, dass er $values['email'] abruft, also ein Textfeld mit dem Spaltennamen "email" erwartet.
Meiner Meinung nach sollte sowas "sauber" in der Fehlermeldung dokumentiert werden... und nicht lediglich Missing Reciepient ausgegeben werden - da suchen sich sonst selbst erfahrene Contenido-Programmierer nen Wolf.