Project @ iMath: Issueshttps://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892020-07-13T08:11:32ZProject @ iMath
Redmine QFQ - Feature #10874 (New): Erstellen eines Foreign Keys in der Tabelle "FormElement"https://project.math.uzh.ch/issues/108742020-07-13T08:11:32ZChristoph Fuchs
<p>Wenn die "FormElement"-Tabelle angepasst wird:<br /> ALTER TABLE xyz.FormElement<br /> ADD CONSTRAINT FK_FormElement_formId FOREIGN KEY (formId)<br /> REFERENCES xyz.Form (id) ON DELETE CASCADE ON UPDATE CASCADE;<br />kann der Primärschlüssel der "Form"-Tabelle manuell angepasst werden und die "FormElement" Tabelle wird automatisch nachgeführt.<br />Ist auch datenbanktechnisch korrekt.</p> QFQ - Feature #10819 (New): Persistent SIP - second tryhttps://project.math.uzh.ch/issues/108192020-06-29T21:02:59ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Definition:</p>
<p>Keinen neuen URL Parameter. Weiterhin 's'.<br />Statt einem 13 stelligen Code wird ein 32 stelliger md5 hash genommen.<br />Mit Angabe der Deadline wird die SIP persistent.<br />Optional kann auch feGroup(s) angegeben werden<br />Persistent: s:<deadline>:<feGroup(s)></p>
<p>Die Deadline kann 'date' oder 'date-time' sein.</p>
<p>Bsp:</p>
<p>'p:home&grId=67&xId=8|s:9999-12-12|t:hello' AS _link</p> QFQ - Feature #10763 (New): form accessed and submitted despite logout?https://project.math.uzh.ch/issues/107632020-06-16T09:43:02ZNicola Chiapolini
<p>Wir hatten ein Problem in der DB, das ich auf folgende (annonymisierte) Log-Zeilen zurückführen konnte:</p>
<p><code><br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][INSERT INTO `phd_graduation` ( `shortname`, `student_id`, `name`, `firstname`, `salutation`, `birthday`, `mail_uzh`, `mail_private`, `nationality`, `subject_of_study`, `title_of_thesis`, `colloquium_start`, `disputation_start` ) VALUES ( 'aaaaaa', '12-345-678', 'Muster', 'Pauline', 'Frau', '1991-02-02', 'pauline.muster@uzh.ch', 'muster@example.com', 'FR', '50646022', 'A Thesis Title', '2020-08-04 13:00', '2020-08-04 13:00' )]<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][ID: 492 - affected rows: 1]<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][UPDATE `phd_graduation` SET `pdf_of_thesis` = 'studentadmin/phd/thesis/aaaaaa-thesis.pdf' WHERE id = '492']<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][Affected rows: 1]<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][UPDATE phd_graduation SET title_hash=MD5(title_of_thesis) WHERE shortname='aaaaaa']<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][Affected rows: 1]<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][UPDATE phd_graduation SET reg_done=NULL WHERE reg_done="0000-00-00 00:00:00"]<br />[2020.06.15 17:58:16 +0200][89.206.112.13][FE:aaaaaa,Page:8,tt:43,form:phd_reg-graduation][Affected rows: 0]<br />[2020.06.15 17:59:04 +0200][89.206.112.13][form:phd_reg-graduation][INSERT INTO `Dirty` (`sip`, `tableName`, `recordId`, `expire`, `recordHashMd5`, `tabUniqId`, `feUser`, `qfqUserSessionCookie`, `dirtyMode`, `remoteAddress`, `created`) VALUES ( '5ee79a9c90289','phd_graduation','492','2020-06-15 18:14:03','dfb854d090d8febd3b6d2e976c1c5f88','1593618907666','','6ba6k9hj4je4lgf2puhnmrsddh','exclusive','89.206.112.13','20200615175904' )]<br />[2020.06.15 17:59:04 +0200][89.206.112.13][form:phd_reg-graduation][ID: 20386 - affected rows: 1]<br />[2020.06.15 17:59:12 +0200][89.206.112.13][Page:8,tt:43,form:phd_reg-graduation][DELETE FROM `Dirty` WHERE `id`='20386' LIMIT 1]<br />[2020.06.15 17:59:12 +0200][89.206.112.13][Page:8,tt:43,form:phd_reg-graduation][Affected rows: 1]<br />[2020.06.15 17:59:12 +0200][89.206.112.13][Page:8,tt:43,form:phd_reg-graduation][INSERT INTO `FormSubmitLog` (`formData`, `sipData`, `clientIp`, `feUser`, `userAgent`, `formId`, `recordId`, `pageId`, `sessionId`, `created`)VALUES ('{"email":"","username":"","password":"","recordHashMd5":"dfb854d090d8febd3b6d2e976c1c5f88","reg_done-492":"2020-06-15 17:58:20","mail_private-492":"muster@example.com","title_of_thesis-492":"<p>A Thesis Title<\/p>","pdf_of_thesis-492":"5ee79a9c8ebcf","colloquium_start-492":"2020-08-04 13:00","disputation_start-492":"2020-08-04 13:00","_sipForTypo3Vars":"5ee79a9c90172"}', '{"birthday":"1991-02-02","firstname":"Pauline","form":"phd_reg-graduation","mail_uzh":"pauline.muster@uzh.ch","name":"Muster","nationality":"FR","r":"492","salutation":"Frau","shortname":"aaaaaa","student_id":"12-345-678","subject_of_study":"50646067","s":"5ee79a9c90289","urlparam":"birthday=1991-02-02&firstname=Pauline&form=phd_reg-graduation&mail_uzh=pauline.muster@uzh.ch&name=Muster&nationality=FR&r=492&salutation=Frau&shortname=aaaaaa&student_id=12-345-678&subject_of_study=50646067"}', '89.206.112.13', '', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36', '1000', '492', '8', '6ba6k9hj4je4lgf2puhnmrsddh', NOW())]<br />[2020.06.15 17:59:12 +0200][89.206.112.13][Page:8,tt:43,form:phd_reg-graduation][ID: 42051 - affected rows: 1]<br />[2020.06.15 17:59:12 +0200][89.206.112.13][Page:8,tt:43,form:phd_reg-graduation][UPDATE `phd_graduation` SET `shortname` = 'aaaaaa', `student_id` = '12-345-678', `name` = 'Muster', `firstname` = 'Pauline', `salutation` = 'Frau', `birthday` = '1991-02-02', `mail_uzh` = 'pauline.muster@uzh.ch', `mail_private` = 'muster@example.com', `nationality` = 'FR', `subject_of_study` = '50646067', `title_of_thesis` = 'A Thesis Title', `reg_done` = '2020-06-15 17:58:20', `colloquium_start` = '2020-08-04 13:00', `disputation_start` = '2020-08-04 13:00' WHERE id = '492']<br /></code></p>
<p>Für die zweite Hälfte des Logs fehlt der feUser - es scheint der User hat/wurde ausgeloggt. Das Problem damit ist, dass die SIP-Links für die Formulare nur mit Login sichtbar sind und das Formular deshalb davon ausgeht, dass der FE-User definiert ist. Natürlich ist es unser Fehler, dass wir das im Formular nicht abfangen. Allerdings bricht QFQ sowohl hier wie auch bei <a class="issue tracker-1 status-4 priority-2 priority-default" title="Bug: Formular trotz Timeout gespeichert (Feedback)" href="https://project.math.uzh.ch/issues/9898">#9898</a> das intuitive Verständnis von Login/Logout. Sicherer und User-freundlicher wäre es, wenn ein Logout sich sofort auf alle SIP und Formulare auswirkt. Konkret also.</p>
<p>Aufgefallen ist uns das ganze, weil in der letzten Zeile `subject_of_study` falsch ist (da das in einem Extra-Feld mit einem Query <code>... WHERE shortname='{{ feUser:TE }}'</code> gefüllt wird)</p> QFQ - Feature #10593 (New): label2: text behind input elementhttps://project.math.uzh.ch/issues/105932020-05-16T08:57:09ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Fuer Radios / Checkbox gibt es bereits 'label2' das ist ein Text der hinter dem Input Element angezeigt wird.</p>
<p>Das waere fuer alle Elemente interessant.</p>
<p>Besonders: Upload .. damit man Hinweise moeglichst knapp am File-Button positionieren kann.</p>
<p>Evtl. kann damit auch einfach Text unterhalb eines Input Elements angezeigt werden</p> QFQ - Feature #10115 (New): TypeAhead: static listhttps://project.math.uzh.ch/issues/101152020-02-13T09:34:27ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Neues Attribute: data-typeahead-list.</p>
<p>Inhalt JSON kodiert, genau wie die bisherige AJAX Response.</p> QFQ - Feature #10014 (New): Manual.rst: describe behaviour and process order of fillStoreVar, sla...https://project.math.uzh.ch/issues/100142020-02-01T21:27:54ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Die Parameter muessen klarer beschrieben werden. Insbesondere auch die zeitliche Abhaengigkeit.</p>
<p>fillStoreVar auf Form Ebene ist nicht klar, das es fuer FE genutzt werden kann.</p>
<p>Unteschiedliches Verhalten von FE Native, TemplateGroup, Upload und ggfs. doppeltes feuern beschreiben.</p>
<p>Verstaendnisfrage von NC: Wird sqlBefore vor dem eigentlichen SendMail ausgefuehrt? A: Nein. Der Begriff 'sqlBefore/After' wird nicht verstanden das er sich auf sqlInsert/sqlUpdate bezieht.</p>
<p>Es sollten andere Begriffe gefunden werden.</p> QFQ - Feature #9983 (New): Report Notation: new keyword 'range'https://project.math.uzh.ch/issues/99832020-01-28T10:14:16ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Mitunter moechte man ueber records iterieren. Das ist nervig in SQL zu implementieren.</p>
<p>Vorschlag:</p>
<p>10.range = 1:10</p>
<p>Das 'range' Keyword ist exklusiv oder zu 'sql'.<br />Beides gleichzeitig ist nicht erlaubt.</p>
<p>Es wird ein Resultset mit der Spalten 'counter' erzeugt.</p> QFQ - Feature #9853 (New): Check das SQL / QFQ / Mail Logfile geschrieben wirdhttps://project.math.uzh.ch/issues/98532020-01-09T10:15:45ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #9811 (New): Report: tag every n'th rowhttps://project.math.uzh.ch/issues/98112019-12-20T17:28:51ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Fuer <div> bei denen alle 3 DB-Rows ein `</div><div class="row">` gerendert werden soll:<br /><pre>
10 {
sql = ..
every = 3 row|</div><div class="row">
}
</pre><br />evtl auch `every = 3 col|</div><div class="row">`</p> QFQ - Feature #9781 (New): Button: CSS class to make buttons smallerhttps://project.math.uzh.ch/issues/97812019-12-16T17:59:37ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #9777 (New): Logging QFQ Variableshttps://project.math.uzh.ch/issues/97772019-12-16T16:17:48ZMarc Egger
<p>We need the ability to see how a variable is replaced and also which variables exist at a certain point in time in a specific store.</p>
<p>Solutions:</p>
<ul>
<li>Introduce the '?' syntax:
<ul>
<li>{{? someVariable:VR0}}, {{? SELECT ... }}, {{?! SELECT ... }}, ...</li>
<li>the parser will replace the variable as usual and write the result to qfq.log</li>
<li>{{? * :V}} will output all the V-store variables</li>
</ul>
</li>
<li>Introduce '?' as a variable:
<ul>
<li>{{ ? : VR }}</li>
<li>All variables in stores V and R will be written to qfq.log</li>
</ul></li>
</ul>
<p>Marc preferes the first variant, since it is more powerfull.</p> QFQ - Feature #9707 (New): SIP security: encode pageId and check pageId on decodehttps://project.math.uzh.ch/issues/97072019-12-04T18:30:52ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Vermutlich kann mit wenig Aufwand die aktuelle T3 PageID in der SIP hinterlegt werden und diese beim dekodieren abgefragt werden.</p> QFQ - Feature #9706 (New): Multi File Upload (hidden template group)https://project.math.uzh.ch/issues/97062019-12-04T15:47:32ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Waere es moeglich ein Multi File Upload zu implementieren (Mode: Advandced Upload) der implizit eine Templategroup erzeugt (ohne das der Application Developer diese definiert)?</p> QFQ - Feature #9602 (New): Form definition as JSONhttps://project.math.uzh.ch/issues/96022019-11-20T09:22:08ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Nach Diskussion mit BB, ME: Die Formdefintion soll neu als JSON Datei abgelegt werden.</p>
<ul>
<li>Mergen von Forms (mehrere Entwickler) sollte moeglich werden.</li>
<li>Copy/Paste von Forms oder FormElementen via Zwischenablage.</li>
<li>Die Forms werden weiterhin im FormEditor bearbeitet.</li>
<li>Alle Form JSON Dateien werden in einem Verzeichnis abgelegt.</li>
</ul> QFQ - Feature #9537 (New): FormEditor: Edit fieldset in FrontEndhttps://project.math.uzh.ch/issues/95372019-11-10T09:50:29ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Der Pencil fuer das Edit Fieldset Symbol ist aktuell unter dem Fieldset angeordnet. Es ist schwer zu erkennen welchen Pencil man klicken muss um das Fieldset zu beabeiten. Gut waere hinter dem Titel.</p> QFQ - Feature #9352 (New): FE 'Native' fire slaveId, sqlAfter, sqlIns...https://project.math.uzh.ch/issues/93522019-10-12T13:32:11ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Bislang wird slaveId, sqlAfter,... nur fuer FE 'Action' und FE 'Upload' ausgefuehrt.</li>
<li>Spricht etwas dagegen das immer zu feuern?</li>
<li>Die Funktion waere fuer MultiForm Advanced wie geschaffen.</li>
<li>Die Anweisungen werden bei 'save()' gefeuert - zumindesd 'slaveId' koennte auch bei 'load()' interessant sein.</li>
</ul> QFQ - Feature #9208 (New): Manage 'recent' recordshttps://project.math.uzh.ch/issues/92082019-09-22T08:38:05ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>QFQ soll pro User 'Last Recently Used' Records anlegen</li>
</ul>
<pre>
CREATE TABLE `Recent` (
`id` int(11) NOT NULL,
`tableName` varchar(63) NOT NULL,
`r` int(11) NOT NULL,
`feUser` varchar(63) NOT NULL,
`formId` int(11) NOT NULL,
`recordModified` enum('yes','no','') NOT NULL DEFAULT '',
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `Recent`
--
ALTER TABLE `Recent`
ADD PRIMARY KEY (`id`),
ADD KEY `tableName` (`tableName`),
ADD KEY `feUserTableNameR` (`feUser`,`tableName`,`r`) USING BTREE;
ADD KEY `feUserFormIdR` (`feUser`,`formId`,`r`) USING BTREE;
</pre> QFQ - Feature #9128 (New): Error Message: not replaced variables- a) replace back to '{{', b) und...https://project.math.uzh.ch/issues/91282019-09-14T09:50:32ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Im Feld SQL-Final Feld sind teilweise die '{{' u. '}}' nicht zurueck uebersetzt. Das machen.</li>
<li>Nicht ersetze Variablen bei SQL Final rot unterstreichen.</li>
</ul> QFQ - Feature #8719 (New): extraButtonLock: add support for 0/1https://project.math.uzh.ch/issues/87192019-07-12T12:00:10ZCarsten Rosecarsten.rose@math.uzh.ch
<p>extraButtonLock hat aktuell keinen Support fuer 0/1.</p>
<p>Sobald 'extraButtonLock' angegeben ist, ist es aktiv.</p> QFQ - Feature #8336 (New): Form > modified > Close|New: a) Optional disable popup, b) custom text...https://project.math.uzh.ch/issues/83362019-05-14T16:48:53ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Das Popup oeffnet sich wenn das Form 'dirty' ist und auf <strong>close</strong> oder <strong>new</strong> gedrueckt wurde.</p>
<p>Configure via SYSTEM & Form.</p>
<p>a) enable/disable popup. By default enable, can be switched off (unlikely).<br />b) custom text: Message & Buttons<br />c) mode on save: close|stay.</p> QFQ - Feature #8089 (New): Copy/Paste for FormElementshttps://project.math.uzh.ch/issues/80892019-03-19T12:03:07ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Wir brauchen dringend die Moeglichkeit einzelne FormElemente kopieren zu koennen.</li>
<li>Ueber Form-Grenzen hinweg.</li>
</ul>
<p>Subrecords:</p>
<ul>
<li>Eine Generische Loesung fuer Subrecords waere gut. Pro Zeile gibt es rechts/links einen Copy Button.</li>
<li>In der Titelzeile des Subrecords gibt es einen Paste Button.</li>
</ul>
<p>Form (optional):</p>
<ul>
<li>Pro Form gibt es einen Copy Button (ersetzt Button Form 'duplizieren'). Der kopiert den aktuellen Record. Ggfs. kann ein Target gewaehlt werden oder ein neuer Formularname oder '.....-copy'</li>
</ul>
<p>Allgemein:</p>
<ul>
<li>Copy Button werden nur angezeigt wenn ein CopyForm hinterlegt ist.</li>
<li>Paste Button werden nur angezeigt wenn ein passender Record in der Zwischenablage ist.</li>
</ul> QFQ - Feature #7924 (New): Radio/Checkbox with Tooltiphttps://project.math.uzh.ch/issues/79242019-02-21T09:16:45ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es sollte einfach moeglich sein tooltips auf einzelene Radios/Checkboxen zu legen:</p>
<p>Test wie sich das mit dem Tooltip pro FE verhaelt.</p>
<p>key:value:tooltip</p> QFQ - Feature #7920 (New): FE: Syntax Highlight, Zeinlenumbruchhttps://project.math.uzh.ch/issues/79202019-02-20T15:48:33ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Im FormEditor ist es sehr muehsam ohne Syntax Highlight und ohne Zeilenumbruch (SQl Query auf mehrere Zeilen verteilen) arbeiten zu muessen.</p> QFQ - Feature #7812 (New): FE 'Subrecord' - new option 'subrecordShowFilter', 'subrecordPaging'https://project.math.uzh.ch/issues/78122019-02-05T10:58:00ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Wird die Option angezeigt wird automatisch der tablesorter Filter angezeigt.</li>
<li>Alternativ kann eine Zahl angegeben werden. Sobald die Anzahl der Records >=der Zahl ist, wird der Filter eingeblendet.</li>
<li>Eine Option 'subrecordPaging'</li>
</ul> QFQ - Feature #7683 (New): Special column names in '{{ SELECT ... AS _link }}' should be detectedhttps://project.math.uzh.ch/issues/76832019-01-19T13:51:40ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Aktuell ist es nur moeglich '{{ ... AS _link}}' zu schreiben. Gut waeren auch alle anderen Links.</li>
<li>Liefert das Select mehr als ein Record und hat Special Columnnames, sollten diese alle einzeln gerendert werden - damit koennte man im Titel eines Forms mehrere Buttons erzeugen, z.B. beim IK Tool Links auf beliebig viele alte Antraege.</li>
</ul> QFQ - Feature #7681 (New): Optional switch off 'check for modified record'https://project.math.uzh.ch/issues/76812019-01-19T09:41:20ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Aktuell wird in Form bei 'aquireLock' geprueft ob sich der Record zwischen FormLoad und FirstChange veraendert hat.</p>
<p>Es waere gut wenn man den Check pro Form abschalten koennte, besser noch wenn man die Spalten definieren koennte, die zu einem Check herangezogen werden.</p>
<p>checkModified=off|*|id,name,modified,...</p>
<p>Grund: es koennte die Situation geben das eine Spalte veraendert wurde, dies aber keinen Einfluss auf das Formular hat. Dann waere es unguenstig wenn es keine Moeglichkeit gaebe den Check abzuschalten.</p> QFQ - Feature #7521 (New): TemplateGroup: fe.type=uploadhttps://project.math.uzh.ch/issues/75212018-12-20T16:45:56ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Aktuell werden in TemplateGroups keine File Upload Felder unterstuetzt.</p>
<p>Das sollte implementiert werden oder zumindest verhindert werden das man das im FormEditor konfiguieren kann.</p> QFQ - Feature #7520 (New): QR Code: ... AS _qr (... AS _link) https://project.math.uzh.ch/issues/75202018-12-20T16:40:21ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Als link() implementieren.</li>
<li>Diverse Typen: URL, Contact, Termin, WLAN ...</li>
<li>Optional: zum auf/zuklappen oder via mouse over?</li>
</ul> QFQ - Feature #7519 (New): Select: Multihttps://project.math.uzh.ch/issues/75192018-12-20T16:30:01ZCarsten Rosecarsten.rose@math.uzh.ch
<p>BBe benoetigt eine Select Liste mit 'Multi select' Moeglichkeit</p>
<p>Bsp: Aus einer Liste mit 30 Elementen sollen 5 ausgewaehlt werden.</p> QFQ - Feature #7342 (New): add content = hide_thishttps://project.math.uzh.ch/issues/73422018-11-23T10:19:19ZNicola Chiapolini
<p>When using a super-/subquery combination as an if-then construct, I want to hide the content of the super-query but show the result of sub-queries. At the moment this is not possible with the <code>content</code>-keyword. It would be nice to have the option to not hide the subqueries.</p>
<p>Personlly I would think it most logical to make this the default for <code>hide</code> and use e.g. <code>hide_all</code> to include subqueries. For backwards compatibility however, the new behaviour should probably get the new keyword. I suggest something like <code>hide_this</code></p> QFQ - Feature #7280 (New): recently used tablehttps://project.math.uzh.ch/issues/72802018-11-18T08:55:10ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Neue Tabelle 'RecentlyUsed'</li>
<li>Wird bei formLoad (!) automatisch gefuellt.</li>
<li>Columns
<ul>
<li>feUser, (cookie falls kein feUser eingeloggt)</li>
<li>form</li>
<li>table</li>
<li>recordId</li>
<li>misc (z.B. 'switchUser')</li>
</ul></li>
</ul> QFQ - Feature #7175 (New): Upload: md5 hash as filenamehttps://project.math.uzh.ch/issues/71752018-11-05T16:59:00ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Fuer w3/my wird eine Funktion benoetigt, das ein Student nicht ausversehen zweimal die gleiche Datei hochlaedt.</li>
<li>Theoretisch koennte es auch moeglich, das Dateien mit unterschiedlichem Dateinamen identisch sind.</li>
<li>Eine Loesung waere ueber den Dateiinhalt einen MD5 Hash zu erzeugen und die Datei dann mit dem hash als Namen zu speichern (fileReplace=no).</li>
<li>Vorschlag:
<ul>
<li>Neue Option im Upload FE: `fileNameMD5= filename+TimeStamp | content`</li>
</ul></li>
</ul>
<ul>
<li>Netter Nebeneffekt: aus dem Dateinamen kann nicht erkannt werden worum es im Inhalt geht.</li>
<li>Es muesste eine neue STORE_VARS variable definiert werden: 'md5'</li>
<li>In fe.paramter.fileDestination = fileadmin/uploads/{{md5:V}}</li>
</ul> QFQ - Feature #7119 (New): Upload: scaleDownWidth, scaleDownHeighthttps://project.math.uzh.ch/issues/71192018-10-28T09:51:51ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Bei Pixel Bildern die hochgeladen werden, waere es gut wenn man eine maximale Breite/Hoehe angeben kann.</p> QFQ - Feature #7109 (New): Dynamic Updates: row/element hidehttps://project.math.uzh.ch/issues/71092018-10-27T10:04:10ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Erkennung ob ein oder mehrere Elemente per ROW anhand og im FE 'row' und '/row' aktiv sind.</li>
<li>FE.parameter 'modeHide' kontrolliert ob nur das element ausgeblendet werden soll, oder die ganze row.
<ul>
<li>modeHide=row|element
<ul>
<li>default bei row mit einem element: row</li>
<li>default bei row mit mehreren elemente: element</li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>row, ein element
<ul>
<li>ganze zeile kann ein/ausgeblendet werden.</li>
</ul></li>
</ul>
<ul>
<li>row, mehrere elemente
<ul>
<li>einzelne elemente koennen ein/ausgblendet werden (by default bleibt die ganze row sichtbar)</li>
<li>das erste element der row bestimmt die htmlId der ganzen row</li>
<li>falls beim ersten element ein flag gesetzt ist: bestimmt dieses element ob die ganze row ein/ausgeblendet werden soll.</li>
</ul></li>
</ul>
<ul>
<li>Es ist wichtig, das elemente, die ein und ausgeblendet werden sollen, durch QFQ in col-md gewrapped werden. Das impliziert das nicht mehrere FE einer col-md gruppe ein/ausgeblendet werden koennen.</li>
</ul> QFQ - Feature #7102 (New): Comment sign in report: '#' and '--'https://project.math.uzh.ch/issues/71022018-10-27T08:55:24ZCarsten Rosecarsten.rose@math.uzh.ch
<p><a class="external" href="https://www.w3schools.com/Sql/sql_comments.asp">https://www.w3schools.com/Sql/sql_comments.asp</a></p>
<ul>
<li>Laut SQL Spec kann '--' am Zeilenanfang, aber auch mitten in der Zeile stehen.</li>
<li>Wenn es im SQL Statement steht, wird SQL das haendeln und alles richtig machen</li>
<li>Steht es am Zeilenanfang, sollte QFQ den Rest gar nicht parsen.</li>
<li>Atom unterstuetzt mit Ctl-/ das auskommentieren via '--' am Zeilenanfang</li>
<li>'/*' ist fuer den QFQ Parser schwer umzusetzen - es SQL daher ueberlassen. In QFQ Doku darauf eingehen.</li>
</ul> QFQ - Feature #6855 (New): With {{feUser:U}}!={{feUser:T}}: Save / Delete: only possible with {{...https://project.math.uzh.ch/issues/68552018-09-27T20:55:38ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Sollte {{feUser:U}}!='' UND {{feUser:U}}!={{feUser:T}} sein:</p>
<p>- Dann darf speichern nur moeglich sein wenn {{feUserSave:U}}='yes' gesetzt ist.<br />- Dann darf loeschen nur moeglich sein wenn {{feUserDelete:U}}='yes' gesetzt ist.</p>
<p>Hintergrund: damit kann einfach sichergestellt werden das man Dozenten, die die Identiaet eines Users uebernehmen, keine Daten veraendern koennen.</p>
<p>Das Form sollte dann einen disabled 'save', 'delete' Button haben, mit einem Hinweis warum das nicht geht.</p> QFQ - Feature #6765 (New): Moeglichkeit via QFQ eigene Logs zu schreibenhttps://project.math.uzh.ch/issues/67652018-09-19T20:08:48ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Es waere gut fuer das IK Tool ein zentrales Logfile zu haben wer wann was angestossen hat.</li>
<li>Das Logfile sollte via Browser einsehbar sein.</li>
<li>Evtl. ist es auch eine LOG Tabelle. ggfs. Wird die MailLog & JSON FormSubmit Log Tabelle aufgeloest.</li>
</ul> QFQ - Feature #6609 (New): Formlet: JSON API erweiternhttps://project.math.uzh.ch/issues/66092018-09-04T08:28:51ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Im QFQ 'PROTOCOL.md' ist ein Standard QFQ API mit einigen wenigen Feldern definiert.</p>
<p>Gut waere wenn die folgenden supported waeren:</p>
<p>"status": "success"|"error",<br />"message": "<message>" <br />"redirect": "no" | "url" | "url-skip-history" | "auto" | "close" <br />"redirect-url": "<url>"</p>
<p>Die waeren dann also auf der gleichen (obersten) Ebene wie 'elements'.</p> QFQ - Feature #6594 (New): Excel: on download, check if there is a valid siphttps://project.math.uzh.ch/issues/65942018-08-31T21:55:24ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Um sich vor unerlaubten Zugriff zu schuetzen, kann bei 'XLS?' output getestet werden (qfq content record, special column name), ob der Aufruf via einer SIP erfolgt ist (downloads sind immer via sip encrypted):</p>
<ul>
<li>Sollte die SIP nicht existieren, bricht QFQ ab.</li>
<li>Zum debuggen wird eine Excel export Seite auch direkt aufgerufen. In dem Fall ist womoeglich keine SIP in der URL. Aber dann gibt es einen BE User > die BE existenz autorisiert den Aufruf.</li>
<li>Optional: Die Erlaubnis zum Zugriff sollte nur fuer die erste _XLS? Spalte getestet werden.</li>
</ul>
<ul>
<li>Option: es gibt es ein Flag auf dem QFQ, der den Check ausschaltet: downloadCheckSipExist=0</li>
</ul> QFQ - Feature #6437 (New): Neuer Mode Button bei FormElementenhttps://project.math.uzh.ch/issues/64372018-07-17T13:47:38ZStefan Willi
<p>Es ist verwirrend, wenn man einer der 4 Mode (show, required, readonly, hidden) anwählt und trotzdem bei 'Mode sql' etwas eingibt, dass die Funktionalität der Buttons nicht mehr wirkt.</p>
<p>Kann man nicht ein 5. Button ('custom' oder sowas in der Art) erstellen und das Mode sql Feld als dynamic update nur dann anzeigen, falls man bei 'Mode' custom anwählt?</p> QFQ - Feature #6292 (New): Download: File speichern mit Hash aber original Filename in der Datenb...https://project.math.uzh.ch/issues/62922018-06-22T11:01:47ZBenjamin Baerbenjamin.baer@math.uzh.ch
<p>Die Idee:</p>
<ul>
<li>Datei wird hochgeladen</li>
<li>QFQ speichert die Datei unter md5 hash in einem Ordner (auch ohne Datei Endungen)</li>
<li>QFQ schreibt im Datensatz der auf das file verlinkt auch den original Filenamen rein</li>
<li>Bei korrektem Download ueber die Download API wird der richtige filename aus der Datenbank zurueck geliefert</li>
</ul>
<p>Probleme mit den leserlichen Filenamen ist das diese meist Informationen ueber den Inhalt liefern (bsp: Arztzeugnis_Max_Muster.pdf).</p>
<p>Dies ist natuerlich nur sinnvoll fuer Dateien die sicher gespeichert werden muessen, nicht zB. den Flyer oder ein Bild das direkt auf die Homepage kommt.</p> QFQ - Feature #6289 (New): Form: Loghttps://project.math.uzh.ch/issues/62892018-06-20T21:54:37ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Ziel: der Developer bekommt ein detailliertes Log angezeigt, mit den Deatils was in einem Form alles passiert.</li>
<li>Das Log wird in eine Datei geschrieben.</li>
<li>Ist eine Person im BE eingeloggt, erscheint auf dem Form ein neuer Button, um das Log zu anzuzeigen. </li>
<li>Die Anzeige aktiviert das Log.</li>
<li>Ein Log bleibt max. 30 Minuten aktiv, danach muss es erneut gestartet werden.</li>
<li>Bei jedem Neustart eines Logs, wird das alte Log ueberschrieben.</li>
<li>Ein Form befindet sich im Debug mode, wenn eine Logdatei existiert und juenger als 30 mins ist.</li>
<li>Pro Form gibt es ein:
<ul>
<li>Log all user: <t3>/tmp/form.<formname>.log</li>
<li>Log current user: <t3>/tmp/form.<formname>.<beuser>.log</li>
<li>mit dem 'all user'-Log kann ein Developer einen non-Developer debuggen.</li>
</ul></li>
</ul>
<ul>
<li>Das Log wird via 'monitor' angezeigt.</li>
<li>Evtl. via dem Record, der auch den FormEditor anzeigt. Page 'form'</li>
<li>Aufruf:
<ul>
<li>form=formname&_formLog=logSession</li>
<li>form=formname&_formLog=logAll</li>
</ul></li>
</ul> QFQ - Feature #5782 (New): NextCloud APIhttps://project.math.uzh.ch/issues/57822018-04-05T14:31:41ZCarsten Rosecarsten.rose@math.uzh.ch
Via QFQ koennen
<ul>
<li>Verzeichnisse und Dateien erzeugt werden, in einem Order der via Nextcloud / Owncloud synchronisiert wird.</li>
<li>Koennen Shares verwaltet werden.</li>
<li>Koennen Aenderungen an Files/Verzeichnissen erkannt werden und eine Reaktion in der Db ausloesen.</li>
</ul>
Beispiel:
<ul>
<li>Via QFQ wird ein neues Nextcloud Verzeichnis angelegt.</li>
<li>In QFQ sind Personen hinterlegt. Diese Personen bekommen eine Freigabe (API). Die Personen werden via API informiert.</li>
<li>Ein QFQ Upload Dialog speichert eine Datei direkt in einem Nextcloud Verzeichnis/Share - dadurch erhalten alle User des Shares direkt Zugriff auf die Datei.</li>
<li>Ein User speichert ein File in einem Share - QFQ erkennt die Aenderung und koennte z.B. einen Import starten.</li>
</ul> QFQ - Feature #5131 (New): Activate Spin Gear ('wait/busy' indicator) via LINK attributehttps://project.math.uzh.ch/issues/51312017-12-16T20:41:30ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Pages die z.B. Mails mit Attachments versenden benoetigen teilweise etliche Sekunden.</p>
<p>Es waere gut wenn man in der Zeit das 'spinning gear' wie beim 'download' Link anzeigen koennte.</p> QFQ - Feature #4250 (New): AutoCron in QFQ via PHPhttps://project.math.uzh.ch/issues/42502017-08-17T20:23:25ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Die AutoCron Features in PHP implementieren, ohne das eine T3 Seite benoetigt wird.</p>
Verbesserungen:
<ul>
<li>Massiv einfacheres Setup.</li>
<li>Evtl. koennte das PHP Skript durch Typo3 Cron aufgerufen werden - dann entfaellt sogar System Console Eintrag.</li>
<li>Aus dem PHP Skript koennen auch Mails versendet werden (kein dediziertes Skript noetig) - damit koennen einfach grId und xId gesetzt werden.</li>
<li>DB Credentials sind in PHP bekannt (zentrale Konfiguration).</li>
</ul>
Neu:
<ul>
<li>AutoCron Formular wird by default mit ausgeliefert.</li>
<li>In T3 Doku ist ein Beispiel QFQ Report fuer CrontEdit aufgefuehrt.</li>
<li>Es gibt Cron.grIdTyp, die im Beispiel aber nicht benutzt wird um Croneintraege zu klassifizieren.</li>
</ul> QFQ - Feature #4082 (New): Dynamic Update: modeSql - useful defaulthttps://project.math.uzh.ch/issues/40822017-07-08T09:40:12ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>Liefert die 'modeSql' keinen Record (z.B. bei r=0) wird das FE immer angezeigt. Gut waere wenn in so einem Fall des statische Setting (show, hidden ,... ) verwendet wird.
<ul>
<li>Verhalten im Manual beschreiben.</li>
</ul>
</li>
<li>Status Quo: FE mit 'hidden' werden nicht im Client gerendert - die koennen anschliessend nicht eingeschaltet werden. Loesungsvorschlag: falls ein modeSql angegeben, das Element trotzdem rendern.</li>
</ul> QFQ - Feature #4050 (New): sql.log: 1) FormElement ID which causes a specific action , 2) Result ...https://project.math.uzh.ch/issues/40502017-07-05T06:36:04ZCarsten Rosecarsten.rose@math.uzh.chQFQ - Feature #4023 (New): prepared statements - FE action: salveId, sqlInsert, sqlUpdate, sqlDel...https://project.math.uzh.ch/issues/40232017-07-02T14:01:33ZCarsten Rosecarsten.rose@math.uzh.ch
<p>For every sql query, add a new element 'Arg'. Eg.:</p>
<pre>
slaveId = {{SELECT id FROM Person WHERE id=?}}
slaveIdArg = {{id}}
sqlInsert = {{INSERT INTO Person (name, firstName) VALUES (?,?)}}
sqlInsertArg = {{name:F:allbut}}, {{firstName:F:allbut}}
</pre>
* The ...Arg definition should not be fired directly. Instead search for all (non wrapped) ',' , split, replace every by it's onw, build array with the values, fire the prepared statement. QFQ - Feature #3504 (New): Logging: welche Action FEs werden wann wie ausgefuehrthttps://project.math.uzh.ch/issues/35042017-04-04T08:36:30ZCarsten Rosecarsten.rose@math.uzh.ch
<p>Es waere gut wenn es Logfile geben wuerde in dem notiert wird welche Action FE ausgefuehrt wird und wie. Aktuell gibt es das Problem das wenn bei templatgroups die maxlength nicht gesetzt ist, die Elemente zwar korrekt angezeigt werden, beim speichern aber kein postprocessing erfolgt. das ist fuer einen entwickler, der keine debugging moeglichkeit hat, kaum nachzuvollziehen.</p>
Idee:
<ul>
<li>Ein Form kann in einen Debug Log Modus versetzt werden, in dem auf dem Form der neue 'debug' button geklickt wird. Nur BE User sehen diesen Button.</li>
<li>Dies oeffnet die Seite 'debug' mit einer 'monitor' Spalte, um das Logfile konstant anzuzeigen.</li>
<li>Alle Requests in der aktuellen Session auf diesem From werden gelogged.</li>
<li>In der php session wird vermerkt, das fuer dieses Form das Logging aktiviert ist.</li>
<li>Wird ein Form ge'debug'ed, und existieren Files fuer diese Form, und sind die 'last modified' timestamps der Datei aelter als 4h, werden die alten Dateien geloescht.</li>
<li>Wird die PHP Session beendet, verfaellt das debug Flag.</li>
<li>Name der Logdatei: fileadmin/protected/log/<formname>+<uniq timestamp>.log. Der Name sollte damit ausreichend eindeutig sein, das sich mehrere user/debug session nicht in den Weg kommen.</li>
</ul> QFQ - Feature #3432 (New): subrecord: dynamicUpdatehttps://project.math.uzh.ch/issues/34322017-03-26T12:59:55ZCarsten Rosecarsten.rose@math.uzh.ch
<ul>
<li>subrecords reagieren zur Zeit gar nicht auf 'dynamicUpdates'</li>
<li>Als Update wird immer eine komplette HTML Tabelle kommen.</li>
<li>Neu sollte die Moeglichkeit bestehen, das Subrecords auch ohne primary record gerendert werden koennen.
<ul>
<li>Beispiel (QFQ / formWithFeType): Ein Formular mit einem TypeAheadSql auf FormElement.type um alle Formulare mit dem selektieren Type anzuzeigen (subrecord).</li>
</ul></li>
</ul>