Joomla 5 Mitteilung

Wir freuen uns mitteilen zu können, dass seit dem 29. Januar 2024 alle unsere Joomla Erweiterungen mit Joomla 5 kompatible sind.

Für alle die gerade noch von Joomla 3 auf 4 aktualisieren: Anleitungen für die Joomla 4 Migration gibt es hier:

Es gibt nun auch eine eigenständige Dokumentation für Visforms für Joomla 4 und für Visforms auf Joomla 5

Forum

Visforms Subscription Inhaber können in unserem Forum Fragen stellen. Bitte mit dem entsprechenden Benutzer anmelden.
Jeder kann lesend auf das Forum zugreifen.

Bitte stellen Sie nur 1 Frage pro Thema.

Timing: Mailanhang mit Visforms Events

Mehr
5 Jahre 2 Monate her - 5 Jahre 1 Monat her #6037 von MaliRaj
Timing: Mailanhang mit Visforms Events wurde erstellt von MaliRaj
Guten Abend oder Hallo!
Ich nutze das Event onVisformsAfterFormSave in einem angepassten Plugin ("PlgMaster"-Vorlage), um aus allen Datensätzen (einschließlich des gerade neu gespeicherten) eine individuelle myexcel.csv-Datei zu erzeugen. Das klappt nach deinen Anleitungen und etwas Einarbeitung nun fehlerfrei. Diese Datei möchte ich nun der Ergebnismail anhängen und habe das im Register "E-Mail Anhänge" entsprechend konfiguriert.
Nun wird jedoch die Mail immer ca. 1 sec vor dem Speichern der Datei versendet (lt. Zeitstempel in der Mail und der Datei auf dem Server). Es fehlt in der Mail-csv so immer der letzte Datensatz, obwohl die neue (geänderte) csv-Datei alle Datensätze enthält.
Ein sleep(x) nach fclose(Datei) in meinem php-Script, das mit onVisformsAfterFormSave aufgerufen wird, führt nicht zum erwünschten Erfolg (und macht das Script selbst natürlich langsamer :S).
Nun wollte ich das "onVisformsEmailPrepare"-Event dazu nutzen, um diese Datei anzuhängen. Dazu fehlen mir allerdings die erforderlichen Parameter. Kannst du mir da weiterhelfen? Ist das der richtige Ansatz? Auch nach "EditFormSave" im Frontend soll das funktionieren.
Gruß Heinz

Freundliche Grüße aus PM
Heinz
Letzte Änderung: 5 Jahre 1 Monat her von MaliRaj.

Mehr
5 Jahre 2 Monate her - 5 Jahre 2 Monate her #6042 von Administrator AV
Administrator AV antwortete auf Timing: Mailanhang mit Visforms Events
Hallo,
soweit ich weiß, werden die Plugins gemäß ihrer Reihenfolge in der Plugin-Verwaltung abgearbeitet. D.h. es kann sein, dass wenn du dein Plugin in der Plugin-Verwaltung vom Ordering her über das Plugin Mail Attachments setzt, dass dann schon alles funktioniert.

Falls das nicht ausreicht: Du kannst dir die Verwendung des "onVisformsEmailPrepare"-Event im Code des Pluign Mail Attachments ansehen. Im Prinzip wird das Mail-Objekt als Referenz übergeben, d.h. der Hauptcode (im Visforms Model) arbeitet hinterher dem Mail-Objekt, das alle Manipulationen, die du im Plugin am Mail-Objekt gemachst hast, weiter.

Du kannst also mit der Joomla! addAttachment() Funktion des Mailers dein Attachment anhängen.

Für die Edit Mail gibt es, wenn ich mich richtig erinnere ein eigenen Event (onVisformsEditMailPrepare oder so), das kannst du auch im Mail Attachement Plugin Code sehen.

Gruß,
Aicha

:idea: I recommend you the new and up-to-date documentation for Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/en/docs/
Most of this also applies retrospectively to Joomla 3.
Please only ask 1 question per topic :-).

:idea: Ich empfehle Dir die neue und aktuelle Dokumentation für Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/docs/
Das meiste gilt rückwirkend auch für Joomla 3.
Bitte immer nur 1 Frage pro Thema stellen :-).
Letzte Änderung: 5 Jahre 2 Monate her von Administrator AV.
Folgende Benutzer bedankten sich: MaliRaj

Mehr
5 Jahre 2 Monate her - 5 Jahre 2 Monate her #6045 von MaliRaj
Hallo Aicha !
Vielen Dank für deine Lösungsvorschläge, die ich abgearbeitet habe. Die Reihenfolge der PlugIns zu ändern brachte keinen Erfolg.
Dann, nach Ansicht deines Codes der vfmailattachments.php konnte ich den Mail-Anhang-Versand über mein angepasstes PlugIn über onVisformsEmailPrepare realisieren. In der Formularkonfiguration habe ich diese Datei deshalb aus der Attachment-Liste genommen. Hab mich sehr über deine Hilfe und meinen Erfolg gefreut. Aber etwas zu früh, da sich am Timing nichts geändert hat. Mail-Versandt am 2019-02-07 16:22:39, Zeitstempel der (im Programmablauf) vorher erstellten Datei: 2019-02-07 16:22:40. Also noch immer 1 Sekunde Versatz.

Fällt dir dazu noch etwas ein?
Gruß vom Heinz

Freundliche Grüße aus PM
Heinz
Letzte Änderung: 5 Jahre 2 Monate her von MaliRaj.

Mehr
5 Jahre 2 Monate her #6046 von MaliRaj
Mit diesem Code möchte ich das umsetzen, was bisher nur bedingt gelingt.
1. Das Timingproblem konnte ich noch nicht lösen, den Rest schon, bis auf
2. auch der Benutzer erhält die Datei im Mail-Anhang, obwohl ich das (vermutlich falsch) ausgeklammert habe.
3. if ($form->id === 15) hat nicht funktioniert, deshalb der Umweg über $form_id
Vielleicht hast du noch ein Tipp/Lösungsansatz für mich.
Code:
public function onVisformsAfterFormSave($context, $form, $fields) { // Skip plugin if context is wrong $allowedContexts = array('com_visforms.form', 'mod_visforms.form', 'plg_vfformview.form'); if (!in_array($context, $allowedContexts)) { return true; } $app = JFactory::getApplication(); // only perform action, if we are in front end if ($app->isAdmin()) { return true; } // Formularaufrufe zum Test loggen $form_id = $form->id; $logfile = fopen("php/AfterFormSave_$form_id.log","a"); fputs($logfile, date("d.m.Y; H:i:s",time()) . // Datum, Uhrzeit "; " . $_SERVER['REMOTE_ADDR'] . // IP-Adresse "\n"); fclose($logfile); // SubmitHandler aufrufen wenn eine entsprechende php-Datei für ein Formular existiert if (file_exists("php/vf_submit_$form_id.php")) { include("php/vf_submit_$form_id.php"); } return true; } public function onVisformsEmailPrepare($context, $mail, $form) { // Skip plugin if context is wrong if (($context != 'com_visforms.form.receiptmail') && ($context != 'com_visforms.form.resultmail')) { return true; } $app = JFactory::getApplication(); if ($app->isAdmin()) { return true; } $form_id = $form->id; // nur bei Formular 15 und nur für Ergebnismail ausführen if (($form_id == 15) && ($context = 'com_visforms.form.resultmail')) { $file = 'pfad_und_datename.csv'; $file = JPath::clean(JPATH_ROOT . '/' . $file); if (JFile::exists($file)) { $mail->addAttachment($file); } } return true; } public function onVisformsEditMailPrepare($context, $mail, $form) { // Skip plugin if context is wrong if (($context != 'com_visforms.form.receiptmail') && ($context != 'com_visforms.form.resultmail')) { return true; } $app = JFactory::getApplication(); if ($app->isAdmin()) { return true; } $form_id = $form->id; // nur bei Formular 15 und nur für Ergebnismail ausführen if (($form_id == 15) && ($context = 'com_visforms.form.resultmail')) { $file = 'documents/liste.csv'; $file = JPath::clean(JPATH_ROOT . '/' . $file); if (JFile::exists($file)) { $mail->addAttachment($file); } } return true; }

Freundliche Grüße aus PM
Heinz

Mehr
5 Jahre 2 Monate her #6048 von Administrator AV
Administrator AV antwortete auf Timing: Mailanhang mit Visforms Events
Hallo Heinz,
was mich an deiner Konstruktion von Anfang an irritiert hat ist, dass du die Erzeugung der CSV Datei nicht aus dem onVisformsEmailPrepare bzw. onVisformsEditMailPrepare startest. Bei dem Mail Attachments Plugin funktioniert das alles doch auch ohne, dass irgendwelche Timer laufen müssen. Ich glaube du hast da ein strukturelles Problem. Versuch es doch noch mal mit einem Code, der Nähe an meine Code vom Mail Attachments Plugin dran ist.

Außerdem, so ganz nebenbei, habe ich mich wirklich gefragt, warum du eine eigene Funktion für das Erzeugen des CSV brauchst. Du kannst bei dem Visforms CSV Export doch wirklich alles konfigurieren. Was fehlt dir da eigentlich an Funktionalität?

Liebe Grüße,
Aicha

:idea: I recommend you the new and up-to-date documentation for Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/en/docs/
Most of this also applies retrospectively to Joomla 3.
Please only ask 1 question per topic :-).

:idea: Ich empfehle Dir die neue und aktuelle Dokumentation für Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/docs/
Das meiste gilt rückwirkend auch für Joomla 3.
Bitte immer nur 1 Frage pro Thema stellen :-).
Folgende Benutzer bedankten sich: MaliRaj

Mehr
5 Jahre 2 Monate her - 5 Jahre 2 Monate her #6053 von MaliRaj
Hallo Aicha,
ja das kann schon sein, dass ich auf einem falschen Dampfer unterwegs bin. :unsure:

zu 1.
Ich bin so rangegangen:

  • ich brauche zur Erzeugung einer Excel-Tabelle ALLE gespeicherten Datensätze, einschließlich der Daten des aktuell abgesendeten Formulars
  • deshalb füge ich (nur weil ich es besser warten kann) per include meinen Code zur CSV-Generierung in dein angepasstes "Master-PlugIn" in die Funktion onVisformsAfterFormSave (da ich ja alle Datensätze benötige)
  • zu einem späteren Zeitpunkt, nämlich in der Funktion onVisformsEmailPrepare hänge ich die erstellte Datei dann an

  • zu 2.
    Gerne schicke ich dir per Mail einen Link zum Formular, das erklärt am besten den Grund für die Erzeugung einer benutzerdefinierten CSV. Da sich dort personenbezogene Daten befinden, möchte ich das hier nicht öffentlich machen.

    Ich versuche deinen Vorschlag, das mal durch onVisformsEmailPrepare aufzurufen, aber wird das nicht NACH onVisformsAfterFormSave abgearbeitet? Naja, Versuch macht kluch :cheer:
    Liebe Grüße vom Heinz

    Freundliche Grüße aus PM
    Heinz
    Letzte Änderung: 5 Jahre 2 Monate her von MaliRaj.

    Moderatoren: Administrator AVAdministrator IV
    Powered by Kunena Forum