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.

User-/View-abhängige SQL-Select-Statements

Mehr
10 Monate 3 Wochen her - 10 Monate 3 Wochen her #9457 von MaliRaj
Userabhängige SQL-Select-Statements wurde erstellt von MaliRaj
Mit der Subscription Version 4.3.0 Beta sind mit dem Event 'onVisfieldBeforeCreate' ja prinzipiell vom aktuellen User abhängige SQL-Select-Statements möglich.
Welche Objekte sind innerhalb dieses Events bekannt? Zusätzlich von dem mir bekannten USER und INPUT (und FIELD natürlich) benötige ich speziell noch die Kontext-Unterscheidung zwischen Form und Edit an dieser Stelle. Außerdem im Falle von Edit zusätzlich den aktuellen Datensatz (zumindest ID und created_by).
Kann ich auf das $form-Objekt an dieser Stelle zugreifen? Dann hätte ich ja alles was ich brauche.

Hintergrund ist, dass das SQL-Feld eine Summenberechnung unter Einbeziehung von eigenen User- und Eingabedaten über mehrere eigene Datensätze hinweg durchführt. Beim Editieren passt dann das SQL-Statement nicht mehr, weil ja der Admin editiert. Selbst eigene Datensätze editieren ist dann nicht mehr korrekt möglich, da einzelne Werte des aktuell bearbeiteten Datensatz ja auch schon im (gleichen) gespeicherten Datensatz enthalten sind. Für eine korrekte Summenberechnung würde also so etwas gebraucht: Summe einer Spalte aller gespeicherten Datensätze außer dem aktuellen, plus Summe aus dem aktuellen Input-Objekt. 

Freundliche Grüße aus PM
Heinz
Letzte Änderung: 10 Monate 3 Wochen her von MaliRaj.

Mehr
10 Monate 3 Wochen her - 10 Monate 3 Wochen her #9458 von Administrator AV
Administrator AV antwortete auf Userabhängige SQL-Select-Statements
Hallo Heinz,

aktuell steht dir das Formular als Objekt im Event leider nicht zur Verfügung. Mir war nicht klar, dass das auch gebraucht wird.

Ich habe dazu einen Issue zur Entwicklung für die Wunschliste angelegt:
Issue [VF-844]: onVisfieldBeforeCreate make form available in event   
 
Wenn wir das neue Feature releasen, wirst du explizit über das Release hier im Thema informiert.
Vielen Dank nochmal für deinen Vorschlag!

Herzliche 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 :-).
Letzte Änderung: 10 Monate 3 Wochen her von Administrator IV.

Mehr
10 Monate 3 Wochen her #9459 von Administrator AV
Administrator AV antwortete auf Userabhängige SQL-Select-Statements
Hallo Heinz,

Falls du das jetzt schon nutzen willst.

Die Code-Anpasungen wird so aussehen:

Es gibt im Verzeichnis components/com_visforms/lib/field für jeden Feldtyp eine Datei.
In allen diesen Dateien wird das Event onVisfieldBeforeCreate getriggered (AUßER image.php, multicheckbox.php, multicheckboxsql.php, password.php, reset.php, die rein abgeleitete Klassen sind und keinen eigenen Code enthalten).

So um die Zeile 43 (variiert je nach Datei).
Alt:
Code:
$event = AbstractEvent::create('onVisfieldBeforeCreate', array('context' => 'com_visforms.field', 'subject' => $this->field));
Neu:
Code:
$event = AbstractEvent::create('onVisfieldBeforeCreate', array('context' => 'com_visforms.field', 'subject' => $this->field, 'form' => $this->form));
Dieser Code muss in 19 Dateien in diesem Verzeichnis anpassen (eben allen außer image.php, multicheckbox.php, multicheckboxsql.php, password.php, reset.php).
Wenn du Dateien vergisst erhälst du Fehlermeldungen und evtl. auch fatal Errors!

Nachdem alle Dateien angepasst sind steht dir in deinem EventHandler im Plugin ein 3 Parameter $form zur Verfügung.

Das $form Objekt hat einen Parameter displayState. Der kennt 4 Werte.
1 = Formularansicht
2 = Fehlerhaftes Formular wird erneut angezeigt (also auch eine Formularansicht, aber es gibt schon Benutzereingaben und diese werden eingefügt. Dieser Status wird also durchlaufen, wenn das Formular abgeschickt wurde, aber PHP Validierung hat einen Fehler erkannt hat und das Formular erneut angezeigt wird)
3 = Formular Edit Ansicht
4 = Fehlerhaftes Edit Formular wird erneut angezeigt (analog 2, aber beim Edit Modus).

Damit solltest du alle benötigten Informationen haben.

Herzliche 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
10 Monate 3 Wochen her #9460 von MaliRaj
MaliRaj antwortete auf Userabhängige SQL-Select-Statements
Eieiei .. das ging ja fix ... das teste ich gleich mal ...

Freundliche Grüße aus PM
Heinz

Mehr
10 Monate 3 Wochen her #9461 von MaliRaj
MaliRaj antwortete auf Userabhängige SQL-Select-Statements
Also Aicha, ...  das klappt hervorragend ... bin wieder mal begeistert ... kann den 'displayState' je nach Ansicht korrekt auslesen.
Absolute Spitze und eine super schnelle Lösung.
Vielen Dank! 

Freundliche Grüße aus PM
Heinz

Mehr
10 Monate 3 Wochen her - 10 Monate 3 Wochen her #9471 von MaliRaj
MaliRaj antwortete auf Userabhängige SQL-Select-Statements
Obwohl das SQL-Statement nun korrekt ersetzt wird, die SQL-Abfrage auch korrekt funktioniert, der richtige Wert auch kurz zu sehen ist, wird er scheinbar etwas später wieder durch das alte SQL-Statement aus der Feldkonfiguration ersetzt. Zum Testen habe ich mehrere Datensätze mit einer UserID(1) erstellt und mit einer anderen UserID(2) ändern wollen. Das Feld 'F352' enthält Einzelpreise. Das (Test)-Statement im Formular für das Summe-Feld 408 lautet:
Code:
SELECT SUM(`F352`)+${input:neue_eingabe} as value, SUM(`F352`)+${input:neue_eingabe} as label FROM `#__visforms_10` WHERE `published` = 1 AND `created_by` = '${user:id}'

Bei jedem neuen Formularaufruf durch User(1) wird die Summe aus bisherigen Einzelpreisen und der aktuellen Eingabe korrekt berechnet.
Im Event onVisfieldBeforeCreate wird (nur für EDIT) das Summenfeld F408 - Statement ersetzt mit:

Code:
if ($displayState = $form->displayState <= 2 ) return true; // Formularansicht? = Script hier beenden $data_id    = $form->data->id; $created_by = $form->data->created_by;      $field->sql = "SELECT SUM(`F352`)+${input:neue_eingabe} as value, SUM(`F352`)+${input:neue_eingabe} as label FROM `order` WHERE `published` = 1 AND `created_by` = $created_by AND `id` != $data_id";

Leider scheint das nicht zu reichen, denn wenn ich mit User(2) editiere, springt die kurz richtige Anzeige wieder zurück auf {input:neue_eingabe}.
Wenn ich mit User(1) editiere, sehe ich auch kurz die richtige Berechnung, dann aber, wenn das Formular fertig aufgebaut scheint, ergibt die Berechnung: die Summe aller bisher gespeicherten Einzelsummen des Users + die aktuelle 'neue_eingabe'. Das entspricht exakt dem Verhalten des SQL-Statements aus der Formularkonfiguration für Feld 408.

In einem anderen Formular konnte ich aber erfolgreich:
Code:
$field->customtext    = '<p><strong>Auswahl nur eingeloggt möglich!</strong></p>'; $field->allowurlparam = 0 ;    // Url Parameter nicht erlauben
dauerhaft (dort für alle Ansichten, also Form und Edit) umsetzen.
Mein Summenfeld ist ein "Reload"-Feld bei Änderung von 'neue_eingabe'. Hängt das eventuell damit zusammen? An der falschen Berechnung ändert das zumindest nichts.

Freundliche Grüße aus PM
Heinz
Letzte Änderung: 10 Monate 3 Wochen her von MaliRaj.

Moderatoren: Administrator AVAdministrator IV
Powered by Kunena Forum