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 #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 #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 #17993 (New): filepond: Color for message 'file is of invalid type'https://project.math.uzh.ch/issues/179932024-02-25T11:01:50ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Falls <strong>einfach</strong> moeglich:</p>
<ul>
<li>Bitte Farbe 'rot' ersetzen durch BS-warning.</li>
<li>Der Text fuer die Fehlermeldung wird dann unleserlich (weiss). Bitte die BS Farben nehmen (2. Screenshot).</li>
<li>Text 'file is of invalid type' hoert sich fuer mich eher technisch an, was haeltst du von 'unexpected file type'?</li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/9332/clipboard-202402251207-zajfs.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9331/clipboard-202402251205-lrxpj.png" alt="" /></p> QFQ - Feature #17828 (New): Tablesorter disable saved filterhttps://project.math.uzh.ch/issues/178282024-02-06T12:48:40ZEnis Nuredini
<p>Per Default werden Eingaben in einem Tablesorter Filter im Browser Storage abgespeichert und bei Page Reload mitgeladen.</p>
<p>Es gibt Situationen oder Seiten bei denen man das nicht möchte.<br />Dafür gibt es beim Tablesorter folgende Konfiguration unter <strong>widgetOptions</strong> :<br /><pre>
"widgetOptions":{"filter_saveFilters":false}
</pre></p>
<p>In QFQ müsste man dafür die komplette default Konfiguration im Report angeben:<br /><pre>
data-tablesorter-config='{"theme":"bootstrap","widthFixed":true,"headerTemplate":"{content} {icon}","dateFormat":"ddmmyyyy","widgets":["uitheme","filter","saveSort","columnSelector","output"],"widgetOptions":{"filter_saveFilters":false,"filter_columnFilters":true,"filter_reset":".reset","filter_cssFilter":"form-control","columnSelector_mediaquery":false,"output_delivery":"download","output_saveFileName":"tableExport.csv","output_separator":";"} }'
</pre></p>
<p>Es wäre von Vorteil wenn dieser eine Parameter durch ein eigenes Attribut gesteuert werden könnte und nicht die ganze Config angegeben werden muss.</p>
<p>Selbiges würde für den Sorter gelten. Dort wäre auch ein eigenes Attribut von Vorteil.<br /><pre>
"widgetOptions":{"saveSort":false}
</pre></p> QFQ - Feature #17791 (New): Checkbox: copy default texthttps://project.math.uzh.ch/issues/177912024-02-02T12:16:07ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bei einer Liste von Checkboxen soll es moeglich sein hinterlegte Texte mit einem Mausclick in die Zwischenablage zu kopieren.</p>
<ul>
<li>Die 'action' Button kommt hinter das letzte Feld in die Kommentarspalte.</li>
<li>Click kopiert die Texte in die Zwischenablage, oder es wird eine HTML ID / CLASS angegeben und dort hinkopiert (z.B. das Chat Input Fenster)</li>
</ul>
<p>Bsp:</p>
<pre>
[] rot
[] gruen
[] gelb
</pre>
<ul>
<li>rot: erdbeere, radieschen, paprika rot</li>
<li>gruen: erbse, apfel gruen, </li>
<li>gelb: zitrone</li>
</ul>
<pre>
{{!SELECT id, label, copytext FROM gruppe ....}}
'copytext' wird nicht angezeigt, sodnern ist der Text der in die Zwischenablage kopiert wird.
!clipboard-202402021310-orpas.png!</pre> QFQ - Feature #17790 (New): QFQ Chat V1.3https://project.math.uzh.ch/issues/177902024-02-02T10:08:04ZEnis Nuredini
<p>Priorisierung anpassen zwischen 1.3 und 1.4.</p>
<p>Umsetzung der Features von 1.3:<br /><a class="external" href="https://git.math.uzh.ch/typo3/qfq/-/blob/develop/Documentation-develop/CHAT.md">https://git.math.uzh.ch/typo3/qfq/-/blob/develop/Documentation-develop/CHAT.md</a></p> 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 #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 #17374 (New): ReST QFQ Doc: local rendernhttps://project.math.uzh.ch/issues/173742023-11-28T16:01:55ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Aktuell haben wir keinen Preview fuer unsere Dokumentation - es muss immer auf Develop oder Master committet werden. Gute waere eine lokale Vorschau.</p>
<p>Bitte versuchen das zu implementieren</p> QFQ - Feature #17295 (New): Pipe-separated column names as processorshttps://project.math.uzh.ch/issues/172952023-11-16T15:25:40ZKrzysztof Putyra
The syntax<br /><pre> <value> AS 'col1|col2|col3' </pre><br />can represent a processing queue of <code>value</code> by three processors with the output of last one taken as the column value. In this example the process queue is<br /><pre>
+------+ +------+ +------+
<value> -->--| col1 |-->--| col2 |-->--| col3 |-->-- <processed>
+------+ +------+ +------+
</pre><br />A column processor may populate more values into a store, that are accessed using the notation <code><colname>.<property></code>. Standard properties include
<ul>
<li><code>in</code> - the value that the processor has received</li>
<li><code>out</code> - the output of the processor (the rendered input)</li>
</ul>
<p>Processors of special columns can add more properties. For instance, <code>link</code> can populate <code>url</code>, <code>tooltip</code>, <code>text</code>, etc.</p>
<p><em>Should the values be inherited by following processors? For instance, with the column name <code>_link|myvar</code> should <code>{{myvar.url:R}}</code> be defined?</em></p>
Notes:
<ul>
<li>a column name that do not begin with an underscore is processed by the default processor that saves the value in the R-store and forwards it to the next processor</li>
<li>a column name <code>_<name></code> that is not a special column name is semantically equal to <code>_hide|<name></code></li>
</ul>
<p><b>Example 1</b><br /><pre>
10.sql=SELECT 'Hello world!' AS 'plain|_encrypt|encrypted|_hide'
10.10.sql=SELECT 'Plain text: {{plain:R}}<br>Encrypted text: {{encrypted:R}}'
</pre><br />produces<br /><pre>
Plain text: Hello world!
Encrypted text: <encrypted>
</pre></p>
<p><b>Example 2</b><br /><pre>
10.sql=SELECT 'Hello world!' AS message|_+p
20.sql=SELECT '{{message:R}}'
</pre><br />produces<br /><pre>
<p>Hello world!</p>
Hello world!
</pre></p>
<p><b>Example 3</b><br /><pre>
10.head=<ul>
10.tail=</ul>
10.sql=SELECT url FROM Link
10.10.sql=SELECT 'u:{{url:R}}|c:nicelink' AS '_link|_+li'
</pre><br />wraps links into <code>li</code> elements. This example does not work currently, because it is not allowed to specify more than one special column.</p>
<p><b>Example 4</b><br /><pre>
10.head=<ul>
10.tail=</ul>
10.sql=SELECT encryptedValue AS '_decrypt|_+li' FROM data
</pre><br />displays a list of decrypted values.</p>
<p><b>Compatibility</b></p>
This feature can be implemented in a way compatible with the current behavior.
<ol>
<li>Currently only one special column (except <code>_nowrap</code> and <code>_hide</code>) is allowed and they are expected to be listed as first. These columns only affect the rendered content and not the value.
<ul>
<li>For a compatible behavior the value <code>{{colname:R}}</code> must be always the initial value, whereas the rendered value is <code>{{&colname:R}}</code>.</li>
<li>A more natural behavior would be to make <code>{{colname:R}}</code> the <em>rendered value</em>. How much would break with this change?</li>
<li>Note that <code>{{&colname:R}}</code> is obsolete as the same value can be obtained with <code>{{colname.out:R}}</code>. Removing <code>&</code>-values breaks compatibility.</li>
</ul>
</li>
<li>The behavior of <code>_hide</code> and <code>_nowrap</code> is unchanged - these processors are not expected to change the value of the column.</li>
<li>A mixed behavior can be implemented with a special command to set the parsing mode (legacy or new).</li>
</ol> QFQ - Feature #17265 (In Progress): Column parametershttps://project.math.uzh.ch/issues/172652023-11-10T12:52:19ZKrzysztof Putyra
<p>The column _encrypt takes one optional parameter, but currently there is no concept for column parameters.<br />Because of that fetching the parameter is hard coded only for this column.</p>
<p>The column parameter concept intends to improve the situation by introducing a general way to pass parameters to the column renderer. After a vote it was decided to use the functional syntax:</p>
<pre>
# _color column takes two optional parameters:
# - text color
# - background color
# It outputs then the content with the given colors
10.sql = SELECT "red on blue" AS '_color(red,blue)|content'
20.sql = SELECT "red content" AS '_color(red)|content'
30.sql = SELECT "blue backgr" AS '_color(,blue)|content'
</pre>
<p>A special attention must be paid to the column <code>_+<html attrs></code>, because HTML attributes may contain brackets.</p> QFQ - Feature #17252 (In Progress): Renderer Refactoringhttps://project.math.uzh.ch/issues/172522023-11-09T11:38:24ZPhilipp GröbelbauerQFQ - Feature #17251 (New): Report Notation 2.0: Feature Requestshttps://project.math.uzh.ch/issues/172512023-11-08T22:10:00ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es sieht so aus als wenn die Aliase in den STORE_TYPO3 (<a class="external" href="https://docs.qfq.io/en/master/Store.html#store-typo3-bodytext-t">https://docs.qfq.io/en/master/Store.html#store-typo3-bodytext-t</a>) kopiert werden.</p>
<ul>
<li>Ist sichergestellt das bestehende SYSTEM Values wie z.B. <code>feUser</code> nicht durch den Alias ueberschrieben werden koennen?</li>
</ul>
<p>Feature Request</p>
<ul>
<li><code><alias>.sql</code> sollte moeglich sein.</li>
<li>Folgender Code sollte moeglich sein - damit Legacy Code nicht bei jedem Level umgeschrieben werden muss:</li>
</ul>
<pre>
start {
sql = SELECT ...
20 {
sql = SELECT ...
}
}
</pre> QFQ - Feature #17218 (In Progress): JavaScript WebSockethttps://project.math.uzh.ch/issues/172182023-10-31T16:07:04ZCarsten Rosecarsten.rose@math.uzh.ch
<p><a class="external" href="https://git.math.uzh.ch/typo3/coding-week-2023/-/blob/main/websocket.md">https://git.math.uzh.ch/typo3/coding-week-2023/-/blob/main/websocket.md</a></p> QFQ - Feature #17217 (In Progress): Logging mechanism for QFQhttps://project.math.uzh.ch/issues/172172023-10-31T16:04:27ZCarsten Rosecarsten.rose@math.uzh.ch
<p><a class="external" href="https://git.math.uzh.ch/typo3/coding-week-2023/-/blob/main/logging.md">https://git.math.uzh.ch/typo3/coding-week-2023/-/blob/main/logging.md</a></p> QFQ - Feature #17204 (In Progress): load = async for reportshttps://project.math.uzh.ch/issues/172042023-10-31T12:42:15ZPhilipp Gröbelbauer
<p>At the start of a report (like form = ...) the line:</p>
<p>load = async</p>
<p>(or similar) could be introduced. Async Content will not be loaded for the initial page.<br />Instead, a request will be sent via JS to fetch that content asynchronously.<br />While the content is being fetched, a spinning wheel acts as a placeholder.</p>
<p>The Link class can also be extended, so that a link might re-fetch an already displayed report instead of triggering a page reload.</p> QFQ - Feature #16630 (In Progress): QFQ Dev Panelhttps://project.math.uzh.ch/issues/166302023-07-19T15:07:51ZPhilipp Gröbelbauer
<p>Idea: A (floating and movable/minimizable?) panel that is accessible on each page with a QFQ record, if logged in in the backend.<br />The panel gives access to "QFQ Dev Tools" that increase quality of life for the developer, such as:</p>
<p>- Display all variables per Store (C/S/U/Y/T/?)<br />- Allow manipulation of viariables per store, maybe a shortcut for Switch User (=setting {{feUser:U}})<br />- Generate and open a SIP link (by typing the link in a textbox and clicking a button next to it)<br />- Quick access to sql.log, qfq.log, mail.log, ideally more than the last 10 lines<br />- Truncate table 'Dirty'<br />- Quick Access to all Forms and FormElements<br />- Display Info (SW and Versions, e.g. QFQ Version, PHP Version, webserver, ...?)<br />- Show Query Times (Slow Query Detection)</p> 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 #16037 (New): Update 'make bootstrap'https://project.math.uzh.ch/issues/160372023-04-18T09:43:35ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Wird im QFQ Projektverzeichnis `make bootstrap` ausgefuehrt gibt es diverse Hinweise/Warnungen.</li>
</ul>
<a name="Teil-1"></a>
<h1 >Teil 1<a href="#Teil-1" class="wiki-anchor">¶</a></h1>
<ul>
<li>Bitte die Warnungen anschauen und optimalerweise loesen.</li>
<li>Bei denen die wir nicht angehen koennen, bitte eine Erklaerung (am besten in Documentation-Development/SETUP.md) was das Problem ist</li>
<li>Bitte check ob Documentation-Development/SETUP.md aktuell ist</li>
</ul>
<a name="Teil-2"></a>
<h1 >Teil 2<a href="#Teil-2" class="wiki-anchor">¶</a></h1>
<ul>
<li>Bitte das <code>Makefile</code> durchgehen und alles was wir nicht brauchen raus damit.</li>
<li>Rafi hat sehr viel Develop Kram reingenommen, das wir nicht mehr verwenden: lint, phpdoc, docutils, jinja, sphinx, ...
<ul>
<li>Aam besten eine Liste machen was raus kann und kurz mit CR anschauen.</li>
<li>plantuml bitte drin lasses.</li>
</ul></li>
</ul>
<ul>
<li>Bitte alle JS Lib anschauen was raus kann - fuer jQWidgets siehe <a class="issue tracker-2 status-1 priority-2 priority-default" title="Feature: Remove JS: jQWidgets (New)" href="https://project.math.uzh.ch/issues/16036">#16036</a>.</li>
<li>Composer is operating significantly slower than normal because you do not have the PHP curl extension enabled.
<ul>
<li>Check das das min. auf alfred20, alfred22 aktiv ist, am besten auch auf den Thinlinc (/etc/php/cli/...) und den webwork20, webwork22. </li>
<li>Aenderungen bitte im Ansible Playbook nachfuehren (Ticket fuer Levin machen)</li>
</ul></li>
</ul>
<a name="Teil-3"></a>
<h1 >Teil 3<a href="#Teil-3" class="wiki-anchor">¶</a></h1>
<ul>
<li>Die verlinkten Tickets nach Moeglichkeit schliessen.</li>
</ul>
<a name="Meldungen"></a>
<h1 >Meldungen<a href="#Meldungen" class="wiki-anchor">¶</a></h1>
<pre>
$ make bootstrap
...
# update npm at persistent location and copy node_modules (to speed up process)
mkdir -p /var/tmp/qfq_crose1/npm
/bin/cp package.json /var/tmp/qfq_crose1/npm/
cd /var/tmp/qfq_crose1/npm; npm update
npm WARN deprecated popper.js@1.16.1: You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1
npm WARN deprecated phantomjs-prebuilt@2.1.16: this package is now deprecated
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.81.0: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@4.2.1: this library is no longer supported
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 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 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 mkdirp@0.5.1: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
npm WARN deprecated json3@3.3.2: Please use the native JSON object instead of JSON 3
...
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN notsup Unsupported engine for grunt@1.6.1: wanted: {"node":">=16"} (current: {"node":"13.12.0","npm":"6.14.4"})
npm WARN notsup Not compatible with your version of node/npm: grunt@1.6.1
npm WARN qfq@1.0.0 No description
...
found 43 vulnerabilities (5 low, 18 moderate, 15 high, 5 critical)
run `npm audit fix` to fix them, or `npm audit` for details
...
# cd extension/Resources/Private; composer update
cd extension; composer update
Composer is operating significantly slower than normal because you do not have the PHP curl extension enabled.
</pre> 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 #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 #15656 (New): SearchReplace: nice to havehttps://project.math.uzh.ch/issues/156562023-02-28T20:29:00ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Anstelle von 'Form Edit' die `form.id / form.name` anzeigen.</li>
<li>Beim Edit des FormElements die formElement.id im Button anzeigen.</li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/7364/clipboard-202302282128-ueulq.png" alt="" /></p> QFQ - Feature #15323 (Priorize): FormElement in QFQ/report (ohne Form POST)https://project.math.uzh.ch/issues/153232023-01-05T20:43:33ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Creating a FormElement of type 'select list' (or something else), direct in QFQ/report.</p>
<p>Usecase: report which shows all properties of type 'x'. And type 'x' can be selected by a select list.</p>
<p>Currently, such a selectlist has to be created in plain HTML, typically via QFQ/report with '<input ...><option ...>...' - this is painfull.</p>
<p>Option 1: Define a FormElement via QFQ FormEditor and reference such an FormElement.id. QFQ than will just render the FE without any '<form..>' tag.</p>
<p>Option 2: In QFQ report, specify all necessary keywords like 'type, sql1, itemList, ...' in new keyword 'parameter' and set `<level>.content = FormElement` (or 'htmlInput', ...). Example</p>
<pre>
10 {
sql = SELECT 'hello world'
20 {
content = formElement
sql = SELECT gr.id, gr.value FROM Ggroup AS gr WHERE gr.type='property'
parameter = { "type" : "select", "label" : "Property type", "name" : "property"}
}
}
</pre> 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 #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 #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 - Bug #15050 (New): Farbe Textfeld grau bei Wechsel von readonly auf show https://project.math.uzh.ch/issues/150502022-11-18T15:05:39ZJan Haller
<p>Textfeld mit TypeAhead bleibt grau, wenn mit Dynamic Update von readonly auf show gewechselt wird. Ursache <input background-color:"transparent"> (siehe Screenshot).</p> QFQ - Bug #15047 (New): {{allRequiredGiven:V}} = 0, wenn Note Formelement auf required isthttps://project.math.uzh.ch/issues/150472022-11-18T10:11:34ZPascal Rössler
<p>Wenn ein Note Formelement auf mode=required hat, ist {{allRequiredGiven:V}} immer = 0. Da man ein Formelement vom Typ Note gar nicht ausfüllen kann.</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 #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 #14488 (New): FormEditor: JSON Export user friendlyhttps://project.math.uzh.ch/issues/144882022-07-07T15:41:05ZCarsten Rosecarsten.rose@math.uzh.ch
<p><img src="https://project.math.uzh.ch/attachments/download/6369/clipboard-202207071740-ryzdi.png" alt="" /></p> QFQ - Feature #14395 (ToDo): FormEditor: Virtual table columnshttps://project.math.uzh.ch/issues/143952022-06-21T14:09:39ZCarsten Rosecarsten.rose@math.uzh.ch
<p>QFQ Form sollte virtuelle Spalten unterstuetzen.</p>
<p>Ziel: Der Formeditor behandelt solche Spalten wie reale Spalten, der Inhalt wird aber JSON kodiert gespeichert und geladen.</p>
<ul>
<li>In der Spalte <table>.virtual</li>
<li>evtl. kann der Name auch vorgegeben werden - FormElement.name = %virtual.kommePerOeV - wobei virtual frei waehlbar ist und einer realen Char/text Spalte entsprechen muss. Z.B. auch %allCustomField.kommePerOeV. Form sammelt dann alle virtuellen Spalten mit dem gleichen Namen ein und erzeugt dazu ein JSON.</li>
</ul>
<p>Anwendung:</p>
<ul>
<li>Parameter aus Form.parameter, FormElement.parameter koennten so einfach als richige Inputfelder/Checkboxen/Selectlisten einfach implementiert werden.</li>
<li>Eine Sekretaerin koennte so einfach Formulare bearbeiten und um neue Spalten erweitern.</li>
</ul>
<p>Auf Report Ebene waere es gut wenn JSON kodierte Felder einfach in STORE_RECORD oder einen neuen STORE_JSON kopiert werden koennte - dazu waeren vermutlich ein paar Gedanken hilfreich. Erste Idee:</p>
<pre>
10.sql = SELECT fe.virtual AS _+decodeJson FROM FormElement AS fe
</pre>
<p>Und _decodeJson fuellt dann den STORE_JSON.</p>
<p>Am besten Konzept schreiben und min. Philipp, Benj, Enis, Nicola, Elias Villiger um Kommentare bitten.</p> QFQ - Feature #14376 (New): QFQ Bootstrap: if missing, create stored procedureshttps://project.math.uzh.ch/issues/143762022-06-17T13:25:10ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bei einer Migration einer T3 Instanz von einem Host auf einem anderen via <code>mysqldump | mysql</code> werden die Stored Procedures nicht mitkopiert. Das kopieren ist schwierig, da der Definer meisten unterschiedlich ist.</p>
<p>Ein (dirty) Workaround waere: Wenn eine Exception geworfen wird das eine SP fehlt, einen check machen ob die Store Procedures vorhanden sind. Wenn nicht: anlegen. Als Fehlermeldung (wenn das anlegen geklappt hat): Bitte Seite erneut aufrufen.</p>
<p>Wenn man noch ein bisschen nachdenkt kommen wir vielleicht auch auf eine Moeglichkeit 'Missing SP' zu fixen, ohne auf die Exception zu warten.</p> QFQ - Feature #13843 (Ready to sync (develop)): Create JWT via QFQhttps://project.math.uzh.ch/issues/138432022-02-25T08:58:02ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Fuer AMS / SeminarLive benotigen wir JWT token</li>
<li>Ein erste Idee ist dieses in einem 10.sql zu berechenen und das dann via Record Store weiter zu verwednen umd API Calls zu machen.</li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/5890/clipboard-202202241613-xshwv.png" alt="" /></p> QFQ - Feature #13757 (New): QR / Bar-Code Pluginhttps://project.math.uzh.ch/issues/137572022-02-06T09:46:28ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Fuer eine Studenteneinlasskontrolle bei Klausuren waere es gut wenn wir einen QR/Bar-Code Scanner in QFQ haetten.</li>
<li>Scheinbar gibt es diverse Plugins, fuer JQuery z.B.: <a class="external" href="https://www.bestjquery.com/demo/barcode-scanner/">https://www.bestjquery.com/demo/barcode-scanner/</a></li>
<li>Folgende Modi koennten sinnvoll sein:
<ul>
<li>Als Formularelement.</li>
<li>In einem Report, am besten so:
<ul>
<li>das gescannt werden kann ohne einen Button zur Bestaetigung zu druecken,</li>
<li>der Wert direkt mit der Datenbank verglichen wird (check das die Person bekannt ist und noch nicht eingetreten ist) </li>
<li>wenn die Person bekannt ist, der Eintrag gemacht wird das sie eingetreten ist.</li>
</ul></li>
</ul></li>
</ul>
<p>Der Request kommt von Karin Niffeler. In der Biologie wird aktuell eine App verwendet mit der die Einlasskontrolle umgesetzt ist. Die Idee ist das bestehende RemoteExam Tool um die Funktion der Einlasskontrolle zu erweitern. Das RemoteExamtool bekommt damit ein weiteres Feature fuer die Administration von Klausuren.</p> QFQ - Feature #13609 (New): QFQ Introduction: Seite aufloesenhttps://project.math.uzh.ch/issues/136092022-01-04T11:57:28ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Unter <a class="external" href="https://project.math.uzh.ch/projects/qfq/wiki">https://project.math.uzh.ch/projects/qfq/wiki</a></p>
<ul>
<li>Habe ich eine Deine Konzept Seite verschoben unter das Tutorial</li>
<li>Eine neue Seite 'bitte aufloesen' angelegt - bitte anschauen ob da etwas in das Tutorial ubernommen werden kann und anschliessend bitte loeschen.</li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/5718/clipboard-202201041255-qm7vz.png" alt="" /></p> 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 #12186 (New): TinyMCE Config für Objektehttps://project.math.uzh.ch/issues/121862021-03-20T07:50:24ZElias Villiger
<p>Es gibt einige TinyMCE Optionen, die nicht als String, sondern als Objekt angegeben werden. Mit QFQ werden jedoch alle Configs als String übergeben, wodurch diese Optionen nicht gesetzt werden können.</p>
<p>Beispiel: <a class="external" href="https://www.tiny.cloud/docs/configure/content-filtering/#exampleusinginvalid_stylesobject">https://www.tiny.cloud/docs/configure/content-filtering/#exampleusinginvalid_stylesobject</a></p>
<p>Z.B. im FE.parameter (deaktivieren von fixen Tabellengrössen):<br /><pre>
editor-invalid_styles: { 'td': 'width height', 'th': 'width height' }
</pre></p>
<strong>Mögliche Lösungen:</strong>
<ul>
<li>QFQ erkennt, wenn ein Parameter mit {} gewrapped ist und umgibt solche Parameter nicht mit Quotes.</li>
<li>Spezielle Notation in QFQ, um einen Parameter als Objekt zu markieren?</li>
</ul> QFQ - Bug #11195 (New): Dynamic Update: Note not updated if new text is empty (v20.4)https://project.math.uzh.ch/issues/111952020-09-25T09:14:05ZNicola Chiapolini
<p>We had a dynamic updated note-Element with value</p>
<p><code>#!report<br />10.sql = SELECT notes FROM rooms WHERE building = '{{building:FSRD:alnumx}}' AND room = '{{room:FSRD:alnumx}}'<br />10.twig = {{ result.0.notes }}<br /></code></p>
<p>The note-Element is not updated, if the notes is empty or the query does not return a row.<br />The following code works:</p>
<p><code>#!report<br />10.sql = SELECT notes, RAND() AS dummy FROM rooms WHERE building = '{{building:FSRD:alnumx}}' AND room = '{{room:FSRD:alnumx}}'<br />10.twig = <span>{{ result.0.notes }}</span><br /></code></p>
<p>(Since we only update via T3 Extension store, we are still running 20.4 so this might be fixed by now.)</p> 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 - Bug #7456 (Some day maybe): Todos in Code: solve or make tickethttps://project.math.uzh.ch/issues/74562018-12-11T09:23:08ZMarc EggerQFQ - 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 #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>