Project @ iMath: Issueshttps://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892024-03-03T22:20:55ZProject @ iMath
Redmine QFQ - Feature #18047 (New): (filepond) uploadType: a) report invalid value, b) change v1/v2 to 1/...https://project.math.uzh.ch/issues/180472024-03-03T22:20:55ZCarsten Rosecarsten.rose@math.uzh.ch
<p>FormElement.paramter.uploadType:</p>
<p>a) report invalid value</p>
<p>Wird ein ungueltiger Wert konfiguriert, sollte es eine Fehlermeldung geben - aktuell funktioniert das Upload Element dann nicht - aber es gibt keine Fehlermeldung.</p>
<p>b) change v1/v2 to 1/2</p>
<p>Ich wuerde vorschlagen wir nennen die Typen nicht v1/v2 sondern einfach 1/2. Grund: keep it simpel.</p>
<p>Sicher werden wir auch Beispiele finden an denen 'v..' angibt, aber meiner Wahrnehmung nach ist meistens kein 'v' angegeben:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/9395/clipboard-202403032310-ira1s.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9394/clipboard-202403032309-befkx.png" alt="" /></p>
<p>c) Im CodeMirror fehlen scheinbar ein paar Keywords fileSplit, tableNameSplit, uploadType - koenntest du die mit aufnehmen? Elias sollte eine Doku geschrieben haben wo das zu machen ist.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/9400/clipboard-202403032320-priqn.png" alt="" /></p> 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 #18013 (New): Tablesorter: column view selectorhttps://project.math.uzh.ch/issues/180132024-02-27T15:36:32ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Der tablesorter merkt sich die Suchbegriffe und ausgewaehlten Spalten</li>
<li>Wird in einer Spalte A ein Suchbegriff eingegeben und diese Spalte ausgeblendet, wird anschliessend immer noch das gefilterte Ergebnis angezeigt.</li>
</ul>
<p>Das ist verwirrend!!!</p>
<p><img src="https://project.math.uzh.ch/attachments/download/9352/clipboard-202402271633-qfxra.png" alt="" /></p> QFQ - Feature #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 #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 #17812 (New): Switch User: Neu/Alternativ auch mit FE Group Anpassunghttps://project.math.uzh.ch/issues/178122024-02-03T16:17:40ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #17649 (New): Integrate Etherpad as editorhttps://project.math.uzh.ch/issues/176492024-01-18T16:07:53ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Um mit mehreren Personen an einem Dokument (z.B. qfqWiki) zu arbeiten, koennten wir als Editor Element den <a class="external" href="https://etherpad.org/">https://etherpad.org/</a> verwenden.</li>
<li>Min. via Plugin koennen sogar Bilder eingebunden werden.</li>
<li>Evtl. ist der Etherpad eine Alternative zu TinyMCE.</li>
<li>Wunsch fuer Bilder: per Mausklick kann umgeschaltet werden zwischen Thumbail und regulaere Groesse.
<ul>
<li>Nach dem Einfuegen (und fuer alle anderen) wird nur das Thumbnail angezeigt.</li>
<li>Hintergrund: waehrend eines Meetings wird ein Protokoll erstellt und dabei werden Screenshots gemacht und eingefuegt - die sind aber by Default so gross das der Rest des Textes verschwindet und man die Uebersicht verliert. Thumbnails loesen das Problem.</li>
</ul></li>
</ul>
<ul>
<li>Ggfs. Etherpad nicht nur in einem Form zeigen, sondern direkt in Report.</li>
</ul> QFQ - Feature #17616 (New): Automate QFQ Build Prozesshttps://project.math.uzh.ch/issues/176162024-01-16T11:23:53ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Aktuell ist es extrem muehsam eine neue QFQ Version zu bauen.</li>
<li>Es waere sehr erstrebenswert neuen QFQ Versionen auf Knopfdruck erzeugen zu koennen.</li>
</ul>
<p>Ideen:</p>
<ul>
<li>Mit jedem Merge eines Branches in Develop wird ein Eintrag in die Releasenotes gemacht.
<ul>
<li>Im Merge Request steht die Ticketnummer.</li>
<li>Daraus kann das Subject fuer die `Releasenotes.nextversion` genommen werden.</li>
<li>Das Ticket wird in den Milestone '_nextversion' verschoben und auf 'Ready to sync' gesetzt.</li>
</ul></li>
</ul>
<ul>
<li>Bei einem Merge von Develop nach Master Files (alle in Develop gesammelten Branches auf einmal) wird eine neue Version gebaut
<ul>
<li>Es wird eine Versionsnummer besteimmt. Z.B. 24.1.3 - die '3' ist ein Counter die bei jeder neuen Version hochgezaehlt wird. Wechselt der Monat wird sie auf 0 zurueck gesetzt. Das Jahr wird ebenfalls automatisch angepasst.</li>
<li>In Project wird ein Milestones mit der neuen Versionsnummer angelegt.</li>
<li>`Releasenotes.nextversion` wird sortiert nach Features/Bug/Note und diese werden in die finalen Release-Notes kopiert.</li>
<li>Alle aufgefuehrten Tickets werden geschlossen. Der Milestone wird geschlossen.</li>
</ul></li>
</ul>
<p>Subject ist</p> QFQ - Feature #17523 (New): QFQ-Test-Application - Setup based on CR QFQ Instanzhttps://project.math.uzh.ch/issues/175232023-12-28T15:40:15ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Wird aktuell fuer webwork20 implementiert</li>
<li>Sollte bald auf webwork22 migriert werden (neues PHP, mariabd)</li>
<li>Aus diesem Setup bekommt jeder Developer seine QFQ Instanz</li>
<li>Entwickelt ein Developer etwas neues und sollte das als Beispiel in die 'QFQ-Test-Application' aufgenommen werden, so muss der Developer das machen.</li>
<li>Die Selenium Tests basieren auf dieser QFQ-Test-Application .</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 #17412 (In Progress): Per Form: note, tag, reminder date, done flaghttps://project.math.uzh.ch/issues/174122023-12-05T22:38:13ZCarsten Rosecarsten.rose@math.uzh.ch
<p>In unseren QFQ Applikationen fuer die Benutzer aber auch fuer die Applikationsentwickler waere folgende Funktion nett:</p>
<ul>
<li>Auf einem Formular gibt es einen <strong>Button</strong> via dem man sich Notizen zum aktuellen Record (Antrag, ...) macht (entweder als Popup oder Modal).</li>
<li>Die Option kann an/abgeschaltet werden (auch dynamisch je nach eingeloggtem User)</li>
<li>Die Logik soll fix in QFQ mittels form/qfqr Files hinterlegt sein. </li>
<li>Durch toolspezifische Formulare/Reports kann es an das Tool angepasst werden.</li>
<li>Titel sollte veränderbar sein.</li>
</ul>
<p>Details:</p>
<ul>
<li>Eine Notiz kann private, <group> oder public sein.
<ul>
<li>Welche <group's> es gibt kann konfiguriert werden. Bsp: admin, developer, dekanat, ...</li>
<li>Es stehen nur solche Gruppen zur Verfuegung in der man selbst Member ist.</li>
</ul></li>
</ul>
<ul>
<li>Der <strong>Button</strong> zeigt die Anzahl Notizen an. Symbol: Blatt Papier mit der Anzahl Notizen als kleine Zahl in einer Ecke. Sobald es min. eine Notiz gibt hat das Blatt eine Farbe.</li>
<li>Hover/Tooltip zeigt die letzten 5 Notizen an (Note, Tag, Author, Created, Reminder, Resubmission).</li>
<li>Die Tags sollen dazu verwendet werden die Notizen zu klassifizieren: todo / feedback / hold / not yet / ...
<ul>
<li>Pro Notizen koennen beliebig viele Tags vergeben werden.</li>
<li>Neue Tags koennen on the fly erzeugt werden.</li>
<li>Die Tags werden mit Typeahead erfasst.</li>
</ul></li>
</ul>
<ul>
<li>Auf dem allgemeinen Dashboard werden die eigenen/group/all Notizen als Summe angezeigt - ein Klick darauf fuehrt in die Listenansicht.</li>
<li>In der Listenansicht werden die eigenen/<group>/alle Notizen angezeigt werden.
<ul>
<li>Sortiert nach 'last modified', Filter auf a) 'user'/'group', b) Inhalt, c) Tags</li>
<li>In der Listenansicht kann von der Notiz direkt zum Antrag / Form / ... gesprungen werden.
<ul>
<li>Damit das funktioniert muessen im Hintergrund weitere Informationen bei der Notiz abgelegt werden (Formular, detail Parameter, ...).</li>
</ul></li>
</ul>
<ul>
<li>Es koennen Notizen angelegt werden, die keinem Form/Record zugeordnet sind. Anwendung: persoenliche Todo Liste, Bsp: 'morgen unbedingt nach Urlaub fragen'.</li>
</ul></li>
</ul>
<ul>
<li>Im Dashboard und in der Listenansicht werden Notizen mit abgelaufenem Reminder besonders hervorgehoben.</li>
<li>Ist das reminder date abgelaufen wird eine Mail versendet.</li>
<li>Pro Notiz kann das Flag 'done' gesetzt werden (dann wird kein Reminder versendet).</li>
</ul>
<p>Anmerkungen:</p>
<ul>
<li>Eine Notiz kann als 'Ticket' gesehen werden (erscheint im Dashboard, kann auf 'done' gesetzt werden, kann tags zur Klassifizierung enthalten).</li>
<li>In dem aktuellen Konzept hat die Notiz mehr einen 'History' Character als Ticket.</li>
<li>Zukunft: zu einer Notiz koennten weitere Informationen abgelegt werden (Assignee, Due Date, ...), damit waere dann ein Ticketsystem moeglich. </li>
<li>Im jetzigen Konzept werden die Notizen i.d.R. einem Table/Record zugeordnet. </li>
<li>Bei z.B. Rueckfragen oder Diskussion waere zusaetzlich eine Thread-ID interressant.</li>
<li>Mit dem Thread Konzept waere das eine interessante Moeglichkeit eine 'minimale Chat Logik' mit QFQ auszuliefern. Das koennte direkt in BEF fuer die Rueckfragen verwendet werden.</li>
</ul> QFQ - Feature #16849 (New): Mail: check FROM address for pattern or specific sender addresshttps://project.math.uzh.ch/issues/168492023-09-08T18:09:06ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Von den ZI wird gefordert das nur Emailadressen von Shared-Mailboxen als Absender verwendet werden duerfen.</li>
<li>Damit nicht so schnell Fehler auftreten, soll neue eine Liste von Adressen / Pattern in der QFQ config hinterlegt werden koennen, gegen die getestet werden</li>
</ul> QFQ - Feature #16848 (New): Docker Sendmailhttps://project.math.uzh.ch/issues/168482023-09-08T13:56:32ZEnis Nuredini
<p>Sendmail im Docker funktioniert noch nicht. MTA nicht auf dem Docker installiert.</p>
<p><a class="external" href="https://systemvcs.math.uzh.ch/it/typo3-docker">https://systemvcs.math.uzh.ch/it/typo3-docker</a></p> QFQ - Feature #16305 (In Progress): Inline Editing Text , Merge Requesthttps://project.math.uzh.ch/issues/163052023-05-28T13:37:18ZPascal RösslerQFQ - Feature #16303 (New): Restrict mail sendinghttps://project.math.uzh.ch/issues/163032023-05-27T13:42:07ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Um versehentliches massenhaftes versenden von Mails zu verhindern sollten vor jedem Mailversand Checks durchgefuehrt werden:</p>
<ul>
<li>Checks greifen nur wenn production='yes'</li>
<li>Wenn Check aktiv ist: QFQ Prozess vollstaendig beenden: Damit ist sichergestellt das keine Records als 'done' markiert werden.</li>
<li>Vor dem beenden eine Warnmail versenden an Support: Empfaenger ist konfigurierbar. Pro Minute maximail eine Warnmail.</li>
</ul>
<ul>
<li>Schutz individuelle Emailadresse: Wurden in den letzten 24h mehr als 10 Mails an die gleiche Adresse gesendet?</li>
<li>Schutz gegen Massenmail: Wurden in den letzten 24 Stunden mehr als 500 Mails versendet?</li>
</ul> QFQ - Feature #16297 (New): AutoCron: no SIP https://project.math.uzh.ch/issues/162972023-05-26T08:59:22ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Im AutoCron , wenn z.B. via Report eine Mail versendet wird, funktionieren SIP Parameter nicht (es gibt keine QFQ Session die weitergereicht wird)</li>
<li>Eine Loesung waere das ein AutoCron einen API Key bekommt, mit dem er aufgerufen wird, und dieser User (=API-Key) hat dann entsprechende Berechtigungen. </li>
<li>Der API Key wird in der QFQ Config zentral hinterlegt.</li>
<li>Der API Key ist im OS Crontab eingetragen und wird beim Aufruf mit uebergeben.</li>
</ul> QFQ - Feature #16219 (New): Security: IPs von Hacking Angriffen sperren - Integration voin Fail2Ban https://project.math.uzh.ch/issues/162192023-05-13T12:32:06ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Setup machen damit Fail2Ban automatisiert IPs sperrt.</li>
<li>Setup in qfq.io/doc unter Security dokumentieren.</li>
<li>Gewisse Fehler, z.B. 'Security: attack detected' werden via syslog gemeldent (konfigurierbar in QFQ). Fail2Ban agiert dann entsprechend</li>
<li>In den QFQ/T3 Instanzen eine Seite einrichten die gesperrte IPs anzeigt, damit man schnell testen kann ob eine IP betroffen ist.</li>
<li>Whitelist: IPs die nie gesperrt werden - z.B. UZH.</li>
<li>Greylist: IPs die umgeleitet werden auf eine Seite 'Your IP has been blocked' - z.B. alle Schweizer IPs</li>
<li>Integration eines IP/Geolocations Services.</li>
<li>Neu gesperrte IPs sollen via Mail gemeldet werden.</li>
<li>Bestehende Logfiles analysieren: klassische Versuche auf WP Dateien fuehren automatisch zu einer Sperrung der IP - da koennte z.B. ein cron job oder inotify daemon via fail2ban die IP sperren.</li>
</ul>
<p>Beispiel Angriff:</p>
<pre>
[2022-10-23 03:48:38 / 45.227.253.6 / &lt;no session cookie&gt;] Security: attack detected
Problem: Post/Get Honeypot variable 'email' detected: 1 UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL#
Post/Get Honeypot variable 'username' detected: 1
Post/Get Honeypot variable 'password' detected: 1
[2022-11-23 16:17:30 / 216.131.108.251 / 23r2ldp832obrii5t0oblg3i09] Security: attack detected
Problem: Value of GET variable 'sOIQ' too long. Allowed: 50, Length: 172. Value: '2408 AND 1=1 UNION ALL SELECT 1,NULL,'&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;',table_name FROM information_schema.tables WHERE 2&gt;1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#'
[2022-12-28 02:21:54 / 45.81.39.101 / 2q5m8frmlchk9b0lndt3b00b1h] Security: attack detected
Problem: Value of GET variable 'CDRC' too long. Allowed: 50, Length: 172. Value: '4935 AND 1=1 UNION ALL SELECT 1,NULL,'&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;',table_name FROM information_schema.tables WHERE 2&gt;1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#'
</pre> QFQ - Feature #15969 (New): Auto Update Stored Procedurehttps://project.math.uzh.ch/issues/159692023-04-06T07:58:57ZEnis Nuredini
<p>Wird eine QFQ Instanz als ganzes kopiert und ein SQL Dump von einer DB zur anderen importiert, so fehlen die Stored Procedures. Bisher wurden diese manuell übertragen.</p>
<p>1) Neu braucht es in der QFQ Extension Config unter dem Tab Debug bei database.update eine dritte Option 'autoDb'. Es gibt schon 'auto' und 'always'. 'auto' würde alles triggern beim DB Update inkl. einem Check ob Stored Procedures existieren und diese erstellen falls nicht (sollte bestehender Code existieren). 'autoDb' führt alles aus wie bisher mit Ausnahme der Stored Procedures. Bei 'always' wird sowieso alles ausgeführt und das bei jedem Load wie gewohnt. Permissions werden vorausgesetzt damit Typo3 die Stored Procedures erstellen kann.</p>
<p>2) Was noch ein Thema war: Triggern der Create Stored Procedures falls QFQ Fehlermeldung erscheint dass eine aufzurufende SQL Function nicht gefunden wurde (Idee wurde wieder verworfen.). Danach ein Check ob das Create Stored Procedures erfolgreich ausgeführt wurde.</p> QFQ - Feature #15534 (New): FormEditor > CodeMirror > a) sql1: 'Home/End' jumps to technical line...https://project.math.uzh.ch/issues/155342023-02-12T17:05:01ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Hat man im CodeMirror eine Textzeile die im Editor umgebrochen wird und der Cursor steht auf (1), dann springt Taste 'home' auf (2). Gewuenscht waere (3). Es gibt bestimmt eine Option in CodeMirror die man setzen kann fuer das gewuenschte Verhalten - waere gut wenn das der Default waere.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/7260/clipboard-202302121801-dbk1r.png" alt="" /></p>
<p>Wenn moeglich, bitte Highlight fuer matching brackets '({[<' by default aktivieren.</p> QFQ - Feature #15413 (New): '... AS _monitor': line wrap, search, select text, syntax highlighthttps://project.math.uzh.ch/issues/154132023-01-22T10:02:48ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Via '... AS _monitor' (<a class="external" href="http://docs.qfq.io/en/master/Report.html#monitor">http://docs.qfq.io/en/master/Report.html#monitor</a>) koennen Logfiles in Echtzeit angezeigt werden.<br />Die aktuelle Loesung ist sehr rudimentaer.</p>
<ul>
<li>Es wird einmal pro Sekunde gepollt (neue Vesion wird vom Server geholt).</li>
<li>Dabei geht der aktuell selektierte Text verloren. Ggfs. von 'pull' auf 'push' umstellen (websocket).</li>
<li>Andere Moeglichkeit: Button Refresh / Autorefresch (1s, 10s,..)</li>
<li>Syntax Highlight waere gut (CodeMirror im Readonly mode? Oder etwas anderes)</li>
<li>Line Wrap, so dass man nicht nach rechts scrollen muss. Falls Code Mirror verwendet wird</li>
</ul>
<p>Gitlab hat eine sehr gute/funktionale Implementierung:<br /><img src="https://project.math.uzh.ch/attachments/download/7186/clipboard-202301221102-wqoqc.png" alt="" /></p> QFQ - Feature #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 - Feature #15018 (New): SIP not found error: a) fix, b) more information for debugginghttps://project.math.uzh.ch/issues/150182022-11-11T11:34:41ZCarsten Rosecarsten.rose@math.uzh.ch
<p>a) Beim Download haben wir aktuell schwierig zu debuggende Fehler (kann nicht reproduziert werden). #14651, #15001.<br />b) Diverse Ideen:</p>
<ul>
<li>Die in #14651 genannte ID nicht als QFQ Exception gefunden: das macht auch Sinn, denn dort wird die SIP genannt und nicht die QFQ error Log id. Bitte in der Fehlermeldung auf dem Screen die QFQ Error Log ID nennen (am besten mit human readable Timestamp), die kaputte Sip sollte dann im Log stehen. </li>
<li>Im qfq.log bei der SIP Exception angeben wieviele Eintraege die QFQ Session hat. Hintergrund: sollte ein QFQ Coockie fehlen oder frisch angelegt worden sein und die QFQ Session noch quasi leer sein, wuerde man das dann sehen anhand der wenigen Eintaege.</li>
<li>Wenn eine FE Session existiert (und beim Download via Cookie mit uebergeben wurde): Details dazu anzeigen.</li>
<li>Gibt es eine Moeglichkeit das alle Cookies die auf dem Server sind anzuschauen? Ggfs. via IP Adresse Vergleich (wird die IP Adresse zum Cookie gespeichert?) herausfinden welche Cookies zu einem User gehoeren koennten. In dem Fall koennte man diese Cookies in der Exception (qfq.log) nennen, und den SIP Sip Store testweise mit den anderen passenden Sessions laden.</li>
<li>Was koennte man noch angeben?</li>
</ul> QFQ - Feature #14719 (New): Form > Subrecord: Drag'n'Drop - only activate if column 'columnOrd' e...https://project.math.uzh.ch/issues/147192022-09-13T07:29:47ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Aktuell wird bei jedem Subrecord DnD aktiviert, auch wenn es gar keine Spalte 'ord' gibt.</li>
<li>Neuer Default sollte sein, nur bei vorhandener Spalte den DnD zu aktivieren.</li>
</ul> QFQ - Feature #14494 (In Progress): Bootstrap 5 Migrationhttps://project.math.uzh.ch/issues/144942022-07-10T08:17:45ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>QFQ per Extension Config auf BS3 oder BS5 schalten</li>
<li>Grafischer Formulareditor</li>
<li>Formulare sollen gut aussehen auf einem kleinen Screen und auf einem grossen.
<ul>
<li>D.h. es gibt eine maximale Breite bei einem Form.</li>
</ul></li>
</ul>
<ul>
<li>FormEditor nach Moeglichkeit grafische Unterstuetzung: d.h. Elemente per Drag'n'Drop anordnen.</li>
</ul> QFQ - Feature #14187 (Priorize): qfq.log: show current URLhttps://project.math.uzh.ch/issues/141872022-05-11T09:58:39ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn man im qfq.log sehen koennte über welche URL die QFQ aufgerufen wurde.</p>
<p>Usecase: Auf den SL Touch sehen wir hin und wieder QFQ SIP Errors, sehen aber die URL im Browser nicht (wird nicht angezeigt). Auch fuer spaetere Logfileanalyse ist diese Angabe im Log vermutlich hilfreich.</p> QFQ - Feature #12603 (New): Dropdown (Select), Radio, checkbox: itemListAlways={{!SELECT key, val...https://project.math.uzh.ch/issues/126032021-05-29T12:53:26ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Alle Elemente mit dynamischen key oder key/value Angaben haben das Problem, das wenn ein Wert gespeichert wurde, das Form spaeter wieder aufgerufen wird, der Wert nicht mehr in der neuen Liste enthalten hist - beim speichern der alte Wert verloren geht.</p>
<p>Der Effekt tritt gerne auf bei einer Semesterauswahlliste, die nur die sinnvollen zukuenftigen anzeigt. Eine Vorlesung aus einem alten Semester geoeffnet und gespeichert wird, dann ploetzlich einer andren Periode zugeordnet ist.</p>
<p>Vorschlag:</p>
<pre>
itemListAlways={{!SELECT key, value...}}
</pre>
<p>Das Ergebnis wird gemerged (&unify).</p> QFQ - Feature #12544 (ToDo): a) '... AS _link' new also as '... AS _type', b) sortierung via 'di...https://project.math.uzh.ch/issues/125442021-05-13T10:20:38ZCarsten Rosecarsten.rose@math.uzh.ch
<a name="a-AS-_link-new-also-as-AS-_format"></a>
<h2 >(a) '... AS _link' new also as '... AS _format'<a href="#a-AS-_link-new-also-as-AS-_format" class="wiki-anchor">¶</a></h2>
<ul>
<li>'_f' steht fuer 'format' - damit sollte auch klar sein das Links und andere Funktionen moeglich sind.</li>
<li>Es gibt einige '_link' Funktionen, die keinen Link erzeugen - da passt dann die Bezeichnung nicht.</li>
<li>Auch moeglich Variablen: <code>{{ ... AS _f}}</code></li>
</ul>
<p>Feature wurde von PG,BB angenommen.</p>
<a name="b-Sortierung-via-display-none"></a>
<h2 >(b) Sortierung via 'display: none;'<a href="#b-Sortierung-via-display-none" class="wiki-anchor">¶</a></h2>
<ul>
<li>Mitunter sollen in Tabellen Spalten sortiert werdens. Wenn nur Grafiken in <img> Tags angezeigt werden, funktioniert die Sortierung nicht.</li>
<li>Loesung: neu kann ein 'hidden' Text angegeben werden. Dieser Text wird dann an dan Anfang gestellt: </li>
<li>Token: 'h' - h:hidden-text (sum sortieren)<br /><pre>
<span style="display: none;">some hidden text</span>
<span class='hidden'>some hidden text</span>
</pre></li>
</ul>
<a name="c-_format-benoetigt-nicht-zwingend-uUpmzd"></a>
<h2 >(c) '_format' benoetigt nicht zwingend u/U/p/m/z/d<a href="#c-_format-benoetigt-nicht-zwingend-uUpmzd" class="wiki-anchor">¶</a></h2>
<ul>
<li>Das neue `... AS _format` benoetigt keinen Link (u/U/p/m/z/d)</li>
<li>Damit kann viel Funktionalitaet an anderen Stellen genutzt werden.</li>
</ul> QFQ - Feature #12412 (New): Action/Escape qualifier 'e' (empty), '0': if given, an empty string (...https://project.math.uzh.ch/issues/124122021-04-20T11:55:30ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Damit Verhalten sich leere Strings oder '0' als wenn sie in dem Store nicht gefunden wurden.</p>
<p>Bsp.: `{{fe_users.email:T::e:<a class="email" href="mailto:support@math.uzh.ch">support@math.uzh.ch</a>}}` liefert die Emailadresse des gerade eingeloggten T3 FE Users. Falls keine Emailadrese hinterlegt ist, greift der Default</p> QFQ - Feature #12146 (New): Autocron Job: Anzeigen wann der naechste Job ausgefuehrt wird, resp d...https://project.math.uzh.ch/issues/121462021-03-15T14:23:17ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #12119 (New): AS paged: error message missing if there ist no 'r' argument.https://project.math.uzh.ch/issues/121192021-03-09T15:33:37ZCarsten Rosecarsten.rose@math.uzh.ch
<pre>
good: CONCAT('U:form=notiz_template&r=', n.id) AS _paged
bad: CONCAT('U:form=notiz_template&rXYZ=', n.id) AS _paged
</pre><br />evtl. sollte auch r=0 als fehler gemelder werden 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 #11535 (New): Ability to create SQL columns in frontend QFQ formshttps://project.math.uzh.ch/issues/115352020-11-17T11:11:11ZSimon Grüning
<p>It would be very great for developers working or maintaining QFQ projects in the front-end, if they could create not only form elements but also the respective table columns / data structures going along with them. Unsure where/how to integrate this button/feature/ability.</p> QFQ - Feature #10979 (New): Ajax Calls an API - dataReporthttps://project.math.uzh.ch/issues/109792020-08-07T10:25:35ZPhilipp Gröbelbauer
<p>- QFQ Page Content per AJAX ausführen<br />- Über API, sodass kein Performance Verlust durch Typo3<br />- return Resultat des QFQ Page Contents</p>
<p>(HTML Snippet zum Testen hängt an diesem Ticket)</p> QFQ - Feature #8962 (New): allow for form fields with identical nameshttps://project.math.uzh.ch/issues/89622019-08-29T19:41:37ZNicola Chiapolini
<p>We have a form with three Action-Elements all pointing to the same column. Each of them calculates the value based on a different dynamic-update form-field (restricted via requiredList).<br />This works perfectly, but I need to adjust the name directly in the database...</p>
<p>Could this check be removed? (At least for action elements, but I can imagine this to be useful even with native dynamic-update elements.)</p> QFQ - Feature #8082 (New): Contact form without saving recordhttps://project.math.uzh.ch/issues/80822019-03-18T13:13:09ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Fuer z.B. Kontaktformulare waere es sinnvoll wenn man eine Form konfigurieren koennte das keinen Record speichert.</p>
<p>Z.B. in dem man keine Primary Table spezifiziert.</p>
<p>Das gleiche koennte man in einem Passwort Reset Form benoetigen (#7164).</p> QFQ - Feature #8044 (Priorize): Transaction: a) Form, b) Reporthttps://project.math.uzh.ch/issues/80442019-03-14T15:35:25ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Es waere gut wenn ein Form automatisch/individuell alles in einer Transaction kapseln wuerde.</li>
<li>Es waere gut wenn man in QFQ start/ende einer Transaction definieren koennte.</li>
</ul>
<p>Ticket bleibt nur dann auf 'high' wenn es einfach zu implementieren ist.</p> QFQ - Feature #7342 (New): add content = hide_thishttps://project.math.uzh.ch/issues/73422018-11-23T10:19:19ZNicola Chiapolini
<p>When using a super-/subquery combination as an if-then construct, I want to hide the content of the super-query but show the result of sub-queries. At the moment this is not possible with the <code>content</code>-keyword. It would be nice to have the option to not hide the subqueries.</p>
<p>Personlly I would think it most logical to make this the default for <code>hide</code> and use e.g. <code>hide_all</code> to include subqueries. For backwards compatibility however, the new behaviour should probably get the new keyword. I suggest something like <code>hide_this</code></p> QFQ - Feature #6723 (New): Report QFQ Installation and Versionhttps://project.math.uzh.ch/issues/67232018-09-16T09:25:53ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn man eine Uebersicht haette wo welche Installation mit welche QFQ version laufen.</p>
<p>In der Configuration eintragen:</p>
<pre>
serviceReportQfqVersion = https://qfq.io/index.php?id=service&version={{qfqVersion:Y}}[,<next reporting URL>]
</pre>
<ul>
<li>Die Variable {{qfqVersion}} gibt es vermutlich noch nicht.</li>
<li>Der Aufruf erfolgt via wget (nicht via file_get_content, da dort allow_url_fopen benoetigt wird)
<ul>
<li>bei der Erstinstallation </li>
<li>bei jedem QFQ Update</li>
</ul></li>
</ul>
<ul>
<li>Das sollte einfach zu implementieren sein: QFQ checkt die Versionsnummer bei jedem Start, dort koennte der Hook eingbaut werden.</li>
<li>Es koennen mit Komma getrennt mehrere Service URLs angegeben werden - so koennte MNF z.B. ein eigenes Reporting haben und I-MATH bekommt auch was davon mit.</li>
</ul> QFQ - Feature #6299 (Some day maybe): Attack detection: log table with invalid SIP access https://project.math.uzh.ch/issues/62992018-06-23T16:32:22ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Die Abwehrmassnahmen fuer SIP brute force sollen wie folgt verbessert werden.</p>
<ul>
<li>Es gibt eine Tabelle die alle mis-hit auf SIP oder Persistent SIP notiert:
<ul>
<li>IP</li>
<li>PHP Session</li>
<li>feUser</li>
<li>UserAgent</li>
<li>pageId</li>
<li>Zeitpunkt</li>
</ul></li>
</ul>
<ul>
<li>QFQ prueft bei jedem Start ob ein Full Stop (Attack detected) noetig ist:
<ul>
<li>Hits pro Sekunde, pro Minute, pro 5 Minuten, pro Stunde, pro Tag, pro Monat</li>
<li>Count pro IP, count pro PHP Session, count pro feUser</li>
<li>Fuer jede 'Hit/pro Zeit'-Klasse gibt es einen Schwellwert.</li>
<li>Ist der Schwellwert ueberschritten, wird die IP gesperrt, resp. die PHP Session gesperrt. </li>
<li>Eintraege aelter als einen Monat werden geloescht.</li>
</ul></li>
</ul>
<ul>
<li>Es wird nicht erwartet das viele Daten in der Tabelle stehen.</li>
</ul> QFQ - Feature #5942 (Priorize): 'L' and 'type': append to links, generate via '_link' by using 'u...https://project.math.uzh.ch/issues/59422018-05-07T10:58:06ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Falls ein 'L' oder 'type' als GET auf der aktuellen Seite gesetzt ist, sollten diese Werte in allen 'internen' QFQ Links gesetzt werden.</li>
<li>bei 'U:' passiert das vermutlich auch (verifizieren)</li>
<li>beu 'u:' ist das vermutlich bisher ausgeschaltet.</li>
</ul>
Idee
<ul>
<li>Ist ein 'u' Parameter angegeben: check ob vor dem '?' nichts steht (oder index.php) - dann ist es eine lokale URL und die Parameter sollten ebenfalls angehaengt werden.</li>
</ul>
<p>Siehe auch: Support::appendTypo3ParamToUrl()</p> QFQ - Feature #5548 (Some day maybe): 801 Textfiles/Scriptfiles als Thumbnailhttps://project.math.uzh.ch/issues/55482018-02-26T17:10:35ZBenjamin Baerbenjamin.baer@math.uzh.chQFQ - Feature #5131 (New): Activate Spin Gear ('wait/busy' indicator) via LINK attributehttps://project.math.uzh.ch/issues/51312017-12-16T20:41:30ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Pages die z.B. Mails mit Attachments versenden benoetigen teilweise etliche Sekunden.</p>
<p>Es waere gut wenn man in der Zeit das 'spinning gear' wie beim 'download' Link anzeigen koennte.</p> QFQ - Feature #4869 (New): Dynamic Update (show, hide, readonly?, required?) for Template Group E...https://project.math.uzh.ch/issues/48692017-11-04T10:36:18ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Requested in <a class="issue tracker-1 status-5 priority-3 priority-high3 closed behind-schedule" title="Bug: Dynamic updates Pill - show/hide (Closed)" href="https://project.math.uzh.ch/issues/4865">#4865</a></li>
<li>Die Umsetzung sollte nicht so schwierig sein um eine komplette TG-Group aus/einzublenden.</li>
<li>Ob 'readonly' und 'required' Sinn machen ist nicht klar.</li>
<li>Dynamic Update innerhalb einer TG pro FE ist vermutlich schwierig - wird aber benoetigt (siehe unten)</li>
</ul> QFQ - Feature #4250 (New): AutoCron in QFQ via PHPhttps://project.math.uzh.ch/issues/42502017-08-17T20:23:25ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Die AutoCron Features in PHP implementieren, ohne das eine T3 Seite benoetigt wird.</p>
Verbesserungen:
<ul>
<li>Massiv einfacheres Setup.</li>
<li>Evtl. koennte das PHP Skript durch Typo3 Cron aufgerufen werden - dann entfaellt sogar System Console Eintrag.</li>
<li>Aus dem PHP Skript koennen auch Mails versendet werden (kein dediziertes Skript noetig) - damit koennen einfach grId und xId gesetzt werden.</li>
<li>DB Credentials sind in PHP bekannt (zentrale Konfiguration).</li>
</ul>
Neu:
<ul>
<li>AutoCron Formular wird by default mit ausgeliefert.</li>
<li>In T3 Doku ist ein Beispiel QFQ Report fuer CrontEdit aufgefuehrt.</li>
<li>Es gibt Cron.grIdTyp, die im Beispiel aber nicht benutzt wird um Croneintraege zu klassifizieren.</li>
</ul> QFQ - Feature #3947 (Some day maybe): Attack detectect: logout current userhttps://project.math.uzh.ch/issues/39472017-06-21T14:04:45ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #3942 (Some day maybe): Action Elemente: neu generierte IDs via FE weitergebenhttps://project.math.uzh.ch/issues/39422017-06-21T10:00:36ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Im Formular 'importWebpassUser' (LI) werden beim Import aus dem UZH Webpass LDAP via action/afterSave 3 Records angelegt: person, account, adresse.</li>
<li>Um die neu erzeugten IDs von einem Action Element zum naechsten zu transportieren waere es gut wenn Element 2 auf die ID von Element 1 zugreifen koennte und Element 3 auf die IDs von 2 und 1.</li>
<li>SlaveIds konnten z.B. im Store Extra abgelegt werden, mit dem Feldenamen des FE.</li>
<li>Alternativ sind sie im STORE_FORM, ebenfalls unter dem Feldnamen.</li>
</ul> QFQ - Feature #3848 (Some day maybe): Antivirus check fuer Upload files in qfq?https://project.math.uzh.ch/issues/38482017-06-02T19:36:15ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #3666 (Some day maybe): a) Performance Messung: mysql_real_escape_string() im Vergl...https://project.math.uzh.ch/issues/36662017-05-02T10:56:09ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Check wie gross der Performance Unterschied zwischen mysql_real_escape_string() im Vergleich zu str_replace() ist.</li>
<li>Was passiert wenn mysql_real_escape_string() mehrfach mit dem gleichen String aufgerufen wird? Bleiben bereits escape ticks so wie sie sind (nur einmal escaped)?</li>
</ul>
<ul>
<li>Falls Performance gut ist und doppeltes escapen kein Problem ist, kann mysql_real_escape_string() der neue default werden.</li>
</ul> QFQ - Feature #3291 (Some day maybe): AutoCron websiteTokenhttps://project.math.uzh.ch/issues/32912017-03-07T12:43:07ZElias Villiger
<p>Es könnte einen neuen AutoCron-Typ geben (genannt z.B. websiteToken oder websiteFeedback oder ...)</p>
<p>Dieser erwartet von der aufgerufenen Seite bestimmte Tokens wie</p>
<blockquote>
<p>#DB Connected (erste Zeile)<br />#DB OK (letzte Zeile)</p>
</blockquote>
<p>Wenn diese Tokens nicht vorhanden sind, liefert der AutoCron Job einen Fehler-Status zurück (statt OK).</p> QFQ - Feature #3267 (Some day maybe): 2 Forms auf einer Seite: real + Read onlyhttps://project.math.uzh.ch/issues/32672017-03-03T12:05:46ZElias Villiger
<p>- oben ist eine Form das bearbeitet / gespeichert werden soll.<br />- Unten ist ein Form das nur Informationen enthaelt.</p>
<p>Das untere Form benoetigt eine andere recordId als das obere (oben=Reviewm, unten=Application).<br />Wird im QFQ element r={{appId:S}} verwendet, ercheint trotzdem die record ID von oben.</p>
<p>Die Seite wird via QFQ report aufgerufen - d.h. es ist ein links via _Pagee auf die Seite erzeugt worden.</p>
<p>Vermutlich muss die Prioriater veraendert werden, das im zweiten QFQ Reord auf der Seite wirklich recordID im QFQ Record genommen wird und nciht aus dem SIP store.</p>