Project @ iMath: Issueshttps://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892024-03-17T14:56:05ZProject @ iMath
Redmine QFQ - Feature #18162 (New): Form / Select List: save outdated key/value even it no longer exist i...https://project.math.uzh.ch/issues/181622024-03-17T14:56:05ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Szenario:</p>
<ul>
<li>Fuer eine Masterarbeit wird ein Betreuer eingetragen. </li>
<li>Die Liste der potentiellen Betreuer veraendert sich. Z.B. koennte eine Person von frueher heute nicht mehr den Status 'Betreuer' haben.</li>
<li>Wird eine solche MA aufgerufen wird nicht mehr der urspruengliche Betreuer angezeigt und beim erneuten Speichern gibt es ein Problem.</li>
</ul>
<p>Vorschlag:</p>
<ul>
<li><code>FE.parameter.sqlGetItemSaved = {{SELECT p.id, p.name FROM Person AS p WHERE p.id={{pId:R}}</code></li>
<li>Wird die ItemList gebaut, wird überprüft ob die gespeicherte Id (oder Value falls es keine ID gibt) noch existiert.</li>
<li>Ja: all done, no further action</li>
<li>Nein:
<ul>
<li>Evaluate <code>FE.parameter.sqlGetItemSaved</code></li>
<li>Fuege Key/Value an der richtigen Stelle (Sortierung) ein.</li>
<li>Falls moeglich stelle den Eintrag 'kursiv' dar ('muted' waere schlecht, denn das suggeriert das der Eintrag nicht ausgewaehlt werden koennte).</li>
</ul></li>
</ul>
<ul>
<li>Die Situation koennte auftreten bei: SELECT, CHEKBOX, RADIO</li>
</ul> QFQ - Feature #18085 (New): FE Input Email Adressbook: a) Typeahead, b) check valid and markhttps://project.math.uzh.ch/issues/180852024-03-06T09:07:34ZCarsten Rosecarsten.rose@math.uzh.ch
<a name="Request"></a>
<h2 >Request<a href="#Request" class="wiki-anchor">¶</a></h2>
<ul>
<li>Im IK Tool werden beim Antrag Email-Adressen von weiteren verantwortlichen Personen erfasst.</li>
<li>Es kommt regelmaessig vor das die Adressen einen Typo enthalten.</li>
<li>Ziel
<ul>
<li>Bei der Eingabe TypeAhead vom UZH Adressebook anbieten.</li>
<li>Bei 'Focus Lost' Emailadressen pruefen und markieren ok/fail.</li>
</ul></li>
</ul>
<a name="Vorschlag"></a>
<h2 >Vorschlag<a href="#Vorschlag" class="wiki-anchor">¶</a></h2>
<ul>
<li>Wird erkannt dass die Email Adresse eine <code>uzh.ch</code> Adresse ist, kann ein LDAP Lookup gemacht werden um zu ueberpruefen ob die Adresse im UZH AD vorhanden ist.</li>
<li>Ist die Adresse bekannt, wird sie gruen, sonst gelb (Tooltip: Address not found in UZH adress book).</li>
<li>Non uzh.ch Adressen werden so nicht geprueft.</li>
<li>Option 'internal check': es koennen Tabellen, Spalten spezifiziert werden (Tool intern),ob die Adresse bereits benutzt wurde. Falls gefunden wird sie ebenfalls gruen.</li>
<li>Der Check gegen das Adressbuch muss erst gemacht werden bei Focus Lost.</li>
<li>Der Check sollte vom Server gestartet werden: Zugriff auf den AD ist beschraenkt (Firewall, Credentials)</li>
<li>Wir brauchen einen neuen API Call der SIP protected ist.</li>
<li>Beim Laden des Forms ist der Check vermutlich nicht so wichtig, kann erstmal weggelassen werden.</li>
<li>Die Credentials sollten in der zentrallen QFQ config Datei sein (wie UZH webpass)</li>
<li>Die LDAP Abfrage sollte zentral in der QFQ Extension Config konfigurierbar sein, pro FE kann das Setting uberschrieben werden.</li>
<li>Option: mehrere Emailadressen in einem FE-Input Elemente erfassen (space, komma separiert) und individuell pruefen & markieren.</li>
</ul>
<p>EmailAdressbookVerify=<br />EmailAdressbookTypeahead=</p>
<a name="Check"></a>
<h2 >Check<a href="#Check" class="wiki-anchor">¶</a></h2>
<p>Beispiel via Commandline:</p>
<pre>
$ ldapsearch -LLL -x -H "ldap://iduzhz2dc01.d.uzh.ch ldap://iduzhz2dc02.d.uzh.ch" -b "DC=d,DC=uzh,DC=ch" -D "srv-math-sync@d.uzh.ch" -W "proxyAddresses=smtp:carsten.rose@math.uzh.ch" proxyAddresses
Enter LDAP Password:
dn: CN=Rose Carsten (crose),OU=Users,OU=Users UZH,DC=d,DC=uzh,DC=ch
proxyAddresses: smtp:crose@access.uzh.ch
proxyAddresses: X500:/o=ExchangeLabs/ou=Exchange Administrative Group (FYDIBOH
F23SPDLT)/cn=Recipients/cn=d99ada2cb78c406ea039453c26f86dab-Rose Carste
proxyAddresses: smtp:caro@math.uzh.ch
proxyAddresses: smtp:m200143@access.uzh.ch
proxyAddresses: smtp:carsten.rose@uzh.ch
proxyAddresses: smtp:crose@uzh.mail.onmicrosoft.com
proxyAddresses: SMTP:carsten.rose@math.uzh.ch
# refldap://DomainDnsZones.d.uzh.ch/DC=DomainDnsZones,DC=d,DC=uzh,DC=ch
# refldap://ForestDnsZones.d.uzh.ch/DC=ForestDnsZones,DC=d,DC=uzh,DC=ch
# refldap://d.uzh.ch/CN=Configuration,DC=d,DC=uzh,DC=ch
</pre>
<ul>
<li>Bei der Abfrage koennen mehrere LDAP Server angegeben werden.</li>
<li>Liefert die Abfrage min. einen Treffer zurueck, ist die Adresse ok.</li>
<li>Die obige Abfrage geht auf 'proxyAddresses', da dort scheinbar auch die weiteren Adressen angegeben sind.
<ul>
<li>Bei 'proxyAddresses' muss ein 'smtp:' vorangestellt werden fuer einen 100% match</li>
</ul></li>
</ul> QFQ - Feature #18042 (New): Download dynamic ZIP: missing meaningful default save as filenamehttps://project.math.uzh.ch/issues/180422024-03-02T15:41:52ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mit `<abbr title="'d|F:', p.pathFileName, '|s:1|M:zip'">CONCAT</abbr> AS _link` wurde ein ZIP zum Download angeboten und hatte als Dateinamen 'qfq.temp.RcGnwV'</p>
<p>Bug: es sollte mindestens '.zip' am Ende stehen. Am besten 'data.zip' oder 'data_<timestamp>.zip'</p> QFQ - Feature #18040 (New): Checkbox Custom-Listehttps://project.math.uzh.ch/issues/180402024-03-02T12:00:47ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Ziel: Checkbox Listen zum abarbeiten - eigenstaendig erweiterbar</p>
<p>Beispiel aus Redmine:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/9382/clipboard-202403021239-n2k4h.png" alt="" /></p>
<p>Wichtig: die Reihenfolge kann via Drag'n'Drop geaendert werden. Check welchen Code wir schon haben (Subrecord, Benj).</p>
<p><code>FormElement.parameter.itemList</code> ist bereits genau die Checkbox-Liste</p>
<ul>
<li>static</li>
<li>Values werden Komma-separiert im String abgelegt. Bei Komma im Value haben wir vermutlich ein Problem.</li>
</ul>
<a name="Moegliche-Umsetzung"></a>
<h2 >Moegliche Umsetzung<a href="#Moegliche-Umsetzung" class="wiki-anchor">¶</a></h2>
<ul>
<li><code>FormElement.parameter.checkBoxType = static|custom</code>
<ul>
<li><code>static</code> ist das bisherige und der default.</li>
<li><code>custom</code> ist dieses Ticket.</li>
</ul></li>
</ul>
<a name="Itemliste-und-Status-pro-Item"></a>
<h3 >Itemliste und Status pro Item<a href="#Itemliste-und-Status-pro-Item" class="wiki-anchor">¶</a></h3>
<ul>
<li>Soll der User die Moeglichkeit haben selber Items zu erfassen muessen diese irgendwo gespeichert werden.</li>
<li>Der Status eines jeden Items muss gespeichert werden.</li>
<li>Sections waeren nett.</li>
<li>Drag'n'Drop muss nicht in 1.0 sein, ist aber definitiv gefordert.</li>
</ul>
<p>Vorschlag: Labels und Values (inkl. 'sections') in einem JSON struct</p>
<ul>
<li>Das JSON wird genau in der Spalte des FE gespeichert (muss also ein String sein).</li>
<li>Wird das JSON zu gross zum speichern (Bsp varchar 128), gibt es bereits im Client eine Fehlermeldung damit der User nicht viele Items anlegt und dann enttaeuscht ist das sie nicht gespeichert werden koennen.</li>
<li>Ein 'Template' kann also einfach angeboten werden, in dem das JSON in FE.value steht.</li>
<li>Nach Moeglichkeit sollte das JSON so gesepichert werden das wir es mit den MariaDB JSON Funktionen verwenden koennen.</li>
</ul> QFQ - Feature #18037 (New): Auto BPMN Update: QFQ/rclonehttps://project.math.uzh.ch/issues/180372024-03-02T09:37:05ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Ziel: BPMN Workflows verbinden mit Ticketsystem, ist ein Ticket / Milestones abgearbeitet wird das im BPMN visuell markiert.</p>
<p>Moegliches Konzept:</p>
<ul>
<li>BPMN ist im Switchdrive</li>
<li>QFQ bekommt via 'rclone' Nextclod, OwnCloud, Dropbox, OneDrive, GDrive Support und kann so auf Dateien zugreifen.</li>
<li>In QFQ ist die PathFilename-Referenz auf das BPMN hinterlegt</li>
<li>Es gibt eine API (Redmine, QFQ Notez) um den Status von Tickets abzufragen.</li>
<li>QFQ ruft (on request, periodically) ein Skript auf welches:
<ul>
<li>Fuer jedes im BPMN referenzierte Ticket den Status via API abruft.</li>
<li>Den Status visuell im BPMN eintraegt (z.B. Hintergrundfarbe des Elements setzen)</li>
<li>Dadurch dass das File via rclone im Sync gehalten wird, haben sofort alle User das aktuelle File.</li>
</ul></li>
</ul> QFQ - Feature #17958 (New): Screenshare via QFQ / jitsi or ms-teamshttps://project.math.uzh.ch/issues/179582024-02-20T15:00:41ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Auf der post.ch Seite wird ein Screenshare fuer Support angeboten:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/9290/clipboard-202402201547-6x5e3.png" alt="" /></p>
<p>Idee:</p>
<ul>
<li>Wir bieten das gleiche an via jitsi.</li>
<li>Koennte interessant sein fuer alle Tools, wenn die User Probleme mit einem Antrag haben.</li>
<li>Es geht nicht darum um 24/7 erreichbar zu sein, sondern dem User eine Moeglichkeit zu geben zu einem vereinbarten Zeitpunkt eine Verbindung herzustellen, ohne das eine Jitsi URL abgesprochen werden muss.</li>
<li>Ggfs. ist es auch via Teams moeglich.</li>
</ul> QFQ - Feature #17858 (New): Check if QFQ is compatible with Typo3 V12https://project.math.uzh.ch/issues/178582024-02-11T18:35:34ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Wenn wir von isg_ldap_sso weg kommen (wird ersetzt durch oidc) gibt es keinen Grund mehr V12 noch nicht anzuschauen.</li>
<li>MNF ist noch auf V9 - Migration koennte ggfs. direkt auf V12 erfolgen.</li>
</ul> QFQ - Feature #17829 (New): QFQ Add/Remove classes in parameterhttps://project.math.uzh.ch/issues/178292024-02-06T13:25:19ZEnis Nuredini
<p>Über das Parameter Feld sollten Klassen hinzufügbar oder entfernbar sein.</p> QFQ - Feature #17821 (New): Check projects export/autocron access templatehttps://project.math.uzh.ch/issues/178212024-02-05T13:07:58ZEnis Nuredini
<p>Es muss bei allen Projekten das Typo3 Template für den Zugriff auf den Autocron überprüft werden. Für den Zugriff über Production muss noch die jeweilige IP Adresse entnommen werden:<br /><pre>
hostname -I
</pre></p>
<p>Template vom Medtool:<br /><pre>
*Constants*
----------------
# List of IP addresses to grant access: webwork22, medtool
site.allowIP.list = 127.0.0.1,::1,130.60.244.239
*Setup*
-----------
# Layout neu aufbauen
page = PAGE
page.typeNum = 0
# Show content
[ ip('{$site.allowIP.list}') || frontend.user.isLoggedIn]
# Access granted
page.10 < styles.content.get
[else]
page.10 = TEXT
page.10.value = Please log in or access this page from an authorized host. Your current IP address:&nbsp;
page.20 = TEXT
page.20.data = getenv : REMOTE_ADDR
[end]
</pre></p>
<p>Das Template muss auch bei den Options konfiguriert werden:<br /><img src="https://project.math.uzh.ch/attachments/download/9158/Clipboard%20-%20February%205,%202024%202_05%20PM.png" alt="" /></p>
<p>Ebenfalls noch hinzuzufügen bei Includes:<br /><img src="https://project.math.uzh.ch/attachments/download/9161/includes.png" alt="" /></p> QFQ - Feature #17670 (New): WeasyPrint (instead of wkhtml) for PDF with header/footer/toc/...https://project.math.uzh.ch/issues/176702024-01-21T11:03:47ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Unter <a class="external" href="https://wkhtmltopdf.org/status.html">https://wkhtmltopdf.org/status.html</a> weist wkhtml eindringlich daraufhin das wenn wkhtml fuer nicht vertrauenswuerde HTML content verwendet wird, der Server uebernommen werden kann.</p>
<p>Das ist bei uns zwar nicht der Fall, aber weasyprint sollte einen Blick wert sein.</p>
<p>Das Hauptproblem bei wkthml ist, das sobald eine Datei (js, css, png, jpg,...) nicht geladen werden kann, es sofort einen Abbruch gibt, aber keinen Hinweis auf die Ursache.</p>
<ul>
<li><a class="external" href="https://weasyprint.org/">https://weasyprint.org/</a></li>
<li><a class="external" href="https://github.com/Kozea/WeasyPrint/">https://github.com/Kozea/WeasyPrint/</a></li>
</ul> QFQ - Feature #17659 (New): MultiForm im Formhttps://project.math.uzh.ch/issues/176592024-01-19T14:06:24ZCarsten Rosecarsten.rose@math.uzh.ch
<p>In dem folgenden Form sollen Rollen (jeweils einzelne Records) auf eine auszuwaehlende Person gelegt werden.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/9053/clipboard-202401191458-rmo2s.png" alt="" /></p>
<p>Problem: es kann immer nur eine Rolle zugeordnet werden - gut waere wenn mehrere auf einmal moeglich waeren.</p>
<p>Der Use-Case kommt oefter vor, vermutlich waere ein 80/20 Loesung sehr hilfreich - Flexibilitaet von Multiform ist vielleicht nicht wichtig, einfach das es checkbox / radio / input / select gibt.</p>
<p>Im Prinzip laeuft es auf ein MultiForm im Form hinaus: das koennte moeglich sein.</p>
<p>V2.0: Den Sonderfall, es sollen Zeilen geloescht oder neue hinzugefuegt werden, koennte mit JS geloest werden.</p>
<p>Check ob das einfach DynamikUpdate aware ist.</p> QFQ - Feature #17618 (New): Doc/Report: change all examples 'remove numbers'https://project.math.uzh.ch/issues/176182024-01-16T13:41:27ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #17577 (New): QFQ Doc: local render / Sphinx & MkDochttps://project.math.uzh.ch/issues/175772024-01-13T13:39:29ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn man die QFQ Doc lokale rendern koennte um schneller zu sehen wie etwas aussieht.</p>
<ul>
<li>Um schnell etwas auszuprobieren sind a) Commmits auf 'Develop' und b) warten bis RTD fertig ist, einfach zu unpraktisch.</li>
<li>RTD rendert nur auf Branch Master & Develop - d.h. niemand ausser CR kann schauen wie die Doku aussieht.</li>
</ul>
<ul>
<li><a class="external" href="https://me-readthedocs.readthedocs.io/en/latest/custom_installs/local_rtd_vm.html">https://me-readthedocs.readthedocs.io/en/latest/custom_installs/local_rtd_vm.html</a></li>
<li><a class="external" href="https://me-readthedocs.readthedocs.io/en/latest/guides/tools.html">https://me-readthedocs.readthedocs.io/en/latest/guides/tools.html</a></li>
<li><a class="external" href="https://training.nih-cfde.org/en/latest/General-Tools/Web-Development/mkdocs/">https://training.nih-cfde.org/en/latest/General-Tools/Web-Development/mkdocs/</a></li>
</ul> QFQ - Feature #17544 (New): QFQ Installation Wizard / Defaultshttps://project.math.uzh.ch/issues/175442024-01-09T12:19:59ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Im Meeting mit Philipp, Enis, Benj und Carsten wurden besprochen das wir einen Installation Wizard benoetigen.</p>
<ul>
<li>Kontrolle das die BaseURL stimmt (falls nicht ok, bitte im Installtool setzen).</li>
<li>Frage ob Tabellen angelegt werden sollen:
<ul>
<li>Period</li>
<li>Category (ex Ggroup) - Weiterer Vorschlag: Grp (in dem Fall kann 'gr' als Prefix weiter verwendet werden). implement mit Ticket <a class="issue tracker-2 status-2 priority-3 priority-high3" title="Feature: Per Form: note, tag, reminder date, done flag (In Progress)" href="https://project.math.uzh.ch/issues/17412">#17412</a> </li>
<li>Glue (ex GroupMember) implement mit Ticket <a class="issue tracker-2 status-2 priority-3 priority-high3" title="Feature: Per Form: note, tag, reminder date, done flag (In Progress)" href="https://project.math.uzh.ch/issues/17412">#17412</a></li>
<li>Upload. implement mit Ticket #filepond</li>
<li>Translation</li>
<li>Chat implement mit Ticket #chat</li>
<li>Note</li>
<li>NoteItem ( fuer form NoteItem Ticket <a class="issue tracker-2 status-2 priority-3 priority-high3" title="Feature: Per Form: note, tag, reminder date, done flag (In Progress)" href="https://project.math.uzh.ch/issues/17412">#17412</a>)</li>
<li>Person</li>
<li>Account</li>
<li>Address</li>
<li>PersonRole</li>
<li>Role</li>
</ul></li>
</ul>
<ul>
<li>BestPractice Doku & Seite / ttcontent anlegen (Auswahl als welches Child Element)
<ul>
<li>Settings (based on Grp/Glue) via.</li>
<li>Person / Adresse / Account / Rolle</li>
<li>FormEditor</li>
<li>Beispiel Chat</li>
</ul></li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/8961/clipboard-202401091319-wrmqh.png" alt="" /></p>
<p>switchdrive/qfq/DB/QFQ_Best_Practice_Tables.drawio</p>
<ul>
<li>Der Wizard soll bei der ersten Installation automatisch aufgehen.</li>
<li>Der Wizard soll auch spaeter noch gestartet werden koennen.</li>
<li>Im Wizard angeben wie man ihn spaeter erneut starten kann.</li>
<li>Aufruf koennte via einem HTML/PHP Form gemacht werden, das nur startet wenn ein BE User eingeloggt ist: BE Cookie mit der T3 BE User Tabelle vergleichen).</li>
</ul> QFQ - Feature #17481 (New): BS modal windowhttps://project.math.uzh.ch/issues/174812023-12-15T13:53:28ZJan Haller
<p>It is often useful to present the user with a modal window (e.g. containing additional information). The following example is based on Bootstrap (<a href="https://getbootstrap.com/docs/3.4/javascript/#modals" class="external">BS Modal</a>)</p>
<p><img src="https://project.math.uzh.ch/attachments/download/8916/clipboard-202312151436-hwvg1.png" alt="" /></p>
<pre><code class="html syntaxhl"><span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal fade"</span> <span class="na">id=</span><span class="s">"myModal"</span> <span class="na">tabindex=</span><span class="s">"-1"</span> <span class="na">role=</span><span class="s">"dialog"</span> <span class="na">aria-labelledby=</span><span class="s">"detailsModalLabel"</span> <span class="na">aria-hidden=</span><span class="s">"true"</span><span class="nt">></span>
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal-dialog"</span> <span class="na">role=</span><span class="s">"document"</span><span class="nt">></span>
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal-content"</span><span class="nt">></span>
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal-header"</span><span class="nt">></span>
<span class="nt"><h5</span> <span class="na">class=</span><span class="s">"modal-title"</span> <span class="na">id=</span><span class="s">"detailsModalLabel"</span><span class="nt">></span>{{pubFormText:RE}}<span class="nt"></h5></span>
<span class="nt"></div></span>
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal-body"</span><span class="nt">></span>
{{r_countPublications:RE:all}} Publikationen eingetragen <span class="nt"><br><br></span>
({{r_countPublications:R0}} - {{r_countPublicationsNotInEdit:R0}}) Publikationen müssen noch überprüft/angepasst werden. Editiere Publikation und prüfe den unteren Abschnitt, falls ok dann speichern.
<span class="nt"></div></span>
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal-footer"</span><span class="nt">></span>
<span class="nt"><button</span> <span class="na">type=</span><span class="s">"button"</span> <span class="na">class=</span><span class="s">"btn btn-secondary"</span> <span class="na">data-dismiss=</span><span class="s">"modal"</span><span class="nt">></span>Close<span class="nt"></button></span>
<span class="nt"></div></span>
<span class="nt"></div></span>
<span class="nt"></div></span>
<span class="nt"></div></span>
<span class="nt"><a</span> <span class="na">id=</span><span class="s">"myModalTrigger"</span> <span class="na">data-toggle=</span><span class="s">"modal"</span> <span class="na">data-target=</span><span class="s">"#myModal"</span><span class="nt">></span>Open Modal<span class="nt"></a></span>
</code></pre>
<p>It would be nice to include this functionality into QFQ somehow without having to copy/paste this block of code every time.</p> QFQ - Feature #17442 (New): Rearrange form buttonshttps://project.math.uzh.ch/issues/174422023-12-07T12:53:28ZKrzysztof Putyra
<a name="Overview-of-the-problem"></a>
<h1 >Overview of the problem<a href="#Overview-of-the-problem" class="wiki-anchor">¶</a></h1>
The current arrangement <code>[save][close] [delete] [new]</code> is flawed: it makes people afraid to click "close", because the impression is that the button deletes data. This is caused by how our brain processes this information:
<ul>
<li>the two buttons are next to each other with icons suggesting opposite actions</li>
<li>opposite <em>action</em> to "safe" is "delete" ("don't safe" is <em>no action</em>)</li>
<li>close button is normally the last one in a group, so our brain does not expect it at the current position</li>
</ul>
<p>Moreover, because [save] and [close] are next to each other and [delete] is separated, the brain ignores [delete] when looking at [close] and tries to make connection only with [save]. This could be improved by placing [delete] between [safe] and [close]</p>
<a name="An-alternate-arrangement"></a>
<h1 >An alternate arrangement<a href="#An-alternate-arrangement" class="wiki-anchor">¶</a></h1>
<p><code>[safe] [new][delete] [close]</code></p>
<ul>
<li>[close] is the last button</li>
<li>[delete] does not touch [safe], which prevents accidental clicks</li>
<li>[delete] is between [safe] and [close] to prevent the brain making a connection between these two buttons</li>
<li>choosing for [safe] an icon related to [delete] instead of a tick may improve the situation as well</li>
</ul> QFQ - Feature #17439 (New): Novu Open Source Notification Managementhttps://project.math.uzh.ch/issues/174392023-12-07T07:37:09ZCarsten Rosecarsten.rose@math.uzh.ch
<p><a class="external" href="https://www.heise.de/ratgeber/Novu-Open-Source-Notification-Management-fuer-Web-Apps-9543007.html?wt_mc=intern.red.plus.newsticker.7-tage-news.teaser.teaser">https://www.heise.de/ratgeber/Novu-Open-Source-Notification-Management-fuer-Web-Apps-9543007.html?wt_mc=intern.red.plus.newsticker.7-tage-news.teaser.teaser</a></p>
<p>Koennte eingesetzt werden fuer</p>
<ul>
<li>Dashboard</li>
<li>Am I-MATH gibt es viele T3 Instanzen - damit koennten Notifications unterschiedlicher Tools gebuendelt werden.</li>
<li>Notez: falls wir eine App machen </li>
<li>Wuerde sich das als Chat-Server eignen?</li>
</ul> QFQ - Feature #17411 (New): extraButtonCopyToClipboardhttps://project.math.uzh.ch/issues/174112023-12-05T21:21:40ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mitunter ist es gewuenscht den Inhalt eines Input Elements in das Clipboard zu kopieren.</p>
<p>Fuer Report habe das schon <a class="external" href="https://docs.qfq.io/en/master/Report.html#copy-to-clipboard">https://docs.qfq.io/en/master/Report.html#copy-to-clipboard</a></p>
<p>Vergleichbar mit extraButtonLock,extraButtonPassword, extraButtonInfo.</p>
<p>Es waere gut wenn immer der aktuelle Inhalt des FormElements genommen wird, auch wenn der Record nicht nicht gespeichert wurde.</p>
<p>Der Button waere auch sinnvoll fuer FormElement.type=editor (TinyMCE / CodeMirror)</p>
<p>Erste Anwendung: u.a. in den Settings gibt es oft 'reference' Spalten - deren Inhalt kopiert man haeufiger in die Zwischenablage ...</p> QFQ - Feature #17359 (New): Form: new record - skip historyhttps://project.math.uzh.ch/issues/173592023-11-26T10:06:56ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Werden mehrere Records nacheinander neu angelegt (='New'), moechte man in der Regel, sobald der der letzte Record angelegt wurde, mit 'Close' zum Parent Record zurueck.</p>
<p>Aktuell ist es so implmementiert, das man zum zuvor neu angelegten Record zuruck springt.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/8786/clipboard-202311261104-eua7z.png" alt="" /></p> QFQ - Bug #17257 (New): Migrate QFQ system tables: set default valuehttps://project.math.uzh.ch/issues/172572023-11-09T20:42:54ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #17236 (New): Form.parameter: sqlLoghttps://project.math.uzh.ch/issues/172362023-11-03T17:19:18ZEnis Nuredini
<p>Bitte Parameter sqlLog für Form einführen. Siehe Report/Configuration.</p>
<p>Wird benötigt für Geolean Import Finances damit das reguläre Sql.log nicht so gross wird.</p> QFQ - Feature #16988 (In Progress): Bild zuschneiden / Image Manipulationhttps://project.math.uzh.ch/issues/169882023-10-03T11:22:44ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Wir brauchen an unterschiedlichen Stellen die Moeglichkeit das ein Bild direkt im QFQ zugeschnitten werden kann.</p>
<p>Use Case:</p>
<ul>
<li>Carousel News (I-MATH/MY, JES)</li>
<li>MY Photowand</li>
<li>MY Student Exercise Upload </li>
<li>(Exam Upload)</li>
<li>MNF Heidi</li>
<li>...</li>
</ul>
<p>Details:</p>
<ul>
<li>Direkt im Upload Dialog</li>
<li>Explizit fuer bereits vorhandenes Bild</li>
<li>Option: Maske (fixem Aspekt Ratio) kann eingeblendet und verschoben / gezoomt werden.</li>
<li>Option: das Originalbild bleibt erhalten (Gleicher Pfad, Dateiname plus Extension 'original')</li>
<li>Option: Button restore Orginal.</li>
<li><a class="external" href="https://docs.qfq.io/en/master/Form.html#type-imagecut">https://docs.qfq.io/en/master/Form.html#type-imagecut</a></li>
</ul>
<p>10 Best Image Croppers In jQuery And Vanilla JavaScript (2024 Update) - <a class="external" href="https://www.jqueryscript.net/blog/best-image-croppers.html">https://www.jqueryscript.net/blog/best-image-croppers.html</a></p>
<ul>
<li><a class="external" href="https://fengyuanchen.github.io/cropperjs/">https://fengyuanchen.github.io/cropperjs/</a>, MIT, 12.5k Stars, 2023</li>
<li><a class="external" href="https://jamesooi.design/Croppr.js/">https://jamesooi.design/Croppr.js/</a>, MIT, 386 Stars, 2018, Aspect Ratio</li>
</ul> QFQ - Feature #16635 (New): Config: allowedFromAdresseshttps://project.math.uzh.ch/issues/166352023-07-20T15:24:05ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Die ZI bestehen darauf das wir nur Emails versenden duerfen mit einer FROM Adresse die eine Share Emailbox entspricht (keine persoenlilchen Adressen).</li>
</ul>
<p>Damit das sichergestellt ist, neue Config Option einfuehren 'allowedFromAdresses'.</p>
<p>CSV Liste mit Emailadressen.</p> QFQ - Bug #16580 (New): custom.css Typo3 handlinghttps://project.math.uzh.ch/issues/165802023-07-07T10:44:36ZEnis Nuredini
<p>Dies ist ein Beispiel der Einbindung vom custom.css in LSZGS. Folgender Eintrag erfolgt in Constants vom Template:</p>
<pre>
# Instance Dependent: absolute path to custom css and images
[request.getNormalizedParams().getHttpHost() == 'webwork22.math.uzh.ch']
cd.stylesheet = https://webwork22.math.uzh.ch/lszgs/fileadmin/template/cd/lszgs.custom.css
[end]
[request.getNormalizedParams().getSiteUrl() == 'https://join.lszgs.uzh.ch/']
cd.stylesheet = https://join.lszgs.uzh.ch/fileadmin/template/cd/lszgs.custom.css
[end]
[request.getNormalizedParams().getSiteUrl() == 'https://join.lszgs.uzh.ch/preview/']
cd.stylesheet = https://join.lszgs.uzh.ch/preview/fileadmin/template/cd/lszgs.custom.css
[end]
</pre>
<p><strong>Achtung</strong> : Der Pfad sollte sein `fileadmin/template` (template, nicht templates).</p>
<p>Falls weitere spezielle Elemente mit einem fileadmin beginnenden relativen Pfad gibt, dann kann in Setup die gleiche Abfrage verwendet werden.</p>
<p>Anpassungen müssen noch bei diversen Tools umgesetzt werden. Checkliste im Anschluss:</p> QFQ - Feature #16113 (New): Report, Subrecord: action on multiple elementshttps://project.math.uzh.ch/issues/161132023-04-26T15:11:17ZCarsten Rosecarsten.rose@math.uzh.ch
Alternativer Titel: <strong>HTML table row multi select action</strong>
<ul>
<li>Records können auf Report und Formebene (Subrecord) selektiert und zusammen "bearbeitet" werden (Action wird auf alle selektierten Records angewendet).</li>
<li>Actions sind über Dropdown abrufbar</li>
<li>1 Action = 1 <em>Function</em>
<ul>
<li><em>Anmerkung CR:</em> das mit 'Functions' (weil wir so viele brauchen pro Menu) muessen wir trennen von qfqFunctions - denn 'Functions' stehen ja im aktuellen tt-content wuerden nicht gefunden werden wenn sie in einem anderen Record stehen. Aus meiner Sicht aber genau so sinnvoll! Ein tt-content Record entspricht einer Klasse.</li>
</ul></li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/7783/clipboard-202304261709-sosbw.png" alt="" /></p>
<p><img src="clipboard-202304261709-w1hfg.png" alt="" /></p> QFQ - Feature #15528 (Ready to sync (develop)): Form/subrecord: Design for 'no record'https://project.math.uzh.ch/issues/155282023-02-12T10:12:52ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Neue Option (SYSTEM, FORM, FORM_ELEMENT): <code>subrecordEmpty=hide|mute|show:<text></code>
<ul>
<li>hide: wenn keine Records selektiert sind und es kein 'NEW' gibt - kein subrecord Element anzeigen (auch keinen Subrecord Titel).</li>
<li>mute: wenn keine Records selektiert sind und es kein 'NEW' gibt - Titel 'muted' anzeigen.</li>
<li>show:<text> - den <text> hinter dem Titel anzeigen falls keine Records selektiert sind.
<ul>
<li>Titel 'muted' anzeigen, '<text>' normal.</li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>Zur Diskussion (bin nicht sicher ob das gut ist): Anzahl der Records vor dem Batch im Titel anzeigen. Auch das konfigurierbar (SYSTEM, FORM, FORM_ELEMENT).</li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/7254/clipboard-202302121120-djvuw.png" alt="" /></p>
<ul>
<li>Aktuell ist das Rendering unterschiedlich, je nachdem ob 'Edit,Delete=off' oder 'Edit'=on ist. Es waere gut wenn auch bei 'Edit=on' keine Extra Zeile gerendert wird.</li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/7253/clipboard-202302121108-951zm.png" alt="" /></p> QFQ - Feature #15362 (Some day maybe): Add button to text inputs in Form (Element) Editor to swit...https://project.math.uzh.ch/issues/153622023-01-12T11:48:36ZJan Haller
<p>Neben bestimmten Textinputs (z.B. Title) im Form (Element) Editor soll ein Button eingebaut werden, der das Umschalten des entprechenden Inputfelds von type=input zu type=editor (und zurück) ermöglicht. Für SQL Abfragen steht dann die entsprechende Syntax zur Verfügung.</p> QFQ - Bug #15013 (New): Excel Import does not work with multiple importRegionhttps://project.math.uzh.ch/issues/150132022-11-10T15:56:12ZPhilipp Gröbelbauer
<p>Aus einem Excel sollen die Spalten A,B und D importiert werden.</p>
<p>A soll in die Spalte 'klasse', B in die Spalte 'stufe' und D in die Spalte 'grundlohn'.<br />Formelement.parameter wurde wie folgt gesetzt:</p>
<p>importToTable = lohn<br />importToColumns = klasse, stufe, grundlohn<br />importRegion = 1,A,6,B,904|1,D,6,D,904<br />importMode = append <br />importType = auto<br />accept = *<br />fileDestination = fileadmin/protected/imports/pay_regulations.xlsx<br />fileReplace = always</p>
<p>Spalten A und B funktionieren korrekt. Die Spalte D, welche in einer zweiten 'importRegion' angegeben wurde, wird jedoch nach 'klasse' importiert, anstatt nach 'grundlohn'.<br />Wenn eine 2. importRegion angegeben wird, dann sollte nicht auf die 1. angegebene DB-Spalte zurückgesprungen werden!</p> QFQ - Feature #14504 (New): Form / Input Element: restore previous contenthttps://project.math.uzh.ch/issues/145042022-07-12T09:23:40ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn fuer Textfelder die Moeglichkeit bestehen wuerde alten (nicht gespeicherten) Content wieder herzustellen.</p>
<p>Szenario: User nutzt nur einen Tab, hat in einem Formularelement etwas eingegeben und moechte nun die Seite verlassen, kann aber noch nicht speichern weil noch nicht alles eingegeben ist. QFQ warnt den User, das Informationen verloren gehen, der User muss das als das kleinere Uebel akzeptieren und verliert dann seinen Content</p>
<p>Loesung 1: server based</p>
<ul>
<li>Der Infodialog, der den User warnt, bekommt eine dritte Option 'Restore content later'.</li>
<li>Alle Dirty FormElemente (STORE_BEFORE?) werden serverseitig gespeichert: feUser, SIP (Form, Record, extra Argumente). </li>
<li>Wird das Form mit der SIP und dem User wieder geoeffnet, erkennt QFQ das es temp Values gibt, laedt den Record wie gewoehnlich, und bietet dann an das die alte Werte wieder restauriert werden.</li>
</ul>
<p>Loesung 2: Browser Local Store</p>
<ul>
<li>Jedes Formulare wird bei jedem(!) change im Local Store gespeichert.</li>
<li>Wird ein Form mit 'save', 'close', 'browser tab close' geschlossen, wird der Eintrag im Local Store geloescht.</li>
<li>Wird ein Form geoeffnet und gibt es dazu einen Eintrag im Local Store, wird angeboten diesen zu laden.</li>
<li>Damit wuerden auch Browser-Crashes wieder hergestellt.</li>
</ul> QFQ - Feature #13330 (In Progress): Multi Form: Uploadhttps://project.math.uzh.ch/issues/133302021-11-07T08:32:33ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Fuer das medtool (EN) wird ein Multi Upload benoetigt.</p>
<p>Gut waere wenn man ein Multi Form nehmen koennte.</p> QFQ - Feature #12632 (New): TinyMCE: Prepare CSS classes for imageshttps://project.math.uzh.ch/issues/126322021-06-04T06:26:51ZPhilipp Gröbelbauer
<p>Ziel: es soll einfach sein (Mausklick) Images mit einer CSS Klasse spezielle Eigenschaften zuzuweisen. Z.B. einen Rahmen, damit sich das Bild vom Hintergrund abhebt oder mit einer Transparenz, um deutlich zu machen das bei einem Screenshot die Buttons keine aktiven Elemente sind sondern nur zur illustration dienen.</p>
<p>Scheinbar hat TinyMCE schon etwas vorbereitet:</p>
<ul>
<li><a class="external" href="https://stackoverflow.com/questions/16221704/tinymce-add-class-to-img-tag">https://stackoverflow.com/questions/16221704/tinymce-add-class-to-img-tag</a></li>
<li><a class="external" href="https://www.tiny.cloud/docs/plugins/opensource/image/">https://www.tiny.cloud/docs/plugins/opensource/image/</a></li>
<li><a class="external" href="https://www.tiny.cloud/docs-4x/plugins/image/#image_class_list">https://www.tiny.cloud/docs-4x/plugins/image/#image_class_list</a></li>
</ul> QFQ - Feature #12156 (New): Form: Optional disable 'leave page'https://project.math.uzh.ch/issues/121562021-03-16T13:31:32ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mitunter ist es wuenschenswert ein From zu verlassen (z.B. weil man einen Link klickt) und dann soll keine Abfrage "Unsaved changes... "kommen falls das Form Dirty ist.</p>
<p>Parameter:</p>
<p>messageFormDirty = 0|1|<text></p>
<p>Default:1</p>
<p>Mit der Option <text> wird es neu moeglich die Message sprachabhaengig zu setzen.</p> QFQ - Feature #12135 (New): Subrecord: Notizhttps://project.math.uzh.ch/issues/121352021-03-12T16:10:44ZElias Villiger
<p>Aktuell wird bei einem subrecords mit FE.note = test die Notiz ("test") unterhalb der Subrecord-Tabelle angezeigt.</p>
<p>Würde es Sinn machen, die Notiz bei den Subrecords direkt im Anschluss an das Label zu verschieben? (siehe Screenshot)</p> QFQ - Feature #12039 (New): Missing htmlSpecialChar() in pre processing on form submithttps://project.math.uzh.ch/issues/120392021-02-17T23:09:35ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Wird auf Formularelemente mittels '{{notiz:F:allbut}}' zugegriffen, sind dies VERMUTLICH nicht htmlSpecialChar kodiert.</p>
<ul>
<li>Check ob dem so ist.</li>
</ul>
<p>Damit waere das folgende einem potentiellen SQL Inject Angriff ausgeliefert (notiz="1' OR 1")<br /><pre>
sqlValidate = {{!SELECT n.notiz FROM notiz AS n WHERE n.gr_id={{gr_id:RS0}} AND n.category=0 AND n.file_typ="Uebung" AND n.notiz='{{notiz:F:allbut}}' AND n.id !=
{{id:R0}} }}
</pre></p>
<ul>
<li>Abhilfe koennte eine neue Escape Klasse sein, die bei Default beim STORE_FORM htmlSpecialChar() anwendet.</li>
<li>Achtung: was passeirt wenn nicht mit single sondern mit double quotes im SQL Statement gearbeitet wird?</li>
<li>In der QFQ Doc bei den Bestpractices angeben das immer mit single quotes gearbeitet werden soll.</li>
</ul> QFQ - Feature #12038 (New): a) STORE_VAR: filenameOnlyStripUniq, b) SP: QSTRIPUNIQ()https://project.math.uzh.ch/issues/120382021-02-17T22:48:09ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Regelmaessig sollen Dateien hochgeladen werden, bei denen es keinen Konflikt geben darf wenn bereits eine Datei mit dem Namen existiert.</p>
<p>Ein gute Loesung ist die ID des aktuellen Records an den Anfang der Datei zu setzen. Bsp.: aus `test.pdf` wird dann `1234.test.pdf`</p>
<p>Via SQL ist es aufwendig den String zu parsen:</p>
<ul>
<li>Cut Path, so dass nur noch der Filename uebrig ist.</li>
<li>Dann z.B. vom Anfang bis zum ersten Punkt alles abschneiden.</li>
</ul>
<p>Wunsch:</p>
<p>a) Im STORE_VAR eine neue Variable `filenameOnlyStripUniq` einfuehren die geanu das macht.<br />b) Eine neue Stored Procedure <abbr title="">QSTRIPUNIQ</abbr>() anlegen die genau das macht (kann in Report verwednet werden)</p> QFQ - Feature #11716 (New): Form an beliebiger Stelle im Report anzeigenhttps://project.math.uzh.ch/issues/117162020-12-09T08:47:08ZPhilipp Gröbelbauer
<p>Forms sollen nicht nur zu oberst im Report angezeigt werden können</p> QFQ - Feature #11534 (New): Report: Action on selected rows - Table batchprocessing featurehttps://project.math.uzh.ch/issues/115342020-11-17T11:06:12ZSimon Grüning
<p>See attached picture. A feature to add an additional column of check-boxes at the beginning of a table, and the ability to have buttons ex. "with selected: move all to bla". So batch processing of table rows / records.</p>
<p>Implementation idea: via javascript? Buttons passing list of id's (or respective sip's) of records and action onto backend.</p> QFQ - Feature #10874 (New): Erstellen eines Foreign Keys in der Tabelle "FormElement"https://project.math.uzh.ch/issues/108742020-07-13T08:11:32ZChristoph Fuchs
<p>Wenn die "FormElement"-Tabelle angepasst wird:<br /> ALTER TABLE xyz.FormElement<br /> ADD CONSTRAINT FK_FormElement_formId FOREIGN KEY (formId)<br /> REFERENCES xyz.Form (id) ON DELETE CASCADE ON UPDATE CASCADE;<br />kann der Primärschlüssel der "Form"-Tabelle manuell angepasst werden und die "FormElement" Tabelle wird automatisch nachgeführt.<br />Ist auch datenbanktechnisch korrekt.</p> QFQ - Feature #10763 (New): form accessed and submitted despite logout?https://project.math.uzh.ch/issues/107632020-06-16T09:43:02ZNicola Chiapolini
<p>Wir hatten ein Problem in der DB, das ich auf folgende (annonymisierte) Log-Zeilen zurückführen konnte:</p>
<p><code><br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][INSERT INTO `phd_graduation` ( `shortname`, `student_id`, `name`, `firstname`, `salutation`, `birthday`, `mail_uzh`, `mail_private`, `nationality`, `subject_of_study`, `title_of_thesis`, `colloquium_start`, `disputation_start` ) VALUES ( 'aaaaaa', '12-345-678', 'Muster', 'Pauline', 'Frau', '1991-02-02', 'pauline.muster@uzh.ch', 'muster@example.com', 'FR', '50646022', 'A Thesis Title', '2020-08-04 13:00', '2020-08-04 13:00' )]<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][ID: 492 - affected rows: 1]<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][UPDATE `phd_graduation` SET `pdf_of_thesis` = 'studentadmin/phd/thesis/aaaaaa-thesis.pdf' WHERE id = '492']<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][Affected rows: 1]<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][UPDATE phd_graduation SET title_hash=MD5(title_of_thesis) WHERE shortname='aaaaaa']<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][Affected rows: 1]<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][UPDATE phd_graduation SET reg_done=NULL WHERE reg_done="0000-00-00 00:00:00"]<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][Affected rows: 0]<br />[2020.06.15 17:59:04 +0200][89.206.112.13][form:phd_reg-graduation][INSERT INTO `Dirty` (`sip`, `tableName`, `recordId`, `expire`, `recordHashMd5`, `tabUniqId`, `feUser`, `qfqUserSessionCookie`, `dirtyMode`, `remoteAddress`, `created`) VALUES ( '5ee79a9c90289','phd_graduation','492','2020-06-15 18:14:03','dfb854d090d8febd3b6d2e976c1c5f88','1593618907666','','6ba6k9hj4je4lgf2puhnmrsddh','exclusive','89.206.112.13','20200615175904' )]<br />[2020.06.15 17:59:04 +0200][89.206.112.13][form:phd_reg-graduation][ID: 20386 - affected rows: 1]<br />[2020.06.15 17:59:12 +0200][89.206.112.13][Page:8,tt:43,form:phd_reg-graduation][DELETE FROM `Dirty` WHERE `id`='20386' LIMIT 1]<br />[2020.06.15 17:59:12 +0200][89.206.112.13][Page:8,tt:43,form:phd_reg-graduation][Affected rows: 1]<br />[2020.06.15 17:59:12 +0200][89.206.112.13][Page:8,tt:43,form:phd_reg-graduation][INSERT INTO `FormSubmitLog` (`formData`, `sipData`, `clientIp`, `feUser`, `userAgent`, `formId`, `recordId`, `pageId`, `sessionId`, `created`)VALUES ('{"email":"","username":"","password":"","recordHashMd5":"dfb854d090d8febd3b6d2e976c1c5f88","reg_done-492":"2020-06-15 17:58:20","mail_private-492":"muster@example.com","title_of_thesis-492":"<p>A Thesis Title<\/p>","pdf_of_thesis-492":"5ee79a9c8ebcf","colloquium_start-492":"2020-08-04 13:00","disputation_start-492":"2020-08-04 13:00","_sipForTypo3Vars":"5ee79a9c90172"}', '{"birthday":"1991-02-02","firstname":"Pauline","form":"phd_reg-graduation","mail_uzh":"pauline.muster@uzh.ch","name":"Muster","nationality":"FR","r":"492","salutation":"Frau","shortname":"aaaaaa","student_id":"12-345-678","subject_of_study":"50646067","s":"5ee79a9c90289","urlparam":"birthday=1991-02-02&firstname=Pauline&form=phd_reg-graduation&mail_uzh=pauline.muster@uzh.ch&name=Muster&nationality=FR&r=492&salutation=Frau&shortname=aaaaaa&student_id=12-345-678&subject_of_study=50646067"}', '89.206.112.13', '', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36', '1000', '492', '8', '6ba6k9hj4je4lgf2puhnmrsddh', NOW())]<br />[2020.06.15 17:59:12 +0200][89.206.112.13][Page:8,tt:43,form:phd_reg-graduation][ID: 42051 - affected rows: 1]<br />[2020.06.15 17:59:12 +0200][89.206.112.13][Page:8,tt:43,form:phd_reg-graduation][UPDATE `phd_graduation` SET `shortname` = 'aaaaaa', `student_id` = '12-345-678', `name` = 'Muster', `firstname` = 'Pauline', `salutation` = 'Frau', `birthday` = '1991-02-02', `mail_uzh` = 'pauline.muster@uzh.ch', `mail_private` = 'muster@example.com', `nationality` = 'FR', `subject_of_study` = '50646067', `title_of_thesis` = 'A Thesis Title', `reg_done` = '2020-06-15 17:58:20', `colloquium_start` = '2020-08-04 13:00', `disputation_start` = '2020-08-04 13:00' WHERE id = '492']<br /></code></p>
<p>Für die zweite Hälfte des Logs fehlt der feUser - es scheint der User hat/wurde ausgeloggt. Das Problem damit ist, dass die SIP-Links für die Formulare nur mit Login sichtbar sind und das Formular deshalb davon ausgeht, dass der FE-User definiert ist. Natürlich ist es unser Fehler, dass wir das im Formular nicht abfangen. Allerdings bricht QFQ sowohl hier wie auch bei <a class="issue tracker-1 status-4 priority-2 priority-default" title="Bug: Formular trotz Timeout gespeichert (Feedback)" href="https://project.math.uzh.ch/issues/9898">#9898</a> das intuitive Verständnis von Login/Logout. Sicherer und User-freundlicher wäre es, wenn ein Logout sich sofort auf alle SIP und Formulare auswirkt. Konkret also.</p>
<p>Aufgefallen ist uns das ganze, weil in der letzten Zeile `subject_of_study` falsch ist (da das in einem Extra-Feld mit einem Query <code>... WHERE shortname='{{ feUser:TE }}'</code> gefüllt wird)</p> QFQ - Feature #10738 (Some day maybe): CORS headers for external API requestshttps://project.math.uzh.ch/issues/107382020-06-10T12:00:34ZMarc Egger
<p>Optionally allow setting the CORS headers inside a QFQ API Form such that the API may be called from a website hosted under a different domain.</p>
<p>Working example: <a class="external" href="https://stackoverflow.com/a/9866124">https://stackoverflow.com/a/9866124</a><br /><pre><code class="php syntaxhl"><span class="cd">/**
* An example CORS-compliant method. It will allow any GET, POST, or OPTIONS requests from any
* origin.
*
* In a production environment, you probably want to be more restrictive, but this gives you
* the general idea of what is involved. For the nitty-gritty low-down, read:
*
* - https://developer.mozilla.org/en/HTTP_access_control
* - http://www.w3.org/TR/cors/
*
*/</span>
<span class="k">function</span> <span class="n">cors</span><span class="p">()</span> <span class="p">{</span>
<span class="c1">// Allow from any origin</span>
<span class="k">if</span> <span class="p">(</span><span class="k">isset</span><span class="p">(</span><span class="nv">$_SERVER</span><span class="p">[</span><span class="s1">'HTTP_ORIGIN'</span><span class="p">]))</span> <span class="p">{</span>
<span class="c1">// Decide if the origin in $_SERVER['HTTP_ORIGIN'] is one</span>
<span class="c1">// you want to allow, and if so:</span>
<span class="nb">header</span><span class="p">(</span><span class="s2">"Access-Control-Allow-Origin: </span><span class="si">{</span><span class="nv">$_SERVER</span><span class="p">[</span><span class="s1">'HTTP_ORIGIN'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">);</span>
<span class="nb">header</span><span class="p">(</span><span class="s1">'Access-Control-Allow-Credentials: true'</span><span class="p">);</span>
<span class="nb">header</span><span class="p">(</span><span class="s1">'Access-Control-Max-Age: 86400'</span><span class="p">);</span> <span class="c1">// cache for 1 day</span>
<span class="p">}</span>
<span class="c1">// Access-Control headers are received during OPTIONS requests</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$_SERVER</span><span class="p">[</span><span class="s1">'REQUEST_METHOD'</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'OPTIONS'</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="k">isset</span><span class="p">(</span><span class="nv">$_SERVER</span><span class="p">[</span><span class="s1">'HTTP_ACCESS_CONTROL_REQUEST_METHOD'</span><span class="p">]))</span>
<span class="c1">// may also be using PUT, PATCH, HEAD etc</span>
<span class="nb">header</span><span class="p">(</span><span class="s2">"Access-Control-Allow-Methods: GET, POST, OPTIONS"</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="k">isset</span><span class="p">(</span><span class="nv">$_SERVER</span><span class="p">[</span><span class="s1">'HTTP_ACCESS_CONTROL_REQUEST_HEADERS'</span><span class="p">]))</span>
<span class="nb">header</span><span class="p">(</span><span class="s2">"Access-Control-Allow-Headers: </span><span class="si">{</span><span class="nv">$_SERVER</span><span class="p">[</span><span class="s1">'HTTP_ACCESS_CONTROL_REQUEST_HEADERS'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">);</span>
<span class="k">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">echo</span> <span class="s2">"You have CORS!"</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></p> QFQ - Feature #10115 (New): TypeAhead: static listhttps://project.math.uzh.ch/issues/101152020-02-13T09:34:27ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Neues Attribute: data-typeahead-list.</p>
<p>Inhalt JSON kodiert, genau wie die bisherige AJAX Response.</p> QFQ - Bug #9789 (New): Record Lock: release to early on 'leave page'https://project.math.uzh.ch/issues/97892019-12-17T19:58:55ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Form oeffnen</li>
<li>Record veraendern - lock wird angefordert: ok</li>
<li>Auf irgendeinen Link klicken (Form verlassen)</li>
<li>Sofort wird ein 'Release Lock' gesendet (und ausgefuehrt), obwohl der User via Dialog gefragt wird ob er die Daten verlieren moechte: BAD</li>
</ul>
<ul>
<li>Anschliessend arbeitet das Form ohne Lock weiter - das ist nicht gut!</li>
<li>Min. in der Version 19.7.0 war das Verhalten noch ok (w16.math.uzh.ch/ort)</li>
<li>Die Screenshots zeigen das Verhalten bei 19.7.0 und 19.12.0. In der 19.7.0 ist der Dialog 'leave site' offen, ohne das 'dirty release' getriggert wurde, bei 19.12.0 wurde dirty release faelschlicherweise getriggert.</li>
</ul> QFQ - Bug #9691 (Priorize): Checkbox: dynamic update > readonlyhttps://project.math.uzh.ch/issues/96912019-12-03T09:27:55ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Die Klasse 'qfq-disabled' muss auf dem Label liegen.</li>
<li>readonly sollte weiterhin auf den Options sein.</li>
</ul>
<p>Das ganze testen fuer <br /><pre>
checkbox
single
plain
button
multi
plain
button
radio
plain
button
</pre></p> QFQ - Feature #9517 (Priorize): Input multiple tags with typeaheadhttps://project.math.uzh.ch/issues/95172019-11-06T16:27:58ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Fuer Suchfilter waere es gut wenn man Tags eingeben koennten, die via Typeahead vorgeschlagen werden.</li>
<li>Die Vorschlagsliste wird gebaut mit den tags die zuvor mal eingegben wurden.</li>
</ul>
<p>Folgende Libs koennten intressant sein:</p>
<ul>
<li><a class="external" href="https://maxfavilli.com/jquery-tag-manager">https://maxfavilli.com/jquery-tag-manager</a> (Twitter Typeahead)</li>
<li><a class="external" href="https://soliantconsulting.github.io/tagmanager/">https://soliantconsulting.github.io/tagmanager/</a></li>
<li><a class="external" href="https://vuejsfeed.com/blog/add-tags-using-an-input-with-typeahead-support">https://vuejsfeed.com/blog/add-tags-using-an-input-with-typeahead-support</a></li>
</ul> QFQ - Bug #9275 (New): autcron: t3 page, which takes to long to respond, is not reported properlyhttps://project.math.uzh.ch/issues/92752019-10-01T18:09:29ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Auf w16 werden ueber ein AutoCron Skript gitlab Berechtigungen erzeugt. Dieses Script benoetigt mehrere Minuten. Scheinbar hat der CLI PHP Interpreter einen Timeout, der das Skript hart abbrechen laesst.<br />Der System Cron sendet dann eine Mail:<br /><pre>
FROM: root@math.uzh.ch
TO: www-data@math.uzh.ch
SUBJECT: Cron <www-data@w16> /usr/bin/php /var/www/html/my/typo3conf/ext/qfq/Classes/External/autocron.php
DATE: 01.10.2019 - 13:03:01
PHP Warning: file_get_contents(https://w16.math.uzh.ch/my?id=updateGitlabPrivileges&token=secret....&nId=all): failed to open stream: HTTP request failed! in /var/www/html/my/typo3conf/ext/qfq/Classes/Core/Helper/DownloadPage.php on line 73
</pre></p> QFQ - Feature #8522 (Some day maybe): build QFQ - npm warningshttps://project.math.uzh.ch/issues/85222019-06-12T09:18:03ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Wenn auf CI ein Build angestossen wird gibt es folgende Meldungen in der Console:<br /><pre>
npm install
npm WARN deprecated hawk@3.1.3: This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.
npm WARN deprecated sntp@1.0.9: This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.
npm WARN deprecated boom@2.10.1: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
npm WARN deprecated cryptiles@2.0.5: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
npm WARN deprecated hoek@2.16.3: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).
npm WARN deprecated json3@3.3.2: Please use the native JSON object instead of JSON 3
npm WARN prefer global coffeescript@1.10.0 should be installed with -g
npm WARN prefer global jshint@2.9.7 should be installed with -g
</pre></p> QFQ - Feature #6609 (New): Formlet: JSON API erweiternhttps://project.math.uzh.ch/issues/66092018-09-04T08:28:51ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Im QFQ 'PROTOCOL.md' ist ein Standard QFQ API mit einigen wenigen Feldern definiert.</p>
<p>Gut waere wenn die folgenden supported waeren:</p>
<p>"status": "success"|"error",<br />"message": "<message>" <br />"redirect": "no" | "url" | "url-skip-history" | "auto" | "close" <br />"redirect-url": "<url>"</p>
<p>Die waeren dann also auf der gleichen (obersten) Ebene wie 'elements'.</p> QFQ - Bug #3613 (Some day maybe): note /note unchecked -> note div (col-md) wird weiterhin gerenderthttps://project.math.uzh.ch/issues/36132017-04-21T16:41:23ZElias Villiger
<p>FormElement - Tab Layout:</p>
<p>Wenn z.B. die Checkboxes note und /note deaktiviert werden, wird der note-div weiterhin gerendert, ausser man setzt die "BS Note Columns" explizit auf 0.</p>
Erwartet wäre:
<ul>
<li>Deaktivierung von note führt dazu, dass <div class='col-md-x qfq-note'> nicht gerendert wird</li>
<li>Deaktivierung von /note führt dazu, dass der entsprechende </div> nicht gerendert wird</li>
</ul> QFQ - Feature #3402 (Some day maybe): Syntax Highlighting via CodeMirrorhttps://project.math.uzh.ch/issues/34022017-03-22T14:20:56ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Requirement: Texarea Feld mit Syntax Highlight</p>
<ul>
<li><a class="external" href="https://codemirror.net/">https://codemirror.net/</a></li>
<li>Min. SQL, optional weitere</li>
<li>Konfiguration wie bei TinyMCE via `data-...` - d.h. der Redakteur kann in QFQ Einfluss nehmen auf die diversen Optionen von CodeMirror.</li>
</ul> QFQ - Feature #1623 (Some day maybe): RealURLhttps://project.math.uzh.ch/issues/16232016-02-05T12:44:23ZCarsten Rosecarsten.rose@math.uzh.ch
URL Path:
<ul>
<li>Language</li>
<li>Type: standard, print, wide (wie standard, nur breiter), pure (kein HTML), xml</li>
<li>koennen die DBQ2 / FORM2 Parameter genauso verwendet werden wie bisher: GET & POST</li>
<li>Optional: Gibt es Aenderungen wie DBQ2 interne Links bauen muss? Bsp.: bisher "index.php?id=1234". Mit Real URL soll der Link zeigen auf "www.math.uzh.ch/vorleseung/mat123"</li>
</ul>