Zum Inhalt springen

Powermail und Datumsvalidierung

Erstellt am 14. Januar 2009 · 12 Antworten · letzte Antwort am 25. Mai 2009

Tags: Frage

harvey ·

Hallo zusammen,

ich suche eine Möglichkeit, in Powermail eine eigene Validierung einzubauen, die zwei Datumswerte auf Plausibilität prüft und zwar auf 2. Datum > 1. Datum sowie den Zeitraum zwischen den Datumswerten. Hintergrund ist ein Reservierungsformular für eine Zimmerreservierung. Hab diesbezüglich noch nichts gefunden. Einzige Idee bisher ist, eine php-Funktion zu schreiben, die das erledigen kann, aber vielleicht geht es ja auch einfacher ...

Viele Grüße aus dem Rheinland,
harvey

harvey ·
einpraegsam.net schrieb

Einfach eine userFunc mit einhängen die das erledigt...

Gibt's dafür ein simples Beispiel?

Viele Grüße aus dem Rheinland,
harvey

einpraegsam.​net ·

Hmm,

die Anforderung ist nicht ganz so einfach, wie ich im ersten Moment gedacht hatte.
Ich würde es mit einer JS Validierung machen, das dürfte schneller gehen, als eine extra Extension die sich über ein Hook einklinkt.

Idee:
- date2cal verwenden um zwei Datumsfelder zu generieren
- Eigenen Submit Button, mit einem kleinen Eventhandler, der einfach über getElementById die Werte aus den beiden Feldern ausliest, diese in einen Timestamp umwandelt und miteinander vergleicht
- Wenn es nicht passt dann alert('so nicht')

harvey ·

Hallo einpraegsam.net,

prinzipiell hätte ich das schon auf die Art und Weise lösen können, dass Problem dabei ist aber, dass das Formular auch ohne Javascript funktionieren soll. Und als parametrisierbare Funktion ist das ganze dann auch universeller einsetzbar. Nur da hab ich dann dieses 'kleine' Problem.

Meine Überlegung ist nun, eine Klasse zu programmieren und über einen Hook in Powermail einzubinden. Über Parameter müsste die Vergleichsfunktion aus der Klasse dann sowohl mit den Feld-Uids als auch mit den Werten versorgt werden (ich denke da momentan an die Session-Werte). Nur weiss ich noch nicht, wie der Rückgabeparameter aussehen muss. Und wie ich den Hook in Powermail bekannt machen soll, ist mir momentan auch noch ein wenig schleierhaft.

Grüße aus dem (regnerischen) Rheinland,
harvey

einpraegsam.​net ·

ok, dann geht es wirklich an eine kleine Erweiterung, die z.B. den Hook PM_SubmitBeforeMarkerHook nutzt. Dort brauchst du eigentlich nur einen String zurückgeben und dieser wird ausgegeben und der Mailversand gestoppt (jedenfalls so weit ich mich erinnere)

harvey ·
einpraegsam.net schrieb

ok, dann geht es wirklich an eine kleine Erweiterung, die z.B. den Hook PM_SubmitBeforeMarkerHook nutzt. Dort brauchst du eigentlich nur einen String zurückgeben und dieser wird ausgegeben und der Mailversand gestoppt (jedenfalls so weit ich mich erinnere)

ich hatte jetzt eher an PM_MandatoryHook() gedacht. Und dann die Verarbeitung dort durch TS steuern. Geht das denn überhaupt? Also, das $conf-Array habe ich ja zur Verfügung, das sollte funktionieren. Ich werde es mal probieren und mir im debugger ansehen.

Danke erst mal.

Dann noch 'ne kleine Frage 8-)

Wäre es im Fehlerfalle auch möglich, sofort auf das Formular zurückzuspringen und mittels Fehlertexten oder/und css-Klassen die Fehler anzuzeigen (so ähnlich wie hier: http://www.voxoffice.de/empfehlung.html?

Übrigens finde ich es super, welchen Support Du leistest. Hab schon viele Fragen sowie die Antworten zu Powermail gelesen. Alle Achtung.

Grüße aus dem Rheinland,
harvey

einpraegsam.​net ·

1. Klar, es gibt 1000 Wege die Funktionieren können. Sicher auch mit anderen Hooks...

2. Du kommst im Frontend immer an das komplette TS Setup heran:

print_r($GLOBALS['TSFE']->tmpl->setup);

Dort würde ich dann auch die beiden Felder definieren, die es zu vergleichen gilt

3. Auch das wäre über einen Redirect wohl möglich. Fehlerausgabe an einem neuen Marker, wenn ein spezieller GET Paramter gesetzt ist.

4. Es gibt auch andere Meinungen. Einige meinen, wir würden Fragen nicht ausführlich beantworten (was teilweise auch wirklich zutrifft - es sind wohl auch zu viele Fragen)

Grüße, Alex

harvey ·

Hallo Alex,

ich habe mir jetzt mal den Progammablauf angeschaut. Es ist wohl so, dass ich im Fehlerfalle (also Feld nicht korrekt befüllt) nicht aus dem Hook heraus die Verarbeitung abbrechen kann. Wenn ich jetzt einen Redirect durchführen wollte, habe ich aber das Problem, dass vorher 'clearErrorsInSession' aufgerufen wird und mir die Fehler rauslöscht. Das bedeutet aber, ich müsste in dem Hook ein eigenes Array bauen, in dem dann die Fehler festgehalten werden, um diese per Redirect an das Formular zurück zu geben. Das wäre ja noch keine große Sache.

Das Problem, welches ich jetzt habe: Wo baue ich von extern (also in einer Extension zu einer Extension) jetzt den Redirect zum Formular mit den 'Fehlerwerten' ein ???

Grüße, harvey

einpraegsam.​net ·

Hallo Harvey,

hier zwei Vorschläge

Einfache Variante:
Hook PM_SubmitBeforeMarkerHook nutzen um Feldwerte zu vergleichen und in Powermail Art und Weise dort eine Fehlermeldung ausgeben
- Nachteil: Kein Redirect auf Formularseite, Fehlermeldung auf Mandatory Seite
- Vorteil: Easy

Umfangreiche Variante:
Hook PM_SubmitBeforeMarkerHook nutzen um Feldwerte zu vergleichen. Bei Fehler: Redirect zur Formularseite und einen GET Parameter anhängen (z.B. &wrongthing=1)
Einen weiteren Hook nutzen der bei der Formulargenerierung benutzt wird (z.B. PM_FormWrapMarkerHook). Der soll dann einen neuen Marker befüllen wenn wrongthing == 1

Wenn ich dir jetzt noch mehr Tipps gebe, kann ich es auch gleich selbst programmieren 😃

Grüße, Alex

harvey ·

Hallo Alex,

danke erst einmal fürs 'auf die Spur setzen'. Ich habe mich für die umfangreiche Variante entschieden. Aber mit dem Hook 'PM_SubmitBeforeMarkerHook' bin ich nicht so ganz einverstanden. Um den in der gewünschten Art und Weise einsetzen zu können, müssten sämtliche Validierungen seitens powermail ausgeschaltet sein sowie die Bestätigungsseite deaktiviert sein, weil das alles vorher abgearbeitet wird. Aber gerade die Bestätigungsseite ist ja ein Benutzerfreundliches 'Feature'.

Ich werde mir jetzt erst einmal den 'PM_MarkerArrayHook' anschauen, denn da komm ich an der richtigen Stelle rein und kann dann anhand von '$what' entsprechend agieren.

einpraegsam.net schrieb

Wenn ich dir jetzt noch mehr Tipps gebe, kann ich es auch gleich selbst programmieren 😃

Das habe ich nicht von Dir erwartet, nur ist es halt so, dass Du die Extension am besten kennst und ich wahrscheinlich eine Woche oder mehr bräuchte, um so tief einzusteigen. Aber Programmieren möcht ich schon noch selber, sonst geht doch der ganze Spaß verloren 🙂

Grüße, harvey

Daviz ·

Hallo Alex,

mal eine dumme Frage:

Hook PM_SubmitBeforeMarkerHook nutzen um Feldwerte zu vergleichen und in Powermail Art und Weise dort eine Fehlermeldung ausgeben

Wie gebe ich denn auf PM Art und Weise eine eigene Fehlermeldung aus?

Ich habe schon in verschiendenen Hooks versucht, in der Session eine Fehlermeldung zu speichern. In etwa so:

public function PM_SubmitLastOneHook($content, $conf, &$sessiondata, $ok, &$obj) {
		$sessiondata['ERROR'][] = array('Die Emailadresse ' . $sessiondata['uid26'] . 'ist in der Datenbank schon vorhanden.');
		$GLOBALS['TSFE']->fe_user->setKey("ses", 'powermail_'.$this->cObj->data['uid'], $sessiondata);
		$GLOBALS['TSFE']->storeSessionData();

Ich habe das auch schon im PM_SubmitBeforeMarkerHook versucht, komme aber leider zu keinem Ergebnis.

Viele Grüße,
David