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?

Icons in Bestätigungsmail

More
1 year 8 months ago #9008 by bibeg
Icons in Bestätigungsmail was created by bibeg
Hallo Visforms-Team,

ich setze Visforms seit einiger Zeit im Intranet einer Einrichtung für Menschen mit Behinderung ein. Damit werden Bestellungen/Aufträge ausgelöst, die dann von den Mitarbeitern bearbeitet werden. Das klappt bisher immer super und wir haben damit schon viele tolle Sachen umgesetzt.

In einem Formular gibt es eine Multicheckbox. In der Bestätigungsmail werden die Optionswerte ja kommasepariert ausgegeben.

Da es einige Menschen gibt, die schlecht oder garnicht lesen können, wäre es schön wenn man in der Mail nach dem Optionswert ein erklärendes Icon oder eine Grafik ausgeben könnte.

Meine naive Idee war es stumpf im Optionswert html wie z.B.
Code:
Apfel <img src="https://example.org/images/apfel.png">
einzutragen.
Leider verhindert der gute SQL-Injection-Schutz meinen plumpen Versuch. Außerdem zerlegt das Layout der Multicheckbox und ich erhalte die Fehlermeldung "Für das Feld "Obst" wurde ein ungültiger Wert übermittelt."

Habt ihr eine Idee, wie ich den Usern das Arbeiten etwas erleichtern könnte?

Über einen Tipp würde ich mich sehr freuen.

Vielen Dank und viele Grüße

More
1 year 8 months ago #9010 by bibeg
Replied by bibeg on topic Icons in Bestätigungsmail
Hallo zusammen,

in der Zwischenzeit hatte ich auch HTML-Entitäten probiert, aber auch deren Sonderzeichen werden herausgefiltert...


Viele Grüße

More
1 year 8 months ago - 1 year 8 months ago #9014 by Administrator IV
Replied by Administrator IV on topic Icons in Bestätigungsmail
Hallo Fabian,

das Füllen von Optionswerten mit all diesen Formaten (HTML, XML) und Sonderzeichen ist nicht möglich.
Diese Werte kommen etwa explizit im JavaScript Code in Abfragen vor.
Dort ist das alles nicht erlaubt, bzw. käme zu einer irrsinnigen Escape-Schlacht, bei der nicht wirklich feststeht, wer am Ende gewinnt.
Im JavaScript liegen die Werte auch mal 'ausgedruckt' vor und sind nicht einfach in einer lokalen Variable versteckt.

Durch reine Konfiguration ist das mit Visforms nicht möglich.
Es ist aber mit ganz wenig PHP-Code in einem Visforms Custom Plugin mit wenig Aufwand machbar.

Die Dokumentation mit einem Beispiel für die Entwicklung eines individuellen Visforms Plugins findest du hier:
docs.joomla-4.visforms.vi-solutions.de/d...-plugin-development/

Die Dokumentation mit den Plugin-Events findest du hier:
docs.joomla-4.visforms.vi-solutions.de/d...-plugin-development/

Seit kurzen wird ein komplettes Visforms Custom Plugin Template mit leeren Funktionsrümpfen für alle Event-Handler mit installiert:
Code:
plugins/visforms/vfcustomplugin/vfcustomplugin.php

Du musst es nur
1 - Installieren:
Administration >> System >> Installieren >> Überprüfen >> Auswählen und Button 'Überprüfen' klicken.
2 - Aktivieren:
Administration >> System >> Verwalten >> Plugins >> Auswählen und Button 'Aktivieren' klicken.

Im Plugin-Event 'onVisformsEmailPrepare' kannst du die Eigenschaften der versendeten Mails ändern.
Dort ist unter anderem auch das Ändern des finalen Mail-Textes ($mail->Body) möglich.

In der folgenden Funktion wird für die Ergebnismail hinter den Optionswert (label-1, ..., label-3) eine Landes-Flagge als kleines Icon gesetzt.
Die Beispiel-Icons der Landes-Flaggen stammen aus der Visforms Installation.
Code:
public function onVisformsEmailPrepare($context, $mail, $form): bool {     // context = 'com_visforms.form.resultmail'     // context = 'com_visforms.form.receiptmail'     // triggered in VisformsModel after the mail object is instantiated and directly before the mail is sent:     // can be used to modify the mail object: mail object is instantiated and all properties are set and can be modified     // example code: simply change email text     // $mail->Body = '<p>My new result mail body.</p>';         if('com_visforms.form.resultmail' == $context) {         $mail->Body = preg_replace('#label-1#', 'label-1 <img src="http://localhost/developj4/media/com_visforms/img/es_es.gif">', $mail->Body);         $mail->Body = preg_replace('#label-2#', 'label-1 <img src="http://localhost/developj4/media/com_visforms/img/fr_fr.gif">', $mail->Body);         $mail->Body = preg_replace('#label-3#', 'label-1 <img src="http://localhost/developj4/media/com_visforms/img/nl_nl.gif">', $mail->Body);     }     return true; }


Liebe Grüße, Ingmar

: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: 1 year 8 months ago by Administrator IV.

More
1 year 8 months ago - 1 year 8 months ago #9017 by bibeg
Replied by bibeg on topic Icons in Bestätigungsmail
Hallo Ingmar,

vielen Dank für deine ausführliche Antwort!

Es klappt super mit dem folgenden Code


Meine iconsinvisformsmail.php lautet:
Code:
<?php /**  * @copyright    Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.  * @license        GNU General Public License version 2 or later; see LICENSE.txt  */ // No direct access defined('_JEXEC') or die; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\CMS\Factory; class plgVisformsIconsInVisformsMail extends CMSPlugin {     public function __construct(& $subject, $config) {         parent::__construct($subject, $config);         //load the translation         $this->loadLanguage();     }     // NOTE: this plugin requires Visforms Base and Visforms Subscription 4.1.0 (or higher) !!     public function onVisformsFormPrepare($context, $form, $menuparams) {         // 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 = Factory::getApplication();         // only perform action, if we are in front end         if ($app->isClient('administrator')) {             return true;         }         //if $form->parentFormId is not set, Visforms or Content Plugin Form View version is to old         if (!isset($form->parentFormId)) {             return true;         }         // get value of id attribute of the form which is going to be displayed         $parentFormId = $form->parentFormId;         // add custom submit handler function to the form         $script = 'jQuery(document).ready(function () {             //add custom submit action function to form             window["' . $parentFormId . 'SubmitAction"] = function (form) {             // your code in here             //return false to prevent form from being submitted, return true, if submithandler performs another action but form should be send                 return true;             };         });';         Factory::getDocument()->addScriptDeclaration($script);         // End: add custom submit handler function to the form     }     public function onVisformsBeforeFormSave($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 = Factory::getApplication();         // only perform action, if we are in front end         if ($app->isClient('administrator')) {             return true;         }         // your code in here         return true;     }     public function onVisformsEmailPrepare($context, $mail, $form): bool {     // context = 'com_visforms.form.resultmail'     // context = 'com_visforms.form.receiptmail'     // triggered in VisformsModel after the mail object is instantiated and directly before the mail is sent:     // can be used to modify the mail object: mail object is instantiated and all properties are set and can be modified     // example code: simply change email text     // $mail->Body = '<p>My new result mail body.</p>';         if('com_visforms.form.resultmail' == $context) {         $mail->Body = preg_replace('#Kaffee#', 'Kaffee <img src="http://example.org/images/icons/kaffee.png">', $mail->Body);         $mail->Body = preg_replace('#Kaltgetränke#', 'Kaltgetränke <img src="http://example.org/images/icons/kaltgetraenke.png">', $mail->Body);         $mail->Body = preg_replace('#Mittagessen#', 'Mittagessen <img src="http://example.org/images/icons/mittagessen.png">', $mail->Body);     }     return true; } }

Vielen Dank nochmal und viele Grüße
Last edit: 1 year 8 months ago by bibeg.

Moderators: Administrator AVAdministrator IV
Powered by Kunena Forum