Project @ iMath: Issueshttps://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892024-02-27T15:36:32ZProject @ iMath
Redmine 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 #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 #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 #17250 (New): Refactor wrapping of Report SQL Contenthttps://project.math.uzh.ch/issues/172502023-11-08T21:38:47ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li><code>rwrap=<tr>|[sep]|</tr></code> - like <code>rbeg,rsep,rend</code></li>
<li><code>rwrapr=<tr>|[sep]|</tr></code> - like <code>rbeg,rsep,renr</code></li>
<li><code>fwrap=<td>|[sep]|</td></code> - like <code>fbeg,fsep,fend</code></li>
<li><code>wrap=<table>|</table></code> - like <code>head,tail</code></li>
<li><code>swrap=<table>|</table></code> - like <code>shead,stail</code></li>
</ul>
<ul>
<li>Die <code>wrap</code> fuellen head,tail,rbeg, ... - wird zusaetzlich zu <code>.wrap.</code> ein spezifisches <code>rbeg</code> gesetzt, wird der wrap Wert ueberschrieben. Bsp<br /><pre>
wrap=<table>|</table>
tail=</div></table>
</pre></li>
</ul>
<p>Ist identisch mit</p>
<pre>
head=<table>
tail=</div></table>
</pre>
<p>Neu Templates:</p>
<ul>
<li><code>template=table,jarray,jobject</code>
<ul>
<li><code>table</code>: <code>head,tail,rbeg,renr,fbeg,fend</code> werden mit <code><table>,</table>,<tr>,</tr>,<td>,</td></code> gefuellt.
<ul>
<li>Option: <code>template=table|<thead><th>col1</th><th>col2</th></tr></thead></code> fuegt einen <thead> ein.</li>
</ul></li>
</ul>
<ul>
<li>Bei diesen beiden ist nicht klar wie nested Queries eingebettet werden:
<ul>
<li><code>jarray</code>: Aus Rows und Columns wird ein Json Array erzeugt</li>
<li><code>jobject</code>: Aus Rows und Columns wird ein Json Object erzeugt</li>
</ul></li>
</ul></li>
</ul> QFQ - Feature #17237 (New): Picture: remove backgroundhttps://project.math.uzh.ch/issues/172372023-11-05T16:55:43ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Fuer das Freistellen von Bilder (Fotowand) waere ein automatischer Service wuenschenswert.</p>
<ul>
<li><a class="external" href="https://ai-diver.de/bilder-freistellen/">https://ai-diver.de/bilder-freistellen/</a> - Vergleich von diversen AI Services.</li>
<li>Es koennte eine zentrale Instanz installiert werden und die einzelnen QFQ Installationen holen dort die Bilder ab.</li>
</ul> QFQ - Feature #17230 (New): FE: TAG / itemlist Elementhttps://project.math.uzh.ch/issues/172302023-11-03T07:45:53ZCarsten Rosecarsten.rose@math.uzh.ch
<p><img src="https://project.math.uzh.ch/attachments/download/8701/clipboard-202311030845-hshro.png" alt="" /></p>
<p>Sieht gut aus, nette Darstellung</p> QFQ - Feature #17219 (ToDo): Merge Open Brancheshttps://project.math.uzh.ch/issues/172192023-10-31T16:14:03ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #17216 (In Progress): Replace Typo3 by template enginehttps://project.math.uzh.ch/issues/172162023-10-31T16:01:07ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li><a class="external" href="https://lumen.laravel.com/docs/10.x">https://lumen.laravel.com/docs/10.x</a></li>
<li>phptemplate</li>
</ul> QFQ - Feature #17202 (ToDo): Steps or timeline functionhttps://project.math.uzh.ch/issues/172022023-10-31T12:20:12ZEnis Nuredini
<p>Manchmal gibt es Prozesse in Tools die mehrere Teilschritte und Seitenwechsel haben bis der ganze Prozess abgeschlossen ist. In solchen Situationen wäre eine Art Timeline hilfreich mit welcher die Teilschritte und der aktuelle Stand angezeigt wird. Im Medtool wird eine Custom Lösung verwendet für so eine Timeline (Zu finden im Admin Formular der MA).</p>
<p>Eine zweite Lösung wäre die Verwendung von Bootstrap Pagination als Pfeilbuttons.</p> QFQ - Feature #17146 (ToDo): Ticket Apphttps://project.math.uzh.ch/issues/171462023-10-20T14:03:31ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Ruth empfiehlt Grit dringend ein Ticketsystem um Reminder/History beim Finanztool zu haben.</li>
<li>Medtool waere sicher auch ein Kandidat die gut Tickets einsetzen koennen.</li>
<li>Frage ist nach einen Konzept wie eine 'QFQ Ticket App' aussehen koennte?</li>
<li>Das neue I-MATH Mega Tool 'Notez' (manage) hat ebenfalls Ticket Character. </li>
<li>In Notez soll auch eine Emailintegration vorhanden sein. Emailintegration wird auch von Medtool angefragt.</li>
</ul>
<p>Gedanken:</p>
<ul>
<li>Ticket App sollte direkt aus dem Tool erreichbar sein: Tickets anlegen (Content uebernehmen), per Click auf bestehende Tickets zugreifen, Verlinkung zu Ticket loeschen koennen.</li>
<li>Option 'internal': QFQ Appstore - Integration direkt in MY, Finanztool, usw...
<ul>
<li>+ Fuer uns Tool Entwickler die gewohnte Vorgehensweise</li>
<li>- Es gibt noch keinen QFQ App Store/ Konzept. D.h. wir koennen aktuell nicht via einem App Store verteilen.</li>
</ul></li>
</ul>
<ul>
<li>Option 'external': Eigenstaendige T3 Instanz, Kommunikation via REST
<ul>
<li>+ Mehrere Tools reporten in eine Ticket-App - ein User der in mehreren Tools aktiv ist hat so eine bessere Gesamtuebersicht.</li>
</ul></li>
</ul> QFQ - Feature #17145 (In Progress): Konzept QFQ App Storehttps://project.math.uzh.ch/issues/171452023-10-20T12:55:55ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #17112 (New): Loading icons CSS libraryhttps://project.math.uzh.ch/issues/171122023-10-13T15:08:17ZJan Haller
<p><a class="external" href="https://github.com/tobiasahlin/SpinKit">https://github.com/tobiasahlin/SpinKit</a></p>
<p>Für Auslieferung mit QFQ?</p>
<p>Reine CSS library, MIT license, umfasst 12 verschiedene Loading Icons.</p>
<p>Beispiele:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/8571/clipboard-202310131704-yonsr.png" alt="" /><br /><img src="https://project.math.uzh.ch/attachments/download/8572/clipboard-202310131705-mhgo0.png" alt="" /><br /><img src="https://project.math.uzh.ch/attachments/download/8573/clipboard-202310131705-itnh8.png" alt="" /><br /><img src="https://project.math.uzh.ch/attachments/download/8574/clipboard-202310131706-9djrx.png" alt="" /></p> QFQ - Feature #17108 (New): Sanitize class replace dangerous charactershttps://project.math.uzh.ch/issues/171082023-10-12T15:14:37ZJan Haller
<p>Die bestehenden Sanitize Klassen sollen erweitert werden, um mehr Flexibilität zu ermöglichen. So soll durch eine neue (default) Klasse ermöglicht werden, dass potenziell gefährliche Zeichen(folgen) durch HTML codierte Zeichen ersetzt werden.</p> QFQ - Feature #17078 (Priorize): QFQ Support: rclonehttps://project.math.uzh.ch/issues/170782023-10-08T08:20:46ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li><a class="external" href="https://rclone.org/">https://rclone.org/</a></li>
<li>Damit sollten wir super easy auf Nextcloud/GoogleDrive/OneDrive zugreifen koennen.</li>
<li>Konzept erstellen:
<ul>
<li>PDFs von QFQ erzeugen und ablegen.</li>
<li>Was ist sinnvoller: a) einzelne rclone Aufrufe oder b) einen rclone Daemon / mount? Gut waere beide Optioen.</li>
<li>Waere ein Abbildung der Verzeichnisstruktur in einer Tabelle sinnvoll</li>
</ul></li>
</ul> 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 #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 #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 #16172 (New): Tablesorter: Update {{10.10.line.count}} after every sorthttps://project.math.uzh.ch/issues/161722023-05-10T08:41:01ZBenjamin Baerbenjamin.baer@math.uzh.ch
<p>renumber rows after every sort:</p>
<p><a class="external" href="https://stackoverflow.com/questions/6549518/jquery-tablesorter-with-row-numbers">https://stackoverflow.com/questions/6549518/jquery-tablesorter-with-row-numbers</a></p>
<p>To make it apply everytime, we either need some rules (ie., row numbers always on first column + add a class to table with qfq-renumber) or mark the row in some way (for instance, having # as the title row)</p> QFQ - Feature #16036 (New): Remove JS: jQWidgetshttps://project.math.uzh.ch/issues/160362023-04-18T09:35:45ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bitte die JS Lib 'jQWidgets' entfernen.</p>
<ul>
<li>JS aus dem Build nehmen (grunt/npm)</li>
<li>Im PHP Code die Typen 'dateJQW, datetimeJQW, gridJQW' entfernen.</li>
<li>Verweise in der QFQ Doku entfernen</li>
</ul> QFQ - Feature #16018 (New): Form in multi column layouthttps://project.math.uzh.ch/issues/160182023-04-15T12:53:16ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Bsp: <a class="external" href="https://www.jambit.com/arbeiten-bei-jambit/bewerbung/?id=690637">https://www.jambit.com/arbeiten-bei-jambit/bewerbung/?id=690637</a>. - Mobil ist das dann einspaltig.</li>
<li>QFQ sollte das einfach koennen.</li>
<li>File Upload ist drag'n'drop.</li>
</ul> 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 #15924 (New): FormEditor: tablesorter subrecord formelement - filter per formhttps://project.math.uzh.ch/issues/159242023-04-02T09:28:06ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Im Subrecord formelement die html-id per form konfigurieren. Der Filter sollte nicht uber verschiedene Forms der gleich sein</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 #15525 (New): Search/Refactor: JS implementationhttps://project.math.uzh.ch/issues/155252023-02-11T10:49:33ZEnis Nuredini
<p>- Optional das QMATCH durch eine JS Loesung ersetzen.<br />- Im FormEditor/Tinymce: Die Matches durch die JS Loesungen highlighten</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 #15522 (New): QFQ Update: none,always,auto - NEW: oncehttps://project.math.uzh.ch/issues/155222023-02-10T17:07:30ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bei der Entwicklung von QFQ waere es hilfreich wenn die Option <code>database.update</code> neben 'none,always,auto' eine weitere Option <code>once</code> haette.</p>
<p>Ziel: Wenn QFQ das naechste mal hochfaehrt wird ein Update gemacht (wie bei always oder auto), und anschliessend wird der Wert von <code>once</code> zurueck gesetzt (in der Config) auf <code>auto</code>.</p>
<p>Damit entfaellt das wenn man auf 'always' gestellt hat man anschliessend wieder auf 'auto' zurueck stellen muss.</p> 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 #15452 (New): Form: FormElements above/below of pillshttps://project.math.uzh.ch/issues/154522023-01-28T14:07:06ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Im MedTool haetten wird gern FormElemente die oberhalb der Pills angezeigt werden: egal welcher Pill gewaehlt ist - die Pipeline mit dem aktuellen Status soll sichtbar sein.</li>
<li>Das sollte einfach zu implementieren sein und sollte dann auch fuer 'unterhalb' der Pills gemacht werden. Die FE.ord entscheidet ob oberhalb oder unterhalb.</li>
<li>Aktuell ist im `FormEditor > Subrecord FE` definiert, das wenn es Container gibt, FEs ohne Container rot dargestellt werden: dieser Check ist aufzuheben.</li>
</ul> QFQ - Feature #15448 (New): Tablesorter clear filterhttps://project.math.uzh.ch/issues/154482023-01-27T11:38:50ZEnis Nuredini
<p>Wir brauchen eine Möglichkeit den Filter oder Sorter Zustand zu reinigen oder nicht speichern zu lassen. Sodass nach einem Page reload die Ansicht zurück gesetzt ist.</p>
<p>Für Tablesorter Version 2.31.1 und höher gibt es folgende Möglichkeit:<br /><table data-save-sort="false" data-save-filter="false"> ...</table></p>
<p>Für ältere Versionen vom Tablesorter wie bei der aktuellen QFQ Version funktioniert dies nicht. Dort kann jedoch wie in der QFQ Dokumentation beschrieben eine eigene tablesorter-config definiert werden, in welchem der widget "saveSort" nicht enthalten ist.</p>
Die Frage stellt sich:
<ul>
<li>Soll Tablesorter aktualisiert werden auf eine neuere Version?</li>
<li>Braucht es eine neue HTML Klasse mit welcher dann im QFQ die tablesorter-config ohne "saveSort" gesetzt wird?</li>
</ul> QFQ - Feature #15446 (New): QFQ Best Practice Form Designhttps://project.math.uzh.ch/issues/154462023-01-27T09:03:30ZEnis Nuredini
Title:
<ul>
<li>Design from title breaks if DIV tag with bootstrap class "pull-right" or "pull-left" is used and output longer than available Space is. Fix: Create a new DIV tag with style="clear:both;" to solve the issue.</li>
</ul>
Table:
<ul>
<li>Align text or button in center of table cell with given bootstrap class in TD tag: <td class="text-center"></li>
<li>If you want to prevent saving actual filter and sorter state from tablesorter then you need to configure the config without "saveSort". Easy way to do this is adding this two Attributes: <table data-save-sort="false" data-save-filter="false" class="..."> Only available for tablesorter V2.31.1 and higher. For older versions there is currently only the way from the qfq documentation.</li>
</ul> QFQ - Feature #15428 (New): Calendar: create new event with mouse clickhttps://project.math.uzh.ch/issues/154282023-01-24T13:55:00ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Aktuell koennen wir keine Termine durch einen Klick in den Kalender anlegen - gewuenscht waere:</p>
<ol>
<li>Termine anlegen, Werte sind vorbelegt mit dem wo die Maus geklickt hat. </li>
<li>Termine koennen per Maus verschoben / verkuerzt/verlaengert werden.</li>
</ol>
<p>Bei Anlegen/Veraenderung sollte ein QFQ Form aufgehen.</p>
<p>Wir verwenden <a class="external" href="https://fullcalendar.io/">https://fullcalendar.io/</a>, scheinbar noch V3 - aktuell ist V6</p>
<p>Hier ist eine Doku zu Move/Reseize: <a class="external" href="https://fullcalendar.io/docs/event-dragging-resizing">https://fullcalendar.io/docs/event-dragging-resizing</a></p>
<p>Bei uns sieht es aktuell so aus:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/7194/clipboard-202301241448-0j9fk.png" alt="" /></p>
<p>Anwendung: I-MATH Raumreservation</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 #15366 (New): Required fields: custom symbol / no symbolhttps://project.math.uzh.ch/issues/153662023-01-12T16:22:59ZCarsten Rosecarsten.rose@math.uzh.ch
<p>1) Fuer Required Felder:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/7118/clipboard-202301121703-prz73.png" alt="" /></p>
<ul>
<li>Das Symbol soll konfigurierbar und auch abschaltbar sein.</li>
</ul>
<pre>
requiredSymbol = ....
</pre>
* Wird 'none' angegeben, wird kein Symbol gerendert.
* Der Parameter kann gesetzt werden pro FormElement, pro Form, in der QFQ Extension Config (Pill: Form-Config).
<p>Aktuell wird das mit einer Klasse geloest:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/7119/clipboard-202301121703-ynwyv.png" alt="" /></p>
<p>2) Parameter: requiredPosition</p>
<p>Es gibt die Moeglichkeit das Required Symbol an unterschiedliche Stellen zu bringen - das sollte auch weiterhin funktionieren:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/7120/clipboard-202301121704-srbh9.png" alt="" /></p>
<p>Neu: Der Parameter kann bisher nur auf Form und FormElement Ebene gesetzt werden. Bitte implementieren das er auch in der QFQ Extension Config <br /> (Pill: Form-Config) gesetzt werden kann.</p>
<p>Als Beispiel wie das gemacht wird kann F_FE_DATA_REQUIRED_ERROR / SYSTEM_FORM_DATA_REQUIRED_ERROR angeschaut werden.</p> QFQ - Feature #15321 (New): Checkbox with more than 2 states - like doodle 'yes', 'no', 'maybe', ...https://project.math.uzh.ch/issues/153212023-01-05T14:26:09ZCarsten Rosecarsten.rose@math.uzh.ch
<p>[ ] yes,no,maybe,...</p>
<p>key, value (grafik)</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 #15207 (New): QFQ Update: Bei Fehler genaue Meldung welcher Updateschritt Probleme...https://project.math.uzh.ch/issues/152072022-12-16T16:07:28ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Bei DB Update Fehler genau angeben bei welchem Updateschritt der Fehler aufgetreten ist.</li>
<li>Dateiname und problematische SQL in QFQ ausgeben (Developer).</li>
</ul> 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 #14869 (Priorize): Generic BACK Button via '... AS _link'https://project.math.uzh.ch/issues/148692022-10-08T13:04:25ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Wir haben regelmaessig die Situation das man</p>
<ul>
<li>Aus einem Form auf eine 'action' Seite springt. </li>
<li>Von einer Seite auf eine andere Seite via Link (inkl. SIP) springt.</li>
</ul>
<p>Von dort moechte man dann gern zurueck auf die vorherige Seite. Advanced User benutzen 'Back' aus dem Browser - besser waere direkt einen Back Button anbieten zu koennen.</p>
<pre>
<input type="button" class="btn btn-default" value="Back" onclick="window.history.back()">
</pre>
<p>Vorschlag Notation:</p>
<pre>
SELECT 'p:_back|b' AS _link
</pre>
<ul>
<li>Das Feature wird also aktiviert ueber den neu reservierten Special Name (anstelle des {{pageAlias:T}}) '_back'.</li>
<li>Genauso gut koennte auch der oben genannten HTML code definiert werden - das macht keinen Unterschied.</li>
<li>Fuer die QFQ Loesung spricht das mit 'b' (=button), 'r' (=render), 'G' (=glyph) usw. einfach die QFQ Funktionalitaet verwendet werden kann.</li>
</ul>
<ul>
<li>Wenn keine weiteren Parameter gesetzt sind, wird <code>b:1</code> und <code>t:Back</code> angenommen.</li>
</ul> QFQ - Feature #14659 (New): OpenSwoole - PHP konstant im Speicherhttps://project.math.uzh.ch/issues/146592022-09-03T13:09:13ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li><a class="external" href="https://wikiit.math.uzh.ch/it/artikel?action=AttachFile&do=view&target=ct.22.16.124-129.pdf">https://wikiit.math.uzh.ch/it/artikel?action=AttachFile&do=view&target=ct.22.16.124-129.pdf</a></li>
<li>Aktuell scheint es nichst fuer Typo3 geben (Google Suche hatte keine Treffer)</li>
</ul> QFQ - Feature #12532 (New): SIP-Parameter bei Seitenaufruf in Browser-Console anzeigenhttps://project.math.uzh.ch/issues/125322021-05-11T15:50:24ZElias Villiger
<p>Idee: Wenn eine Seite mit SIP-Parameter aufgerufen wird und ein BE-User eingeloggt ist, werden in der Konsole automatisch die in der SIP mitgelieferten Parameter aufgelistet. Würde Debugging etwas vereinfachen.</p> QFQ - Feature #11850 (New): Wizard Form: basierend auf einer Tabelle eine Form anlegen.https://project.math.uzh.ch/issues/118502021-01-14T09:13:31ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Man waehlt eine Tabelle</li>
<li>Alternative: Neues Form anlegen, Primary Tabelle waehlen, in dem Moment erscheit ein Link im Notizfeld 'Create Form', ein Klick darauf legt alle FE fuer die gewaehlte Tabelle in dem neuen Form an.</li>
</ul>
<ul>
<li>Fuer jede Spalte wird ein Formularelement angelegt.</li>
<li>Enums koennen als Radio/Checkbox angeleget werden.</li>
</ul>
<p>Hinweis:</p>
<ul>
<li>In 'genericReport' (<a class="issue tracker-2 status-1 priority-2 priority-default" title="Feature: Generic Report Page (New)" href="https://project.math.uzh.ch/issues/15524">#15524</a>) koennen Formulare 'on the fly' gerendert werden: Diese soll neu im FormEditor angeboten werden, um ein komplettes Form mit einem Mausklick (a la template) zu erzeugen.</li>
</ul> QFQ - Feature #11535 (New): Ability to create SQL columns in frontend QFQ formshttps://project.math.uzh.ch/issues/115352020-11-17T11:11:11ZSimon Grüning
<p>It would be very great for developers working or maintaining QFQ projects in the front-end, if they could create not only form elements but also the respective table columns / data structures going along with them. Unsure where/how to integrate this button/feature/ability.</p> QFQ - Feature #10114 (New): Symbol (Link): 'G:' (Glyphicon) replaced by 'i:' (icon)https://project.math.uzh.ch/issues/101142020-02-13T07:56:18ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Die Glyphicons sind in BS4 nicht mehr erhalten und sollen durch Font Awesome ersetzt werden.</li>
<li>Font Awesome hat viel mehr Symbole.</li>
<li>In der Uebergangszeit kann 'G:...' und 'i:...' parallel genutzt werden.</li>
<li>Die aktuellen Standard Symbole von Glyphicon durch FontAwesome ersetzen.</li>
<li>Zur Dokumentation soll eine Glyph/Icon Webseite (vermutlich QFQ based, dort sind beide Fonts enthalten) erstellt werden:
<ul>
<li>Welche Glyphicons werden mit welcher Bedeutung auf welcher Seite benutzt.</li>
<li>Anzeige das Font Awesome Pendants.</li>
<li>Ziel:
<ul>
<li>Einheitlichkeit von in QFQ verwendeten Symbolen.</li>
<li>Schnelleres finden von Symbolen (basierend auf frueherer Suche und Entscheidung fuer ein Symbol)</li>
</ul></li>
</ul></li>
</ul> QFQ - Feature #8204 (New): Position 'required mark'https://project.math.uzh.ch/issues/82042019-04-15T11:35:32ZCarsten Rosecarsten.rose@math.uzh.ch
<p>labelcolumns=0 oder label=''</p> QFQ - Feature #7602 (New): Multi Select: with checkboxeshttps://project.math.uzh.ch/issues/76022019-01-04T19:25:18ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Fuer Mult-Select waere es gut, wenn QFQ pro Item, eine Checkbox anbieten koennte. Siehe Screenshot von Redmine.</p>
<p><a class="external" href="https://codepen.io/elmahdim/pen/hlmri">https://codepen.io/elmahdim/pen/hlmri</a></p> QFQ - Feature #3727 (New): Security: Session Hijacking erschwerenhttps://project.math.uzh.ch/issues/37272017-05-14T13:43:45ZCarsten Rosecarsten.rose@math.uzh.ch
<ol>
<li>Problem 1: durch '[FE][lockIP] = 0' wird der Schutz gegen Session Hijacking fuer FE-User verringert.</li>
<li>Problem 2: in QFQ ist kein 'Session Hijacking' based on changed IP detection implementiert.</li>
</ol>
Beides koennte leicht implementiert werden:
<ul>
<li>Zu 1)
<ul>
<li>Entweder eine Extension schreiben die gewisse IPs immer zulaesst (z.B. die lokalen IPs) - es gab entsrpechende Extensions.</li>
<li>Oder in QFQ diesen Check implementieren (z.B. in dem sich QFQ beendet, sollte der aktuelle FE User einer FE Gruppe angehoeren)</li>
</ul></li>
</ul>
<ul>
<li>Zu 2) implementieren. Am besten aehnlich konfiguriert wird '[FE][lockIP]'</li>
</ul> QFQ - Feature #880 (New): Security: PHP, SQL Injection, XSShttps://project.math.uzh.ch/issues/8802015-08-13T14:46:51ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li><a class="external" href="http://www.heise.de/security/artikel/XSS-Bremse-Content-Security-Policy-1888522.html">http://www.heise.de/security/artikel/XSS-Bremse-Content-Security-Policy-1888522.html</a></li>
<li><a class="external" href="http://www.heise.de/thema/XSS">http://www.heise.de/thema/XSS</a></li>
<li><a class="external" href="https://www.acunetix.com/websitesecurity/php-security-1/">https://www.acunetix.com/websitesecurity/php-security-1/</a></li>
<li><a class="external" href="https://docs.php.earth/security/intro/">https://docs.php.earth/security/intro/</a></li>
<li><a class="external" href="https://www.butterfly.com.au/blog/website-development/web-application-security-essentials-for-php-developers-the-art-of-not-getting-hacked">https://www.butterfly.com.au/blog/website-development/web-application-security-essentials-for-php-developers-the-art-of-not-getting-hacked</a></li>
<li><a class="external" href="https://www.cloudways.com/blog/php-security/">https://www.cloudways.com/blog/php-security/</a></li>
</ul>