Project @ iMath: Issueshttps://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892024-02-05T13:07:58ZProject @ iMath
Redmine 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 - 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 #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 #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 - 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 #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 #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 - Bug #6912 (New): error Message Var 'deadline' already set in SIP - in Form with FE.value={...https://project.math.uzh.ch/issues/69122018-10-06T08:30:43ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>IK Tool, Form 'application'</li>
<li>FE.name=deadline, column=value: {{deadline:R:::{{deadlinePeriod:Y}}}}</li>
<li>Es sollte die deadline gesetzt werden, abhaengig davon ob der Record schon existiert oder nicht.</li>
<li>Es kam eine Meldung: SIP Value 'deadline' already set - keine Erklaerung wie das sein kann.</li>
</ul> QFQ - Feature #6855 (New): With {{feUser:U}}!={{feUser:T}}: Save / Delete: only possible with {{...https://project.math.uzh.ch/issues/68552018-09-27T20:55:38ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Sollte {{feUser:U}}!='' UND {{feUser:U}}!={{feUser:T}} sein:</p>
<p>- Dann darf speichern nur moeglich sein wenn {{feUserSave:U}}='yes' gesetzt ist.<br />- Dann darf loeschen nur moeglich sein wenn {{feUserDelete:U}}='yes' gesetzt ist.</p>
<p>Hintergrund: damit kann einfach sichergestellt werden das man Dozenten, die die Identiaet eines Users uebernehmen, keine Daten veraendern koennen.</p>
<p>Das Form sollte dann einen disabled 'save', 'delete' Button haben, mit einem Hinweis warum das nicht geht.</p> QFQ - Feature #6765 (New): Moeglichkeit via QFQ eigene Logs zu schreibenhttps://project.math.uzh.ch/issues/67652018-09-19T20:08:48ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Es waere gut fuer das IK Tool ein zentrales Logfile zu haben wer wann was angestossen hat.</li>
<li>Das Logfile sollte via Browser einsehbar sein.</li>
<li>Evtl. ist es auch eine LOG Tabelle. ggfs. Wird die MailLog & JSON FormSubmit Log Tabelle aufgeloest.</li>
</ul> 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 - Bug #6677 (New): Error message FE Action Element: no/wrong FE reference who cause the problem.https://project.math.uzh.ch/issues/66772018-09-12T21:15:27ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Falls in einem FE Action Element 'beforeSave' (vermutlich alle Action Elemente) ein Fehler in einer SQL Query auftritt, wird kein oder ein falsches FE Element als Verursacher angegeben.</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 - Feature #6602 (New): Inline-Edit (Formlet): in Report auf Mausklick ein mini-form oeffnenhttps://project.math.uzh.ch/issues/66022018-09-02T21:57:01ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Anforderung: im Report soll der User an einer beliebigen Stelle ein Miniform oeffnen koennen (AJAX), ohne das er die Seite verlaesst. </li>
<li>Beispiel:
<ul>
<li>PhpMyadmin</li>
<li>Tabelle in <a class="external" href="https://editor.datatables.net/examples/inline-editing/simple">https://editor.datatables.net/examples/inline-editing/simple</a></li>
</ul></li>
</ul> QFQ - Feature #6594 (New): Excel: on download, check if there is a valid siphttps://project.math.uzh.ch/issues/65942018-08-31T21:55:24ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Um sich vor unerlaubten Zugriff zu schuetzen, kann bei 'XLS?' output getestet werden (qfq content record, special column name), ob der Aufruf via einer SIP erfolgt ist (downloads sind immer via sip encrypted):</p>
<ul>
<li>Sollte die SIP nicht existieren, bricht QFQ ab.</li>
<li>Zum debuggen wird eine Excel export Seite auch direkt aufgerufen. In dem Fall ist womoeglich keine SIP in der URL. Aber dann gibt es einen BE User > die BE existenz autorisiert den Aufruf.</li>
<li>Optional: Die Erlaubnis zum Zugriff sollte nur fuer die erste _XLS? Spalte getestet werden.</li>
</ul>
<ul>
<li>Option: es gibt es ein Flag auf dem QFQ, der den Check ausschaltet: downloadCheckSipExist=0</li>
</ul> QFQ - Bug #6462 (New): File Upload: Nutzlose Fehlermeldung wenn Datei zu grosshttps://project.math.uzh.ch/issues/64622018-07-27T14:55:58ZNicola Chiapolini
<p>Ich habe eben <a class="issue tracker-1 status-5 priority-2 priority-default closed" title="Bug: File Upload: keine Fehlermeldung wenn Datei zu gross (Closed)" href="https://project.math.uzh.ch/issues/6139">#6139</a> mit 18.6.1 getestet. Ich bekomme nun zwar eine Fehlermeldung, die ist aber nicht sehr informativ:</p>
<pre>
2018.07.27 16:53:23 +0200, Reference: 5b5b31e3f0447
SIP invalid:
</pre> QFQ - Feature #6437 (New): Neuer Mode Button bei FormElementenhttps://project.math.uzh.ch/issues/64372018-07-17T13:47:38ZStefan Willi
<p>Es ist verwirrend, wenn man einer der 4 Mode (show, required, readonly, hidden) anwählt und trotzdem bei 'Mode sql' etwas eingibt, dass die Funktionalität der Buttons nicht mehr wirkt.</p>
<p>Kann man nicht ein 5. Button ('custom' oder sowas in der Art) erstellen und das Mode sql Feld als dynamic update nur dann anzeigen, falls man bei 'Mode' custom anwählt?</p> QFQ - Feature #6292 (New): Download: File speichern mit Hash aber original Filename in der Datenb...https://project.math.uzh.ch/issues/62922018-06-22T11:01:47ZBenjamin Baerbenjamin.baer@math.uzh.ch
<p>Die Idee:</p>
<ul>
<li>Datei wird hochgeladen</li>
<li>QFQ speichert die Datei unter md5 hash in einem Ordner (auch ohne Datei Endungen)</li>
<li>QFQ schreibt im Datensatz der auf das file verlinkt auch den original Filenamen rein</li>
<li>Bei korrektem Download ueber die Download API wird der richtige filename aus der Datenbank zurueck geliefert</li>
</ul>
<p>Probleme mit den leserlichen Filenamen ist das diese meist Informationen ueber den Inhalt liefern (bsp: Arztzeugnis_Max_Muster.pdf).</p>
<p>Dies ist natuerlich nur sinnvoll fuer Dateien die sicher gespeichert werden muessen, nicht zB. den Flyer oder ein Bild das direkt auf die Homepage kommt.</p> QFQ - Feature #6289 (New): Form: Loghttps://project.math.uzh.ch/issues/62892018-06-20T21:54:37ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Ziel: der Developer bekommt ein detailliertes Log angezeigt, mit den Deatils was in einem Form alles passiert.</li>
<li>Das Log wird in eine Datei geschrieben.</li>
<li>Ist eine Person im BE eingeloggt, erscheint auf dem Form ein neuer Button, um das Log zu anzuzeigen. </li>
<li>Die Anzeige aktiviert das Log.</li>
<li>Ein Log bleibt max. 30 Minuten aktiv, danach muss es erneut gestartet werden.</li>
<li>Bei jedem Neustart eines Logs, wird das alte Log ueberschrieben.</li>
<li>Ein Form befindet sich im Debug mode, wenn eine Logdatei existiert und juenger als 30 mins ist.</li>
<li>Pro Form gibt es ein:
<ul>
<li>Log all user: <t3>/tmp/form.<formname>.log</li>
<li>Log current user: <t3>/tmp/form.<formname>.<beuser>.log</li>
<li>mit dem 'all user'-Log kann ein Developer einen non-Developer debuggen.</li>
</ul></li>
</ul>
<ul>
<li>Das Log wird via 'monitor' angezeigt.</li>
<li>Evtl. via dem Record, der auch den FormEditor anzeigt. Page 'form'</li>
<li>Aufruf:
<ul>
<li>form=formname&_formLog=logSession</li>
<li>form=formname&_formLog=logAll</li>
</ul></li>
</ul> QFQ - Feature #6261 (New): Persistent SIPhttps://project.math.uzh.ch/issues/62612018-06-18T13:08:14ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mitunter (z.B. auf Seiten die ohne Login sind) waere es gut wenn 'persistente' SIP's (=SIPP) genutzt werden koennten fuer z.B. Downloads.</p>
<p>Solche SIPPs verfallen nicht (oder zu einem vorgegebenen Zeitpunkt).</p>
<ul>
<li>Variablennamen fuer SIPP: 'S' (grosses S anstelle von kleinem).</li>
<li>Optional kann eine Verfallzeit spezifiziert werden: 'S:<timestamp>'. No limit: 'S' oder 'S:0'</li>
<li>Wird per Report ein Downloadlink fuer so eine Datei gerendert, via " '..|S|..' as _link", wird das in eine 'SipPersistent' Tabelle geschrieben.</li>
<li>Der Parameter 'S' triggert, das der regulaere SIP Store aus der Persistent Table gefuellt wird. Gibt es zusaetzlich ein kleines 's' werden die Stores gemerged. SIP hat Vorrang vor SIPP.</li>
<li>download.php und qfq.php koennen so implizit neu mit den SIPP umgehen.</li>
<li>Option: es kann eine (oder mehrere) FE Group angegeben werden. Die SIPP ist nur dann gueltig wenn die FE Group matcht. Bsp: 'none', 'any','group1', 'group1,group2,...'. Die Gruppe wird via '_feGroup=...' in den URL Parametern uebergeben. Beim fuellen von STORE_SIP kann QFQ die feGroup abfragen und den STORE_SIP ggfs. nicht fuellen.</li>
<li>Ist z.B. ein Download (notiz record) einmal mit so einer SIPP erzeugt worden, bleibt dieser Record via download.php erreichbar.</li>
<li>Es waere gut wenn eine SIPP (z.B. fuer einen Downloadlink), nachdem er verfallen ist und anschliessend neu generiert wird, den <strong>GLEICHEN</strong> Hash erhaelt. Damit koennen Links dann verfallen und regeneriert werden.</li>
<li>Caching create SIPP - wird nicht implementiert, solange es keine Performance Impacts gibt.</li>
<li>Das kopieren einer SIPP von einer QFQ Installation zu einer anderen bringt keinen Erfolg: die SIPP muss in der lokalen SIPP Tabelle existieren.</li>
</ul>
SIPP per User
<ul>
<li>SIPP koennten auch einem User zugeordnet werden. </li>
<li>Die SIPP ist nur gueltig fuer den angegeben User ({{fe_user:UT}}=SipPersistent.feUser)</li>
<li>Anwendung: Links auf dem Dashboard die zu einem spezifischen Antrag gehen (Antrage mit 'heart' zusagen bookmarken).</li>
</ul>
<p>Anwendung:</p>
<ul>
<li>Fuer gewisse Bewerbungen koennen so Links gebaut werden, die man per Mail versenden kann.</li>
<li>Beim Download der Uebungszettel (oeffentlicher Bereich) fuehrt ein Verfall der Session nicht dazu, das die Seite neu geladen werden muss um neue gueltige SIPs zu bekommen.</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 #5782 (New): NextCloud APIhttps://project.math.uzh.ch/issues/57822018-04-05T14:31:41ZCarsten Rosecarsten.rose@math.uzh.ch
Via QFQ koennen
<ul>
<li>Verzeichnisse und Dateien erzeugt werden, in einem Order der via Nextcloud / Owncloud synchronisiert wird.</li>
<li>Koennen Shares verwaltet werden.</li>
<li>Koennen Aenderungen an Files/Verzeichnissen erkannt werden und eine Reaktion in der Db ausloesen.</li>
</ul>
Beispiel:
<ul>
<li>Via QFQ wird ein neues Nextcloud Verzeichnis angelegt.</li>
<li>In QFQ sind Personen hinterlegt. Diese Personen bekommen eine Freigabe (API). Die Personen werden via API informiert.</li>
<li>Ein QFQ Upload Dialog speichert eine Datei direkt in einem Nextcloud Verzeichnis/Share - dadurch erhalten alle User des Shares direkt Zugriff auf die Datei.</li>
<li>Ein User speichert ein File in einem Share - QFQ erkennt die Aenderung und koennte z.B. einen Import starten.</li>
</ul> QFQ - Bug #5576 (New): Using MySQL 'DROP' requires privilege - wich is not really necessary.https://project.math.uzh.ch/issues/55762018-02-28T17:40:58ZNicola Chiapolini
<p>Auf unserer neuen Installation hat das Anlegen der System-Tabellen (wieder) nicht geklappt. Dieses Mal habe ich das Problem identifiziert.</p>
<p>Die Datei <code>qfq/sql/formEditor.sql</code> enthält ein nicht auskommentierten DROP-Befehl. Entweder muss der auskommentiert werden (patch im Anhang) oder dann muss in der Doku DROP als nötiges Recht für den QFQ-DB-User erwähnt werden.</p> QFQ - Bug #5559 (New): FE.type = Upload: 'accept' might contain variableshttps://project.math.uzh.ch/issues/55592018-02-27T09:37:28ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Der Parameter 'fe.parameter.accept = {{some_var:Y}}' wird nicht ersetzt. Es sollte moeglich sein einen beliebigen Store zu verwenden. Z.B. zentrale config.qfq.ini oder via STORE_VAR (fill_store_var) oder STORE_REOCRD (aktueller Record auf dem das Form arbeitet).</p>
<p>Vermutlich wird accept beim Load nicht evaluiert. Der Uplaod findet dann via API statt, die Variable ist dann im SIP store und wird in der API nicht erneut evalueiret (macht dort auch keinen Sinn,da sie sich nicht mehr aendern wird).</p>
<p>Query ist ok: `accept = {{SELECT ...}}`</p> QFQ - Bug #5459 (New): Multi DB: spread system tables between 'QFQ' and 'Data'-DBhttps://project.math.uzh.ch/issues/54592018-02-18T09:37:38ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Aktuell sind alle Systemtabellen immer in der QFQ DB - das ist schlecht fuer 'Dirty', 'MailLog', 'Period', 'Split' -
<ul>
<li>Diese werden nur automatisch in QFQ installiert. </li>
<li>'Split' wird aber in 'DATA' verwendet. Das knallt dann wenn die Tabelle dort nicht manuell installiert wird.</li>
<li>'Dirty' locked akutell nur in der eigenen T3 Instanz.</li>
</ul>
</li>
<li>'Dirty' und 'Maillog' sollten konfigurierbar sein, in welcher DB sie genutzt werden. In dieser DB sollten sie dann auch bei einem Update aktualisiert werden.</li>
<li>Pro Tabelle sollte dann die Versionsnummer abgelegt werden. Vermtulich macht es Sinn das in Zukunft immer fuer alle Tabelle zu machen.</li>
</ul>
<ul>
<li>F & FE optional aus eigener DB:
<ul>
<li>Funktioniert copy/paste (clipboard sollte in QFQ sein)</li>
<li>Funktioniert record locking (dirty sollte in DATA sein)</li>
<li>tables
<ul>
<li>Form QFQ</li>
<li>FormElement QFQ</li>
<li>Dirty Data</li>
<li>Period Data</li>
<li>MailLog Data</li>
<li>Clipboard QFQ</li>
<li>Cron QFQ</li>
</ul></li>
</ul></li>
</ul> QFQ - Bug #5305 (New): Upload FormElement: nicht disabled by readonly Formhttps://project.math.uzh.ch/issues/53052018-01-27T12:39:23ZElias Villiger
Das Problem:
<ul>
<li>By Dynamic Update sollte der Button enabled/disabled werden koennen.</li>
<li>D.h. der Server muss immer das eine SIP mitliefern, kann ja sein das der Button spaeter aktiv wird.</li>
<li>Auch bei 'disabled' button (visuell korrekt als disabled dargstellt) wird ein Klick ausgefuehrt und der Dateiauswahldialog oeffnet sich und der ganze Prozess (Auswahl, Upload, Delete) funktioniert.</li>
</ul> QFQ - Bug #5221 (New): Download Dialog: Bleibt stehen in FF wenn Datei automatisch gespeichert wird.https://project.math.uzh.ch/issues/52212018-01-10T12:45:32ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Oeffnet sich in FF erst der Dialog zum Speichern/ Auswahl der Applikation - verschwindet der Dialog wie gewollt.</p>
<p>Gemeldet von DM im HIFO Tool mit QFQ 0.25.8, FF 57.0.4 (Linux).</p> QFQ - 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 - Bug #4756 (New): Form dirty even nothing changeshttps://project.math.uzh.ch/issues/47562017-10-13T15:09:33ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Bei GRC und anderen Seiten, faellt auf das ein Form als 'dirty' markiert wird (beim verlassen des Forms ohne zu speichern wird nachgefragt ob man speichern moechte) obwohl nichts veraendert wurde. 'Einfache' Formulare sind ok.</li>
</ul>
<p>Evtl. hat es etwas mit Typeahead zu tun.</p>
<ul>
<li>Das gleiche passiert beim IK Tool 'Applciation' wenn man es im 'Read Only' Mode aufruft (im Archiv).</li>
</ul> QFQ - Feature #4365 (New): Multi Language: new way of config https://project.math.uzh.ch/issues/43652017-09-04T12:40:57ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Vorschlag von Benj</p>
<p>a) config.qfq.ini: mehrere Elemente in einer Zeile ablegen (dann ist es nicht noetig LANGUAGA_A, B...) zu schreiben:</p>
<p>FORM_LANGUAGE = {languages : { id: 1, name:english }, { id: 2, name:spain } }</p>
<p>b) Im Form und FormElement Editor:</p>
<ul>
<li>Nur noch eine Spalte 'languageParameter'.</li>
<li>Pro Eintrag die Spalte mit angeben, durch Punkt getrennt. Bsp:</li>
</ul>
<p>english.label = Firstname<br />spain.label = ....</p>
<ul>
<li>Gibt es nur eine zusaetzliche Sprache, ist es ok den Qualifier 'english.' wegzulassen.</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 #4082 (New): Dynamic Update: modeSql - useful defaulthttps://project.math.uzh.ch/issues/40822017-07-08T09:40:12ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Liefert die 'modeSql' keinen Record (z.B. bei r=0) wird das FE immer angezeigt. Gut waere wenn in so einem Fall des statische Setting (show, hidden ,... ) verwendet wird.
<ul>
<li>Verhalten im Manual beschreiben.</li>
</ul>
</li>
<li>Status Quo: FE mit 'hidden' werden nicht im Client gerendert - die koennen anschliessend nicht eingeschaltet werden. Loesungsvorschlag: falls ein modeSql angegeben, das Element trotzdem rendern.</li>
</ul> QFQ - Feature #4050 (New): sql.log: 1) FormElement ID which causes a specific action , 2) Result ...https://project.math.uzh.ch/issues/40502017-07-05T06:36:04ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #4023 (New): prepared statements - FE action: salveId, sqlInsert, sqlUpdate, sqlDel...https://project.math.uzh.ch/issues/40232017-07-02T14:01:33ZCarsten Rosecarsten.rose@math.uzh.ch
<p>For every sql query, add a new element 'Arg'. Eg.:</p>
<pre>
slaveId = {{SELECT id FROM Person WHERE id=?}}
slaveIdArg = {{id}}
sqlInsert = {{INSERT INTO Person (name, firstName) VALUES (?,?)}}
sqlInsertArg = {{name:F:allbut}}, {{firstName:F:allbut}}
</pre>
* The ...Arg definition should not be fired directly. Instead search for all (non wrapped) ',' , split, replace every by it's onw, build array with the values, fire the prepared statement. QFQ - Feature #3727 (New): Security: Session Hijacking erschwerenhttps://project.math.uzh.ch/issues/37272017-05-14T13:43:45ZCarsten Rosecarsten.rose@math.uzh.ch
<ol>
<li>Problem 1: durch '[FE][lockIP] = 0' wird der Schutz gegen Session Hijacking fuer FE-User verringert.</li>
<li>Problem 2: in QFQ ist kein 'Session Hijacking' based on changed IP detection implementiert.</li>
</ol>
Beides koennte leicht implementiert werden:
<ul>
<li>Zu 1)
<ul>
<li>Entweder eine Extension schreiben die gewisse IPs immer zulaesst (z.B. die lokalen IPs) - es gab entsrpechende Extensions.</li>
<li>Oder in QFQ diesen Check implementieren (z.B. in dem sich QFQ beendet, sollte der aktuelle FE User einer FE Gruppe angehoeren)</li>
</ul></li>
</ul>
<ul>
<li>Zu 2) implementieren. Am besten aehnlich konfiguriert wird '[FE][lockIP]'</li>
</ul> QFQ - 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 - Bug #3547 (New): FE of type 'note' causes writing of empty fields.https://project.math.uzh.ch/issues/35472017-04-10T22:14:04ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Beim save eines Records werden alle FormElemente vom Typ "note" auf leer gesetzt. Das hiess in dem Fall, dass der Name, Geschlecht, Titel der Personen gelöscht wurden, sobald versucht wurde, die Form zu speichern.</p> QFQ - Feature #3504 (New): Logging: welche Action FEs werden wann wie ausgefuehrthttps://project.math.uzh.ch/issues/35042017-04-04T08:36:30ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn es Logfile geben wuerde in dem notiert wird welche Action FE ausgefuehrt wird und wie. Aktuell gibt es das Problem das wenn bei templatgroups die maxlength nicht gesetzt ist, die Elemente zwar korrekt angezeigt werden, beim speichern aber kein postprocessing erfolgt. das ist fuer einen entwickler, der keine debugging moeglichkeit hat, kaum nachzuvollziehen.</p>
Idee:
<ul>
<li>Ein Form kann in einen Debug Log Modus versetzt werden, in dem auf dem Form der neue 'debug' button geklickt wird. Nur BE User sehen diesen Button.</li>
<li>Dies oeffnet die Seite 'debug' mit einer 'monitor' Spalte, um das Logfile konstant anzuzeigen.</li>
<li>Alle Requests in der aktuellen Session auf diesem From werden gelogged.</li>
<li>In der php session wird vermerkt, das fuer dieses Form das Logging aktiviert ist.</li>
<li>Wird ein Form ge'debug'ed, und existieren Files fuer diese Form, und sind die 'last modified' timestamps der Datei aelter als 4h, werden die alten Dateien geloescht.</li>
<li>Wird die PHP Session beendet, verfaellt das debug Flag.</li>
<li>Name der Logdatei: fileadmin/protected/log/<formname>+<uniq timestamp>.log. Der Name sollte damit ausreichend eindeutig sein, das sich mehrere user/debug session nicht in den Weg kommen.</li>
</ul> QFQ - Feature #3432 (New): subrecord: dynamicUpdatehttps://project.math.uzh.ch/issues/34322017-03-26T12:59:55ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>subrecords reagieren zur Zeit gar nicht auf 'dynamicUpdates'</li>
<li>Als Update wird immer eine komplette HTML Tabelle kommen.</li>
<li>Neu sollte die Moeglichkeit bestehen, das Subrecords auch ohne primary record gerendert werden koennen.
<ul>
<li>Beispiel (QFQ / formWithFeType): Ein Formular mit einem TypeAheadSql auf FormElement.type um alle Formulare mit dem selektieren Type anzuzeigen (subrecord).</li>
</ul></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> QFQ - Feature #880 (New): Security: PHP, SQL Injection, XSShttps://project.math.uzh.ch/issues/8802015-08-13T14:46:51ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li><a class="external" href="http://www.heise.de/security/artikel/XSS-Bremse-Content-Security-Policy-1888522.html">http://www.heise.de/security/artikel/XSS-Bremse-Content-Security-Policy-1888522.html</a></li>
<li><a class="external" href="http://www.heise.de/thema/XSS">http://www.heise.de/thema/XSS</a></li>
<li><a class="external" href="https://www.acunetix.com/websitesecurity/php-security-1/">https://www.acunetix.com/websitesecurity/php-security-1/</a></li>
<li><a class="external" href="https://docs.php.earth/security/intro/">https://docs.php.earth/security/intro/</a></li>
<li><a class="external" href="https://www.butterfly.com.au/blog/website-development/web-application-security-essentials-for-php-developers-the-art-of-not-getting-hacked">https://www.butterfly.com.au/blog/website-development/web-application-security-essentials-for-php-developers-the-art-of-not-getting-hacked</a></li>
<li><a class="external" href="https://www.cloudways.com/blog/php-security/">https://www.cloudways.com/blog/php-security/</a></li>
</ul>