Project @ iMath: Issueshttps://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892024-03-28T11:41:14ZProject @ iMath
Redmine QFQ - Feature #18236 (New): MultiForm re order via drag&drophttps://project.math.uzh.ch/issues/182362024-03-28T11:41:14ZZhoujie Li
<p>MultiForm wie subrecord per drag&drop neu anordnern</p> QFQ - Feature #18235 (Priorize): MultiForm add rowshttps://project.math.uzh.ch/issues/182352024-03-28T10:18:34ZZhoujie Li
<p>Es sollte möglich sein in einem Multiform neue Rows hinzuzufügen als button, die Record = 0 sind.(ähnlich wie subrecord einfach das button unterhalb) Die Motivation dahinter ist die Implementierung eines 'Form Wizard', der es ermöglichen schnell neue Formulare zu erstellen. Aber könnte auch für andere use case nützlich sein.</p> QFQ - Feature #18164 (Feedback): Merge datahttps://project.math.uzh.ch/issues/181642024-03-18T07:56:45ZEnis Nuredini
<p>Neues Feature um vereinfacht Duplizierte Daten zu mergen. Soll relativ generisch und Einsatzbereit für verschieden Projekte sein.</p>
<p>Eine automatische Erstellung von Merge Rules in einer eigenen Tabelle ist vorgesehen. Das manuelle Erfassen von Rules sollte ebenfalls möglich sein.<br />Beim mergen sollten drei Optionen zur Verfügung stehen: Datensatz belassen, Datensatz mergen, Datensatz löschen</p>
<p>Auch sollte die Primary ID auswählbar sein.</p>
<p>Ein Switch zwischen Rules und compared Data würde die Benutzerfreundlichkeit erhöhen.</p> 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 #18161 (New): QFQ Variable: New escape/action class 'strip_tags'https://project.math.uzh.ch/issues/181612024-03-17T11:21:55ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mitunter werden Variablen ausgegeben und koennen potentiell HTML Tags enthalten die an der Stelle unerwuenscht sind.</p>
<p>Vorschlag 'r' fuer 'remove tags' (c=clean & s=striptags, p=purge sidn schon benutzt) - <a class="external" href="https://docs.qfq.io/en/master/Variable.html#variable-escape">https://docs.qfq.io/en/master/Variable.html#variable-escape</a></p>
<pre>
{{label:R::r}}
</pre>
<p>Koennte verwendet werden in <a class="issue tracker-2 status-1 priority-2 priority-default" title="Feature: Title of 'FormElement'-form: shortened, link to form (New)" href="https://project.math.uzh.ch/issues/18160">#18160</a> damit keine HTML Tags im Titel ausgegeben werden.</p> QFQ - Feature #18160 (New): Title of 'FormElement'-form: shortened, link to formhttps://project.math.uzh.ch/issues/181602024-03-17T11:04:14ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>a) Mir passiert es haeufig das ich ein FormElement bearbeite und dann gerne das ganze Form bearbeiten moechte.</li>
<li>b) Der Titel des FormElement-Forms enthaelt Elemente die wenig Informationsinhalt haben</li>
</ul>
<a name="Aktuell"></a>
<h2 >Aktuell:<a href="#Aktuell" class="wiki-anchor">¶</a></h2>
<p><img src="https://project.math.uzh.ch/attachments/download/9516/clipboard-202403171125-ffl17.png" alt="" /></p>
<a name="Vorschlag"></a>
<h2 >Vorschlag:<a href="#Vorschlag" class="wiki-anchor">¶</a></h2>
<p><img src="https://project.math.uzh.ch/attachments/download/9517/clipboard-202403171202-1quit.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9518/clipboard-202403171203-bzxni.png" alt="" /></p>
<a name="Neue-Definition"></a>
<h2 >Neue Definition<a href="#Neue-Definition" class="wiki-anchor">¶</a></h2>
<pre>
{{ "{{SELECT 'p:form?form=form&r=', f.id, '|E|b:btn-small btn-default|s|o:Form: ', f.id, ' / ', f.name, CHAR(10), 'DB: {{dbNameQfq:Y}}' FROM Form AS f WHERE f.id = {{formId:SR0}} }}" AS _link}} <span style="font-weight: 100;">FE:</span> {{name:R:::New}} / {{label:RE}}
</pre> QFQ - Feature #18141 (New): In Config/Dynamic neue fill store 'SYSTEM' by SQL ROW mit variablen ...https://project.math.uzh.ch/issues/181412024-03-14T07:18:20ZZhoujie Li
<p>Es wurde herausgestellt, dass man eine neue Config/Dynamic input möchte, indem man den fillstore 'SYSTEM'-Speicher durch SQL-ROW die variablen ersetzt, um beispielsweise pIdUser aus dem system store zu holen anstatt {{feUser}}.</p>
<p>Beispiel<br />SELECT p.id AS pIdUser FROM Person AS p WHERE p.account = '{{feUser:T}}'</p>
<p>pIdUser ist dann im Systemstore gespeichert.</p> 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 #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 #18022 (Feedback): Filepond colors / element size / font size (new UZH CD) / borderhttps://project.math.uzh.ch/issues/180222024-02-29T07:59:26ZEnis Nuredini
<ul>
<li>Einheitliche Farbe Filepond Elements - Defaultfarbe die auch die anderen Input Elemente haben (am besten die Browser Vorgabe)</li>
<li>Höhe des Elements: wie reguläre Inputfelder.</li>
<li>Drag&Drop Feld Farbe anpassbar(?) - Defaultfarbe die auch die anderen Input Elemente haben</li>
<li>Font Size: Check UZH CD 2012 & 2023 (bei 2023 stimmt es nicht, siehe Screenshot)</li>
<li>Border wie bei Inputelementen.</li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/9368/clipboard-202403010917-nkqii.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9369/clipboard-202403010919-yunhd.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9370/clipboard-202403010919-6ldbb.png" alt="" /></p> QFQ - Feature #17647 (New): Chat Ratchet Websocket Server: a) start on boot, b) multiple racthet ...https://project.math.uzh.ch/issues/176472024-01-18T12:28:35ZCarsten Rosecarsten.rose@math.uzh.ch
<p>a) start on boot</p>
<ul>
<li>Ratched soll beim Boot automatisch starten. </li>
<li>Es gibt kein Stop mehr</li>
</ul>
<p>b) multiple racthet instances,</p>
<ul>
<li>Pro Host koennen mehere Ratchets gestartet/beendet werden.</li>
<li>Ratchet Config Datei entsprehcend anpassen.</li>
<li>Optionale Check ob nginx/apache entsprechende Proxy Anweisungen enthalten</li>
</ul>
<p>c) update QFQ not to start/stop</p>
<ul>
<li>Aus dem Controller das 'start' und aus QFQ das 'stop' entfernen.</li>
</ul>
<p>d) Update installation doc</p>
<ul>
<li>NGINX/Apache Config Beispiel</li>
<li>Start Script fuer Ratched in QFQ mit verteilen.</li>
</ul> QFQ - Feature #17570 (ToDo): qfq-badge same as badge from bootstraphttps://project.math.uzh.ch/issues/175702024-01-12T10:29:58ZJan Haller
<p><em>badge</em> von Bootstrap und <em>qfq-badge</em> unterscheiden sich visuell:<br /><img src="https://project.math.uzh.ch/attachments/download/8979/clipboard-202401121125-4odn3.png" alt="" /></p>
<pre><code class="css syntaxhl"><span class="nc">.badge</span> <span class="p">{</span>
<span class="nl">display</span><span class="p">:</span> <span class="n">inline-block</span><span class="p">;</span>
<span class="nl">min-width</span><span class="p">:</span> <span class="m">10px</span><span class="p">;</span>
<span class="nl">padding</span><span class="p">:</span> <span class="m">3px</span> <span class="m">7px</span><span class="p">;</span>
<span class="nl">font-size</span><span class="p">:</span> <span class="m">12px</span><span class="p">;</span>
<span class="nl">font-weight</span><span class="p">:</span> <span class="m">700</span><span class="p">;</span>
<span class="nl">line-height</span><span class="p">:</span> <span class="m">1</span><span class="p">;</span>
<span class="nl">color</span><span class="p">:</span> <span class="m">#fff</span><span class="p">;</span>
<span class="nl">text-align</span><span class="p">:</span> <span class="nb">center</span><span class="p">;</span>
<span class="nl">white-space</span><span class="p">:</span> <span class="nb">nowrap</span><span class="p">;</span>
<span class="nl">vertical-align</span><span class="p">:</span> <span class="nb">middle</span><span class="p">;</span>
<span class="nl">background-color</span><span class="p">:</span> <span class="m">#777</span><span class="p">;</span>
<span class="nl">border-radius</span><span class="p">:</span> <span class="m">10px</span><span class="p">;</span>
<span class="p">}</span><span class="o">;</span>
<span class="nc">.qfq-badge</span> <span class="p">{</span>
<span class="nl">padding</span><span class="p">:</span> <span class="m">1px</span> <span class="m">9px</span> <span class="m">2px</span><span class="p">;</span>
<span class="nl">font-size</span><span class="p">:</span> <span class="m">12.025px</span><span class="p">;</span>
<span class="nl">font-weight</span><span class="p">:</span> <span class="nb">bold</span><span class="p">;</span>
<span class="nl">white-space</span><span class="p">:</span> <span class="nb">nowrap</span><span class="p">;</span>
<span class="nl">margin</span><span class="p">:</span> <span class="m">2px</span><span class="p">;</span>
<span class="nl">color</span><span class="p">:</span> <span class="m">#ffffff</span><span class="p">;</span>
<span class="nl">display</span><span class="p">:</span> <span class="n">inline-block</span><span class="p">;</span>
<span class="nl">background-color</span><span class="p">:</span> <span class="m">#999999</span><span class="p">;</span>
<span class="nl">-webkit-border-radius</span><span class="p">:</span> <span class="m">9px</span><span class="p">;</span>
<span class="nl">-moz-border-radius</span><span class="p">:</span> <span class="m">9px</span><span class="p">;</span>
<span class="nl">border-radius</span><span class="p">:</span> <span class="m">9px</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
<p><em>qfq-badge</em> soll visuell identisch sein mit <em>badge</em>. Die Schriftgrösse ist evt. zu klein.</p>
<p>Bei hover wird der <em>qfq-badge</em> abgedunkelt und der Cursor zeigt an, dass darauf geklickt werden kann. Beibehalten?</p>
<pre><code class="css syntaxhl"><span class="nc">.qfq-badge</span><span class="nd">:hover</span> <span class="p">{</span>
<span class="nl">color</span><span class="p">:</span> <span class="m">#ffffff</span><span class="p">;</span>
<span class="nl">text-decoration</span><span class="p">:</span> <span class="nb">none</span><span class="p">;</span>
<span class="nl">cursor</span><span class="p">:</span> <span class="nb">pointer</span><span class="p">;</span>
<span class="p">}</span>
</code></pre> QFQ - Feature #17544 (New): QFQ Installation Wizard / Defaultshttps://project.math.uzh.ch/issues/175442024-01-09T12:19:59ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Im Meeting mit Philipp, Enis, Benj und Carsten wurden besprochen das wir einen Installation Wizard benoetigen.</p>
<ul>
<li>Kontrolle das die BaseURL stimmt (falls nicht ok, bitte im Installtool setzen).</li>
<li>Frage ob Tabellen angelegt werden sollen:
<ul>
<li>Period</li>
<li>Category (ex Ggroup) - Weiterer Vorschlag: Grp (in dem Fall kann 'gr' als Prefix weiter verwendet werden). implement mit Ticket <a class="issue tracker-2 status-2 priority-3 priority-high3" title="Feature: Per Form: note, tag, reminder date, done flag (In Progress)" href="https://project.math.uzh.ch/issues/17412">#17412</a> </li>
<li>Glue (ex GroupMember) implement mit Ticket <a class="issue tracker-2 status-2 priority-3 priority-high3" title="Feature: Per Form: note, tag, reminder date, done flag (In Progress)" href="https://project.math.uzh.ch/issues/17412">#17412</a></li>
<li>Upload. implement mit Ticket #filepond</li>
<li>Translation</li>
<li>Chat implement mit Ticket #chat</li>
<li>Note</li>
<li>NoteItem ( fuer form NoteItem Ticket <a class="issue tracker-2 status-2 priority-3 priority-high3" title="Feature: Per Form: note, tag, reminder date, done flag (In Progress)" href="https://project.math.uzh.ch/issues/17412">#17412</a>)</li>
<li>Person</li>
<li>Account</li>
<li>Address</li>
<li>PersonRole</li>
<li>Role</li>
</ul></li>
</ul>
<ul>
<li>BestPractice Doku & Seite / ttcontent anlegen (Auswahl als welches Child Element)
<ul>
<li>Settings (based on Grp/Glue) via.</li>
<li>Person / Adresse / Account / Rolle</li>
<li>FormEditor</li>
<li>Beispiel Chat</li>
</ul></li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/8961/clipboard-202401091319-wrmqh.png" alt="" /></p>
<p>switchdrive/qfq/DB/QFQ_Best_Practice_Tables.drawio</p>
<ul>
<li>Der Wizard soll bei der ersten Installation automatisch aufgehen.</li>
<li>Der Wizard soll auch spaeter noch gestartet werden koennen.</li>
<li>Im Wizard angeben wie man ihn spaeter erneut starten kann.</li>
<li>Aufruf koennte via einem HTML/PHP Form gemacht werden, das nur startet wenn ein BE User eingeloggt ist: BE Cookie mit der T3 BE User Tabelle vergleichen).</li>
</ul> QFQ - Feature #17442 (New): Rearrange form buttonshttps://project.math.uzh.ch/issues/174422023-12-07T12:53:28ZKrzysztof Putyra
<a name="Overview-of-the-problem"></a>
<h1 >Overview of the problem<a href="#Overview-of-the-problem" class="wiki-anchor">¶</a></h1>
The current arrangement <code>[save][close] [delete] [new]</code> is flawed: it makes people afraid to click "close", because the impression is that the button deletes data. This is caused by how our brain processes this information:
<ul>
<li>the two buttons are next to each other with icons suggesting opposite actions</li>
<li>opposite <em>action</em> to "safe" is "delete" ("don't safe" is <em>no action</em>)</li>
<li>close button is normally the last one in a group, so our brain does not expect it at the current position</li>
</ul>
<p>Moreover, because [save] and [close] are next to each other and [delete] is separated, the brain ignores [delete] when looking at [close] and tries to make connection only with [save]. This could be improved by placing [delete] between [safe] and [close]</p>
<a name="An-alternate-arrangement"></a>
<h1 >An alternate arrangement<a href="#An-alternate-arrangement" class="wiki-anchor">¶</a></h1>
<p><code>[safe] [new][delete] [close]</code></p>
<ul>
<li>[close] is the last button</li>
<li>[delete] does not touch [safe], which prevents accidental clicks</li>
<li>[delete] is between [safe] and [close] to prevent the brain making a connection between these two buttons</li>
<li>choosing for [safe] an icon related to [delete] instead of a tick may improve the situation as well</li>
</ul> QFQ - Feature #17441 (ToDo): Report Notation 2.2: fireIf :Statement to trigger the root level que...https://project.math.uzh.ch/issues/174412023-12-07T12:42:31ZZhoujie Li
<p>Es wurde über mögliche Verbesserungen des if-Statements aus den Tickets <a class="issue tracker-2 status-10 priority-2 priority-default" title="Feature: Report: UPDATE / INSERT / DELETE statements should trigger subqueries, depending on the result. (ToDo)" href="https://project.math.uzh.ch/issues/5345">#5345</a> und <a class="issue tracker-2 status-1 priority-2 priority-default" title="Feature: Report Notation 2.1: 'if then else' / 'for' / 'while' (New)" href="https://project.math.uzh.ch/issues/17319">#17319</a> diskutiert. Wir kamen zu dem Vorschlag, dass mit 'fireIf' lediglich bestimmt wird, ob der Root-Level ausgeführt wird oder nicht. Das andere wäre 'fireSubIf', womit bestimmt wird, ob ein Subquery ausgeführt wird, auch wenn keine Records von der Root-Query kommen.</p>
<a name="Vorschlag"></a>
<h2 >Vorschlag<a href="#Vorschlag" class="wiki-anchor">¶</a></h2>
<p>Query-Ausführung für das Root-Level:</p>
<pre>
10 {
sql = UPDATE table set ...
fireIf = {{variable}} =|>|<|>=|<=|!=
altsql = SELECT ... (wird aus geführt wenn fireIf false ist)
}
</pre>
<p>Query-Ausführung für das Child-Level:</p>
<pre>
10 {
sql = UPDATE table set ...
fireSubIf = {{variable}} =|>|<|>=|<=|!=
20.sql = INSERT INTO ...
}
</pre> QFQ - Feature #16346 (New): Tablesorter: clearme missinghttps://project.math.uzh.ch/issues/163462023-06-02T16:04:21ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn auch im Tablesorter das ClearMe X angezeigt werden wuerde:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/8004/clipboard-202306021803-oktid.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/8005/clipboard-202306021803-2thou.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/8006/clipboard-202306021804-neuxg.png" alt="" /></p> QFQ - Feature #16137 (Ready to sync (develop)): Form: Refactor AbstractElement, Trennung von Rend...https://project.math.uzh.ch/issues/161372023-05-03T11:48:08ZPascal Rössler
<p>Erstellen der 'AbstractElement' Klasse. <br />Erstellen der 'ElementInput' Klasse extends 'AbstractElement'.<br />Werden die AbstractBuildForm und BuildFormBootstrap weiterhin gebraucht?<br />Später sollen alle FormElement Typen in einer eigenen 'Element...' Klasse definiert werden.<br />Eine klare Trennung der Element Klassen und des Renderings.<br />In den einzelnen Element Klassen soll kein HTML/Bootstrap erzeugt werden. <br />Es soll ein Array/Objekt mit allen bearbeiteten Parametern und Angaben der RenderBootstrap3/5 Klasse übergeben werden.<br />In der Rendering Klasse soll eine Funktion names 'process()' erstellt werden, die den/das Array/Objekt entgegennimmt und den korrekten HTML Code erzeugt.<br />Durch diese Trennung soll es einfach möglich sein die Bootstrap version zu wählen, in der man das Element rendern will.</p>
<p>Erstellen einer RenderBootstrap3 Klasse.<br />Erstellen einer RenderBootstrap5 Klasse.</p>
In Render-Klasse<br />Switch Case Statement
<ul>
<li>buildInput</li>
<li>buildSubrecord</li>
<li>etc.</li>
</ul> QFQ - Feature #16113 (New): Report, Subrecord: action on multiple elementshttps://project.math.uzh.ch/issues/161132023-04-26T15:11:17ZCarsten Rosecarsten.rose@math.uzh.ch
Alternativer Titel: <strong>HTML table row multi select action</strong>
<ul>
<li>Records können auf Report und Formebene (Subrecord) selektiert und zusammen "bearbeitet" werden (Action wird auf alle selektierten Records angewendet).</li>
<li>Actions sind über Dropdown abrufbar</li>
<li>1 Action = 1 <em>Function</em>
<ul>
<li><em>Anmerkung CR:</em> das mit 'Functions' (weil wir so viele brauchen pro Menu) muessen wir trennen von qfqFunctions - denn 'Functions' stehen ja im aktuellen tt-content wuerden nicht gefunden werden wenn sie in einem anderen Record stehen. Aus meiner Sicht aber genau so sinnvoll! Ein tt-content Record entspricht einer Klasse.</li>
</ul></li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/7783/clipboard-202304261709-sosbw.png" alt="" /></p>
<p><img src="clipboard-202304261709-w1hfg.png" alt="" /></p> QFQ - Feature #15970 (New): Inline Editinghttps://project.math.uzh.ch/issues/159702023-04-06T12:48:56ZPhilipp Gröbelbauer
<p>Sammelticket für alles related to Inline Editing in QFQ.</p>
<p>IPA proess - Umsetzung von zwei Varianten:<br /><code><br />SELECT 'table=tableName&column=colName&type=text&r=myId' AS _edit<br />SELECT 'form=formName&fe=feName&r=myId' AS _edit</code></p>
<p>Weitere, schlanke Variante diskutiert am 6.4.23 (crose, pgroeb):<br />(implizites Edit, wenn tableName ODER formName angegeben ist, und eine Spalte mit Alias selektiert wird, der dem FE-Name oder Column-Name entspricht)</p>
<p><code>10{<br />sql = SELECT p.id AS _r , CONCAT(p.firstName, ', ', p.lastName) AS personName<br />formName = ...<br />tableName = ...<br />}</code></p> 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 #15904 (New): QFQ: T3 V12 Compatibilityhttps://project.math.uzh.ch/issues/159042023-03-30T07:07:56ZEnis Nuredini
<p>QFQ ist nicht kompatibel mit T3 V12. Hier müssen Anpassungen vorgenommen werden.</p>
<p>Testseite verfügbar: <a class="external" href="http://webwork22.math.uzh.ch/typo12/typo3/">http://webwork22.math.uzh.ch/typo12/typo3/</a></p>
<p>Extension ist schon mal auf der Testseite hinzugefügt, damit es in Typo3 keine Fehlermeldung (Access denied) gibt mussten in folgenden Files (ext_tables.php, ext_localconf.php, tt_content-php) Zeilen Code auskommentiert werden:<br /><pre>
if (!defined('TYPO3_MODE')) {
# die('Access denied.');
}
</pre></p>
<p>Upload über T3 Backend ist aktuell nicht mehr möglich, nur das einfügen ins Verzeichnis typo3conf/ext/</p> QFQ - Feature #15903 (New): UZH CD: T3 V12 Compatibilityhttps://project.math.uzh.ch/issues/159032023-03-30T07:00:25ZEnis Nuredini
<p>UZH CD ist aktuell nicht kompatibel mit T3 V12. Hier gibt es Handlungsbedarf.</p>
<p>Verfügbare Testseite: <a class="external" href="http://webwork22.math.uzh.ch/typo12/typo3/">http://webwork22.math.uzh.ch/typo12/typo3/</a></p>
<p>Extension ist schon mal auf der Testseite hinzugefügt, damit es in Typo3 keine Fehlermeldung (Access denied) gibt mussten in folgenden Files (ext_tables.php) Zeilen Code auskommentiert werden:<br /><pre>
if (!defined('TYPO3_MODE')) {
# die('Access denied.');
}
</pre></p>
<p>Upload über T3 Backend ist aktuell nicht mehr möglich, nur das einfügen ins Verzeichnis typo3conf/ext/</p> QFQ - Feature #15812 (New): Upload: download button appears after uploading filehttps://project.math.uzh.ch/issues/158122023-03-16T12:01:35ZJan Haller
<p>Weiterentwicklung von <a class="issue tracker-1 status-1 priority-2 priority-default" title="Bug: Upload: download button not shown after pressing save (New)" href="https://project.math.uzh.ch/issues/15795">#15795</a>:<br />Nach dem Upload (Datei auswaehlen, noch kein Save gedrueckt) soll ein Downloadbutton erscheinen, um die Datei direkt wieder herunzerzuladen.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/7532/clipboard-202303161301-3ezmi.png" alt="" /></p> QFQ - Feature #15524 (New): Generic Report Pagehttps://project.math.uzh.ch/issues/155242023-02-11T09:59:41ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Ziel: einfach beliebige Daten anschauen / bearbeiten / exportieren koennen.</p>
<p>Features:</p>
<ul>
<li>Repository enthaelt beliebige vorgegebene oder benutzerdefierte Reports. Das sind <strong>keine</strong> QFQ Reports mit <code>10.sql=...</code> sondern ein simples SQL Statement.</li>
<li>Optional koennen Eintraege in dem Repository durch Benutzer erstellt/angepasst werden. </li>
<li>Damit haben wir einen generischen Report Generator auf SQL Basis.</li>
<li>Jeder GenericReport hat einen Excel Exports (Button)</li>
<li>Fuer jeden Report kann QFQ 'on the fly' ein Form Detail rendern.</li>
<li>Jede Row (Record) kenn editiert oder geloescht werden.</li>
</ul>
<p>Details:</p>
<ul>
<li>In einer Tabelle 'GenericReport' werden pro Report alle Details hinterlegt.
<ul>
<li>Spalten: sql1, genericReport (uniq name for this report), description, required (comma list of required SIP arguments), sqlStoreVar (SELECT Definition), formForDelete (siehe unten), fileNameExcelExport (kann QFQ Variablen enthalten), head (Textarea Feld mit QFQ Variablen welches ueber dem Report und im Excel ueber den Daten ausgegeben wird). showNew, showEdit, showDelete (default: on).</li>
</ul></li>
</ul>
<ul>
<li>Eine T3 Page 'Generic Report' wird mit dem SIP Parameter 'genericReport=<uniq name>' und weiteren SIP Parametern aufgerufen.
<ul>
<li>Report Code: <code>genericReport = {{genericReport:SE}}</code></li>
</ul></li>
</ul>
<ul>
<li>Der Report wird mit TableSorter dargestellt, inkl. ColumnSelector.</li>
<li>Die Spaltennamen des SQL Statements:
<ul>
<li>a) referenzieren direkt eine Tabellenspalte (darueber kann der Spaltentyp ermittelt werden fuer einen Excel Export oder das generische Formular).</li>
<li>b) bei z.B. <abbr title="">CONCAT</abbr> oder '... AS something' oder bei einem SQL View Statement: im Spaltennamen die Definition. Bsp: 'Person|<abbr title="20">VARCHAR</abbr>|'.
<ul>
<li>Ein SET mit 2 Angaben (yes/no, on/off, 1/0, true/false) wird automatisch zu einer Checkbox. Der unchecked Wert ist der Default aus der Spaltendefinition.</li>
<li>Ein SET mit mehr als 2 Angaben oder ein ENUM fuehrt zu einem Multi-Select.</li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>Mit den Spaltendefinitionen kann:
<ul>
<li>Der Tablesorter auch nach Datum oder numerisch sortieren.</li>
<li>Kann ein generisches Excel erzeugt werden, inkl. korrekter Zellendefinition (Tex, Int, Float, Dezimal, Datum, Zeit, Datum-Zeit)</li>
<li>Ein generisches Formular erzeugt werden (Form wird 'on demand'in die Tabelle Form/FormElement gerendert).
<ul>
<li>FormName: _<genericReport></li>
<li>Edit: Wird angezeigt wenn es min. eine Spalte 'id' gibt - es wird ein Edit-Link gerendert der das zuvor dynamisch erstellte Form verwendet (mit der ersten 'id' Spalte aus der aktuellen Row). </li>
<li>Delete: Wird angezeigt wenn es min. eine Spalte 'id' gibt und eine primary Tabelle bestimmt werden kann (erste Tabelle nach dem FROM Statement) oder ein Form in <code>formForDelete</code> gesetzt ist. </li>
<li>New: Button.</li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>Fuer den Report wird vergleichbar dem Schluesselwort 'form' das neue Wort 'genericReport' einefuehrt.
<ul>
<li>BSP: genericReport = {{genericReport:SE}}</li>
<li>Excel Export
<ul>
<li>via <code>fileNameExcelExport</code> kann der Exportdateiname vorgegeben werden. Falls nicht gesetzt: Tabellenname_Datum.xlsx. </li>
<li><br> erzeugt eine neue Zeile im Excel.</li>
<li>Die Titelzeile wird gesetzt.</li>
</ul></li>
</ul></li>
</ul> QFQ - Feature #15490 (New): new: extraButtonClass: a) New default: btn-info, b) configurabl per I...https://project.math.uzh.ch/issues/154902023-02-06T08:50:16ZCarsten Rosecarsten.rose@math.uzh.ch
<p>extraButtonInfo=...<br />extraButtonInfoClass=btn btn-default</p>
<p>extraButtonLockClass<br />extraButtonPasswordClass</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 #15310 (New): Direct File Upload on pagehttps://project.math.uzh.ch/issues/153102023-01-04T13:40:06ZEnis Nuredini
<p>Es braucht eine Möglichkeit über den Report ein Upload Feld darzustellen um den direkten Upload über eine Taste oder per Drag and Drop zu ermöglichen. Somit wird kein extra Formular benötigt um ein Upload auszuführen.</p> QFQ - Feature #15237 (New): Inspiration Filemaker: Search/Filter via Detailformhttps://project.math.uzh.ch/issues/152372022-12-23T09:16:54ZCarsten Rosecarsten.rose@math.uzh.ch
<p><img src="https://project.math.uzh.ch/attachments/download/7065/clipboard-202212231014-v8sne.png" alt="" /></p>
<ul>
<li>In FM kann man in einen Such/Filtermodus wechseln, bei dem ein normales Detailform als Filtermaske verwendet wird.</li>
<li>Anschliessend erscheinen oben Navigationselemente um durch die aktuell selektieren Records zu steppen.</li>
</ul> QFQ - Feature #15235 (New): Security Scanner Open Source Luecken: Integrieren in unsere Build Chain.https://project.math.uzh.ch/issues/152352022-12-22T16:05:22ZCarsten Rosecarsten.rose@math.uzh.ch
<p><a class="external" href="https://www.heise.de/news/Googles-neuer-Security-Scanner-gegen-Open-Source-Luecken-7397479.html">https://www.heise.de/news/Googles-neuer-Security-Scanner-gegen-Open-Source-Luecken-7397479.html</a></p> QFQ - Feature #15200 (New): Remove JQWhttps://project.math.uzh.ch/issues/152002022-12-16T08:16:36ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Wir verwenden kein JQW - alle Referenzen entfernen</p>
<ul>
<li>Check: ist die Ausage 'wir verwenden kein JQW' richtig? Evtl. basiert FE.type=file (Upload) auf JQW?!</li>
<li>Im FormEditor aus der FE.Type Liste entfernen.</li>
<li>PHP Code (bauen des Elementes).</li>
<li>QFQ Client</li>
<li>Grunt anpassen</li>
<li>UZH CD Check ob dort jqw eingebunden wird</li>
<li>Lizenz Angabe entfernen.</li>
</ul> QFQ - Feature #15104 (New): MultiForm functionality in a regular formhttps://project.math.uzh.ch/issues/151042022-12-04T09:41:23ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Ziel: In einem Admin Form zu einem Antrag soll auf einem Pill eine dynamische Liste von Checkboxen implementiert werden. (Medtool > Befoerderung > Olga kann sich eine eigenen TodoListe erstellen und diese pro Antrag abarbeiten)</p>
<ul>
<li>'Dynamisch' heisst: Der User kann Workflow Items konfigurieren und jedes Item ist eine Checkbox.</li>
</ul>
<p>Idee:</p>
<ul>
<li>Neuer FE.type=Container mit Namen 'multi element'</li>
<li>In SQL1 wird die MutliForm Query definiert.</li>
<li>Multi Form Container werden nach dem regulaeren 'Form Save' abgearbeitet.</li>
<li>FE.type = action innerhalb eines 'multi element' Containers werden nach den multi-element native elementen ausgefuehrt</li>
<li>Die Form Elemente koennen vermutlich</li>
</ul> QFQ - Feature #15095 (In Progress): Dynamic Update Trigger/Receiver onlyhttps://project.math.uzh.ch/issues/150952022-11-30T09:43:40ZPhilipp Gröbelbauer
<p>Szenario: Zwei Dropdowns (select) haben Dynamic Update aktiv.</p>
<p>Dropdown 1: Eine Auswahl von Arbeitstellen<br />Dropdown 2: Eine Auswahl aller Lohnstufen.</p>
<p>Fuer jede Arbeitstelle ist eine Standard Lohnstufe definiert.<br />Wird also eine Arbeitstelle im Dropdown selektiert, dann wird im zweiten Dropdown direkt die Standard-Lohnstufe selektiert.<br />Das ist bereits moeglich mit Dynamic update.</p>
<p>Es soll aber auch moeglich sein, die Lohnstufe noch individuell zu aendern.<br />Das wuerde aber wieder ein Dynamic Update triggern, welches sofort wieder die Standard-Lohnstufe fuer die momentan selektierte Arbeitstelle auswaehlt.</p>
Loesungsansatz: Ist dynamic Update aktiv, dann sollte zusaetzlich wischen 3 Modi ausgewaehlt werden koennen:
<ul>
<li>Trigger & Receiver (default)</li>
<li>Trigger only</li>
<li>Receiver only</li>
</ul>
<p>Form Elemente mit 'Trigger' loesen einen Dynamic Update aus.<br />Form Elemente mit 'Receiver' reagieren auf einen Dynamic Update</p> QFQ - Feature #15015 (New): Doc: Export / Import Sectionhttps://project.math.uzh.ch/issues/150152022-11-10T19:27:53ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Heute habe ich die Stelle gesucht an der der Import von Excel Dateiern beschrieben ist. Das ist beim Upload FormElement.</p>
<p>Es waere gut wenn in der Doku eine Rubrik zu diversen Import/Export Moeglichkeiten (oberster Level Hauptnavigation) existieren wuerde.</p>
<p>Die Section enhaelt nur allgmeine Informationen und Referenzen zu den Details</p> QFQ - Feature #14884 (New): Darstellung Pflichtfelder / Beschreibung was fehlt oder falsch isthttps://project.math.uzh.ch/issues/148842022-10-13T08:15:11ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Die Variante wie 'Planon' required Felder anzeigt (duenner roter Rahmen) und im Schritt 2>3 dann genauere Meldungen anzeigt find ich optisch sehr ansprechend.</p>
<p>Die Alerts oben summieren sich auf.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/6707/clipboard-202210131011-fckqz.png" alt="" /></p>
<p>Sollen wir das bei QFQ mal schoener machen oder besser das auf nach BS5 Migration warten?</p> QFQ - Feature #14863 (ToDo): Empfohlene qfq Version und typo3 Versionhttps://project.math.uzh.ch/issues/148632022-10-07T10:21:25ZKarin Niffeler
<p>Hallo zusammen</p>
<p>Aus Sicherheitsaspekten möchte ich Typo3 upgraden.</p>
<p>Mit welcher Typo3 Version läuft qfq 20.10.0 stabil?</p>
<p>Gibt es eine Empfehlung? <br />Aktuell kann Typo3 11 LTS verwendet werden.</p>
<p>Auf einer Website habe ich gelesen, dass qfq 20.4.0 mit Typo3 7.00 - 9.2.99 stabil läuft.<br />Ist das die aktuelle Empfehlung?</p>
<p>Im Voraus vielen Dank für eine kurze Antwort.</p>
<p>Lieber Gruss,<br />Karin</p> QFQ - Feature #14639 (New): FormEditor > Preview: also with 'PermitNew=logged_in/out/always'https://project.math.uzh.ch/issues/146392022-08-31T08:29:47ZCarsten Rosecarsten.rose@math.uzh.ch
<p>FormEditor > Preview: sollte angeboten werden wenn 'PermitNew=logged_in/out/always' steht.</p> QFQ - Feature #14638 (New): Copy Form via JSON: misc topicshttps://project.math.uzh.ch/issues/146382022-08-31T08:26:55ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Im Form 'FormJson' kann man akutell das JSON nur als Datei speichern. Gewuenscht waere das man es auch in das Gnome Clipboard kopieren kann.</li>
<li>Im Form 'FormElement' sollte man das aktuell FE in die Zwischenablage kopieren koenenn. Dann wechselt man in das Zielform und fuegt das Element ein</li>
<li>Im Form 'Form' sollte man das aktuelle Form:
<ul>
<li>in die Zwischenablage kopieren koennen.</li>
<li>als JSON in die Gnome Zwischenablage kopieren koennen</li>
</ul></li>
</ul>
<ul>
<li>Beim Form JSON Import: Check das die aktuelle angegbeene Tabelle existiert, wenn nicht eine Warnung ausgeben oder den Import verweigern.</li>
</ul> QFQ - Feature #14637 (New): Remove 'CopyForm' and tables 'extForm', 'extFormElement'https://project.math.uzh.ch/issues/146372022-08-31T08:21:28ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Copy Form ist ersetzt durch JSON Kopie</p> QFQ - Feature #14613 (Priorize): Javascript per FormElementhttps://project.math.uzh.ch/issues/146132022-08-26T13:49:48ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Fuer einfache Funktionen waere es gut wenn man JS pro FE definieren koennte.</li>
<li>Konkrete Anwendung: in <a class="issue tracker-2 status-5 priority-2 priority-default closed" title="Feature: typeAhead: Zeichenlimite ausschalten (Closed)" href="https://project.math.uzh.ch/issues/9221">#9221</a> soll der User darauf hingewiesen werden (es wird eine Warnung eingeblendet), wenn eine hoehere MaxLength als die Default MaxLength eingegegeben wird.</li>
<li>Dazu muesste im JS Code QFQ Variablen ersetzt werden. </li>
<li>Fuer <a class="issue tracker-2 status-5 priority-2 priority-default closed" title="Feature: typeAhead: Zeichenlimite ausschalten (Closed)" href="https://project.math.uzh.ch/issues/9221">#9221</a> braeuchte es auch eine neue Variable, die die table.column MaxLength enthaelt, mit der verglichen wird.</li>
</ul> QFQ - Feature #14371 (Priorize): LDAP via REPORThttps://project.math.uzh.ch/issues/143712022-06-16T14:36:40ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>ES benoetigt fuer MedTool eine Moeglichkeit Batchgesteuert Perseonen aus dem LDAP zu importieren.</li>
<li>Irgendwie sollte der STORE_LDAP gefuellt werden.</li>
<li>Evtl. als special column name oder mit einem neuen Keyword 'doLdap' in Report.</li>
</ul> QFQ - Feature #14290 (Priorize): FormEditor: Show Table Definitionhttps://project.math.uzh.ch/issues/142902022-06-08T12:03:53ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Aktuell ist im FormEditor nur die Primary Tabelle sichtbar:</p>
<p><img src="https://project.math.uzh.ch/attachments/download/6241/clipboard-202206081400-vzkor.png" alt="" /></p>
<ul>
<li>Es waere gut wenn sowohl im Form- als auch im FormElement-Editor alle Tabellen angezeigt werden. </li>
<li>Es koennten alle Tabellen angezeigt werden (Liste) wobei die Definition eingeklappt ist. Die Primary Table wird ausgeklappt dargestellt.</li>
<li>Entweder via Dynamic Update (Select Liste aller Tabellen) oder via ein/ausklappen.</li>
</ul> QFQ - Feature #12262 (In Progress): Form buttons on top: more customablehttps://project.math.uzh.ch/issues/122622021-03-25T15:57:32ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Es waere gut wenn man beliebige Buttons oben im Form anbieten koennte.</li>
<li>Die bisherigen Buttons (New, Save, Close, Trash) sollten neu durch den gleichen PHP Code gerendert werden. U.a. um ein guten debug Tooltip zu haben.</li>
<li>Alle Funktionen die '... AS _link' kennt, sollten moeglich sein. Z.B.
<ul>
<li>Popups mit custom message, inkl yes/no zum abbrechen.</li>
<li>Tooltip</li>
<li>Button active/disabled</li>
<li>dynamic update waere nett, aber nicht zwingend in einer erste Version. Waere nur noetig wenn eine Custom definiton gegeben ist.</li>
</ul></li>
</ul>
<p>Notation:</p>
<ul>
<li>Die bisherigen werden supported, sind aber deprecated:
<ul>
<li>saveButtonText,saveButtonTooltip,saveButtonClass,saveButtonGlyphIcon</li>
<li>Dleete*, save*, close*</li>
</ul></li>
</ul>
<ul>
<li>Neu
<p>saveButton = p:..|b:..|s:..|o:...|q:...|t:.. ...</p></li>
</ul>
<p>Anwendung:</p>
<ul>
<li>Delete ist disabled sobald slave records existieren. Beispiel `deleteButton = p:..|b:..|r:{{select <br /> ...}}|o:...'</li>
<li>Mit <a class="issue tracker-2 status-5 priority-3 priority-high3 closed" title="Feature: As _link: content before/after link (Closed)" href="https://project.math.uzh.ch/issues/13945">#13945</a> kann Inhalt davor und dahinter ausgegeben werden. Z.B. `col-md-...` oder `<div class="button-group">`</li>
</ul> QFQ - Feature #10119 (In Progress): Dropdown (selectlist) &TypeAhead: format and catagorize listhttps://project.math.uzh.ch/issues/101192020-02-13T12:27:19ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Gewuenscht ist das man Bereiche (z.B. Tags) von Items in Gruppen einteilen kann. Bsp:</p>
<ul>
<li>Formatierung der Eintraege:
<ul>
<li>Subtitle: non clickable, style: grau, oder fett schwarz, ..</li>
<li>Regular Item: mit glyphicons, fa, icons.. - fett, kursiv, hover (tooltip).</li>
</ul></li>
</ul>
<ul>
<li>Es gibt die Gruppen, z.B. 'Farbe', 'Fruechte', 'Auto'.</li>
<li>User tippt 'a'.</li>
<li>Angezeigt werden im Dropdown jeweils die 3 Gruppen, pro Gruppe die Matches auf 'a'.</li>
</ul>
<p>Darstellung der Listen</p>
<ul>
<li>Vermutlich kann man im JSON Datastring HTML Code angeben. Damit koennten dann die Eintraege formatiert werden.</li>
<li>Wichtig ist das im Value Feld HTML gesendet werden.</li>
</ul> QFQ - Feature #7480 (ToDo): Record History (Undo / Redo)https://project.math.uzh.ch/issues/74802018-12-13T12:59:36ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Es waere gut wenn es in QFQ eine History der Records gaebe.</li>
<li>Schoen waere auch ein Undo/Redo</li>
</ul>
<p>Tipp von Marc:</p>
<p>Stackoverflow Frage: <br /><a class="external" href="https://stackoverflow.com/questions/12563706/is-there-a-mysql-option-feature-to-track-history-of-changes-to-records">https://stackoverflow.com/questions/12563706/is-there-a-mysql-option-feature-to-track-history-of-changes-to-records</a></p>
<p>Loesung MYSQL Triggers + history tabellen:<br /><a class="external" href="https://stackoverflow.com/a/12657012">https://stackoverflow.com/a/12657012</a></p> QFQ - Feature #7099 (New): FormEditor > subrecord FE: list FE according their nesting in containerhttps://project.math.uzh.ch/issues/70992018-10-27T08:42:10ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>In der Liste der FormElemente sollen die FE Records vom Typ 'Container' ('pill/fieldset/template-group') automatisch direkt ueber den nativen FEs angezeigt werden.</li>
<li>Beim Speichern eines FE's wird der ORD Wert automatisch korrekt gesetzt.</li>
<li>Es ist nicht noetig in der ORD Spalte die ParentChild Bedingung abzubilden, wenn sichergestellt ist das die 'ord' immer gemaess der aktuellen Hierarchie gesetzt wird. Dazu gehoert das ein manuell gesetzte ORD Wert angepasst wird.</li>
<li>FYI: Vermutlich werden wir nie eine Verschachtelungstiefe > 5 erreichen: Form>Pill>Fieldset>TemplateGroup>FE</li>
<li>Wird ein Sub Element per Drag'n'Drop nach ausserhalb des aktuellen Containers verschoben, sollte das FE die containerId des FE bekommen auf dem es gedroppt wurde.</li>
<li>Wird ein Container verschoben, werden alle Childs ebenfalls angepasst - innerhalb des Containers bleibt die Reihenfolge bestehen.</li>
<li>Die hierachiesche Logik koennte vermutlich erkannt/respektiert werden in dem ein neues Keyword definiert wird: <code>FE.parameter.ordColumnHierarchy=feIdContainer</code>. Sobald dieser Parameter gesetzt ist, wird auf die Hierachie Ruecksicht genommen und das Renumbering via PHP entsprechend durchgefuehrt.</li>
<li>Wird manuell eine 'ord' gesetzt, kann dadurch der aktuelle Container nicht verlassen werden.
<ul>
<li>Das Feld "ord" bekommt dynamisch berechnete min/max Werte: min=outercontainer.ord, max=nextoutercontainer.ord-1. Diese Funktion ist optional. Auch wenn min/max nicht gesetzt werden sollte das setzen von 'ORD' nur in den erlaubten Grenzen moeglich sein. Dazu muss dem Detail Form vermutlich mitgeteilt werden (Aufruf erfolgte via einem Subrecord aus dem 'Form'-Form) das die Begrenzung auf dem aktuellen Container beizubehalten ist.</li>
<li>Damit koennen nur ord Werte gesetzt werden, die die bestehende Container Reihenfolge beruecksichtigen.</li>
</ul></li>
</ul> QFQ - Feature #5345 (ToDo): Report: UPDATE / INSERT / DELETE statements should trigger subqueries...https://project.math.uzh.ch/issues/53452018-02-03T17:51:12ZCarsten Rosecarsten.rose@math.uzh.ch
<a name="Wunsch"></a>
<h2 >Wunsch<a href="#Wunsch" class="wiki-anchor">¶</a></h2>
<p>Falls ein UPDATE [keine] Records veraendert, waere es gut wenn stattdessen subqueries ausgefuehrt werden - und die Entscheidung wird in PHP evaluiert, ohne das eine weitere Query abgefeuert werden muss. Vergleichbar mit althead (wird ausgefuehrt sobald das sql keine Records selektiert).<br />Damit wuerden Queries der Form UPDATE ... WHERE 1=0 (mit '0={{<level>.line.count}}') gar nicht erst gefeuert.</p>
<a name="Vorschlag"></a>
<h2 >Vorschlag<a href="#Vorschlag" class="wiki-anchor">¶</a></h2>
<pre>
10.sql = UPDATE ....
10.affected = 0|1|>0|>1|always
20.sql = INSERT ... SELECT ...
20.affected = 0|1|>0|>1|always
30.sql = DELETE ...
40.sql = SELECT
</pre>
<p>Bsp. 1)<br /><pre>
10.sql = UPDATE ... WHERE 1=0
10.affected = >0
10.head = update
10.althead = kein update
</pre></p>
<p>Ausgabe: kein update</p>
<p>Bsp. 2)<br /><pre>
10.sql = UPDATE Person SET name='john' LIMIT 1
10.affected = >0
10.head = update
10.althead = kein update
</pre></p>
<p>Ausgabe: update</p>
<a name="Anmerkungen"></a>
<h2 > Anmerkungen<a href="#Anmerkungen" class="wiki-anchor">¶</a></h2>
<ul>
<li>Der Wert von affected kann auch eine Query der From '10.affected = {{SELECT <abbr title="20.line.insertId > 100, 'no','yes'">IF</abbr> }}' sein.</li>
<li>'affected' wird ausgewertet nachdem query gefeuert wurde.</li>
<li>head / tail / althead / alttail / altsql wird in Abhaengigkeit von affected ausgegeben.</li>
<li>affected kann auch bei 'SELECT' angegeben werden. Mit 'affected=always' wird child einmal getriggert, auch wenn das keine records selektiert wurden.</li>
<li>Hinweis: bei updates die erfolgreich sind (Record existiert), aber keine Veraenderung stattgefunden hat, kommt vermutlich 'affected_rows=0' zurueck. Bei folgendem Klassiker sollte die Aktualisierung von `modified` dem vorbeugen (BTW: die Verwendung von altsql ist oben nicht beschrieben, waere aber nett)<br /><pre>
10 {
sql = UPDATE EzBookingImport SET `data`='{{dataC:R}}', modified=modified + INTERVAL 1 SEC WHERE ez_start='{{thisMonday:R}}' AND ez_objectID='{{ez_objectID:R}}'
altsql = INSERT INTO EzBookingImport (`data`, `ez_start`, `ez_objectID`, `raum_id`)
VALUES ('{{dataC:R}}', '{{thisMonday:R}}' , '{{ez_objectID:R}}', '{{raId}}' )
}
</pre></li>
</ul> QFQ - 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 #3537 (Some day maybe): SHOW COLUMNS FROM tableName - Extend '{{!...' definitionhttps://project.math.uzh.ch/issues/35372017-04-09T08:09:34ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Ziel war urspruenglich ein TypeAhead fuer Spaltennamen im Form 'FormElement' zu implementieren.<br />Bei der folgenden Beschreibung ist nicht klar ob sich der Aufwand lohnt das zu implementieren:</p>
<pre>
{{!'%s',1,'id'|'%s %s %s',1,2,3,'value'|SHOW COLUMNS FROM {{SELECT f.tableName FROM Form AS f WHERE f.id={{formId:S0}} LIMIT 1}} }}
</pre><br />Erklaerung:
* Kommt nach dem '{{!' kein SQL Schluesselwort, wird der String nach '|' explodiert.
* Ab dem ersten Einzelelement welches mit einem SQL Schluesselwort beginnt, werden alle folgende Einzelelemente wieder zu einem Element zusammengesetzt.
* Die vorderen Einzelelemente sind printf() Anweisungen, mit der Ergaenzung das falls der letzte Parameter (z.B. 'id') in Ticks steht, dies der neue Spaltenname ist.
* Die Nummern nach dem Formatstring sind die Spaltenindizes des Resultsets. QFQ - Feature #3273 (Some day maybe): Dirty Flag in Formhttps://project.math.uzh.ch/issues/32732017-03-04T13:30:44ZElias Villiger
<p>Gewünscht ist die Möglichkeit, innerhalb eines FormElements abzufragen, ob der aktuelle Record Änderungen enthält, die noch nicht gespeichert wurden. Das entsprechende dirty flag muss natürlich dynamic update tauglich sein.</p>
<p>Gebraucht für HMS:</p>
<blockquote>
<p>Der "Submit" button einer application sollte nur dann aktiv sein, wenn der Record gespeichert wurde. Andernfalls wird eine Notiz angezeigt, dass der Record zuerst gespeichert werden muss.</p>
</blockquote>