Project @ iMath: Issueshttps://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892024-02-20T15:00:41ZProject @ iMath
Redmine 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 #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 #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 #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 #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 #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 #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 #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 #10384 (New): Parameter Exchange QFQ Instanceshttps://project.math.uzh.ch/issues/103842020-04-08T11:35:00ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bei <a class="external" href="http://www.math">www.math</a> und w3/my haben wir das Problem das wir gerne Parameter uebergeben wuerden</p>
<ul>
<li>Join video conference</li>
<li>access recording </li>
<li>NEWS: Preview einer neu angelegten News (MY) auf MATH anzeigen.</li>
</ul>
<p>- die Instanzen sind aber unanabhaengig von einander.</p>
Idee:
<ul>
<li>[registered sip] <a class="external" href="http://www.math">www.math</a> (QFQ) kann ueber eine API SIPs bei w3/math registrieren. Das koennte aehnlich sein wie persistente SIPs (eine spezielle Variante). Solche registered SIPs sind unpersoenlich.</li>
<li>[encoded sip] zwischen den instanzen werden public keys (shared secred) ausgetauscht. Damit werden die Parameter verschluesselt und uebergeben.</li>
</ul>
<p>Notes:</p>
<ul>
<li><a class="external" href="https://stackoverflow.com/questions/9262109/simplest-two-way-encryption-using-php">https://stackoverflow.com/questions/9262109/simplest-two-way-encryption-using-php</a>
* Comment von 'Hemerson Varela' >> libsodium</li>
</ul> QFQ - Feature #10345 (New): Templates - Patterns QFQ Stylehttps://project.math.uzh.ch/issues/103452020-04-02T21:10:52ZBenjamin Baerbenjamin.baer@math.uzh.ch
<p>Ein "Pattern" im Design ist eine Vorgabe wie etwas aussehen soll.</p>
<p>Nehmen wir mal als Beispiel das teachingtool:</p>
<pre><div class="item">
<div class="item-background"></div>
<a class="item-image" style="background-image: url('typo3conf/ext/qfq/Classes/Api/download.php?s=5e8651ff802ce')" href="?id=tool&amp;toolId=118"></a>
<div class="item-description">Hinweise für die Übertragung einer geplanten Multiple-Choice-Prüfung in ein alternatives digitales Format</div>
<span class="item-meta">1.4.2020 17:02 Uhr</span><a class="item-title" href="?id=tool&amp;toolId=118">MC-Prüfungen (Remote)</a>
<div class="item-tags">
Tags:
<a class="label label-primary" href="index.php?id=alltools&amp;tagId=104">Leistungsnachweise</a>
<a class="label label-primary" href="index.php?id=alltools&amp;tagId=126">Digitale Lehre</a>
</div>
</div></pre>
<p>Nun brauchen wir diesen Satz an mehreren Orten vom Teachingtool - und wenn man etwas am Grunddesign aendert, muss man an jeden Ort denken in dem es vorkommt.</p>
<p>Mit dingen wie _link machen wir es uns relativ einfach diese Dinge zu erstellen - ist in diesem Sinne bereits ein Pattern.</p>
<p>Nun, wandeln wir obigen Satz mal in ein Pattern um:<br /> <pre><div class="item">
<div class="item-background"></div>
<a class="item-image" style="background-image: url('{{backgroundImage:R}}')" href="{{toolLink:R}}"></a>
<div class="item-description">{{itemDescription:R}}</div>
<span class="item-meta">{{dateTime:R0}}</span><a class="item-title" href="{{toolLink:R}}">{{itemTitle:RE}}</a>
<div class="item-tags">
Tags:
{{@tagLoopStart}}<a class="label label-primary" href="{{itemTagLink:R}}">{{itemTagName:R0}}</a>{{@tagLoopEnd}}
</div>
</div></pre></p>
<p>Und dazu dann der SQL Aufruf:<br /><pre>10 {
sql = SELECT "blabla" AS _itemTitle, ....
pattern = item
20 {
sql = SELECT CONCAT('index.php?id=tag&tagId=", tag.id) AS _itemTagLink, tag.name AS _itemTagName ...
loop = tagLoop
}
}</pre></p>
<p>Die Designs selbst koennten dabei aehnlich wie System Variabeln definiert werden und seitenweit abgelegt sein. Oder besser wie Form direkt ueber eine Art editor im frontend erstellt (bzw. gleich als git datei - um die eigenen HTML Editoren verwenden zu koennen)</p>
<p>Pattern wird natuerlich hier immer quasi erst "renr" ausgefuehrt, da einzelne Teile aus subqueries kommen koennten (und mit loops sogar muessen). Neben Store :R koennte man auch die anderen Stores abfragen, vorallem Y und U.</p> QFQ - Feature #8056 (Some day maybe): Termin Organisation (Reservation)https://project.math.uzh.ch/issues/80562019-03-15T07:05:55ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Fuer das Consulting Tool <a class="external" href="https://project.math.uzh.ch/projects/as-consulting-rf/wiki">https://project.math.uzh.ch/projects/as-consulting-rf/wiki</a> waere eine unabhaengige Terminplanung gut.</p>
<p>Unter <a class="external" href="https://www.terminland.de/online-terminplaner/">https://www.terminland.de/online-terminplaner/</a> kann man kostenlos einen Kalender managen. Man kann auch Fragen stellen die beantwortet werden.</p>
<p>Erste Idee</p>
<ul>
<li>Ein Modul innerhalb von QFQ (Alternativ gibt es evtl. T3 Extensions?).</li>
<li>Es wird nur ein Kalender angezeigt und ein Form um den Termin einzutragen.</li>
<li>Reduzierung auf das noetigste, da nicht klar ist ob das wirlich ein Requirement ist (UZH verwendet Lotus).</li>
<li>Nice to have:
<ul>
<li>Owner traegt seine verfuegbaren Timeslots in einem dedizierten Zimbra Kalender ein.</li>
<li>Client kann aus diesen Terminen auswaehlen.</li>
<li>Das UI Reserviert den Termin im Zimbra Kalender</li>
<li>Falls alles mittels einer 'externen DB' (=Zimbra Kalender) laeuft, muesste QFQ nichts lokal speichern. Evtl. spiegelt Zimbra den Kalender in eine lokale Tabelle.</li>
</ul></li>
</ul>
<p>Zweite Idee</p>
<ul>
<li>Open source service selber hosten. Variante: <a class="external" href="https://demo.easyappointments.org/index.php">https://demo.easyappointments.org/index.php</a></li>
</ul>
<p>Use cases:</p>
<ul>
<li>Terminplanung fuer Prof / Studenten (nutzen i.d.R. keinen Lotus Kalender)</li>
<li>Heterogene Gruppen UZH, ETHZ, ... - typischerweise in einer 1:1 Beziehung (falls mehr als 2 Parteien involviert sind, ist doodle bessser).</li>
</ul> QFQ - Feature #7921 (Some day maybe): Rest API Export: URL kuerzer machenhttps://project.math.uzh.ch/issues/79212019-02-20T15:49:11ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Kann man die REST URL kuerzer machen durch einen Symlink oder eine Apache Config 'Alias'?</li>
</ul> QFQ - Feature #7229 (Some day maybe): New FormElement.type: Buttonhttps://project.math.uzh.ch/issues/72292018-11-12T11:46:31ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Erscheint im Form als normales Formularelement</li>
<li>Kann oben in der Buttonleiste erscheinen</li>
<li>Button kann ein normaler Link sein</li>
<li>Button kann eine Download sein</li>
<li>Button kann speichern, loeschen, schliessen</li>
<li>Button kann ein Custom redirect haben</li>
<li>Button kann optional den 'wollen sie speichern'-Dialog unterdruecken.</li>
<li>Es muss sichergestellt sein das 'Dirty' Records abgeraeumt werden.</li>
<li>Es sollte moeglich sein mehrere Buttons in einer Gruppe darzustellen. Neu koennten die bestehenden Gruppen ein Label bekommen, so dass man neue Buttons zu den Systemgruppen hinzufuegen kann.</li>
</ul> QFQ - Feature #7108 (Some day maybe): QFQ Wrap Elementshttps://project.math.uzh.ch/issues/71082018-10-27T10:01:32ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>erklaeren wie welche elemente gewrapped werden.</li>
<li>Screenshots
<ul>
<li>static: untereinander, hinteinander</li>
<li>dynamicUpdate: innerhalb einer Zeile ein/ausblenden</li>
</ul></li>
</ul>
<ul>
<li>Optionen
<ul>
<li>BS Columns. Insbesondere was passiert wenn bscolumns=0</li>
<li>row, label, /label, input, /input, note, /note, /row</li>
<li>FE.parameter: FE_WRAP_ROW, FE_WRAP_LABEL, FE_WRAP_INPUT, FE_WRAP_NOTE</li>
</ul></li>
</ul>
<ul>
<li>Unit Test ob ALLE Kombinationen funktioneren.</li>
</ul> QFQ - Feature #7104 (Some day maybe): Manual: hint about escaping if '\r' appears in mail bodyhttps://project.math.uzh.ch/issues/71042018-10-27T09:16:26ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Werden Mails versendet und der Body durch einen Record geladen und via {{body:R}} eingesetzt, erscheinen im Text '\r' an den Zeilenenden.</p>
<p>Problem: {{body:R}} wird escaped</p>
<p>Abhilfe: {{body:R::-}}</p>
<p>Das in der FAQ Sektion erklaeren.</p> QFQ - Feature #6704 (Some day maybe): Upload Mode: Bilder in Notizen rechts sollen aktuellen Uplo...https://project.math.uzh.ch/issues/67042018-09-14T11:11:06ZElias Villiger
<p><p><a href="{{pathFileName:FR0:allbut:d}}"><img style="height: 48px;" src="{{pathFileName:FR0:allbut:d}}" /></a></p></p> QFQ - Feature #6084 (Some day maybe): New escape type: 'D' - convert datehttps://project.math.uzh.ch/issues/60842018-05-26T16:50:16ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Wenn das default date Format nicht 'yyyy-mm-dd' ist, wird eine Variable mit diesem Typ in der MySQL Format gewandelt.</p>
<p>projektStart='11.12.1314 01:23:45'</p>
<p>{{projektStart:F:alnumx:D}} >> '1314-12-11 01:23:45'</p>
<p>Die Variable muss ein gueltiges Datum sein, sonst ist die sanatize class verletzt.</p> QFQ - Feature #5895 (Some day maybe): Tutorial: List of all QFQ Featureshttps://project.math.uzh.ch/issues/58952018-05-01T15:00:23ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Link to 'Best Practice' - Beispiel(e) im Tutorial.md.</li>
<li>Link zu Manual.rst an die Stelle wo das Feature vollstaendig beschrieben wird.</li>
</ul>
<ul>
<li><a class="external" href="https://git.math.uzh.ch/typo3/qfq/blob/master/Documentation/Tutorial.rst">https://git.math.uzh.ch/typo3/qfq/blob/master/Documentation/Tutorial.rst</a></li>
</ul> QFQ - Feature #5892 (Some day maybe): QFQ should use T3 API to manipulate FE GROUP membershiphttps://project.math.uzh.ch/issues/58922018-05-01T13:20:51ZCarsten Rosecarsten.rose@math.uzh.ch
<p>QFQ sollte eine Moeglichkeit anbieten, die FE Groups in T3 zu einem User setzen zu koennen.</p>
<ul>
<li>Das setzen passiert beim aktuell eingeloggten User. </li>
<li>Die Aenderungen sollten sofort sichtbar sein.</li>
<li>Ein oder mehrere Gruppen setzen.</li>
<li>Falls Gruppen nicht angegeben sind, diese Membership loeschen.</li>
<li>Ein Best Practice sollte in der LDAP Extension zu finden sein.</li>
<li>Column '_feGroup'</li>
<li>Modifier:
<ul>
<li>add:<feGroup[,feGroup]> - add feGroup membership for current user.</li>
<li>delete:<feGroup[,feGroup]> - delete feGroup membership for current user.</li>
<li>set:<feGroup[,feGroup]> - set (remove non given) feGroup</li>
<li><string>_:<feGroup[,feGroup]> - set (remove non given) <string>_* classes. E.g. 'auto_:auto_admin,auto_reviewer' will remove all non given 'auto_*' groups and set the given one.</li>
<li>user:<feUser> - optional. If not given take the current user. If there is no user, do nothing.</li>
</ul></li>
</ul> QFQ - Feature #5851 (Some day maybe): Queue System implementieren: MQTT, RabbitMQhttps://project.math.uzh.ch/issues/58512018-04-21T12:47:24ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Parallel zu AutoCron soll ein Queue System fuer QFQ zur Verfuegung stehen.</p>
Ziele:
<ul>
<li>Vereinzelung von eingehenden Tickets. Bsp.: mehrere Tickets treffen quasi gleichzeitig ein, es soll aber immer nur eine Anfrage zu einer Zeit bearbeitet werden.</li>
<li>Monitoring welche Tickets bereits abgearbeitet sind. Neu erstellte Tickets bekommen eine ID, die angefragt werden kann.</li>
<li>Zugriffs Beschraenkung.</li>
<li>Tickets einstellen, von ausserhalb QFQ.</li>
</ul>
Anwendung:
<ul>
<li>Ein OS Cronjob erstellt ein Ticket, das PDFs auf Vorrat gerendert werden sollen. </li>
<li>Der Apache haelt keine Verbindung zum Client offen. </li>
<li>Ggfs. wird QFQ ohne Apache via Commandline aufgerufen. </li>
<li>Es muesste eine tt_content ID uebergeben werden.</li>
</ul> QFQ - Feature #5805 (New): TypeAHead SQL value instead of key storedhttps://project.math.uzh.ch/issues/58052018-04-10T13:16:59ZNicola Chiapolini
<p>Ich habe ein Textfeld mit folgenden Parametern:</p>
<p><code><br />typeAheadSql = SELECT shortname AS 'id', CONCAT(firstname, ' ', lastname, ', ', shortname) AS 'value' FROM _right_to_confer_phd WHERE lastname LIKE ? OR firstname LIKE ? or shortname LIKE ? ORDER BY lastname<br />typeAheadSqlPrefetch = SELECT CONCAT(firstname, ' ', lastname, ', ', shortname) AS value FROM _right_to_confer_phd WHERE shortname=?<br />typeAheadMinLength = 1<br />typeAheadLimit = 20<br />typeAheadPedantic = 0<br /></code></p>
<p>Die Suche funktioniert, aber beim Speichern wird der Value (firstname lastname, shortname) statt der id (shortname) gespeichert.<br />Problem scheint, dass JS im hidden Feld den Value statt der id einfügt...</p> QFQ - Feature #5455 (Some day maybe): Mail Redirects grId abhaengighttps://project.math.uzh.ch/issues/54552018-02-16T14:07:00ZElias Villiger
<p>Beim Entwickeln von Email-abhaengigen Loesungen waere es zum Testen bequem, wenn man die Mails des sich in Entwicklung befindenden Bereichs abfangen und weiterleiten kann (aehnlich wie REDIRECT_ALL_MAIL_TO).<br />Dazu koennte man zusaetzlich zum Feld REDIRECT_ALL_MAIL_TO (evtl umbenennen in REDIRECT_MAIL_TO) ein Feld REDIRECT_MAIL_GRIDS einfuehren, bei dem die grIds der weiterzuleitenden Mails angegeben werden. Wenn REDIRECT_MAIL_GRIDS auf 0 steht, werden alle Mails abgefangen.</p>
<p><a class="issue tracker-2 status-5 priority-2 priority-default closed" title="Feature: config.qfq.ini via ExtManager (Closed)" href="https://project.math.uzh.ch/issues/5175">#5175</a> abwarten.</p> QFQ - Feature #5452 (Some day maybe): Thumbnails from PDF: bad qualityhttps://project.math.uzh.ch/issues/54522018-02-16T09:34:55ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Wird ein Thumbnail von einem PDF gerendert (nur bei der ersten Seite) passiert das aktuell via GraphicsMagic.</p>
<p>Bei kleinen Thumbnails ist das kein Problem. Bei groesseren Bilder (width>500) sieht es nicht mehr gut aus.</p>
<p>Wird inkscape verwendet, sieht es anders schlecht aus: by default hat inkscape Probleme mit den LaTeX Schriften beim Import von PDF. Inkscape kann zusaetzlich importieren 'with poppler' - dann sieht es gut auch. Auf die schnelle haben BB,CR aber keine Commandline Option gefunden, das auch bei 'without-gui' zu aktivieren.</p> QFQ - Feature #5342 (Some day maybe): _link - with HTML Attributeshttps://project.math.uzh.ch/issues/53422018-02-02T17:50:28ZBenjamin Baerbenjamin.baer@math.uzh.ch
<p>data Attributes need to be set sometime.</p>
<p>Carsten proposed a general attribute option:</p>
<pre>
'p:...|c:someClass|a:data-target="www.google.ch" data-payload="stuff"' AS _link
</pre> QFQ - Feature #5160 (Some day maybe): QFQ collaborative / together.js, ShareJS, y-js, collaborati...https://project.math.uzh.ch/issues/51602017-12-23T16:04:11ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li><a class="external" href="https://togetherjs.com">https://togetherjs.com</a></li>
<li><a class="external" href="https://github.com/josephg/ShareJS">https://github.com/josephg/ShareJS</a></li>
<li><a class="external" href="http://y-js.org/#!/examples">http://y-js.org/#!/examples</a> (incl. RTE)</li>
<li><a class="external" href="https://www.npmjs.com/package/collaborative">https://www.npmjs.com/package/collaborative</a></li>
<li><a class="external" href="https://blog.pusher.com/build-collaborative-text-editor-javascript/">https://blog.pusher.com/build-collaborative-text-editor-javascript/</a></li>
</ul> QFQ - Feature #5129 (Some day maybe): Reports: SQL fuer x Achse und y Achsehttps://project.math.uzh.ch/issues/51292017-12-15T14:08:56ZBenjamin Baerbenjamin.baer@math.uzh.ch
<p>Moeglichkeit x und y Achse in einer SQL Stufe zu generieren und Kinder dann beide Values zu vererben</p>
<p>Nuetzlich fuer Tabellen die Horizontal und Vertikal generiert werden, bsp. Overview Points</p>
<p>Beispiel:<br /><pre>
10 {
xsql = SELECT id FROM Exercises
ysql = SELECT id FROM Students
rbeg = <tr>
xhead = <thead>
yhead = <tbody>
xfbeg = <th>
xfend = </th>
yfbeg = <td>
...
20 {
sql = SELECT grade FROM Grades WHERE idExercise = {{10x.id}} AND idStudent = {{10y.id}}
}
</pre></p> QFQ - Feature #4974 (Some day maybe): Long polling - inform all listening clients of changeshttps://project.math.uzh.ch/issues/49742017-11-21T08:23:46ZBenjamin Baerbenjamin.baer@math.uzh.ch
<p><a class="external" href="https://stackoverflow.com/questions/333664/how-do-i-implement-basic-long-polling">https://stackoverflow.com/questions/333664/how-do-i-implement-basic-long-polling</a></p>
<pre>
<?php
if(rand(1,3) == 1){
/* Fake an error */
header("HTTP/1.0 404 Not Found");
die();
}
/* Send a string after a random number of seconds (2-10) */
sleep(rand(2,10));
echo("Hi! Have a random number: " . rand(1,10));
?>
</pre>
<p>Note: With a real site, running this on a regular web-server like Apache will quickly tie up all the "worker threads" and leave it unable to respond to other requests.. There are ways around this, but it is recommended to write a "long-poll server" in something like Python's twisted, which does not rely on one thread per request. cometD is an popular one (which is available in several languages), and Tornado is a new framework made specifically for such tasks (it was built for FriendFeed's long-polling code)... but as a simple example, Apache is more than adequate! This script could easily be written in any language (I chose Apache/PHP as they are very common, and I happened to be running them locally)</p>
<p>Javascript:</p>
<pre>
<script type="text/javascript" charset="utf-8">
function addmsg(type, msg){
/* Simple helper to add a div.
type is the name of a CSS class (old/new/error).
msg is the contents of the div */
$("#messages").append(
"<div class='msg "+ type +"'>"+ msg +"</div>"
);
}
function waitForMsg(){
/* This requests the url "msgsrv.php"
When it complete (or errors)*/
$.ajax({
type: "GET",
url: "msgsrv.php",
async: true, /* If set to non-async, browser shows page as "Loading.."*/
cache: false,
timeout:50000, /* Timeout in ms */
success: function(data){ /* called when request to barge.php completes */
addmsg("new", data); /* Add response to a .msg div (with the "new" class)*/
setTimeout(
waitForMsg, /* Request next message */
1000 /* ..after 1 seconds */
);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
addmsg("error", textStatus + " (" + errorThrown + ")");
setTimeout(
waitForMsg, /* Try again after.. */
15000); /* milliseconds (15seconds) */
}
});
};
$(document).ready(function(){
waitForMsg(); /* Start the inital request */
});
</script>
</pre> QFQ - Feature #4816 (Some day maybe): Templates for QFQ Reports (Tables, Radios, ..)https://project.math.uzh.ch/issues/48162017-10-25T11:33:18ZBenjamin Baerbenjamin.baer@math.uzh.ch
<p>Easy way to create bootstrap tables and other template based fluff.</p>
<p>Now:<br /><pre>
10 {
sql = SELECT v.id AS _id, m.nr, CONCAT(v.name, ' (', v.gr_id, ')'), CONCAT('p:cassignment&grId=', v.gr_id, '&semId=',
v.sem_id, '|S|s') AS _link, CONCAT('p:exercisesheets&vId=', v.id, '&gr_id=', v.gr_id, '&semId=', v.sem_id,
'|E|s') AS _link
FROM vorlesung AS v, gruppe_member AS gm, modul AS m
WHERE v.sem_id = 35
AND v.v_typ = 'VL'
AND v.id = gm.x_id2
AND gm.gr_id = 896
AND m.id = gm.x_id
head = <table class="table table-condensed table-striped">
<thead>
<tr>
<th width="70">Modul</th>
<th>Name</th>
<th width="50"></th>
<th width="50"></th>
</tr>
</thead>
<tbody>
rbeg = <tr>
rend = </tr>
fbeg = <td>
fend = </td>
tail = </tbody></table>
}
</pre></p>
<p>Then:</p>
<pre>
10 {
sql = SELECT v.id AS _id, m.nr, CONCAT(v.name, ' (', v.gr_id, ')'), CONCAT('p:cassignment&grId=', v.gr_id, '&semId=',
v.sem_id, '|S|s') AS _link, CONCAT('p:exercisesheets&vId=', v.id, '&gr_id=', v.gr_id, '&semId=', v.sem_id,
'|E|s') AS _link
FROM vorlesung AS v, gruppe_member AS gm, modul AS m
WHERE v.sem_id = 35
AND v.v_typ = 'VL'
AND v.id = gm.x_id2
AND gm.gr_id = 896
AND m.id = gm.x_id
type = table
head = <th width="70">Modul</th>
<th>Name</th>
<th width="50"></th>
<th width="50"></th>
}
</pre>
<p>list</p>
<p>Now:<br /><pre>
10 {
sql = SELECT p.name, ', ', p.vorname
FROM person AS p
WHERE ....
head = <ul>
rbeg = <li>
rend = </li>
tail = </ul>
}
</pre></p>
<p>Then: <br /><pre>
10 {
sql = SELECT p.name, ', ', p.vorname
FROM person AS p
WHERE ....
type = list
}
</pre></p> QFQ - Feature #4640 (Some day maybe): Rename System Formshttps://project.math.uzh.ch/issues/46402017-09-25T14:22:33ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Form, FormElement, Cron ... umbenennen zu _Form, _FormElement, _Cron</p> QFQ - Feature #4626 (Some day maybe): Mobile View: 'classBody=qfq-form-right' makes no sensehttps://project.math.uzh.ch/issues/46262017-09-24T07:47:41ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn die Labelausrichtung zwischen Mobile und Desktop unterschiedlich sein koennte. Bei Desktop macht es durchaus Sinn das die Label right-aligned sind - im Mobile View sieht das dann aber nicht mehr schoen aus.</p>
<p>classBody=qfq-form-righ</p>
<p>Mit Benj besprechen wie wir das loesen.</p> QFQ - Feature #4551 (Some day maybe): Set 'pills' via dynamicUpdate to show/hide/disabledhttps://project.math.uzh.ch/issues/45512017-09-17T15:43:07ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #4446 (Some day maybe): New FE get same feIdContainerId as last modifed FEhttps://project.math.uzh.ch/issues/44462017-09-09T15:10:40ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Wenn ein neues FE angelegt wird, als container denjenigen Vorschlagen, den das zuletzt editierte FE hat.</p> QFQ - Feature #4445 (Some day maybe): template group: Option to simulate fieldsethttps://project.math.uzh.ch/issues/44452017-09-09T15:07:37ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Macht es Sinn das Label zu rendern ( so dass kein fieldset aufwendig angelegt werden muss)?</p>
<p>Man koennte eine Option setzen, um eine TemplateGroup das Verhalten eines Fieldsets zu geben.</p> QFQ - Feature #4440 (Some day maybe): Manual.rst: explain how to. expand PHP Session to 4hhttps://project.math.uzh.ch/issues/44402017-09-09T14:33:37ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #4439 (Some day maybe): Log: report all actions fired by an FE Element, incl. the o...https://project.math.uzh.ch/issues/44392017-09-09T14:28:56ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Log: Report all actions fired by an FE Element, incl. the original directive (slaveId, sqlInsert, ..., modeSql, sql1, itemList, ..., before und after evaluation)</li>
<li>Interface to show fired actions. Koennte Z.B. auf dem Form ein zusaetzlicher Button sein, mit dem man sich die letzten Save Aktionen anzeigen lassen kann.</li>
</ul> QFQ - Feature #4435 (Some day maybe): Report: striptags - specify allowed tagshttps://project.math.uzh.ch/issues/44352017-09-09T13:41:29ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bei 'AS _striptags' koennte man die erlaubten Tags anhaengen mit ':'. Bsp:</p>
<pre>
AS '_striptags:<a><br>'
</pre>
<p>Fuer das Manual:</p>
<pre>
This function does not modify any attributes on the tags that you allow using allowable_tags, including the style and onmouseover attributes that a mischievous user may abuse when posting text that will be shown to other users.
</pre> QFQ - Feature #4433 (Some day maybe): Log when SIP will be destroyed by QFQ for any (security) re...https://project.math.uzh.ch/issues/44332017-09-09T13:26:17ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #4027 (Some day maybe): Missing: orange 'check' / 'bullet'https://project.math.uzh.ch/issues/40272017-07-02T18:08:42ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #3646 (Some day maybe): Moeglichkeit HTML Tags in Reports auszugeben (zu enkodieren...https://project.math.uzh.ch/issues/36462017-04-28T13:44:35ZBenjamin Baerbenjamin.baer@math.uzh.ch
<p>Siehe als Beispiel:<br /><img src="https://project.math.uzh.ch/attachments/download/650/qfq_tags_ausgabe.png" alt="" /></p>
<p>Sollte moeglich sein das mittels htmlspecialchars in html zu kodieren.</p> QFQ - Feature #3617 (Some day maybe): Load javascripts at bottomhttps://project.math.uzh.ch/issues/36172017-04-24T07:41:17ZBenjamin Baerbenjamin.baer@math.uzh.ch
<p>Ist Zustand:</p>
<pre>
<script>
$(function () {
'use strict';
QfqNS.Log.level = 0;
var qfqPage = new QfqNS.QfqPage({
tabsId: 'qfqTabs',
formId: 'qfq-form-58fda8ec26d14',
submitTo: 'typo3conf/ext/qfq/qfq/api/save.php',
deleteUrl: '',
refreshUrl: 'typo3conf/ext/qfq/qfq/api/load.php',
fileUploadTo: 'typo3conf/ext/qfq/qfq/api/file.php?action=upload',
fileDeleteUrl: 'typo3conf/ext/qfq/qfq/api/file.php?action=delete'
});
var qfqRecordList = new QfqNS.QfqRecordList('typo3conf/ext/qfq/qfq/api/delete.php');
})
</script>
</pre>
<p>Soll: Keine scripts mehr im HTML.</p>
<p>Umesetzungsvorschlag:</p>
<ul>
<li>HTML Seite<br /><pre>
<form class="qfq-setup" data-log="0" data-tabs-id="qfqTabs" data-form-id="qfq-form-58fda8ec26d14" data-submit="typo3conf/ext/qfq/qfq/api/load.php"
data-delete="" data-refresh="typo3conf/ext/qfq/qfq/api/load.php" data-file-upload-to="typo3conf/ext/qfq/qfq/api/file.php?action=upload"
data-delete-url="typo3conf/ext/qfq/qfq/api/file.php?action=delete" data-initialize="typo3conf/ext/qfq/qfq/api/delete.php"> ... </form>
</pre></li>
</ul>
<ul>
<li>Script<br /><pre>
$(".qfq-setup").each(function () {
'use strict';
QfqNS.Log.level = $(this).data("log");
var qfqPage = new QfqNS.QfqPage({
tabsId: $(this).data("tabs-id"),
formId: $(this).data("form-id"),
submitTo: $(this).data("submit"),
deleteUrl: $(this).data("delete"),
refreshUrl: $(this).data("refresh"),
fileUploadTo: $(this).data("upload-to"),
fileDeleteUrl: $(this).data("delete-url")
});
var qfqRecordList = new QfqNS.QfqRecordList($(this).data("initialize"));
});
</pre></li>
</ul> QFQ - Feature #3495 (Some day maybe): Predifined Parameter werden nicht in '+' (add new record) S...https://project.math.uzh.ch/issues/34952017-04-03T21:24:21ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Problem: Auf der Lehrkredit Seite 'Setup' koennen Ggroup Records angelegt werden. In dem '+' auf der Seite ist ein grId=22 als Predefined Parameter definiert, der jeweils im Record zur Klassifizierung mit gespeichert werden muss. Bis dahin ok. Wird nun bestehender Record via Edit aufgerufen und auf dem bestehenden Record das '+' gedrueckt, bekommt der neue Record KEIN grId=22. D.h. die vordefinierten Werte fehlen.</p>
<p>Beispiel</p> 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> QFQ - Feature #1253 (Some day maybe): QF: Colorpickerhttps://project.math.uzh.ch/issues/12532015-10-19T08:01:50ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #1251 (Some day maybe): QF: Combohttps://project.math.uzh.ch/issues/12512015-10-19T08:01:23ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #1234 (Some day maybe): QF: Record numbering: Im Grid soll in Spalte 1optional die...https://project.math.uzh.ch/issues/12342015-10-16T13:31:14ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #955 (Some day maybe): QF: Notizen vor/nach dem Formhttps://project.math.uzh.ch/issues/9552015-08-28T09:20:33ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Es sollen Notizen ueber/im/unterhalb des Forms ausgegeben werden koennen.</li>
<li>Die Notizen sind statischer Text oder SQL Query</li>
<li>Notizen innerhalb eines Forms sind eine Art Formularelement ohne Eingabemeoglichkeit.</li>
</ul>