Project @ iMath: Issueshttps://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892024-03-20T23:59:51ZProject @ iMath
Redmine QFQ - Bug #18184 (New): _link combination of g:_blank and q:.. not workinghttps://project.math.uzh.ch/issues/181842024-03-20T23:59:51ZEnis Nuredini
<p>Wird das special column name _link in Verbindung mit g:_blank und q:... verwendet dann wird nach Klick darauf nicht in einem neuem Tab geöffnet sondern im aktuellen. Das Attribut target wird auf den Button korrekt gesetzt. Es scheint etwas mit dem Handling beim Bestätigen des Alerts zu tun.</p> QFQ - Bug #18163 (New): Form: reload current record after use of sqlBefore/sqlAfter and before Fo...https://project.math.uzh.ch/issues/181632024-03-17T15:40:12ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Scheinbar wird der primary Record nicht neu geladen, falls dieser mit sqlBefore/sqlAfter in einem Native FE nochmal angepasst wurde. Erst nach Page Reload wird der aktuelle Wert gezeigt.</p>
<p>Wird die gleiche Query in einem Action FE gefeuert stimmen die angezeigten Werte direkt nach dem Save, der akuelle Record wird nochmal neu geladen bevor er angezeigt wird.</p>
<p>Aufgefallen ist bei der Erfassung einer getrennten Zeitangabe im Form `myVorlesungPruefungNotiz`.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/9519/clipboard-202403171638-kglq1.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/9520/clipboard-202403171639-tlp2t.png" alt="" /></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 - Bug #18155 (New): Form escapeTypeDefault btn-group not workinghttps://project.math.uzh.ch/issues/181552024-03-15T11:03:10ZEnis Nuredini
<p>Die Auswahl eines escapeTypeDefault im Form Editor macht keinen Unterschied. Es verändert sich nichts.</p> QFQ - Bug #18154 (New): Form autofocus not workinghttps://project.math.uzh.ch/issues/181542024-03-15T11:01:48ZEnis Nuredini
<p>Autofocus funktioniert im Formular schon seit längerem nicht mehr. Obwohl das Attribut richtig gesetzt wird beim jeweiligem Element ist der Effekt nicht aktiv im Frontend.</p>
<p>Wir konnten beobachten dass beim erstmaligem Laden der Autofocus für 1sek. erschienen und danach verschwunden ist. Folgende Reloads zeigten diesen gar nicht mehr an.</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 - Support #18057 (New): {{sqlLog:Y}} returns empty string when not configuredhttps://project.math.uzh.ch/issues/180572024-03-05T07:31:43ZElias Villiger
<p>When the QFQ config for <code>sqlLog</code> (or <code>qfqLog</code>, <code>mailLog</code>) is empty, the default log directory (<code>fileadmin/protected/qfqProject/log/sql.log</code>) is used.</p>
<p>When retrieving <code>{{sqlLog:Y}}</code> from the System Store, this returns an empty string (corresponding to the config value).</p>
<p>Expected behavior: When there's no specific log path configured, I would expect it to return the default/actual path to the log file.</p>
<p>Example use case: <a class="external" href="https://docs.qfq.io/en/master/Report.html#monitor">https://docs.qfq.io/en/master/Report.html#monitor</a></p> QFQ - Feature #18013 (New): Tablesorter: column view selectorhttps://project.math.uzh.ch/issues/180132024-02-27T15:36:32ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Der tablesorter merkt sich die Suchbegriffe und ausgewaehlten Spalten</li>
<li>Wird in einer Spalte A ein Suchbegriff eingegeben und diese Spalte ausgeblendet, wird anschliessend immer noch das gefilterte Ergebnis angezeigt.</li>
</ul>
<p>Das ist verwirrend!!!</p>
<p><img src="https://project.math.uzh.ch/attachments/download/9352/clipboard-202402271633-qfxra.png" alt="" /></p> QFQ - Feature #17858 (New): Check if QFQ is compatible with Typo3 V12https://project.math.uzh.ch/issues/178582024-02-11T18:35:34ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Wenn wir von isg_ldap_sso weg kommen (wird ersetzt durch oidc) gibt es keinen Grund mehr V12 noch nicht anzuschauen.</li>
<li>MNF ist noch auf V9 - Migration koennte ggfs. direkt auf V12 erfolgen.</li>
</ul> QFQ - Feature #17821 (New): Check projects export/autocron access templatehttps://project.math.uzh.ch/issues/178212024-02-05T13:07:58ZEnis Nuredini
<p>Es muss bei allen Projekten das Typo3 Template für den Zugriff auf den Autocron überprüft werden. Für den Zugriff über Production muss noch die jeweilige IP Adresse entnommen werden:<br /><pre>
hostname -I
</pre></p>
<p>Template vom Medtool:<br /><pre>
*Constants*
----------------
# List of IP addresses to grant access: webwork22, medtool
site.allowIP.list = 127.0.0.1,::1,130.60.244.239
*Setup*
-----------
# Layout neu aufbauen
page = PAGE
page.typeNum = 0
# Show content
[ ip('{$site.allowIP.list}') || frontend.user.isLoggedIn]
# Access granted
page.10 < styles.content.get
[else]
page.10 = TEXT
page.10.value = Please log in or access this page from an authorized host. Your current IP address:&nbsp;
page.20 = TEXT
page.20.data = getenv : REMOTE_ADDR
[end]
</pre></p>
<p>Das Template muss auch bei den Options konfiguriert werden:<br /><img src="https://project.math.uzh.ch/attachments/download/9158/Clipboard%20-%20February%205,%202024%202_05%20PM.png" alt="" /></p>
<p>Ebenfalls noch hinzuzufügen bei Includes:<br /><img src="https://project.math.uzh.ch/attachments/download/9161/includes.png" alt="" /></p> QFQ - Feature #17812 (New): Switch User: Neu/Alternativ auch mit FE Group Anpassunghttps://project.math.uzh.ch/issues/178122024-02-03T16:17:40ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #17649 (New): Integrate Etherpad as editorhttps://project.math.uzh.ch/issues/176492024-01-18T16:07:53ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Um mit mehreren Personen an einem Dokument (z.B. qfqWiki) zu arbeiten, koennten wir als Editor Element den <a class="external" href="https://etherpad.org/">https://etherpad.org/</a> verwenden.</li>
<li>Min. via Plugin koennen sogar Bilder eingebunden werden.</li>
<li>Evtl. ist der Etherpad eine Alternative zu TinyMCE.</li>
<li>Wunsch fuer Bilder: per Mausklick kann umgeschaltet werden zwischen Thumbail und regulaere Groesse.
<ul>
<li>Nach dem Einfuegen (und fuer alle anderen) wird nur das Thumbnail angezeigt.</li>
<li>Hintergrund: waehrend eines Meetings wird ein Protokoll erstellt und dabei werden Screenshots gemacht und eingefuegt - die sind aber by Default so gross das der Rest des Textes verschwindet und man die Uebersicht verliert. Thumbnails loesen das Problem.</li>
</ul></li>
</ul>
<ul>
<li>Ggfs. Etherpad nicht nur in einem Form zeigen, sondern direkt in Report.</li>
</ul> QFQ - Feature #17616 (New): Automate QFQ Build Prozesshttps://project.math.uzh.ch/issues/176162024-01-16T11:23:53ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Aktuell ist es extrem muehsam eine neue QFQ Version zu bauen.</li>
<li>Es waere sehr erstrebenswert neuen QFQ Versionen auf Knopfdruck erzeugen zu koennen.</li>
</ul>
<p>Ideen:</p>
<ul>
<li>Mit jedem Merge eines Branches in Develop wird ein Eintrag in die Releasenotes gemacht.
<ul>
<li>Im Merge Request steht die Ticketnummer.</li>
<li>Daraus kann das Subject fuer die `Releasenotes.nextversion` genommen werden.</li>
<li>Das Ticket wird in den Milestone '_nextversion' verschoben und auf 'Ready to sync' gesetzt.</li>
</ul></li>
</ul>
<ul>
<li>Bei einem Merge von Develop nach Master Files (alle in Develop gesammelten Branches auf einmal) wird eine neue Version gebaut
<ul>
<li>Es wird eine Versionsnummer besteimmt. Z.B. 24.1.3 - die '3' ist ein Counter die bei jeder neuen Version hochgezaehlt wird. Wechselt der Monat wird sie auf 0 zurueck gesetzt. Das Jahr wird ebenfalls automatisch angepasst.</li>
<li>In Project wird ein Milestones mit der neuen Versionsnummer angelegt.</li>
<li>`Releasenotes.nextversion` wird sortiert nach Features/Bug/Note und diese werden in die finalen Release-Notes kopiert.</li>
<li>Alle aufgefuehrten Tickets werden geschlossen. Der Milestone wird geschlossen.</li>
</ul></li>
</ul>
<p>Subject ist</p> QFQ - Feature #17481 (New): BS modal windowhttps://project.math.uzh.ch/issues/174812023-12-15T13:53:28ZJan Haller
<p>It is often useful to present the user with a modal window (e.g. containing additional information). The following example is based on Bootstrap (<a href="https://getbootstrap.com/docs/3.4/javascript/#modals" class="external">BS Modal</a>)</p>
<p><img src="https://project.math.uzh.ch/attachments/download/8916/clipboard-202312151436-hwvg1.png" alt="" /></p>
<pre><code class="html syntaxhl"><span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal fade"</span> <span class="na">id=</span><span class="s">"myModal"</span> <span class="na">tabindex=</span><span class="s">"-1"</span> <span class="na">role=</span><span class="s">"dialog"</span> <span class="na">aria-labelledby=</span><span class="s">"detailsModalLabel"</span> <span class="na">aria-hidden=</span><span class="s">"true"</span><span class="nt">></span>
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal-dialog"</span> <span class="na">role=</span><span class="s">"document"</span><span class="nt">></span>
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal-content"</span><span class="nt">></span>
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal-header"</span><span class="nt">></span>
<span class="nt"><h5</span> <span class="na">class=</span><span class="s">"modal-title"</span> <span class="na">id=</span><span class="s">"detailsModalLabel"</span><span class="nt">></span>{{pubFormText:RE}}<span class="nt"></h5></span>
<span class="nt"></div></span>
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal-body"</span><span class="nt">></span>
{{r_countPublications:RE:all}} Publikationen eingetragen <span class="nt"><br><br></span>
({{r_countPublications:R0}} - {{r_countPublicationsNotInEdit:R0}}) Publikationen müssen noch überprüft/angepasst werden. Editiere Publikation und prüfe den unteren Abschnitt, falls ok dann speichern.
<span class="nt"></div></span>
<span class="nt"><div</span> <span class="na">class=</span><span class="s">"modal-footer"</span><span class="nt">></span>
<span class="nt"><button</span> <span class="na">type=</span><span class="s">"button"</span> <span class="na">class=</span><span class="s">"btn btn-secondary"</span> <span class="na">data-dismiss=</span><span class="s">"modal"</span><span class="nt">></span>Close<span class="nt"></button></span>
<span class="nt"></div></span>
<span class="nt"></div></span>
<span class="nt"></div></span>
<span class="nt"></div></span>
<span class="nt"><a</span> <span class="na">id=</span><span class="s">"myModalTrigger"</span> <span class="na">data-toggle=</span><span class="s">"modal"</span> <span class="na">data-target=</span><span class="s">"#myModal"</span><span class="nt">></span>Open Modal<span class="nt"></a></span>
</code></pre>
<p>It would be nice to include this functionality into QFQ somehow without having to copy/paste this block of code every time.</p> QFQ - Feature #17412 (In Progress): Per Form: note, tag, reminder date, done flaghttps://project.math.uzh.ch/issues/174122023-12-05T22:38:13ZCarsten Rosecarsten.rose@math.uzh.ch
<p>In unseren QFQ Applikationen fuer die Benutzer aber auch fuer die Applikationsentwickler waere folgende Funktion nett:</p>
<ul>
<li>Auf einem Formular gibt es einen <strong>Button</strong> via dem man sich Notizen zum aktuellen Record (Antrag, ...) macht (entweder als Popup oder Modal).</li>
<li>Die Option kann an/abgeschaltet werden (auch dynamisch je nach eingeloggtem User)</li>
<li>Die Logik soll fix in QFQ mittels form/qfqr Files hinterlegt sein. </li>
<li>Durch toolspezifische Formulare/Reports kann es an das Tool angepasst werden.</li>
<li>Titel sollte veränderbar sein.</li>
</ul>
<p>Details:</p>
<ul>
<li>Eine Notiz kann private, <group> oder public sein.
<ul>
<li>Welche <group's> es gibt kann konfiguriert werden. Bsp: admin, developer, dekanat, ...</li>
<li>Es stehen nur solche Gruppen zur Verfuegung in der man selbst Member ist.</li>
</ul></li>
</ul>
<ul>
<li>Der <strong>Button</strong> zeigt die Anzahl Notizen an. Symbol: Blatt Papier mit der Anzahl Notizen als kleine Zahl in einer Ecke. Sobald es min. eine Notiz gibt hat das Blatt eine Farbe.</li>
<li>Hover/Tooltip zeigt die letzten 5 Notizen an (Note, Tag, Author, Created, Reminder, Resubmission).</li>
<li>Die Tags sollen dazu verwendet werden die Notizen zu klassifizieren: todo / feedback / hold / not yet / ...
<ul>
<li>Pro Notizen koennen beliebig viele Tags vergeben werden.</li>
<li>Neue Tags koennen on the fly erzeugt werden.</li>
<li>Die Tags werden mit Typeahead erfasst.</li>
</ul></li>
</ul>
<ul>
<li>Auf dem allgemeinen Dashboard werden die eigenen/group/all Notizen als Summe angezeigt - ein Klick darauf fuehrt in die Listenansicht.</li>
<li>In der Listenansicht werden die eigenen/<group>/alle Notizen angezeigt werden.
<ul>
<li>Sortiert nach 'last modified', Filter auf a) 'user'/'group', b) Inhalt, c) Tags</li>
<li>In der Listenansicht kann von der Notiz direkt zum Antrag / Form / ... gesprungen werden.
<ul>
<li>Damit das funktioniert muessen im Hintergrund weitere Informationen bei der Notiz abgelegt werden (Formular, detail Parameter, ...).</li>
</ul></li>
</ul>
<ul>
<li>Es koennen Notizen angelegt werden, die keinem Form/Record zugeordnet sind. Anwendung: persoenliche Todo Liste, Bsp: 'morgen unbedingt nach Urlaub fragen'.</li>
</ul></li>
</ul>
<ul>
<li>Im Dashboard und in der Listenansicht werden Notizen mit abgelaufenem Reminder besonders hervorgehoben.</li>
<li>Ist das reminder date abgelaufen wird eine Mail versendet.</li>
<li>Pro Notiz kann das Flag 'done' gesetzt werden (dann wird kein Reminder versendet).</li>
</ul>
<p>Anmerkungen:</p>
<ul>
<li>Eine Notiz kann als 'Ticket' gesehen werden (erscheint im Dashboard, kann auf 'done' gesetzt werden, kann tags zur Klassifizierung enthalten).</li>
<li>In dem aktuellen Konzept hat die Notiz mehr einen 'History' Character als Ticket.</li>
<li>Zukunft: zu einer Notiz koennten weitere Informationen abgelegt werden (Assignee, Due Date, ...), damit waere dann ein Ticketsystem moeglich. </li>
<li>Im jetzigen Konzept werden die Notizen i.d.R. einem Table/Record zugeordnet. </li>
<li>Bei z.B. Rueckfragen oder Diskussion waere zusaetzlich eine Thread-ID interressant.</li>
<li>Mit dem Thread Konzept waere das eine interessante Moeglichkeit eine 'minimale Chat Logik' mit QFQ auszuliefern. Das koennte direkt in BEF fuer die Rueckfragen verwendet werden.</li>
</ul> QFQ - Bug #16965 (New): Unhandled exception on SQL queryhttps://project.math.uzh.ch/issues/169652023-09-28T12:36:23ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #16849 (New): Mail: check FROM address for pattern or specific sender addresshttps://project.math.uzh.ch/issues/168492023-09-08T18:09:06ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Von den ZI wird gefordert das nur Emailadressen von Shared-Mailboxen als Absender verwendet werden duerfen.</li>
<li>Damit nicht so schnell Fehler auftreten, soll neue eine Liste von Adressen / Pattern in der QFQ config hinterlegt werden koennen, gegen die getestet werden</li>
</ul> QFQ - Feature #16848 (New): Docker Sendmailhttps://project.math.uzh.ch/issues/168482023-09-08T13:56:32ZEnis Nuredini
<p>Sendmail im Docker funktioniert noch nicht. MTA nicht auf dem Docker installiert.</p>
<p><a class="external" href="https://systemvcs.math.uzh.ch/it/typo3-docker">https://systemvcs.math.uzh.ch/it/typo3-docker</a></p> QFQ - Bug #16506 (In Progress): Error sendmail failed: Umlaute in FROM ADDRESShttps://project.math.uzh.ch/issues/165062023-06-30T07:34:07ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Wenn QFQ Mails sendet und in der FROM Adresse im Realname ein Umlaut vorkommt, verweigert Oultook die Annahme.</li>
<li>QFQ anpassen das alles Felder (TO, CC, BCC, From) auch UTF8 kodiert werden.</li>
</ul>
<pre>
UniqId:: 6486fd7720bd5
------------------------------------------------
toUser:: "Error sendmail failed
support:: [cmd=/var/www/html/typo3conf/ext/qfq/Classes/External/sendEmail -f "Universitäre Lehrförderung <lehrkredit-smtp@math.uzh.ch>" -t "sabine.schneider@ds.uzh.ch" -o message-charset="utf-8" -l "/var/www/html/fileadmin/protected/log/mail.log" -u "=?UTF-8?Q?Bitte=20um=20Best=C3=A4tigung:=20=20Antrag=20Lehrkredit?=
=?UTF-8?Q?=20durch=20Frau=20Dr.=20Daniela=20Fuhrmann?=" -m "Sehr geehrte Frau/Herr Sabine Schneider
Wir möchten Sie bitten den Lehrkredit Antrag von Frau Dr. Daniela Fuhrmann zu begutachten und zu bestätigen oder abzulehnen.
Bitte loggen Sie sich dazu auf der Lehrkredit Homepage ein unter:
</pre> QFQ - Bug #16345 (ToDo): TinyMCE: size / min-height scheint in QFQ V23.3.0 nicht zu funktionierenhttps://project.math.uzh.ch/issues/163452023-06-02T15:15:54ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bitte anschauen / fixen:</p>
<ul>
<li>TinyMCE / Codemirror</li>
<li>Gibt es eine Moeglickeit 'autogrow' zu implementieren?</li>
<li>In der Doku bei Editor (TinMCE, CodeMirror) ist gar nichts zur Groesse bechrieben (zumindest habe ich es nicht gefunden) - dort bitte dokumentieren. Ggfs. muss dann bei 'FE.typ=Text' eine Anmerkung gemacht werden falls sich die Notation unterscheidet.</li>
</ul>
<p><img src="https://project.math.uzh.ch/attachments/download/7997/clipboard-202306021607-rahke.png" alt="" /></p> QFQ - Bug #16343 (New): QFQ/GMX: smtp recjects if subject contains umlaut and is not proper encodedhttps://project.math.uzh.ch/issues/163432023-06-02T14:50:23ZCarsten Rosecarsten.rose@math.uzh.ch
<p><img src="https://project.math.uzh.ch/attachments/download/7998/clipboard-202306021647-yhc8l.png" alt="" /></p>
<p><img src="https://project.math.uzh.ch/attachments/download/7999/clipboard-202306021647-sv9ak.png" alt="" /></p> QFQ - Feature #16305 (In Progress): Inline Editing Text , Merge Requesthttps://project.math.uzh.ch/issues/163052023-05-28T13:37:18ZPascal RösslerQFQ - Feature #16303 (New): Restrict mail sendinghttps://project.math.uzh.ch/issues/163032023-05-27T13:42:07ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Um versehentliches massenhaftes versenden von Mails zu verhindern sollten vor jedem Mailversand Checks durchgefuehrt werden:</p>
<ul>
<li>Checks greifen nur wenn production='yes'</li>
<li>Wenn Check aktiv ist: QFQ Prozess vollstaendig beenden: Damit ist sichergestellt das keine Records als 'done' markiert werden.</li>
<li>Vor dem beenden eine Warnmail versenden an Support: Empfaenger ist konfigurierbar. Pro Minute maximail eine Warnmail.</li>
</ul>
<ul>
<li>Schutz individuelle Emailadresse: Wurden in den letzten 24h mehr als 10 Mails an die gleiche Adresse gesendet?</li>
<li>Schutz gegen Massenmail: Wurden in den letzten 24 Stunden mehr als 500 Mails versendet?</li>
</ul> QFQ - Feature #16297 (New): AutoCron: no SIP https://project.math.uzh.ch/issues/162972023-05-26T08:59:22ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Im AutoCron , wenn z.B. via Report eine Mail versendet wird, funktionieren SIP Parameter nicht (es gibt keine QFQ Session die weitergereicht wird)</li>
<li>Eine Loesung waere das ein AutoCron einen API Key bekommt, mit dem er aufgerufen wird, und dieser User (=API-Key) hat dann entsprechende Berechtigungen. </li>
<li>Der API Key wird in der QFQ Config zentral hinterlegt.</li>
<li>Der API Key ist im OS Crontab eingetragen und wird beim Aufruf mit uebergeben.</li>
</ul> QFQ - Feature #16219 (New): Security: IPs von Hacking Angriffen sperren - Integration voin Fail2Ban https://project.math.uzh.ch/issues/162192023-05-13T12:32:06ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Setup machen damit Fail2Ban automatisiert IPs sperrt.</li>
<li>Setup in qfq.io/doc unter Security dokumentieren.</li>
<li>Gewisse Fehler, z.B. 'Security: attack detected' werden via syslog gemeldent (konfigurierbar in QFQ). Fail2Ban agiert dann entsprechend</li>
<li>In den QFQ/T3 Instanzen eine Seite einrichten die gesperrte IPs anzeigt, damit man schnell testen kann ob eine IP betroffen ist.</li>
<li>Whitelist: IPs die nie gesperrt werden - z.B. UZH.</li>
<li>Greylist: IPs die umgeleitet werden auf eine Seite 'Your IP has been blocked' - z.B. alle Schweizer IPs</li>
<li>Integration eines IP/Geolocations Services.</li>
<li>Neu gesperrte IPs sollen via Mail gemeldet werden.</li>
<li>Bestehende Logfiles analysieren: klassische Versuche auf WP Dateien fuehren automatisch zu einer Sperrung der IP - da koennte z.B. ein cron job oder inotify daemon via fail2ban die IP sperren.</li>
</ul>
<p>Beispiel Angriff:</p>
<pre>
[2022-10-23 03:48:38 / 45.227.253.6 / &lt;no session cookie&gt;] Security: attack detected
Problem: Post/Get Honeypot variable 'email' detected: 1 UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL#
Post/Get Honeypot variable 'username' detected: 1
Post/Get Honeypot variable 'password' detected: 1
[2022-11-23 16:17:30 / 216.131.108.251 / 23r2ldp832obrii5t0oblg3i09] Security: attack detected
Problem: Value of GET variable 'sOIQ' too long. Allowed: 50, Length: 172. Value: '2408 AND 1=1 UNION ALL SELECT 1,NULL,'&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;',table_name FROM information_schema.tables WHERE 2&gt;1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#'
[2022-12-28 02:21:54 / 45.81.39.101 / 2q5m8frmlchk9b0lndt3b00b1h] Security: attack detected
Problem: Value of GET variable 'CDRC' too long. Allowed: 50, Length: 172. Value: '4935 AND 1=1 UNION ALL SELECT 1,NULL,'&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;',table_name FROM information_schema.tables WHERE 2&gt;1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#'
</pre> QFQ - Bug #15794 (Feedback): Tablesorter filter funktionieren nach Reload nicht mehrhttps://project.math.uzh.ch/issues/157942023-03-14T10:08:07ZNicola Chiapolini
<p>Wenn ich in meinen Filtern eine Suche eintrage funktioniert zuerst alles korrekt.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/7489/screenshot1.png" alt="" /></p>
<p>Wenn ich danach aber die Seite neu Lade, verschwinden die view-saver funktionen und die Suche hat keinen Effekt mehr.<br />Das Problem scheint der unten markierte Eintrag im local storage. Wird dieser Gelöscht, funktioniert wieder alles korrekt.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/7490/screenshot2.png" alt="" /></p> QFQ - Feature #15534 (New): FormEditor > CodeMirror > a) sql1: 'Home/End' jumps to technical line...https://project.math.uzh.ch/issues/155342023-02-12T17:05:01ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Hat man im CodeMirror eine Textzeile die im Editor umgebrochen wird und der Cursor steht auf (1), dann springt Taste 'home' auf (2). Gewuenscht waere (3). Es gibt bestimmt eine Option in CodeMirror die man setzen kann fuer das gewuenschte Verhalten - waere gut wenn das der Default waere.</p>
<p><img src="https://project.math.uzh.ch/attachments/download/7260/clipboard-202302121801-dbk1r.png" alt="" /></p>
<p>Wenn moeglich, bitte Highlight fuer matching brackets '({[<' by default aktivieren.</p> QFQ - Feature #15018 (New): SIP not found error: a) fix, b) more information for debugginghttps://project.math.uzh.ch/issues/150182022-11-11T11:34:41ZCarsten Rosecarsten.rose@math.uzh.ch
<p>a) Beim Download haben wir aktuell schwierig zu debuggende Fehler (kann nicht reproduziert werden). #14651, #15001.<br />b) Diverse Ideen:</p>
<ul>
<li>Die in #14651 genannte ID nicht als QFQ Exception gefunden: das macht auch Sinn, denn dort wird die SIP genannt und nicht die QFQ error Log id. Bitte in der Fehlermeldung auf dem Screen die QFQ Error Log ID nennen (am besten mit human readable Timestamp), die kaputte Sip sollte dann im Log stehen. </li>
<li>Im qfq.log bei der SIP Exception angeben wieviele Eintraege die QFQ Session hat. Hintergrund: sollte ein QFQ Coockie fehlen oder frisch angelegt worden sein und die QFQ Session noch quasi leer sein, wuerde man das dann sehen anhand der wenigen Eintaege.</li>
<li>Wenn eine FE Session existiert (und beim Download via Cookie mit uebergeben wurde): Details dazu anzeigen.</li>
<li>Gibt es eine Moeglichkeit das alle Cookies die auf dem Server sind anzuschauen? Ggfs. via IP Adresse Vergleich (wird die IP Adresse zum Cookie gespeichert?) herausfinden welche Cookies zu einem User gehoeren koennten. In dem Fall koennte man diese Cookies in der Exception (qfq.log) nennen, und den SIP Sip Store testweise mit den anderen passenden Sessions laden.</li>
<li>Was koennte man noch angeben?</li>
</ul> QFQ - Feature #14719 (New): Form > Subrecord: Drag'n'Drop - only activate if column 'columnOrd' e...https://project.math.uzh.ch/issues/147192022-09-13T07:29:47ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Aktuell wird bei jedem Subrecord DnD aktiviert, auch wenn es gar keine Spalte 'ord' gibt.</li>
<li>Neuer Default sollte sein, nur bei vorhandener Spalte den DnD zu aktivieren.</li>
</ul> QFQ - Bug #14530 (New): Variables: Action 'X' does not output Type messagehttps://project.math.uzh.ch/issues/145302022-07-26T18:41:06ZNicola Chiapolini
<p>Subject says it all - makes debugging really annoying...</p>
<p><code>4.sql = SELECT "{{la_supervisr:R::X::hallo}}"</code></p>
<p>gives<br /><img src="https://project.math.uzh.ch/attachments/download/6414/clipboard-202207262040-ssmzv.png" alt="" /></p> QFQ - Feature #14494 (In Progress): Bootstrap 5 Migrationhttps://project.math.uzh.ch/issues/144942022-07-10T08:17:45ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>QFQ per Extension Config auf BS3 oder BS5 schalten</li>
<li>Grafischer Formulareditor</li>
<li>Formulare sollen gut aussehen auf einem kleinen Screen und auf einem grossen.
<ul>
<li>D.h. es gibt eine maximale Breite bei einem Form.</li>
</ul></li>
</ul>
<ul>
<li>FormEditor nach Moeglichkeit grafische Unterstuetzung: d.h. Elemente per Drag'n'Drop anordnen.</li>
</ul> QFQ - Feature #14187 (Priorize): qfq.log: show current URLhttps://project.math.uzh.ch/issues/141872022-05-11T09:58:39ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn man im qfq.log sehen koennte über welche URL die QFQ aufgerufen wurde.</p>
<p>Usecase: Auf den SL Touch sehen wir hin und wieder QFQ SIP Errors, sehen aber die URL im Browser nicht (wird nicht angezeigt). Auch fuer spaetere Logfileanalyse ist diese Angabe im Log vermutlich hilfreich.</p> QFQ - Bug #12974 (New): Sanitize Queries in Action-Elementshttps://project.math.uzh.ch/issues/129742021-08-31T18:29:16ZNicola Chiapolini
<p>I just waisted an hour because qfq does not complain at all if the value after <code>sqlXXX = </code> is invalid. This should not happen.</p>
<p>QFQ should never silently ignore bad input unless it has been explicitly told to.</p> QFQ - Feature #12603 (New): Dropdown (Select), Radio, checkbox: itemListAlways={{!SELECT key, val...https://project.math.uzh.ch/issues/126032021-05-29T12:53:26ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Alle Elemente mit dynamischen key oder key/value Angaben haben das Problem, das wenn ein Wert gespeichert wurde, das Form spaeter wieder aufgerufen wird, der Wert nicht mehr in der neuen Liste enthalten hist - beim speichern der alte Wert verloren geht.</p>
<p>Der Effekt tritt gerne auf bei einer Semesterauswahlliste, die nur die sinnvollen zukuenftigen anzeigt. Eine Vorlesung aus einem alten Semester geoeffnet und gespeichert wird, dann ploetzlich einer andren Periode zugeordnet ist.</p>
<p>Vorschlag:</p>
<pre>
itemListAlways={{!SELECT key, value...}}
</pre>
<p>Das Ergebnis wird gemerged (&unify).</p> QFQ - Bug #12545 (New): sql.log not created / updatedhttps://project.math.uzh.ch/issues/125452021-05-13T11:58:36ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Auf <a class="external" href="https://webwork16.math.uzh.ch/vorkurs/">https://webwork16.math.uzh.ch/vorkurs/</a> gab es kein Verzeichnis `/var/www/html/vorkurs/fileadmin/protected/log`.</li>
<li>Es gab auch keine logfiles sql.log, qfq.log, mail.log</li>
<li>Obwohl die Datei sql.log nicht existiert, sieht man in `Login > Setup > Log` immer eine Zeile (pro Sekunde neu/uberschrieben):<br /><pre>
<p><em>2021.05.13 13:55:04 +0200, Reference: 609d139857048</em></p><p>Error open &#039;fileadmin/protected/log/sql.log&#039;: fopen(fileadmin/protected/log/sql.log): failed to open stream: No such file or directory</p>
</pre></li>
<li>Wird das Verzeichnis angelegt (sollte automatisch passieren) <code>mkdir /var/www/html/vorkurs/fileadmin/protected/log; chown www-data:www-datat /var/www/html/vorkurs/fileadmin/protected/log</code> verschwindet der Fehler, die Datei sql.log ist aber trotzdem nicht da.</li>
<li>Wird eine leere Datei angelgt und ein Formular gespeichert, bleibt die Datei leer.</li>
</ul> QFQ - Bug #12513 (New): Implement server side check of maxlengthhttps://project.math.uzh.ch/issues/125132021-05-08T15:11:36ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bei der Implementierung von <a class="issue tracker-2 status-2 priority-2 priority-default" title="Feature: TinyMCE Paste from Word & Character Count/Limit (In Progress)" href="https://project.math.uzh.ch/issues/12439">#12439</a> ist aufgefallen das es kein MaxLength Check auf der Server Seite gibt.</p>
<p>Ziel ist das ein Fehler ausgegeben wird, wenn die maximale Laenge ueberschritten ist.<br />Grund: der User muss informiert werden das seine Angaben nicht vollstaendig gespeichert werden konnten.</p> QFQ - Bug #12395 (Priorize): QFQ Function: Result two times shownhttps://project.math.uzh.ch/issues/123952021-04-16T06:35:55ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bei QFQ-Function scheint es so zu sein, das das result set zweimal ausgegben wird wird function und sql in einem Level vorkommen:</p>
<pre>
# Individual application
70 {
function = FtgApplicationPdf(apId) => commandPdf
sql = SELECT CONCAT('p:{{pageAlias:T}}&form=ap_ftg_dekanat&r=', ap.id, '|s|b|t:<span class="badge">', ap.id, '</span>') AS _page
# Action
, CONCAT( 'z'
, CONCAT('||p:{{pageAlias:T}}&form=ap_ftg&r=', ap.id, '&formModeGlobal=requiredOff|t:Edit|s|q:Really Edit the Application?')
# , CONCAT('||{{commandPdf:R}}|b:0')
, CONCAT('||p:printview_ftg&type=1&apId=', ap.id, '|s|t:PrintView (debug)', IF({{isDev:R}}, '','|r:5'))
) AS _link
, CONCAT(p.lastName, ', ', p.firstName)
</pre><br /> QFQ - Bug #11237 (New): Radiobutton / parameter.buttonClass= btn-default - kein dirty Triggerhttps://project.math.uzh.ch/issues/112372020-09-30T16:10:08ZElias Villiger
<p>Bei Radio buttons mit buttonClass=btn btn-default wird kein dirty-Event (mehr) getriggert (d.h. Save-Button wird nicht aktiviert). Ohne class="btn" funktioniert es.</p> QFQ - Bug #10508 (New): Multi Form broken on Multi DB Instancehttps://project.math.uzh.ch/issues/105082020-05-07T18:38:54ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Aufgefallen auf der RemoteExam Seite</p> QFQ - Bug #9534 (New): FE.type=upload: 'Unknown Mode: ID"https://project.math.uzh.ch/issues/95342019-11-08T15:41:41ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Haengt evtl. mit <a class="issue tracker-1 status-5 priority-4 priority-high2 closed" title="Bug: FE.type=upload: '{{fileDestination}}' saved (Closed)" href="https://project.math.uzh.ch/issues/9532">#9532</a> zusammen.</li>
</ul>
<p>1. User oeffnet neuen Record, das Form hat ein Upload Element, laesst das Upload Element aber leer.' und speichert. Es wird '{{fileDestination}}' (Bug) gespeichert. Das Form wird geschlossen.<br />2. User oeffnet den Record mit dem gleichen Form. <br />3) User klickt auf 'clear upload' (fake Filename '{{fileDestination}}')<br />4) User klickt auf 'Save' - es erscheint die Fehlermeldung 'Unknown Mode: ID"</p> QFQ - Bug #9347 (New): FE.type=upload with dynamic show/hidden: required not detectedhttps://project.math.uzh.ch/issues/93472019-10-11T12:50:57ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bei Stefan gibt es ein Form das dynamisch ein/ausgeblendet wird.</p>
<p>Wenn es eingeblendet ist, soll es required sein.</p>
<p>Browser: Bei Save moniert der Browser nicht das das Feld leer ist.<br />Server: Bei Save moniert der Server nicht das das Feld leer ist.</p> QFQ - Bug #9173 (New): Stale Record Lock: Firefox https://project.math.uzh.ch/issues/91732019-09-18T21:42:34ZCarsten Rosecarsten.rose@math.uzh.ch
<p>a) Wird mit FF ein Candoc Antrag auf forkred18.math.uzh.ch/forkred wie folgt bearbeitet:</p>
<p>open, modify, save, close, open, modify, close: question 'save?' no > open</p>
<p>dann ist der Record anschliessend gesperrt.</p>
<p>Das Verhalten tritt nicht auf mit Opera. <br />Reproduzierbar mit FF unter Linux und MacOS X.</p>
<p>b) Es kann sein das der Effekt mit einem kleinen Form nicht auftritt.</p> QFQ - Bug #9121 (New): sip links have r and __dbIndexData sethttps://project.math.uzh.ch/issues/91212019-09-13T13:52:57ZNicola Chiapolini
<p>If a link is using SIP, the <code>r=0</code> and <code>__dbIndexData=1</code> are defined even if not specified.</p>
<p>Possible Problems:</p>
<ul>
<li>lazy coders like me do not change the lookup-order, so the r from SIP might hide r from the expected stores (especially when using r inside reused content elements).</li>
<li>if no data is passed on, removing the sip rendering is ok, but one needs to remember to add it back if one adds data later (I use sip for all links)</li>
</ul> QFQ - Feature #8962 (New): allow for form fields with identical nameshttps://project.math.uzh.ch/issues/89622019-08-29T19:41:37ZNicola Chiapolini
<p>We have a form with three Action-Elements all pointing to the same column. Each of them calculates the value based on a different dynamic-update form-field (restricted via requiredList).<br />This works perfectly, but I need to adjust the name directly in the database...</p>
<p>Could this check be removed? (At least for action elements, but I can imagine this to be useful even with native dynamic-update elements.)</p> QFQ - Feature #8082 (New): Contact form without saving recordhttps://project.math.uzh.ch/issues/80822019-03-18T13:13:09ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Fuer z.B. Kontaktformulare waere es sinnvoll wenn man eine Form konfigurieren koennte das keinen Record speichert.</p>
<p>Z.B. in dem man keine Primary Table spezifiziert.</p>
<p>Das gleiche koennte man in einem Passwort Reset Form benoetigen (#7164).</p> QFQ - Feature #8044 (Priorize): Transaction: a) Form, b) Reporthttps://project.math.uzh.ch/issues/80442019-03-14T15:35:25ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Es waere gut wenn ein Form automatisch/individuell alles in einer Transaction kapseln wuerde.</li>
<li>Es waere gut wenn man in QFQ start/ende einer Transaction definieren koennte.</li>
</ul>
<p>Ticket bleibt nur dann auf 'high' wenn es einfach zu implementieren ist.</p> QFQ - Feature #6723 (New): Report QFQ Installation and Versionhttps://project.math.uzh.ch/issues/67232018-09-16T09:25:53ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn man eine Uebersicht haette wo welche Installation mit welche QFQ version laufen.</p>
<p>In der Configuration eintragen:</p>
<pre>
serviceReportQfqVersion = https://qfq.io/index.php?id=service&version={{qfqVersion:Y}}[,<next reporting URL>]
</pre>
<ul>
<li>Die Variable {{qfqVersion}} gibt es vermutlich noch nicht.</li>
<li>Der Aufruf erfolgt via wget (nicht via file_get_content, da dort allow_url_fopen benoetigt wird)
<ul>
<li>bei der Erstinstallation </li>
<li>bei jedem QFQ Update</li>
</ul></li>
</ul>
<ul>
<li>Das sollte einfach zu implementieren sein: QFQ checkt die Versionsnummer bei jedem Start, dort koennte der Hook eingbaut werden.</li>
<li>Es koennen mit Komma getrennt mehrere Service URLs angegeben werden - so koennte MNF z.B. ein eigenes Reporting haben und I-MATH bekommt auch was davon mit.</li>
</ul> QFQ - Bug #6116 (Priorize): value of checkbox not saved https://project.math.uzh.ch/issues/61162018-05-29T09:43:08ZNicola Chiapolini
<p>In one of our forms, we have the following checkbox:<br /><pre><code class="sql syntaxhl"><span class="k">INSERT</span> <span class="k">INTO</span> <span class="nv">`FormElement`</span> <span class="p">(</span><span class="nv">`id`</span><span class="p">,</span> <span class="nv">`formId`</span><span class="p">,</span> <span class="nv">`feIdContainer`</span><span class="p">,</span> <span class="nv">`dynamicUpdate`</span><span class="p">,</span> <span class="nv">`enabled`</span><span class="p">,</span> <span class="nv">`name`</span><span class="p">,</span> <span class="nv">`label`</span><span class="p">,</span> <span class="nv">`mode`</span><span class="p">,</span> <span class="nv">`modeSql`</span><span class="p">,</span> <span class="nv">`class`</span><span class="p">,</span> <span class="nv">`type`</span><span class="p">,</span> <span class="nv">`subrecordOption`</span><span class="p">,</span> <span class="nv">`encode`</span><span class="p">,</span> <span class="nv">`checkType`</span><span class="p">,</span> <span class="nv">`checkPattern`</span><span class="p">,</span> <span class="nv">`onChange`</span><span class="p">,</span> <span class="nv">`ord`</span><span class="p">,</span> <span class="nv">`tabindex`</span><span class="p">,</span> <span class="nv">`size`</span><span class="p">,</span> <span class="nv">`maxLength`</span><span class="p">,</span> <span class="nv">`bsLabelColumns`</span><span class="p">,</span> <span class="nv">`bsInputColumns`</span><span class="p">,</span> <span class="nv">`bsNoteColumns`</span><span class="p">,</span> <span class="nv">`rowLabelInputNote`</span><span class="p">,</span> <span class="nv">`note`</span><span class="p">,</span> <span class="nv">`adminNote`</span><span class="p">,</span> <span class="nv">`tooltip`</span><span class="p">,</span> <span class="nv">`placeholder`</span><span class="p">,</span> <span class="nv">`value`</span><span class="p">,</span> <span class="nv">`sql1`</span><span class="p">,</span> <span class="nv">`parameter`</span><span class="p">,</span> <span class="nv">`parameterLanguageA`</span><span class="p">,</span> <span class="nv">`parameterLanguageB`</span><span class="p">,</span> <span class="nv">`parameterLanguageC`</span><span class="p">,</span> <span class="nv">`parameterLanguageD`</span><span class="p">,</span> <span class="nv">`clientJs`</span><span class="p">,</span> <span class="nv">`feGroup`</span><span class="p">,</span> <span class="nv">`deleted`</span><span class="p">,</span> <span class="nv">`modified`</span><span class="p">,</span> <span class="nv">`created`</span><span class="p">)</span> <span class="k">VALUES</span>
<span class="p">(</span><span class="mi">164</span><span class="p">,</span> <span class="mi">1000</span><span class="p">,</span> <span class="mi">380</span><span class="p">,</span> <span class="s1">'no'</span><span class="p">,</span> <span class="s1">'yes'</span><span class="p">,</span> <span class="s1">'reg_done'</span><span class="p">,</span> <span class="s1">'Final'</span><span class="p">,</span> <span class="s1">'hidden'</span><span class="p">,</span> <span class="s1">'{{SELECT IF( title_hash != </span><span class="se">\'\'</span><span class="s1"> AND (SELECT SUM(head) FROM `phd_committee_members` WHERE phd_student=(SELECT id FROM phd_graduation WHERE shortname=</span><span class="se">\'</span><span class="s1">{{shortname}}</span><span class="se">\'</span><span class="s1"> )) = 1,</span><span class="se">\'</span><span class="s1">show</span><span class="se">\'</span><span class="s1">, </span><span class="se">\'</span><span class="s1">hidden</span><span class="se">\'</span><span class="s1">) FROM phd_graduation WHERE shortname=</span><span class="se">\'</span><span class="s1">{{shortname}}</span><span class="se">\'</span><span class="s1"> }}'</span><span class="p">,</span> <span class="s1">'native'</span><span class="p">,</span> <span class="s1">'checkbox'</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'specialchar'</span><span class="p">,</span> <span class="s1">'alnumx'</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'row,label,/label,input,/input,note,/note,/row'</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'{{!SELECT IF(reg_done, reg_done, NOW()) FROM phd_graduation WHERE id=</span><span class="se">\'</span><span class="s1">{{id:RE}}</span><span class="se">\'</span><span class="s1"> }}'</span><span class="p">,</span> <span class="s1">'checkBoxMode = single</span><span class="se">\r\n</span><span class="s1">label2 = Submit this form and start the process.'</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'no'</span><span class="p">,</span> <span class="s1">'2018-05-29 09:34:25'</span><span class="p">,</span> <span class="s1">'2018-03-09 10:06:26'</span><span class="p">);</span>
</code></pre></p>
<p>This checkbox gets correctly displayed with all the values of <code>mode sql</code> below, but only saved to the DB for some of them:</p>
<p><strong>good</strong><br /><pre><code>
{{SELECT IF( title_hash != '' ,'show', 'hidden') FROM phd_graduation WHERE shortname='{{shortname}}' }}
{{SELECT IF( title_hash != '' AND (SELECT SUM(head) FROM `phd_committee_members` WHERE phd_student=(SELECT id FROM phd_graduation WHERE shortname='{{shortname}}' )) = 1,'show', 'hidden') FROM phd_graduation WHERE shortname='{{shortname}}' }}
</code></pre></p>
<p><strong>bad</strong><br /><pre><code>
{{SELECT IF( title_hash != '' ,'show', 'hidden') FROM phd_graduation WHERE id='{{id}}' }}
{{SELECT IF( title_hash != '' ,'show', 'hidden') FROM phd_graduation WHERE shortname='{{shortname:R0}}' }}
{{SELECT IF( title_hash != '' ,'show', 'hidden') FROM phd_graduation WHERE shortname='{{shortname:FR0}}' }}
{{SELECT IF( title_hash != '' AND (SELECT SUM(head) FROM `phd_committee_members` WHERE phd_student='{{id:R0}}') = 1,'show', 'hidden') FROM phd_graduation WHERE id='{{id:R0}}' }}
</code></pre></p>
<p><code>shortname</code> is a nativ / extra field in the form, <code>id</code> is not part of the form.</p>
<p>In any case, a displayed field should also be saved ;-)</p> QFQ - Feature #4869 (New): Dynamic Update (show, hide, readonly?, required?) for Template Group E...https://project.math.uzh.ch/issues/48692017-11-04T10:36:18ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Requested in <a class="issue tracker-1 status-5 priority-3 priority-high3 closed behind-schedule" title="Bug: Dynamic updates Pill - show/hide (Closed)" href="https://project.math.uzh.ch/issues/4865">#4865</a></li>
<li>Die Umsetzung sollte nicht so schwierig sein um eine komplette TG-Group aus/einzublenden.</li>
<li>Ob 'readonly' und 'required' Sinn machen ist nicht klar.</li>
<li>Dynamic Update innerhalb einer TG pro FE ist vermutlich schwierig - wird aber benoetigt (siehe unten)</li>
</ul> QFQ - Feature #1623 (Some day maybe): RealURLhttps://project.math.uzh.ch/issues/16232016-02-05T12:44:23ZCarsten Rosecarsten.rose@math.uzh.ch
URL Path:
<ul>
<li>Language</li>
<li>Type: standard, print, wide (wie standard, nur breiter), pure (kein HTML), xml</li>
<li>koennen die DBQ2 / FORM2 Parameter genauso verwendet werden wie bisher: GET & POST</li>
<li>Optional: Gibt es Aenderungen wie DBQ2 interne Links bauen muss? Bsp.: bisher "index.php?id=1234". Mit Real URL soll der Link zeigen auf "www.math.uzh.ch/vorleseung/mat123"</li>
</ul>