From 5692b3c531807ed43e3980d83d05a97609f8908a Mon Sep 17 00:00:00 2001 From: Carsten Rose <carsten.rose@math.uzh.ch> Date: Thu, 2 Mar 2017 11:29:57 +0100 Subject: [PATCH] Index.rst: added some lines to 'dynamicUpdate' AbstractBuildForm.php, QuickFormQuery.php: documentation updates, code reformat. --- extension/Documentation/UsersManual/Index.rst | 43 +++++++++++++++---- extension/qfq/qfq/AbstractBuildForm.php | 13 +++--- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/extension/Documentation/UsersManual/Index.rst b/extension/Documentation/UsersManual/Index.rst index 8ab55e69c..c85937386 100644 --- a/extension/Documentation/UsersManual/Index.rst +++ b/extension/Documentation/UsersManual/Index.rst @@ -820,6 +820,9 @@ Fields: | | 'disabled' ) | *Readonly*: user can't change any data. Data not saved. | | | | *Disabled*: *FormElement* is not visible. | +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ +|modeSql | `select` statement with | A value given here overwrites the setting from `mode`. Most usefull with :ref:`dynamic-update`. | +| | a value like in `mode` | E.g.: {{SELECT IF( '{{otherFunding:FR:alnumx}}'='yes' ,'show', 'hidden' }} | ++---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ |class | enum('native', 'action', | Details below. | | | 'container') | | +---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ @@ -1615,21 +1618,43 @@ The 'Dynamic Update' feature makes a form more interactive. If a user change a * 'dynamicUpdate', *all* elements who are tagged with 'DynamicUpdate', will be recalculated and rerendered. The following fields will be recalculated during 'Dynamic Update' - * 'modeSql' - Possible values: 'show', 'required', 'readonly', 'hidden' - * 'value' - * 'parameter.*' - especially 'itemList' + +* 'modeSql' - Possible values: 'show', 'required', 'readonly', 'hidden' +* 'value' +* 'parameter.*' - especially 'itemList' +* 'note' +* 'label' To make a form dynamic: - * Mark all *FormElements* with {dynamic update}=enabled, which should send **or** receive a 'do update' signal. - * Define the receiving *FormElements* in a way, that they will interpret the recent user change. The form variable of the - specific sender *FormElement* `{{<sender element>:F:<sanitize>}}` should be part of one of the above fields to get an - impact. E.g.: - :: +* Mark all *FormElements* with `dynamic update`=`enabled`, which **initiates** or **receives** updates. +* Define the receiving *FormElements* in a way, that they will interpret the recent user change. The form variable of the + specific sender *FormElement* `{{<sender element>:F:<sanitize>}}` should be part of one of the above fields to get an + impact. E.g.: + :: [receiving *FormElement*].parameter: itemList={{ SELECT IF({{carPriceRange:FE:alnumx}}='expensive','Ferrari,Tesla,Jaguar','General Motors,Honda,Seat,Fiat') }} -* Label and Description are not 'Dynamic Update' aware (Feature Request #2081). +Examples +^^^^^^^^ + +* Master FormElement 'music' is a radio/enum of 'classic', 'jazz', 'pop'. + +Content of a select list +'''''''''''''''''''''''' + +* Slave FormElement 'interpret' is 'select'-list, depending of 'music': +:: + + sql={{!SELECT name FROM interpret WHERE music={{music:FE:alnumx}} ORDER BY name}} + +Show / Hide a *FormElement* +''''''''''''''''''''''''''' + +* Slave 'interpret' is displayed only for 'pop': +:: + + modeSql={{SELECT IF( '{{music:FR:alnumx}}'='pop' ,'show', 'hidden' }} .. _form-layout: diff --git a/extension/qfq/qfq/AbstractBuildForm.php b/extension/qfq/qfq/AbstractBuildForm.php index 7876f7981..a17aac351 100644 --- a/extension/qfq/qfq/AbstractBuildForm.php +++ b/extension/qfq/qfq/AbstractBuildForm.php @@ -135,7 +135,7 @@ abstract class AbstractBuildForm { abstract public function fillWrap(); /** - * Builds complete form. Depending of form specification, the layout will be 'plain' / 'table' / 'bootstrap'. + * Builds complete 'form'. Depending of form specification, the layout will be 'plain' / 'table' / 'bootstrap'. * * @param string $mode FORM_LOAD | FORM_UPDATE | FORM_SAVE * @return string|array $mode=LOAD_FORM: The whole form as HTML, $mode=FORM_UPDATE: array of all formElement.dynamicUpdate-yes values/states @@ -330,7 +330,7 @@ abstract class AbstractBuildForm { abstract public function getProcessFilter(); /** - * Process all FormElements: build corresponding HTML code. Collect and return all HTML code. + * Process all FormElements: build corresponding HTML code. Collect and return all HTML code & JSON. * * @param $recordId * @param string $filter FORM_ELEMENTS_NATIVE | FORM_ELEMENTS_SUBRECORD | FORM_ELEMENTS_NATIVE_SUBRECORD @@ -346,7 +346,8 @@ abstract class AbstractBuildForm { * @throws \qfq\UserFormException */ public function elements($recordId, $filter = FORM_ELEMENTS_NATIVE, $feIdContainer = 0, array &$json, - $modeCollectFe = FLAG_DYNAMIC_UPDATE, $htmlElementNameIdZero = false, $storeUse = STORE_USE_DEFAULT, $mode = FORM_LOAD) { + $modeCollectFe = FLAG_DYNAMIC_UPDATE, $htmlElementNameIdZero = false, + $storeUse = STORE_USE_DEFAULT, $mode = FORM_LOAD) { $html = ''; $flagOutput = false; @@ -355,7 +356,9 @@ abstract class AbstractBuildForm { // get current data record if ($recordId > 0 && $this->store->getVar('id', STORE_RECORD) === false) { - $row = $this->db->sql("SELECT * FROM " . $this->formSpec[F_TABLE_NAME] . " WHERE id = ?", ROW_EXPECT_1, array($recordId), "Form '" . $this->formSpec[F_NAME] . "' failed to load record '$recordId' from table '" . $this->formSpec[F_TABLE_NAME] . "'."); + $row = $this->db->sql("SELECT * FROM " . $this->formSpec[F_TABLE_NAME] . " WHERE id = ?", ROW_EXPECT_1, + array($recordId), "Form '" . $this->formSpec[F_NAME] . "' failed to load record '$recordId' from table '" . + $this->formSpec[F_TABLE_NAME] . "'."); $this->store->setStore($row, STORE_RECORD); } @@ -687,7 +690,7 @@ abstract class AbstractBuildForm { * @param array $formElement * @param string $htmlFormElementName * @param string $value - * @param array $json + * @param array $json Return updates in this array - will be later converted to JSON. * @param string $mode FORM_LOAD | FORM_UPDATE | FORM_SAVE * @return string complete rendered HTML input element. * @throws \qfq\UserFormException -- GitLab