Project @ iMath: Issueshttps://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892024-03-18T07:56:45ZProject @ iMath
Redmine QFQ - Feature #18164 (Feedback): Merge datahttps://project.math.uzh.ch/issues/181642024-03-18T07:56:45ZEnis Nuredini
<p>Neues Feature um vereinfacht Duplizierte Daten zu mergen. Soll relativ generisch und Einsatzbereit für verschieden Projekte sein.</p>
<p>Eine automatische Erstellung von Merge Rules in einer eigenen Tabelle ist vorgesehen. Das manuelle Erfassen von Rules sollte ebenfalls möglich sein.<br />Beim mergen sollten drei Optionen zur Verfügung stehen: Datensatz belassen, Datensatz mergen, Datensatz löschen</p>
<p>Auch sollte die Primary ID auswählbar sein.</p>
<p>Ein Switch zwischen Rules und compared Data würde die Benutzerfreundlichkeit erhöhen.</p> QFQ - Feature #18161 (New): QFQ Variable: New escape/action class 'strip_tags'https://project.math.uzh.ch/issues/181612024-03-17T11:21:55ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mitunter werden Variablen ausgegeben und koennen potentiell HTML Tags enthalten die an der Stelle unerwuenscht sind.</p>
<p>Vorschlag 'r' fuer 'remove tags' (c=clean & s=striptags, p=purge sidn schon benutzt) - <a class="external" href="https://docs.qfq.io/en/master/Variable.html#variable-escape">https://docs.qfq.io/en/master/Variable.html#variable-escape</a></p>
<pre>
{{label:R::r}}
</pre>
<p>Koennte verwendet werden in <a class="issue tracker-2 status-1 priority-2 priority-default" title="Feature: Title of 'FormElement'-form: shortened, link to form (New)" href="https://project.math.uzh.ch/issues/18160">#18160</a> damit keine HTML Tags im Titel ausgegeben werden.</p> QFQ - Feature #18160 (New): Title of 'FormElement'-form: shortened, link to formhttps://project.math.uzh.ch/issues/181602024-03-17T11:04:14ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>a) Mir passiert es haeufig das ich ein FormElement bearbeite und dann gerne das ganze Form bearbeiten moechte.</li>
<li>b) Der Titel des FormElement-Forms enthaelt Elemente die wenig Informationsinhalt haben</li>
</ul>
<a name="Aktuell"></a>
<h2 >Aktuell:<a href="#Aktuell" class="wiki-anchor">¶</a></h2>
<p><img src="https://project.math.uzh.ch/attachments/download/9516/clipboard-202403171125-ffl17.png" alt="" /></p>
<a name="Vorschlag"></a>
<h2 >Vorschlag:<a href="#Vorschlag" class="wiki-anchor">¶</a></h2>
<p><img src="https://project.math.uzh.ch/attachments/download/9517/clipboard-202403171202-1quit.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9518/clipboard-202403171203-bzxni.png" alt="" /></p>
<a name="Neue-Definition"></a>
<h2 >Neue Definition<a href="#Neue-Definition" class="wiki-anchor">¶</a></h2>
<pre>
{{ "{{SELECT 'p:form?form=form&r=', f.id, '|E|b:btn-small btn-default|s|o:Form: ', f.id, ' / ', f.name, CHAR(10), 'DB: {{dbNameQfq:Y}}' FROM Form AS f WHERE f.id = {{formId:SR0}} }}" AS _link}} <span style="font-weight: 100;">FE:</span> {{name:R:::New}} / {{label:RE}}
</pre> QFQ - Feature #18022 (Feedback): Filepond colors / element size / font size (new UZH CD) / borderhttps://project.math.uzh.ch/issues/180222024-02-29T07:59:26ZEnis Nuredini
<ul>
<li>Einheitliche Farbe Filepond Elements - Defaultfarbe die auch die anderen Input Elemente haben (am besten die Browser Vorgabe)</li>
<li>Höhe des Elements: wie reguläre Inputfelder.</li>
<li>Drag&Drop Feld Farbe anpassbar(?) - Defaultfarbe die auch die anderen Input Elemente haben</li>
<li>Font Size: Check UZH CD 2012 & 2023 (bei 2023 stimmt es nicht, siehe Screenshot)</li>
<li>Border wie bei Inputelementen.</li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/9368/clipboard-202403010917-nkqii.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9369/clipboard-202403010919-yunhd.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9370/clipboard-202403010919-6ldbb.png" alt="" /></p> QFQ - Feature #18013 (New): Tablesorter: column view selectorhttps://project.math.uzh.ch/issues/180132024-02-27T15:36:32ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Der tablesorter merkt sich die Suchbegriffe und ausgewaehlten Spalten</li>
<li>Wird in einer Spalte A ein Suchbegriff eingegeben und diese Spalte ausgeblendet, wird anschliessend immer noch das gefilterte Ergebnis angezeigt.</li>
</ul>
<p>Das ist verwirrend!!!</p>
<p><img src="https://project.math.uzh.ch/attachments/download/9352/clipboard-202402271633-qfxra.png" alt="" /></p> QFQ - Feature #17984 (New): SQL Firewallhttps://project.math.uzh.ch/issues/179842024-02-23T12:55:31ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Artikel lesen: <a class="external" href="https://www.heise.de/tests/Datenbanken-schuetzen-Drei-freie-SQL-Firewalls-im-Test-9625335.html?wt_mc=intern.red.plus.newsticker.7-tage-news.teaser.teaser">https://www.heise.de/tests/Datenbanken-schuetzen-Drei-freie-SQL-Firewalls-im-Test-9625335.html?wt_mc=intern.red.plus.newsticker.7-tage-news.teaser.teaser</a></li>
<li>Falls Kosten/Nutzen Verhaeltnis gut:
<ul>
<li>In QFQ Doku beschreiben wie man das einsetzen koennte.</li>
<li>Ggfs. Anpassungen in QFQ fuer die Nutzung</li>
</ul></li>
</ul> QFQ - Feature #17868 (New): Automatisierte Security Testshttps://project.math.uzh.ch/issues/178682024-02-12T12:44:12ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Bei Heise wird ein Workshop zum Thema angeboten.</li>
<li>Die Topics (siehe PDF) koennen helfen selber in dem Bereich Checks aufzubauen.</li>
</ul> QFQ - Feature #17813 (New): bsColumns - bisher: col-md-12 col-lg-10 / neu: col-md-12 col-lg-8https://project.math.uzh.ch/issues/178132024-02-03T16:40:19ZCarsten Rosecarsten.rose@math.uzh.ch
<p>bsColumns:</p>
<a name="Neu-1680px-col-md-12-col-lg-8"></a>
<h2 >Neu 1680px (col-md-12 col-lg-8)<a href="#Neu-1680px-col-md-12-col-lg-8" class="wiki-anchor">¶</a></h2>
<p><img src="https://project.math.uzh.ch/attachments/download/9140/clipboard-202402031737-pag4g.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9143/clipboard-202402031811-a3aus.png" alt="" /></p>
<a name="Alt-1680px-col-md-12-col-lg-10"></a>
<h2 >Alt 1680px (col-md-12 col-lg-10)<a href="#Alt-1680px-col-md-12-col-lg-10" class="wiki-anchor">¶</a></h2>
<p><img src="https://project.math.uzh.ch/attachments/download/9141/clipboard-202402031739-hnb8a.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9142/clipboard-202402031809-ae1ib.png" alt="" /></p> QFQ - Feature #17812 (New): Switch User: Neu/Alternativ auch mit FE Group Anpassunghttps://project.math.uzh.ch/issues/178122024-02-03T16:17:40ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #17647 (New): Chat Ratchet Websocket Server: a) start on boot, b) multiple racthet ...https://project.math.uzh.ch/issues/176472024-01-18T12:28:35ZCarsten Rosecarsten.rose@math.uzh.ch
<p>a) start on boot</p>
<ul>
<li>Ratched soll beim Boot automatisch starten. </li>
<li>Es gibt kein Stop mehr</li>
</ul>
<p>b) multiple racthet instances,</p>
<ul>
<li>Pro Host koennen mehere Ratchets gestartet/beendet werden.</li>
<li>Ratchet Config Datei entsprehcend anpassen.</li>
<li>Optionale Check ob nginx/apache entsprechende Proxy Anweisungen enthalten</li>
</ul>
<p>c) update QFQ not to start/stop</p>
<ul>
<li>Aus dem Controller das 'start' und aus QFQ das 'stop' entfernen.</li>
</ul>
<p>d) Update installation doc</p>
<ul>
<li>NGINX/Apache Config Beispiel</li>
<li>Start Script fuer Ratched in QFQ mit verteilen.</li>
</ul> QFQ - Feature #17616 (New): Automate QFQ Build Prozesshttps://project.math.uzh.ch/issues/176162024-01-16T11:23:53ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Aktuell ist es extrem muehsam eine neue QFQ Version zu bauen.</li>
<li>Es waere sehr erstrebenswert neuen QFQ Versionen auf Knopfdruck erzeugen zu koennen.</li>
</ul>
<p>Ideen:</p>
<ul>
<li>Mit jedem Merge eines Branches in Develop wird ein Eintrag in die Releasenotes gemacht.
<ul>
<li>Im Merge Request steht die Ticketnummer.</li>
<li>Daraus kann das Subject fuer die `Releasenotes.nextversion` genommen werden.</li>
<li>Das Ticket wird in den Milestone '_nextversion' verschoben und auf 'Ready to sync' gesetzt.</li>
</ul></li>
</ul>
<ul>
<li>Bei einem Merge von Develop nach Master Files (alle in Develop gesammelten Branches auf einmal) wird eine neue Version gebaut
<ul>
<li>Es wird eine Versionsnummer besteimmt. Z.B. 24.1.3 - die '3' ist ein Counter die bei jeder neuen Version hochgezaehlt wird. Wechselt der Monat wird sie auf 0 zurueck gesetzt. Das Jahr wird ebenfalls automatisch angepasst.</li>
<li>In Project wird ein Milestones mit der neuen Versionsnummer angelegt.</li>
<li>`Releasenotes.nextversion` wird sortiert nach Features/Bug/Note und diese werden in die finalen Release-Notes kopiert.</li>
<li>Alle aufgefuehrten Tickets werden geschlossen. Der Milestone wird geschlossen.</li>
</ul></li>
</ul>
<p>Subject ist</p> QFQ - Feature #16849 (New): Mail: check FROM address for pattern or specific sender addresshttps://project.math.uzh.ch/issues/168492023-09-08T18:09:06ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Von den ZI wird gefordert das nur Emailadressen von Shared-Mailboxen als Absender verwendet werden duerfen.</li>
<li>Damit nicht so schnell Fehler auftreten, soll neue eine Liste von Adressen / Pattern in der QFQ config hinterlegt werden koennen, gegen die getestet werden</li>
</ul> QFQ - Feature #16848 (New): Docker Sendmailhttps://project.math.uzh.ch/issues/168482023-09-08T13:56:32ZEnis Nuredini
<p>Sendmail im Docker funktioniert noch nicht. MTA nicht auf dem Docker installiert.</p>
<p><a class="external" href="https://systemvcs.math.uzh.ch/it/typo3-docker">https://systemvcs.math.uzh.ch/it/typo3-docker</a></p> QFQ - Feature #16305 (In Progress): Inline Editing Text , Merge Requesthttps://project.math.uzh.ch/issues/163052023-05-28T13:37:18ZPascal RösslerQFQ - Feature #16303 (New): Restrict mail sendinghttps://project.math.uzh.ch/issues/163032023-05-27T13:42:07ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Um versehentliches massenhaftes versenden von Mails zu verhindern sollten vor jedem Mailversand Checks durchgefuehrt werden:</p>
<ul>
<li>Checks greifen nur wenn production='yes'</li>
<li>Wenn Check aktiv ist: QFQ Prozess vollstaendig beenden: Damit ist sichergestellt das keine Records als 'done' markiert werden.</li>
<li>Vor dem beenden eine Warnmail versenden an Support: Empfaenger ist konfigurierbar. Pro Minute maximail eine Warnmail.</li>
</ul>
<ul>
<li>Schutz individuelle Emailadresse: Wurden in den letzten 24h mehr als 10 Mails an die gleiche Adresse gesendet?</li>
<li>Schutz gegen Massenmail: Wurden in den letzten 24 Stunden mehr als 500 Mails versendet?</li>
</ul> QFQ - Feature #16297 (New): AutoCron: no SIP https://project.math.uzh.ch/issues/162972023-05-26T08:59:22ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Im AutoCron , wenn z.B. via Report eine Mail versendet wird, funktionieren SIP Parameter nicht (es gibt keine QFQ Session die weitergereicht wird)</li>
<li>Eine Loesung waere das ein AutoCron einen API Key bekommt, mit dem er aufgerufen wird, und dieser User (=API-Key) hat dann entsprechende Berechtigungen. </li>
<li>Der API Key wird in der QFQ Config zentral hinterlegt.</li>
<li>Der API Key ist im OS Crontab eingetragen und wird beim Aufruf mit uebergeben.</li>
</ul> QFQ - Feature #16219 (New): Security: IPs von Hacking Angriffen sperren - Integration voin Fail2Ban https://project.math.uzh.ch/issues/162192023-05-13T12:32:06ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Setup machen damit Fail2Ban automatisiert IPs sperrt.</li>
<li>Setup in qfq.io/doc unter Security dokumentieren.</li>
<li>Gewisse Fehler, z.B. 'Security: attack detected' werden via syslog gemeldent (konfigurierbar in QFQ). Fail2Ban agiert dann entsprechend</li>
<li>In den QFQ/T3 Instanzen eine Seite einrichten die gesperrte IPs anzeigt, damit man schnell testen kann ob eine IP betroffen ist.</li>
<li>Whitelist: IPs die nie gesperrt werden - z.B. UZH.</li>
<li>Greylist: IPs die umgeleitet werden auf eine Seite 'Your IP has been blocked' - z.B. alle Schweizer IPs</li>
<li>Integration eines IP/Geolocations Services.</li>
<li>Neu gesperrte IPs sollen via Mail gemeldet werden.</li>
<li>Bestehende Logfiles analysieren: klassische Versuche auf WP Dateien fuehren automatisch zu einer Sperrung der IP - da koennte z.B. ein cron job oder inotify daemon via fail2ban die IP sperren.</li>
</ul>
<p>Beispiel Angriff:</p>
<pre>
[2022-10-23 03:48:38 / 45.227.253.6 / &lt;no session cookie&gt;] Security: attack detected
Problem: Post/Get Honeypot variable 'email' detected: 1 UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL#
Post/Get Honeypot variable 'username' detected: 1
Post/Get Honeypot variable 'password' detected: 1
[2022-11-23 16:17:30 / 216.131.108.251 / 23r2ldp832obrii5t0oblg3i09] Security: attack detected
Problem: Value of GET variable 'sOIQ' too long. Allowed: 50, Length: 172. Value: '2408 AND 1=1 UNION ALL SELECT 1,NULL,'&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;',table_name FROM information_schema.tables WHERE 2&gt;1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#'
[2022-12-28 02:21:54 / 45.81.39.101 / 2q5m8frmlchk9b0lndt3b00b1h] Security: attack detected
Problem: Value of GET variable 'CDRC' too long. Allowed: 50, Length: 172. Value: '4935 AND 1=1 UNION ALL SELECT 1,NULL,'&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;',table_name FROM information_schema.tables WHERE 2&gt;1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#'
</pre> QFQ - Feature #15969 (New): Auto Update Stored Procedurehttps://project.math.uzh.ch/issues/159692023-04-06T07:58:57ZEnis Nuredini
<p>Wird eine QFQ Instanz als ganzes kopiert und ein SQL Dump von einer DB zur anderen importiert, so fehlen die Stored Procedures. Bisher wurden diese manuell übertragen.</p>
<p>1) Neu braucht es in der QFQ Extension Config unter dem Tab Debug bei database.update eine dritte Option 'autoDb'. Es gibt schon 'auto' und 'always'. 'auto' würde alles triggern beim DB Update inkl. einem Check ob Stored Procedures existieren und diese erstellen falls nicht (sollte bestehender Code existieren). 'autoDb' führt alles aus wie bisher mit Ausnahme der Stored Procedures. Bei 'always' wird sowieso alles ausgeführt und das bei jedem Load wie gewohnt. Permissions werden vorausgesetzt damit Typo3 die Stored Procedures erstellen kann.</p>
<p>2) Was noch ein Thema war: Triggern der Create Stored Procedures falls QFQ Fehlermeldung erscheint dass eine aufzurufende SQL Function nicht gefunden wurde (Idee wurde wieder verworfen.). Danach ein Check ob das Create Stored Procedures erfolgreich ausgeführt wurde.</p> QFQ - Feature #15904 (New): QFQ: T3 V12 Compatibilityhttps://project.math.uzh.ch/issues/159042023-03-30T07:07:56ZEnis Nuredini
<p>QFQ ist nicht kompatibel mit T3 V12. Hier müssen Anpassungen vorgenommen werden.</p>
<p>Testseite verfügbar: <a class="external" href="http://webwork22.math.uzh.ch/typo12/typo3/">http://webwork22.math.uzh.ch/typo12/typo3/</a></p>
<p>Extension ist schon mal auf der Testseite hinzugefügt, damit es in Typo3 keine Fehlermeldung (Access denied) gibt mussten in folgenden Files (ext_tables.php, ext_localconf.php, tt_content-php) Zeilen Code auskommentiert werden:<br /><pre>
if (!defined('TYPO3_MODE')) {
# die('Access denied.');
}
</pre></p>
<p>Upload über T3 Backend ist aktuell nicht mehr möglich, nur das einfügen ins Verzeichnis typo3conf/ext/</p> QFQ - Feature #15903 (New): UZH CD: T3 V12 Compatibilityhttps://project.math.uzh.ch/issues/159032023-03-30T07:00:25ZEnis Nuredini
<p>UZH CD ist aktuell nicht kompatibel mit T3 V12. Hier gibt es Handlungsbedarf.</p>
<p>Verfügbare Testseite: <a class="external" href="http://webwork22.math.uzh.ch/typo12/typo3/">http://webwork22.math.uzh.ch/typo12/typo3/</a></p>
<p>Extension ist schon mal auf der Testseite hinzugefügt, damit es in Typo3 keine Fehlermeldung (Access denied) gibt mussten in folgenden Files (ext_tables.php) Zeilen Code auskommentiert werden:<br /><pre>
if (!defined('TYPO3_MODE')) {
# die('Access denied.');
}
</pre></p>
<p>Upload über T3 Backend ist aktuell nicht mehr möglich, nur das einfügen ins Verzeichnis typo3conf/ext/</p> QFQ - Feature #15534 (New): FormEditor > CodeMirror > a) sql1: 'Home/End' jumps to technical line...https://project.math.uzh.ch/issues/155342023-02-12T17:05:01ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Hat man im CodeMirror eine Textzeile die im Editor umgebrochen wird und der Cursor steht auf (1), dann springt Taste 'home' auf (2). Gewuenscht waere (3). Es gibt bestimmt eine Option in CodeMirror die man setzen kann fuer das gewuenschte Verhalten - waere gut wenn das der Default waere.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/7260/clipboard-202302121801-dbk1r.png" alt="" /></p>
<p>Wenn moeglich, bitte Highlight fuer matching brackets '({[<' by default aktivieren.</p> QFQ - Feature #15524 (New): Generic Report Pagehttps://project.math.uzh.ch/issues/155242023-02-11T09:59:41ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Ziel: einfach beliebige Daten anschauen / bearbeiten / exportieren koennen.</p>
<p>Features:</p>
<ul>
<li>Repository enthaelt beliebige vorgegebene oder benutzerdefierte Reports. Das sind <strong>keine</strong> QFQ Reports mit <code>10.sql=...</code> sondern ein simples SQL Statement.</li>
<li>Optional koennen Eintraege in dem Repository durch Benutzer erstellt/angepasst werden. </li>
<li>Damit haben wir einen generischen Report Generator auf SQL Basis.</li>
<li>Jeder GenericReport hat einen Excel Exports (Button)</li>
<li>Fuer jeden Report kann QFQ 'on the fly' ein Form Detail rendern.</li>
<li>Jede Row (Record) kenn editiert oder geloescht werden.</li>
</ul>
<p>Details:</p>
<ul>
<li>In einer Tabelle 'GenericReport' werden pro Report alle Details hinterlegt.
<ul>
<li>Spalten: sql1, genericReport (uniq name for this report), description, required (comma list of required SIP arguments), sqlStoreVar (SELECT Definition), formForDelete (siehe unten), fileNameExcelExport (kann QFQ Variablen enthalten), head (Textarea Feld mit QFQ Variablen welches ueber dem Report und im Excel ueber den Daten ausgegeben wird). showNew, showEdit, showDelete (default: on).</li>
</ul></li>
</ul>
<ul>
<li>Eine T3 Page 'Generic Report' wird mit dem SIP Parameter 'genericReport=<uniq name>' und weiteren SIP Parametern aufgerufen.
<ul>
<li>Report Code: <code>genericReport = {{genericReport:SE}}</code></li>
</ul></li>
</ul>
<ul>
<li>Der Report wird mit TableSorter dargestellt, inkl. ColumnSelector.</li>
<li>Die Spaltennamen des SQL Statements:
<ul>
<li>a) referenzieren direkt eine Tabellenspalte (darueber kann der Spaltentyp ermittelt werden fuer einen Excel Export oder das generische Formular).</li>
<li>b) bei z.B. <abbr title="">CONCAT</abbr> oder '... AS something' oder bei einem SQL View Statement: im Spaltennamen die Definition. Bsp: 'Person|<abbr title="20">VARCHAR</abbr>|'.
<ul>
<li>Ein SET mit 2 Angaben (yes/no, on/off, 1/0, true/false) wird automatisch zu einer Checkbox. Der unchecked Wert ist der Default aus der Spaltendefinition.</li>
<li>Ein SET mit mehr als 2 Angaben oder ein ENUM fuehrt zu einem Multi-Select.</li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>Mit den Spaltendefinitionen kann:
<ul>
<li>Der Tablesorter auch nach Datum oder numerisch sortieren.</li>
<li>Kann ein generisches Excel erzeugt werden, inkl. korrekter Zellendefinition (Tex, Int, Float, Dezimal, Datum, Zeit, Datum-Zeit)</li>
<li>Ein generisches Formular erzeugt werden (Form wird 'on demand'in die Tabelle Form/FormElement gerendert).
<ul>
<li>FormName: _<genericReport></li>
<li>Edit: Wird angezeigt wenn es min. eine Spalte 'id' gibt - es wird ein Edit-Link gerendert der das zuvor dynamisch erstellte Form verwendet (mit der ersten 'id' Spalte aus der aktuellen Row). </li>
<li>Delete: Wird angezeigt wenn es min. eine Spalte 'id' gibt und eine primary Tabelle bestimmt werden kann (erste Tabelle nach dem FROM Statement) oder ein Form in <code>formForDelete</code> gesetzt ist. </li>
<li>New: Button.</li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>Fuer den Report wird vergleichbar dem Schluesselwort 'form' das neue Wort 'genericReport' einefuehrt.
<ul>
<li>BSP: genericReport = {{genericReport:SE}}</li>
<li>Excel Export
<ul>
<li>via <code>fileNameExcelExport</code> kann der Exportdateiname vorgegeben werden. Falls nicht gesetzt: Tabellenname_Datum.xlsx. </li>
<li><br> erzeugt eine neue Zeile im Excel.</li>
<li>Die Titelzeile wird gesetzt.</li>
</ul></li>
</ul></li>
</ul> QFQ - Feature #15490 (New): new: extraButtonClass: a) New default: btn-info, b) configurabl per I...https://project.math.uzh.ch/issues/154902023-02-06T08:50:16ZCarsten Rosecarsten.rose@math.uzh.ch
<p>extraButtonInfo=...<br />extraButtonInfoClass=btn btn-default</p>
<p>extraButtonLockClass<br />extraButtonPasswordClass</p> QFQ - Feature #15413 (New): '... AS _monitor': line wrap, search, select text, syntax highlighthttps://project.math.uzh.ch/issues/154132023-01-22T10:02:48ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Via '... AS _monitor' (<a class="external" href="http://docs.qfq.io/en/master/Report.html#monitor">http://docs.qfq.io/en/master/Report.html#monitor</a>) koennen Logfiles in Echtzeit angezeigt werden.<br />Die aktuelle Loesung ist sehr rudimentaer.</p>
<ul>
<li>Es wird einmal pro Sekunde gepollt (neue Vesion wird vom Server geholt).</li>
<li>Dabei geht der aktuell selektierte Text verloren. Ggfs. von 'pull' auf 'push' umstellen (websocket).</li>
<li>Andere Moeglichkeit: Button Refresh / Autorefresch (1s, 10s,..)</li>
<li>Syntax Highlight waere gut (CodeMirror im Readonly mode? Oder etwas anderes)</li>
<li>Line Wrap, so dass man nicht nach rechts scrollen muss. Falls Code Mirror verwendet wird</li>
</ul>
<p>Gitlab hat eine sehr gute/funktionale Implementierung:<br /><img src="https://project.math.uzh.ch/attachments/download/7186/clipboard-202301221102-wqoqc.png" alt="" /></p> QFQ - Feature #15237 (New): Inspiration Filemaker: Search/Filter via Detailformhttps://project.math.uzh.ch/issues/152372022-12-23T09:16:54ZCarsten Rosecarsten.rose@math.uzh.ch
<p><img src="https://project.math.uzh.ch/attachments/download/7065/clipboard-202212231014-v8sne.png" alt="" /></p>
<ul>
<li>In FM kann man in einen Such/Filtermodus wechseln, bei dem ein normales Detailform als Filtermaske verwendet wird.</li>
<li>Anschliessend erscheinen oben Navigationselemente um durch die aktuell selektieren Records zu steppen.</li>
</ul> QFQ - Feature #15235 (New): Security Scanner Open Source Luecken: Integrieren in unsere Build Chain.https://project.math.uzh.ch/issues/152352022-12-22T16:05:22ZCarsten Rosecarsten.rose@math.uzh.ch
<p><a class="external" href="https://www.heise.de/news/Googles-neuer-Security-Scanner-gegen-Open-Source-Luecken-7397479.html">https://www.heise.de/news/Googles-neuer-Security-Scanner-gegen-Open-Source-Luecken-7397479.html</a></p> QFQ - Feature #15130 (New): Stored Procedurehttps://project.math.uzh.ch/issues/151302022-12-08T11:24:08ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bitte eine MySQL Stored Procedure machen um Matrikelnummern zu formatieren:</p>
<p>Original: 12345678<br />Formatiert: 12-345-678</p>
<p>Name: <abbr title="">QMANR</abbr></p> QFQ - Feature #15104 (New): MultiForm functionality in a regular formhttps://project.math.uzh.ch/issues/151042022-12-04T09:41:23ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Ziel: In einem Admin Form zu einem Antrag soll auf einem Pill eine dynamische Liste von Checkboxen implementiert werden. (Medtool > Befoerderung > Olga kann sich eine eigenen TodoListe erstellen und diese pro Antrag abarbeiten)</p>
<ul>
<li>'Dynamisch' heisst: Der User kann Workflow Items konfigurieren und jedes Item ist eine Checkbox.</li>
</ul>
<p>Idee:</p>
<ul>
<li>Neuer FE.type=Container mit Namen 'multi element'</li>
<li>In SQL1 wird die MutliForm Query definiert.</li>
<li>Multi Form Container werden nach dem regulaeren 'Form Save' abgearbeitet.</li>
<li>FE.type = action innerhalb eines 'multi element' Containers werden nach den multi-element native elementen ausgefuehrt</li>
<li>Die Form Elemente koennen vermutlich</li>
</ul> QFQ - Feature #15018 (New): SIP not found error: a) fix, b) more information for debugginghttps://project.math.uzh.ch/issues/150182022-11-11T11:34:41ZCarsten Rosecarsten.rose@math.uzh.ch
<p>a) Beim Download haben wir aktuell schwierig zu debuggende Fehler (kann nicht reproduziert werden). #14651, #15001.<br />b) Diverse Ideen:</p>
<ul>
<li>Die in #14651 genannte ID nicht als QFQ Exception gefunden: das macht auch Sinn, denn dort wird die SIP genannt und nicht die QFQ error Log id. Bitte in der Fehlermeldung auf dem Screen die QFQ Error Log ID nennen (am besten mit human readable Timestamp), die kaputte Sip sollte dann im Log stehen. </li>
<li>Im qfq.log bei der SIP Exception angeben wieviele Eintraege die QFQ Session hat. Hintergrund: sollte ein QFQ Coockie fehlen oder frisch angelegt worden sein und die QFQ Session noch quasi leer sein, wuerde man das dann sehen anhand der wenigen Eintaege.</li>
<li>Wenn eine FE Session existiert (und beim Download via Cookie mit uebergeben wurde): Details dazu anzeigen.</li>
<li>Gibt es eine Moeglichkeit das alle Cookies die auf dem Server sind anzuschauen? Ggfs. via IP Adresse Vergleich (wird die IP Adresse zum Cookie gespeichert?) herausfinden welche Cookies zu einem User gehoeren koennten. In dem Fall koennte man diese Cookies in der Exception (qfq.log) nennen, und den SIP Sip Store testweise mit den anderen passenden Sessions laden.</li>
<li>Was koennte man noch angeben?</li>
</ul> QFQ - Feature #15015 (New): Doc: Export / Import Sectionhttps://project.math.uzh.ch/issues/150152022-11-10T19:27:53ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Heute habe ich die Stelle gesucht an der der Import von Excel Dateiern beschrieben ist. Das ist beim Upload FormElement.</p>
<p>Es waere gut wenn in der Doku eine Rubrik zu diversen Import/Export Moeglichkeiten (oberster Level Hauptnavigation) existieren wuerde.</p>
<p>Die Section enhaelt nur allgmeine Informationen und Referenzen zu den Details</p> QFQ - Feature #14996 (New): FormEditor: Show statistics only on requesthttps://project.math.uzh.ch/issues/149962022-11-05T10:58:01ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bei QFQ Instanzen mit viel Traffic fuehr die Statisticauswertung dazu das die Form-Liste langsam geladen wird.</p>
<p>Bitte umbauen das die Statistik explizit ueber einen Button abgerufen werden muss:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/6843/clipboard-202211051155-ilnrv.png" alt="" /></p> QFQ - Feature #14924 (New): Enhance error logging: a) increase max log lenght to 20kB, b) 'toUser...https://project.math.uzh.ch/issues/149242022-10-26T08:55:02ZCarsten Rosecarsten.rose@math.uzh.ch
<p>a) increase max log lenght to 20kB</p>
<p>Sehr lange SQL Statements (wie in Ticket #14923) werden abgeschnitten - bitte das Limit auf 20kB erhoehen.</p>
<p>b) 'toUser:: SQL error'</p>
<p>Warum erscheint das? Koennen wir das verbessern?</p> QFQ - Feature #14863 (ToDo): Empfohlene qfq Version und typo3 Versionhttps://project.math.uzh.ch/issues/148632022-10-07T10:21:25ZKarin Niffeler
<p>Hallo zusammen</p>
<p>Aus Sicherheitsaspekten möchte ich Typo3 upgraden.</p>
<p>Mit welcher Typo3 Version läuft qfq 20.10.0 stabil?</p>
<p>Gibt es eine Empfehlung? <br />Aktuell kann Typo3 11 LTS verwendet werden.</p>
<p>Auf einer Website habe ich gelesen, dass qfq 20.4.0 mit Typo3 7.00 - 9.2.99 stabil läuft.<br />Ist das die aktuelle Empfehlung?</p>
<p>Im Voraus vielen Dank für eine kurze Antwort.</p>
<p>Lieber Gruss,<br />Karin</p> QFQ - Feature #14719 (New): Form > Subrecord: Drag'n'Drop - only activate if column 'columnOrd' e...https://project.math.uzh.ch/issues/147192022-09-13T07:29:47ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Aktuell wird bei jedem Subrecord DnD aktiviert, auch wenn es gar keine Spalte 'ord' gibt.</li>
<li>Neuer Default sollte sein, nur bei vorhandener Spalte den DnD zu aktivieren.</li>
</ul> QFQ - Feature #14639 (New): FormEditor > Preview: also with 'PermitNew=logged_in/out/always'https://project.math.uzh.ch/issues/146392022-08-31T08:29:47ZCarsten Rosecarsten.rose@math.uzh.ch
<p>FormEditor > Preview: sollte angeboten werden wenn 'PermitNew=logged_in/out/always' steht.</p> QFQ - Feature #14637 (New): Remove 'CopyForm' and tables 'extForm', 'extFormElement'https://project.math.uzh.ch/issues/146372022-08-31T08:21:28ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Copy Form ist ersetzt durch JSON Kopie</p> QFQ - Feature #14613 (Priorize): Javascript per FormElementhttps://project.math.uzh.ch/issues/146132022-08-26T13:49:48ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Fuer einfache Funktionen waere es gut wenn man JS pro FE definieren koennte.</li>
<li>Konkrete Anwendung: in <a class="issue tracker-2 status-5 priority-2 priority-default closed" title="Feature: typeAhead: Zeichenlimite ausschalten (Closed)" href="https://project.math.uzh.ch/issues/9221">#9221</a> soll der User darauf hingewiesen werden (es wird eine Warnung eingeblendet), wenn eine hoehere MaxLength als die Default MaxLength eingegegeben wird.</li>
<li>Dazu muesste im JS Code QFQ Variablen ersetzt werden. </li>
<li>Fuer <a class="issue tracker-2 status-5 priority-2 priority-default closed" title="Feature: typeAhead: Zeichenlimite ausschalten (Closed)" href="https://project.math.uzh.ch/issues/9221">#9221</a> braeuchte es auch eine neue Variable, die die table.column MaxLength enthaelt, mit der verglichen wird.</li>
</ul> QFQ - Feature #14495 (New): Text above FormElement inputhttps://project.math.uzh.ch/issues/144952022-07-10T08:56:40ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mitunter wird gewuenscht das der Input Bereich eines ganzen FE die ganze Breite eines Formulares einnehmen soll. Das Label soll dann darueber stehen (oder darunter mit label2).</p>
<p>Option 1: es gibt ein neues Parameter Feld (z.B. label1).<br />Option 2: wenn col-md fuer label auf 0 gesetzt wird, wird der Content in dasa Input Elemente gerednert.</p>
<p>Die zweite Option waere sauber, ist aber nicht so flexibel wie die erste.</p>
<p>Am besten mit Benj besprechen.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/6380/clipboard-202207101056-up6mw.png" alt="" /></p> QFQ - Feature #14371 (Priorize): LDAP via REPORThttps://project.math.uzh.ch/issues/143712022-06-16T14:36:40ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>ES benoetigt fuer MedTool eine Moeglichkeit Batchgesteuert Perseonen aus dem LDAP zu importieren.</li>
<li>Irgendwie sollte der STORE_LDAP gefuellt werden.</li>
<li>Evtl. als special column name oder mit einem neuen Keyword 'doLdap' in Report.</li>
</ul> QFQ - Feature #14290 (Priorize): FormEditor: Show Table Definitionhttps://project.math.uzh.ch/issues/142902022-06-08T12:03:53ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Aktuell ist im FormEditor nur die Primary Tabelle sichtbar:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/6241/clipboard-202206081400-vzkor.png" alt="" /></p>
<ul>
<li>Es waere gut wenn sowohl im Form- als auch im FormElement-Editor alle Tabellen angezeigt werden. </li>
<li>Es koennten alle Tabellen angezeigt werden (Liste) wobei die Definition eingeklappt ist. Die Primary Table wird ausgeklappt dargestellt.</li>
<li>Entweder via Dynamic Update (Select Liste aller Tabellen) oder via ein/ausklappen.</li>
</ul> QFQ - Feature #14187 (Priorize): qfq.log: show current URLhttps://project.math.uzh.ch/issues/141872022-05-11T09:58:39ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn man im qfq.log sehen koennte über welche URL die QFQ aufgerufen wurde.</p>
<p>Usecase: Auf den SL Touch sehen wir hin und wieder QFQ SIP Errors, sehen aber die URL im Browser nicht (wird nicht angezeigt). Auch fuer spaetere Logfileanalyse ist diese Angabe im Log vermutlich hilfreich.</p> QFQ - Feature #14090 (New): Nützliche _script funktionenhttps://project.math.uzh.ch/issues/140902022-04-19T13:00:02ZNicola Chiapolini
<p>Ich habe eben wieder mit _script gespielt.</p>
<p>Funktionen die ich nützlich fände und die ich nicht gefunden habe:</p>
<ul>
<li>Ich möchte in meiner php-Funktion nicht nur auf einen Record sonder auf das ganze Resultat eines Queries zugreifen. <br />(Lässt sich erreichen, indem ich meine Funktion in einem Subquery aufrufe. Dann muss ich aber mein Zwischenergebnis jeweils über den Var-Store weiterreichen.)</li>
</ul>
<ul>
<li>Ich möchte gerne dem Var-Store nicht bloss einen einzelnen Wert sondern ganze Arrays hinzufügen und diese dann in einem späteren _script Aufruf oder in twig nutzen.<br />(für den _script-Aufruf funktioniert das mit (de)serialize, aber für Twig habe ich keine Lösung gefunden)</li>
</ul>
<p>Gibt es andere Workarounds für meine Wünsche bzw. habt ihr entsprechende erweiterungen geplant?</p> QFQ - Feature #13841 (New): Create PDF via iText - evaluatehttps://project.math.uzh.ch/issues/138412022-02-25T07:29:10ZCarsten Rosecarsten.rose@math.uzh.ch
<p><a class="external" href="https://www.heise.de/hintergrund/Auf-Knopfdruck-PDFs-in-Anwendungen-erstellen-mit-HTML-und-CSS-Modul-6457863.html">https://www.heise.de/hintergrund/Auf-Knopfdruck-PDFs-in-Anwendungen-erstellen-mit-HTML-und-CSS-Modul-6457863.html</a></p> QFQ - Feature #12611 (Some day maybe): Refactoring: Bootstrap with Lazy Loadinghttps://project.math.uzh.ch/issues/126112021-05-31T12:43:19ZMarc Egger
<p>statische klassen und lazy loading fuer DB und store</p>
<ul>
<li>DB:
<ul>
<li>alle DBs werden aus config geladen</li>
<li>verbidnungen werden erst geoeffenet wenn noetig</li>
</ul>
</li>
<li>Store:
<ul>
<li>jeder store wird separat lazy geloadet</li>
<li>S T Y stores muessen initialisiert werden</li>
</ul></li>
</ul> QFQ - Feature #12603 (New): Dropdown (Select), Radio, checkbox: itemListAlways={{!SELECT key, val...https://project.math.uzh.ch/issues/126032021-05-29T12:53:26ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Alle Elemente mit dynamischen key oder key/value Angaben haben das Problem, das wenn ein Wert gespeichert wurde, das Form spaeter wieder aufgerufen wird, der Wert nicht mehr in der neuen Liste enthalten hist - beim speichern der alte Wert verloren geht.</p>
<p>Der Effekt tritt gerne auf bei einer Semesterauswahlliste, die nur die sinnvollen zukuenftigen anzeigt. Eine Vorlesung aus einem alten Semester geoeffnet und gespeichert wird, dann ploetzlich einer andren Periode zugeordnet ist.</p>
<p>Vorschlag:</p>
<pre>
itemListAlways={{!SELECT key, value...}}
</pre>
<p>Das Ergebnis wird gemerged (&unify).</p> QFQ - Feature #10979 (New): Ajax Calls an API - dataReporthttps://project.math.uzh.ch/issues/109792020-08-07T10:25:35ZPhilipp Gröbelbauer
<p>- QFQ Page Content per AJAX ausführen<br />- Über API, sodass kein Performance Verlust durch Typo3<br />- return Resultat des QFQ Page Contents</p>
<p>(HTML Snippet zum Testen hängt an diesem Ticket)</p> QFQ - Feature #8962 (New): allow for form fields with identical nameshttps://project.math.uzh.ch/issues/89622019-08-29T19:41:37ZNicola Chiapolini
<p>We have a form with three Action-Elements all pointing to the same column. Each of them calculates the value based on a different dynamic-update form-field (restricted via requiredList).<br />This works perfectly, but I need to adjust the name directly in the database...</p>
<p>Could this check be removed? (At least for action elements, but I can imagine this to be useful even with native dynamic-update elements.)</p> QFQ - Feature #8082 (New): Contact form without saving recordhttps://project.math.uzh.ch/issues/80822019-03-18T13:13:09ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Fuer z.B. Kontaktformulare waere es sinnvoll wenn man eine Form konfigurieren koennte das keinen Record speichert.</p>
<p>Z.B. in dem man keine Primary Table spezifiziert.</p>
<p>Das gleiche koennte man in einem Passwort Reset Form benoetigen (#7164).</p> QFQ - Feature #8044 (Priorize): Transaction: a) Form, b) Reporthttps://project.math.uzh.ch/issues/80442019-03-14T15:35:25ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Es waere gut wenn ein Form automatisch/individuell alles in einer Transaction kapseln wuerde.</li>
<li>Es waere gut wenn man in QFQ start/ende einer Transaction definieren koennte.</li>
</ul>
<p>Ticket bleibt nur dann auf 'high' wenn es einfach zu implementieren ist.</p> QFQ - Feature #7099 (New): FormEditor > subrecord FE: list FE according their nesting in containerhttps://project.math.uzh.ch/issues/70992018-10-27T08:42:10ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>In der Liste der FormElemente sollen die FE Records vom Typ 'Container' ('pill/fieldset/template-group') automatisch direkt ueber den nativen FEs angezeigt werden.</li>
<li>Beim Speichern eines FE's wird der ORD Wert automatisch korrekt gesetzt.</li>
<li>Es ist nicht noetig in der ORD Spalte die ParentChild Bedingung abzubilden, wenn sichergestellt ist das die 'ord' immer gemaess der aktuellen Hierarchie gesetzt wird. Dazu gehoert das ein manuell gesetzte ORD Wert angepasst wird.</li>
<li>FYI: Vermutlich werden wir nie eine Verschachtelungstiefe > 5 erreichen: Form>Pill>Fieldset>TemplateGroup>FE</li>
<li>Wird ein Sub Element per Drag'n'Drop nach ausserhalb des aktuellen Containers verschoben, sollte das FE die containerId des FE bekommen auf dem es gedroppt wurde.</li>
<li>Wird ein Container verschoben, werden alle Childs ebenfalls angepasst - innerhalb des Containers bleibt die Reihenfolge bestehen.</li>
<li>Die hierachiesche Logik koennte vermutlich erkannt/respektiert werden in dem ein neues Keyword definiert wird: <code>FE.parameter.ordColumnHierarchy=feIdContainer</code>. Sobald dieser Parameter gesetzt ist, wird auf die Hierachie Ruecksicht genommen und das Renumbering via PHP entsprechend durchgefuehrt.</li>
<li>Wird manuell eine 'ord' gesetzt, kann dadurch der aktuelle Container nicht verlassen werden.
<ul>
<li>Das Feld "ord" bekommt dynamisch berechnete min/max Werte: min=outercontainer.ord, max=nextoutercontainer.ord-1. Diese Funktion ist optional. Auch wenn min/max nicht gesetzt werden sollte das setzen von 'ORD' nur in den erlaubten Grenzen moeglich sein. Dazu muss dem Detail Form vermutlich mitgeteilt werden (Aufruf erfolgte via einem Subrecord aus dem 'Form'-Form) das die Begrenzung auf dem aktuellen Container beizubehalten ist.</li>
<li>Damit koennen nur ord Werte gesetzt werden, die die bestehende Container Reihenfolge beruecksichtigen.</li>
</ul></li>
</ul>