yakamara / yform

YForm für REDAXO 5 – Formulare im Frontend und Backend mit Verwaltung von Datenbank-Tabellen.
MIT License
77 stars 55 forks source link

Datensatz klonen verbessern #1348

Open dergel opened 1 year ago

dergel commented 1 year ago

Von @christophboecker

@dergel Super, Jan, das ging ja ratz fatz. Sieht so aus, als ob es funktioniert. Ein Kurztest sagt: dobsche.

Darf ich dennoch was anmerken:

Ich hätte mich nicht getraut, einen PR zu bauen, der einen YForm-Hack zum Umbau von YForm-Code in YForm einbaut. :-) Hast Du das Kleingedruckte des Tricks gelesen? Die EPs laufen nicht unbedingt so ab, wie vieleicht erwartet. Beim Aufbau des Formulars nach Klick auf die Klonen-Aktion wird der EP YFORM_DATA_UPDATE aufgerufen und nicht YFORM_DATA_ADD, während beim Speichern nach Klick auf den Save-Button erst der EP YFORM_DATA_ADD und dann YFORM_DATA_ADDED angezogen werden. Da werden bestimmt noch Fragen nach YFORM_DATA_CLONE und YFORM_DATA_CLONED kommen, die man bei enem Trick nicht stellen würde.

Die Lösung erwischt zwar auch Datentypen, die auf be_manager_relation aufsetzen, aber nicht “private” Datentypen, die Relationen aufbauen und verwalten. Ob das mit einer tiefer in YFORM verdrahteten Lösung andes wäre? Vermutlich nicht. Nur um es erwähnt zu haben.

Als Icon würde ich beim Klonen-Icon (.fa-copy oder .rex-icon-duplicate) bleiben, grade um den Unterschied zum normalen Hinzufügen (+) herauszustellen. Perspektivisch könnte man irgendwie wohl doch mal rangehen und $afterFieldsExecuted in den eigentlichen Code aufröseln. Also z.B. nicht nachträglich HTML rauswerfen oder ändern, sondern sofort passend weglassen/erzeugen. Falls das überhaupt mit vertretbarem Aufwand in dem komplexen Gesamtzusammenhang machbar ist. Ich bin bisher davor zurückgeschreckt.

christophboecker commented 1 year ago

Noch was: evtl wäre noch ein EP notwendig, z.B. für Nacharbeiten im Dateisystem. Ich denke hier an sowas wie das Upload-Feld. Dahinter liegt ja auch eine Datei im Data-Verzeichnis, die durch den Clone-Trick nicht mit kopiert wird. Für private Value-Felder, die Dateien referenzieren, gilt das analog.