Project @ iMath: Issueshttps://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892024-03-17T14:56:05ZProject @ iMath
Redmine QFQ - Feature #18162 (New): Form / Select List: save outdated key/value even it no longer exist i...https://project.math.uzh.ch/issues/181622024-03-17T14:56:05ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Szenario:</p>
<ul>
<li>Fuer eine Masterarbeit wird ein Betreuer eingetragen. </li>
<li>Die Liste der potentiellen Betreuer veraendert sich. Z.B. koennte eine Person von frueher heute nicht mehr den Status 'Betreuer' haben.</li>
<li>Wird eine solche MA aufgerufen wird nicht mehr der urspruengliche Betreuer angezeigt und beim erneuten Speichern gibt es ein Problem.</li>
</ul>
<p>Vorschlag:</p>
<ul>
<li><code>FE.parameter.sqlGetItemSaved = {{SELECT p.id, p.name FROM Person AS p WHERE p.id={{pId:R}}</code></li>
<li>Wird die ItemList gebaut, wird überprüft ob die gespeicherte Id (oder Value falls es keine ID gibt) noch existiert.</li>
<li>Ja: all done, no further action</li>
<li>Nein:
<ul>
<li>Evaluate <code>FE.parameter.sqlGetItemSaved</code></li>
<li>Fuege Key/Value an der richtigen Stelle (Sortierung) ein.</li>
<li>Falls moeglich stelle den Eintrag 'kursiv' dar ('muted' waere schlecht, denn das suggeriert das der Eintrag nicht ausgewaehlt werden koennte).</li>
</ul></li>
</ul>
<ul>
<li>Die Situation koennte auftreten bei: SELECT, CHEKBOX, RADIO</li>
</ul> QFQ - Feature #18085 (New): FE Input Email Adressbook: a) Typeahead, b) check valid and markhttps://project.math.uzh.ch/issues/180852024-03-06T09:07:34ZCarsten Rosecarsten.rose@math.uzh.ch
<a name="Request"></a>
<h2 >Request<a href="#Request" class="wiki-anchor">¶</a></h2>
<ul>
<li>Im IK Tool werden beim Antrag Email-Adressen von weiteren verantwortlichen Personen erfasst.</li>
<li>Es kommt regelmaessig vor das die Adressen einen Typo enthalten.</li>
<li>Ziel
<ul>
<li>Bei der Eingabe TypeAhead vom UZH Adressebook anbieten.</li>
<li>Bei 'Focus Lost' Emailadressen pruefen und markieren ok/fail.</li>
</ul></li>
</ul>
<a name="Vorschlag"></a>
<h2 >Vorschlag<a href="#Vorschlag" class="wiki-anchor">¶</a></h2>
<ul>
<li>Wird erkannt dass die Email Adresse eine <code>uzh.ch</code> Adresse ist, kann ein LDAP Lookup gemacht werden um zu ueberpruefen ob die Adresse im UZH AD vorhanden ist.</li>
<li>Ist die Adresse bekannt, wird sie gruen, sonst gelb (Tooltip: Address not found in UZH adress book).</li>
<li>Non uzh.ch Adressen werden so nicht geprueft.</li>
<li>Option 'internal check': es koennen Tabellen, Spalten spezifiziert werden (Tool intern),ob die Adresse bereits benutzt wurde. Falls gefunden wird sie ebenfalls gruen.</li>
<li>Der Check gegen das Adressbuch muss erst gemacht werden bei Focus Lost.</li>
<li>Der Check sollte vom Server gestartet werden: Zugriff auf den AD ist beschraenkt (Firewall, Credentials)</li>
<li>Wir brauchen einen neuen API Call der SIP protected ist.</li>
<li>Beim Laden des Forms ist der Check vermutlich nicht so wichtig, kann erstmal weggelassen werden.</li>
<li>Die Credentials sollten in der zentrallen QFQ config Datei sein (wie UZH webpass)</li>
<li>Die LDAP Abfrage sollte zentral in der QFQ Extension Config konfigurierbar sein, pro FE kann das Setting uberschrieben werden.</li>
<li>Option: mehrere Emailadressen in einem FE-Input Elemente erfassen (space, komma separiert) und individuell pruefen & markieren.</li>
</ul>
<p>EmailAdressbookVerify=<br />EmailAdressbookTypeahead=</p>
<a name="Check"></a>
<h2 >Check<a href="#Check" class="wiki-anchor">¶</a></h2>
<p>Beispiel via Commandline:</p>
<pre>
$ ldapsearch -LLL -x -H "ldap://iduzhz2dc01.d.uzh.ch ldap://iduzhz2dc02.d.uzh.ch" -b "DC=d,DC=uzh,DC=ch" -D "srv-math-sync@d.uzh.ch" -W "proxyAddresses=smtp:carsten.rose@math.uzh.ch" proxyAddresses
Enter LDAP Password:
dn: CN=Rose Carsten (crose),OU=Users,OU=Users UZH,DC=d,DC=uzh,DC=ch
proxyAddresses: smtp:crose@access.uzh.ch
proxyAddresses: X500:/o=ExchangeLabs/ou=Exchange Administrative Group (FYDIBOH
F23SPDLT)/cn=Recipients/cn=d99ada2cb78c406ea039453c26f86dab-Rose Carste
proxyAddresses: smtp:caro@math.uzh.ch
proxyAddresses: smtp:m200143@access.uzh.ch
proxyAddresses: smtp:carsten.rose@uzh.ch
proxyAddresses: smtp:crose@uzh.mail.onmicrosoft.com
proxyAddresses: SMTP:carsten.rose@math.uzh.ch
# refldap://DomainDnsZones.d.uzh.ch/DC=DomainDnsZones,DC=d,DC=uzh,DC=ch
# refldap://ForestDnsZones.d.uzh.ch/DC=ForestDnsZones,DC=d,DC=uzh,DC=ch
# refldap://d.uzh.ch/CN=Configuration,DC=d,DC=uzh,DC=ch
</pre>
<ul>
<li>Bei der Abfrage koennen mehrere LDAP Server angegeben werden.</li>
<li>Liefert die Abfrage min. einen Treffer zurueck, ist die Adresse ok.</li>
<li>Die obige Abfrage geht auf 'proxyAddresses', da dort scheinbar auch die weiteren Adressen angegeben sind.
<ul>
<li>Bei 'proxyAddresses' muss ein 'smtp:' vorangestellt werden fuer einen 100% match</li>
</ul></li>
</ul> QFQ - Feature #18042 (New): Download dynamic ZIP: missing meaningful default save as filenamehttps://project.math.uzh.ch/issues/180422024-03-02T15:41:52ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mit `<abbr title="'d|F:', p.pathFileName, '|s:1|M:zip'">CONCAT</abbr> AS _link` wurde ein ZIP zum Download angeboten und hatte als Dateinamen 'qfq.temp.RcGnwV'</p>
<p>Bug: es sollte mindestens '.zip' am Ende stehen. Am besten 'data.zip' oder 'data_<timestamp>.zip'</p> QFQ - Feature #18040 (New): Checkbox Custom-Listehttps://project.math.uzh.ch/issues/180402024-03-02T12:00:47ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Ziel: Checkbox Listen zum abarbeiten - eigenstaendig erweiterbar</p>
<p>Beispiel aus Redmine:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/9382/clipboard-202403021239-n2k4h.png" alt="" /></p>
<p>Wichtig: die Reihenfolge kann via Drag'n'Drop geaendert werden. Check welchen Code wir schon haben (Subrecord, Benj).</p>
<p><code>FormElement.parameter.itemList</code> ist bereits genau die Checkbox-Liste</p>
<ul>
<li>static</li>
<li>Values werden Komma-separiert im String abgelegt. Bei Komma im Value haben wir vermutlich ein Problem.</li>
</ul>
<a name="Moegliche-Umsetzung"></a>
<h2 >Moegliche Umsetzung<a href="#Moegliche-Umsetzung" class="wiki-anchor">¶</a></h2>
<ul>
<li><code>FormElement.parameter.checkBoxType = static|custom</code>
<ul>
<li><code>static</code> ist das bisherige und der default.</li>
<li><code>custom</code> ist dieses Ticket.</li>
</ul></li>
</ul>
<a name="Itemliste-und-Status-pro-Item"></a>
<h3 >Itemliste und Status pro Item<a href="#Itemliste-und-Status-pro-Item" class="wiki-anchor">¶</a></h3>
<ul>
<li>Soll der User die Moeglichkeit haben selber Items zu erfassen muessen diese irgendwo gespeichert werden.</li>
<li>Der Status eines jeden Items muss gespeichert werden.</li>
<li>Sections waeren nett.</li>
<li>Drag'n'Drop muss nicht in 1.0 sein, ist aber definitiv gefordert.</li>
</ul>
<p>Vorschlag: Labels und Values (inkl. 'sections') in einem JSON struct</p>
<ul>
<li>Das JSON wird genau in der Spalte des FE gespeichert (muss also ein String sein).</li>
<li>Wird das JSON zu gross zum speichern (Bsp varchar 128), gibt es bereits im Client eine Fehlermeldung damit der User nicht viele Items anlegt und dann enttaeuscht ist das sie nicht gespeichert werden koennen.</li>
<li>Ein 'Template' kann also einfach angeboten werden, in dem das JSON in FE.value steht.</li>
<li>Nach Moeglichkeit sollte das JSON so gesepichert werden das wir es mit den MariaDB JSON Funktionen verwenden koennen.</li>
</ul> QFQ - Feature #18037 (New): Auto BPMN Update: QFQ/rclonehttps://project.math.uzh.ch/issues/180372024-03-02T09:37:05ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Ziel: BPMN Workflows verbinden mit Ticketsystem, ist ein Ticket / Milestones abgearbeitet wird das im BPMN visuell markiert.</p>
<p>Moegliches Konzept:</p>
<ul>
<li>BPMN ist im Switchdrive</li>
<li>QFQ bekommt via 'rclone' Nextclod, OwnCloud, Dropbox, OneDrive, GDrive Support und kann so auf Dateien zugreifen.</li>
<li>In QFQ ist die PathFilename-Referenz auf das BPMN hinterlegt</li>
<li>Es gibt eine API (Redmine, QFQ Notez) um den Status von Tickets abzufragen.</li>
<li>QFQ ruft (on request, periodically) ein Skript auf welches:
<ul>
<li>Fuer jedes im BPMN referenzierte Ticket den Status via API abruft.</li>
<li>Den Status visuell im BPMN eintraegt (z.B. Hintergrundfarbe des Elements setzen)</li>
<li>Dadurch dass das File via rclone im Sync gehalten wird, haben sofort alle User das aktuelle File.</li>
</ul></li>
</ul> QFQ - Feature #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 #17618 (New): Doc/Report: change all examples 'remove numbers'https://project.math.uzh.ch/issues/176182024-01-16T13:41:27ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #17411 (New): extraButtonCopyToClipboardhttps://project.math.uzh.ch/issues/174112023-12-05T21:21:40ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mitunter ist es gewuenscht den Inhalt eines Input Elements in das Clipboard zu kopieren.</p>
<p>Fuer Report habe das schon <a class="external" href="https://docs.qfq.io/en/master/Report.html#copy-to-clipboard">https://docs.qfq.io/en/master/Report.html#copy-to-clipboard</a></p>
<p>Vergleichbar mit extraButtonLock,extraButtonPassword, extraButtonInfo.</p>
<p>Es waere gut wenn immer der aktuelle Inhalt des FormElements genommen wird, auch wenn der Record nicht nicht gespeichert wurde.</p>
<p>Der Button waere auch sinnvoll fuer FormElement.type=editor (TinyMCE / CodeMirror)</p>
<p>Erste Anwendung: u.a. in den Settings gibt es oft 'reference' Spalten - deren Inhalt kopiert man haeufiger in die Zwischenablage ...</p> QFQ - Feature #17359 (New): Form: new record - skip historyhttps://project.math.uzh.ch/issues/173592023-11-26T10:06:56ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Werden mehrere Records nacheinander neu angelegt (='New'), moechte man in der Regel, sobald der der letzte Record angelegt wurde, mit 'Close' zum Parent Record zurueck.</p>
<p>Aktuell ist es so implmementiert, das man zum zuvor neu angelegten Record zuruck springt.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/8786/clipboard-202311261104-eua7z.png" alt="" /></p> QFQ - Feature #16988 (In Progress): Bild zuschneiden / Image Manipulationhttps://project.math.uzh.ch/issues/169882023-10-03T11:22:44ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Wir brauchen an unterschiedlichen Stellen die Moeglichkeit das ein Bild direkt im QFQ zugeschnitten werden kann.</p>
<p>Use Case:</p>
<ul>
<li>Carousel News (I-MATH/MY, JES)</li>
<li>MY Photowand</li>
<li>MY Student Exercise Upload </li>
<li>(Exam Upload)</li>
<li>MNF Heidi</li>
<li>...</li>
</ul>
<p>Details:</p>
<ul>
<li>Direkt im Upload Dialog</li>
<li>Explizit fuer bereits vorhandenes Bild</li>
<li>Option: Maske (fixem Aspekt Ratio) kann eingeblendet und verschoben / gezoomt werden.</li>
<li>Option: das Originalbild bleibt erhalten (Gleicher Pfad, Dateiname plus Extension 'original')</li>
<li>Option: Button restore Orginal.</li>
<li><a class="external" href="https://docs.qfq.io/en/master/Form.html#type-imagecut">https://docs.qfq.io/en/master/Form.html#type-imagecut</a></li>
</ul>
<p>10 Best Image Croppers In jQuery And Vanilla JavaScript (2024 Update) - <a class="external" href="https://www.jqueryscript.net/blog/best-image-croppers.html">https://www.jqueryscript.net/blog/best-image-croppers.html</a></p>
<ul>
<li><a class="external" href="https://fengyuanchen.github.io/cropperjs/">https://fengyuanchen.github.io/cropperjs/</a>, MIT, 12.5k Stars, 2023</li>
<li><a class="external" href="https://jamesooi.design/Croppr.js/">https://jamesooi.design/Croppr.js/</a>, MIT, 386 Stars, 2018, Aspect Ratio</li>
</ul> QFQ - Feature #14504 (New): Form / Input Element: restore previous contenthttps://project.math.uzh.ch/issues/145042022-07-12T09:23:40ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn fuer Textfelder die Moeglichkeit bestehen wuerde alten (nicht gespeicherten) Content wieder herzustellen.</p>
<p>Szenario: User nutzt nur einen Tab, hat in einem Formularelement etwas eingegeben und moechte nun die Seite verlassen, kann aber noch nicht speichern weil noch nicht alles eingegeben ist. QFQ warnt den User, das Informationen verloren gehen, der User muss das als das kleinere Uebel akzeptieren und verliert dann seinen Content</p>
<p>Loesung 1: server based</p>
<ul>
<li>Der Infodialog, der den User warnt, bekommt eine dritte Option 'Restore content later'.</li>
<li>Alle Dirty FormElemente (STORE_BEFORE?) werden serverseitig gespeichert: feUser, SIP (Form, Record, extra Argumente). </li>
<li>Wird das Form mit der SIP und dem User wieder geoeffnet, erkennt QFQ das es temp Values gibt, laedt den Record wie gewoehnlich, und bietet dann an das die alte Werte wieder restauriert werden.</li>
</ul>
<p>Loesung 2: Browser Local Store</p>
<ul>
<li>Jedes Formulare wird bei jedem(!) change im Local Store gespeichert.</li>
<li>Wird ein Form mit 'save', 'close', 'browser tab close' geschlossen, wird der Eintrag im Local Store geloescht.</li>
<li>Wird ein Form geoeffnet und gibt es dazu einen Eintrag im Local Store, wird angeboten diesen zu laden.</li>
<li>Damit wuerden auch Browser-Crashes wieder hergestellt.</li>
</ul> QFQ - Feature #12156 (New): Form: Optional disable 'leave page'https://project.math.uzh.ch/issues/121562021-03-16T13:31:32ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mitunter ist es wuenschenswert ein From zu verlassen (z.B. weil man einen Link klickt) und dann soll keine Abfrage "Unsaved changes... "kommen falls das Form Dirty ist.</p>
<p>Parameter:</p>
<p>messageFormDirty = 0|1|<text></p>
<p>Default:1</p>
<p>Mit der Option <text> wird es neu moeglich die Message sprachabhaengig zu setzen.</p> QFQ - Feature #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 #11513 (Closed): add special column AS _scripthttps://project.math.uzh.ch/issues/115132020-11-12T22:13:51ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #11512 (Closed): add access to Var storehttps://project.math.uzh.ch/issues/115122020-11-12T22:05:06ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #9858 (Closed): Form.parameter: replace 'mode' by 'formModeGlobal'https://project.math.uzh.ch/issues/98582020-01-09T13:30:53ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Im STORE_SIP und STORE_USER heisst der Parameter 'formModeGlobal'.<br />Auf Formularebene heisst er 'mode'.</p>
<p>Das verwirrt.</p> QFQ - Feature #9853 (New): Check das SQL / QFQ / Mail Logfile geschrieben wirdhttps://project.math.uzh.ch/issues/98532020-01-09T10:15:45ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #7278 (Some day maybe): Form: Wert vordefinieren der immer gesetzt wirdhttps://project.math.uzh.ch/issues/72782018-11-16T11:55:41ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Tabelle mit Vor/Nachteilen</li>
</ul>
<p>Varianten</p>
<ul>
<li>via SIP uebergeben, in Report: sql = SELECT '{{pageAlias}}&form=person&r={{pId}}&column=123|s=1' AS _pagee</li>
<li>fe.type=extra. fe.value=123</li>
<li>fe.type=afterSave, `fe.paramter.sqlAfter = UPDATE 'table' SET 'column'=123 WEHRE id={{id:R}}`</li>
<li>fe.type=text, fe.mode='hidden'</li>
</ul>
<p>Vorschlag:</p>
<ul>
<li>form.parameter.setColumn = <column1>:<value1>,<column2>:<value2>,...</li>
<li>Beim speichern wird geprueft ob es die gleiche Spalte in 'setColumn' und als FE gibt - dann einen Fehler melden.</li>
<li><value..> koennen auch Variablen sein.</li>
<li>Die columns werden genau so gehandhabt, als waeren sie FE mit einem fixen Wert.</li>
<li>Check das datetime und timestamp korrekt gehandelt werden.</li>
</ul> QFQ - Feature #7106 (Some day maybe): Beispiel Nummerierung von Rows in Reporthttps://project.math.uzh.ch/issues/71062018-10-27T09:21:06ZCarsten Rosecarsten.rose@math.uzh.ch
<p>In Report Nummerierung von Zeilen:</p>
<ul>
<li>via SQL Variable<br />∘ via Report: line.count</li>
</ul> QFQ - Feature #7105 (Some day maybe): Beispiel wie man in einer zweiten Tabelle speichert.https://project.math.uzh.ch/issues/71052018-10-27T09:18:24ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #7100 (Some day maybe): Download: log access, max downloads, time limithttps://project.math.uzh.ch/issues/71002018-10-27T08:45:40ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Logging wer/wann von wo zugegriffen hat</li>
<li>max anzahl an downloads begrenzen</li>
<li>zeitlich begrenzen.</li>
<li>anonymer download</li>
<li>kann theoretisch via qfq/report geloest werden</li>
<li>vermutlich praktischer wenn eine logtabelle angegben werden kann</li>
<li>in SIP logtabelle angeben</li>
</ul> QFQ - Feature #6992 (Some day maybe): DB exception: Syntax Highlight https://project.math.uzh.ch/issues/69922018-10-13T09:12:32ZCarsten Rosecarsten.rose@math.uzh.ch
<p>siehe punkt 2 <a class="issue tracker-2 status-5 priority-2 priority-default closed" title="Feature: DB Exception: highlight problematic text position, SQL syntax highlight (Closed)" href="https://project.math.uzh.ch/issues/5450">#5450</a></p> QFQ - Feature #6515 (Some day maybe): Formular: Felder dynamisch ein/ausblendenhttps://project.math.uzh.ch/issues/65152018-08-15T09:23:42ZCarsten Rosecarsten.rose@math.uzh.ch
1) New Record
<ul>
<li>Feld 1 ist leer</li>
<li>Feld 2 ist ausgblendet</li>
</ul>
2) Edit Record
<ul>
<li>Feld 1 = A</li>
<li>Feld 2: Dropdownliste mit Werten die zu 'A' passen</li>
</ul>
3) Edit Record
<ul>
<li>Feld 1 = B</li>
<li>Feld 2: Dropdownliste mit Werten die zu 'B' passen</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 #6288 (Some day maybe): Best Practice: Erklaeren wie man ein Formular ganz in 'weis...https://project.math.uzh.ch/issues/62882018-06-20T16:35:27ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mit den Klassen classPill, classBody, classTitle kann man ein Formular ganz in weiss machen</p>
<p>Lehrkredit/Form: requestApprove</p>
<p>classBody=qfq-color-white</p> QFQ - Feature #6083 (Some day maybe): Dynamic Update: Value Check via SQLhttps://project.math.uzh.ch/issues/60832018-05-26T16:39:52ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Um z.B. die Eingabe eines Start/Ende Datums via 'dynamic update' kontrollieren zu koennen, waere es gut wenn man eine SQL query dafuer definieren koennte.</p>
<p>Bsp: projektStart und projektEnde duerfen nur maximal 24 Monate umfassen.</p>
Implementierungsidee:
<ul>
<li>Es gibt einen neuen FormElementTyp 'dynamicUpdateCheck' mit type='action'.</li>
<li>Im zu ueberpruefenden FE gibt es im Parameterfeld<br /><pre>
dynamicUpdateCheckFeId = 123 # FormElement.id eines FE mit type='dynamicUpdateCheck'
</pre></li>
<li>Die Notation ist identisch zu 'beforeSave'.</li>
</ul> QFQ - Feature #5923 (Some day maybe): fillStoreSystemBySqlLatehttps://project.math.uzh.ch/issues/59232018-05-06T18:51:19ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Neben fillStoreSystemBySql1-3 soll es neu auch fillStoreSystemBySqlLate1-3 geben (inkl. Fehlermeldung).</p>
<p>Diese werden ausgewertet nachdem alle Stores gefuellt wurden. Damit koennen dort auch feUser und STORE_CLIENT Values verwendet werden.</p> QFQ - Feature #5893 (Some day maybe): Edit on double-clickhttps://project.math.uzh.ch/issues/58932018-05-01T14:20:31ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Oft gibt es Reports, bei denen pro Row nur wenige Zellen manipuliert werden soll. Dort waere es gut (wie bei phpMyAdmin) das ein Doppelklick einen edit mode fuer die aktuelle Zelle oeffnet.</p>
<p>Bei diesen mini-edit gibt es kein Submit. Stattdessen ist ein 'lost focus' der Submit.</p>
<p>Vermutlich waere es gut, wenn via Ajax der ganze report nachgeladen werden koennte.</p>
<p>Anwendung: pro Record die Reihenfolge oder einen Status setzen.</p> QFQ - Feature #5891 (Rejected): After logout: destroy sip storehttps://project.math.uzh.ch/issues/58912018-05-01T12:59:44ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #5850 (Some day maybe): Deployment: In QFQ Doc best practice fuer zeitgemaesses Dep...https://project.math.uzh.ch/issues/58502018-04-21T11:37:16ZCarsten Rosecarsten.rose@math.uzh.ch
<p><a class="external" href="https://docs.typo3.org/typo3cms/TellMeSomethingAbout/Topics/Deployment.html">https://docs.typo3.org/typo3cms/TellMeSomethingAbout/Topics/Deployment.html</a><br /><a class="external" href="https://docs.typo3.org/typo3cms/TellMeSomethingAbout/Topics/Docker.html">https://docs.typo3.org/typo3cms/TellMeSomethingAbout/Topics/Docker.html</a><br /><a class="external" href="https://blog.chriwo.de/tagged/PhpStorm">https://blog.chriwo.de/tagged/PhpStorm</a> (PhpStorm / composer)<br /><a class="external" href="https://github.com/martin-helmich/docker-typo3">https://github.com/martin-helmich/docker-typo3</a></p> QFQ - Feature #5783 (Some day maybe): BPMN View/Edithttps://project.math.uzh.ch/issues/57832018-04-05T14:50:40ZCarsten Rosecarsten.rose@math.uzh.ch
<p>QFQ soll BPMN Workflows anzeigen und editieren koennen:</p>
<ul>
<li>BPMN Edit:
<ul>
<li><a class="external" href="https://github.com/bpmn-io/bpmn-js">https://github.com/bpmn-io/bpmn-js</a></li>
<li><a class="external" href="https://github.com/bpmn-io/bpmn-moddle">https://github.com/bpmn-io/bpmn-moddle</a> </li>
<li><a class="external" href="https://github.com/bpmn-io/diagram-js">https://github.com/bpmn-io/diagram-js</a></li>
</ul></li>
</ul>
<ul>
<li>Beispiel fuer BPMN Anzeige via JQuery: <a class="external" href="https://www.pleus.net/blog/?p=2142">https://www.pleus.net/blog/?p=2142</a></li>
</ul> QFQ - Feature #5571 (Closed): File Upload: save filesize and mimetypehttps://project.math.uzh.ch/issues/55712018-02-28T11:26:43ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Beim Upload in STORE_VAR die Dateigroesse und den Mimetype setzen.</p> QFQ - Feature #4719 (Some day maybe): Custom Message in Client in case of 'Browser tab close, mod...https://project.math.uzh.ch/issues/47192017-10-05T18:53:50ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #4702 (Closed): FE.type=subrecord - new column attributes: maxLength (ex 'width')...https://project.math.uzh.ch/issues/47022017-10-04T19:02:11ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es sollen die folgenden neuen Column Atrribute fuer Spalten von FE.type=subrecord implementiert werden:</p>
<ul>
<li>maxLength: Die alte Bezeichnung 'width' wird durch maxLength ersetzt.</li>
<li>width: Spalte in Pixel (keine extension) oder Prozent (extension '%')</li>
</ul> QFQ - Feature #4627 (Some day maybe): dbupdate: all tables - check 'create', 'modified' if it is ...https://project.math.uzh.ch/issues/46272017-09-24T07:52:22ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #4536 (Some day maybe): FE upload: problem with delete if mutliple uploads an FE.na...https://project.math.uzh.ch/issues/45362017-09-15T13:20:33ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Bei GRC in Form='requestPM' gibt es 3 Uploadfelder (advanced: Tabelle 'Note')</li>
<li>Ist nur ein Upload Feld 'enabled' funktioniert Laden/Speichern/Loeschen gut.</li>
<li>Ist ein weiteres FE Upload Feld 'enabled', funktioniert das Loeschen eines Uploads nicht mehr: 'Trash > Speichern > Reload' zeigt den Record wieder an.</li>
<li>Werden den Upload Felder Namen gegeben, fe.name='my....' funktioniert das loeschen sauber.</li>
</ul> QFQ - Feature #4444 (Some day maybe): FE.type=upload: detect mime typehttps://project.math.uzh.ch/issues/44442017-09-09T15:04:53ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Falls kein 'file' installiert ist: Fallback auf filename extension</p>
config.qfq.ini:
<ul>
<li>mimetype=file (default)</li>
<li>mimetype= (detection off)</li>
</ul>
<ul>
<li>persoenliche notiz
<ul>
<li>-b (brief)</li>
<li>--extension</li>
<li>--mime</li>
<li>--keep-going</li>
</ul></li>
</ul> QFQ - Feature #4443 (Some day maybe): Form: multiple secondary tableshttps://project.math.uzh.ch/issues/44432017-09-09T14:44:08ZCarsten Rosecarsten.rose@math.uzh.ch
Um einfacher auf mehrere Tabellen schreiben zu koennen, und das womoeglich via 'prepared statement':
<ul>
<li>Im Form koennen zusaetzliche Tabellen definiert werden.
<ul>
<li>Z.B. mit FE.type=table, Auf dem Element wird 'slaveId,sqlInsert,sqlDelete,sqlUpdate' definiert. </li>
<li>Pro Form Element kann dann die Tabelle und der aktuelle Spaltenname ausgewaehlt werden.</li>
</ul></li>
</ul> 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 #4434 (Closed): Disable 'special column names' starting without '_'https://project.math.uzh.ch/issues/44342017-09-09T13:36:52ZCarsten Rosecarsten.rose@math.uzh.ch
<p>REPORT_MODE_SPECIAL_COLUMN_NAME_TOKEN=onlyUnderscore</p>
<ul>
<li>In new setups this is the default.</li>
<li>To no break old installations: if the directive is missing, with or without underscore is ok.</li>
<li>SW hatte das Problem das eine Spalte 'zip' hiess, und das wurde als Special Column Name erkannt.</li>
</ul> 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 #4046 (Rejected): Form: enable/hide/lock/unlock delete Button - sqlStateDeleteButtonhttps://project.math.uzh.ch/issues/40462017-07-04T11:14:00ZCarsten Rosecarsten.rose@math.uzh.ch
<p>On the Form a parameter: <br /><pre>
sqlStateDeleteButton={{SELECT IF(.., 'enabled', 'disabled')}}
</pre><br />might protect records, which should not be deleted.</p>
<p>Query should 'dynamic Update' aware.</p> QFQ - Feature #3880 (Some day maybe): Form 'Form': anlegen einer Tabellehttps://project.math.uzh.ch/issues/38802017-06-08T20:32:09ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Das Feld zu Auswahl der Primary Tabelle soll neu ein Typeahead-Feld sein.</li>
<li>Wird ein Tabellenamen eingegeben der noch nicht existiert, ercheint rechts in der Notiz ein Link um die Tabelle anzulegen.</li>
<li>Existiert die Tabelle, kann ein Popup mit der Spaltendefinition geoeffnet werden.</li>
</ul> QFQ - Feature #3879 (Some day maybe): Form 'FormElement': Beim Feld 'name' rechts in der Notiz ei...https://project.math.uzh.ch/issues/38792017-06-08T20:30:15ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>User gibt einen Spaltennamen ein.</li>
</ul>
<ul>
<li>Falls der Spaltennamen existiert:
<ul>
<li>Anzeige der aktuellen Defintion in der Tabelle</li>
</ul></li>
</ul>
<ul>
<li>Falls der Spaltennamen noch nicht existiert:
<ul>
<li>wird im Notizbereich ein Link eingblendet der auf ein 'Column Create' Form zeigt.</li>
<li>In Form 'Column Create' kann man Typ, Laenge, ... einstellen und die Spalte anlegen.</li>
</ul></li>
</ul> QFQ - Feature #3878 (Some day maybe): Form 'FormElement': Spalte 'name' typeAhead mit Spaltenname...https://project.math.uzh.ch/issues/38782017-06-08T20:19:35ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #3567 (Some day maybe): 'Save', 'Close', 'New' als FormElementhttps://project.math.uzh.ch/issues/35672017-04-13T10:47:15ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #2950 (Some day maybe): Inhalt QFQ Records als Filehttps://project.math.uzh.ch/issues/29502016-12-08T13:07:47ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Michele haette gern das QFQ Records den Inhalt von Files lesen.</li>
<li>Bsp: Im QFQ Record steht<br /><pre>
file={{pageId:T}}/{{ttcontentUid:T}}.qfq
file={{pageAlias:T}}/{{ttcontentUid:T}}.qfq
file={{pageAlias:T}}/someFileName.qfq
file={{pageAlias:T}}_someFileName.qfq
file=someDir/someFileName.qfq
</pre></li>
<li>In der zentralen config.qfq.ini koennte ein Defaultpath angegeben werden.</li>
<li>Sobald der Parameter 'file' angegeben ist, werden x.y.z... ignoriert.</li>
</ul> QFQ - Feature #1510 (Some day maybe): jquery von google laden, falls das nicht geht lokalhttps://project.math.uzh.ch/issues/15102015-12-21T12:18:28ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Siehe source von: <a class="external" href="http://getbootstrap.com/examples/starter-template/">http://getbootstrap.com/examples/starter-template/</a></p> QFQ - Feature #899 (Rejected): Formulareditor : Vergleich mit Acrobat Wie man Formularfelder erfa...https://project.math.uzh.ch/issues/8992015-08-13T15:21:32ZCarsten Rosecarsten.rose@math.uzh.ch