Joomla 5 Notice

We are pleased to announce that as of January 29, 2024, all of our Joomla extensions are compatible with Joomla 5.

For all who are still updateing from Joomla 3 to Joomla 4: Joomla 4 Migration instructions are available here:

There is now a separate Documentation for Visforms for Joomla 4 and for Visforms for Joomla 5!

Forum

Visforms Subscription user can ask questions in our forum. Please log in with the relevant user first.
Everybody can access the forum for reading.

Please only ask 1 question per topic.

Important information for almost every question:
V1: Which Visforms version is running?
V2: Which Joomla version is running?
V3: Which PHP version is running?

Timing: Mailanhang mit Visforms Events

More
5 years 9 months ago - 5 years 8 months ago #6037 by 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
(Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)
Last edit: 5 years 8 months ago by MaliRaj.

More
5 years 9 months ago - 5 years 9 months ago #6042 by Administrator AV
Replied by Administrator AV on topic 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 :-).
Last edit: 5 years 9 months ago by Administrator AV.
The following user(s) said Thank You: MaliRaj

More
5 years 9 months ago - 5 years 9 months ago #6045 by MaliRaj
Replied by MaliRaj on topic Timing: Mailanhang mit Visforms Events
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
(Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)
Last edit: 5 years 9 months ago by MaliRaj.

More
5 years 9 months ago #6046 by MaliRaj
Replied by MaliRaj on topic Timing: Mailanhang mit Visforms Events
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
(Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)

More
5 years 9 months ago #6048 by Administrator AV
Replied by Administrator AV on topic 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 :-).
The following user(s) said Thank You: MaliRaj

More
5 years 9 months ago - 5 years 9 months ago #6053 by MaliRaj
Replied by MaliRaj on topic Timing: Mailanhang mit Visforms Events
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
    (Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)
    Last edit: 5 years 9 months ago by MaliRaj.

    Moderators: Administrator AVAdministrator IV
    Powered by Kunena Forum