.. ================================================== .. ================================================== .. ================================================== .. Header hierarchy .. == .. -- .. ^^ .. "" .. ;; .. ,, .. .. --------------------------------------------used to the update the records specified ------ .. Best Practice T3 reST: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/CheatSheet.html .. Reference: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/Index.html .. Italic *italic* .. Bold **bold** .. Code ``text`` .. External Links: `Bootstrap `_ .. Internal Link: :ref:`downloadButton` (default url text) or :ref:`download Button` (explicit url text) .. Add Images: .. image:: ./Images/a4.jpg .. .. .. Admonitions .. .. note:: .. important:: .. tip:: .. warning:: .. Color: (blue) (orange) (green) (red) .. .. Definition: .. some text becomes strong (only one line) .. description has to indented .. -*- coding: utf-8 -*- with BOM. .. include:: Includes.txt .. _`store`: Store ===== Only variables that are known in a specified store can be substituted. +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | Name | Description | Content | +======+=========================================================================================+====================================================================================+ | B | :ref:`STORE_BEFORE`: Record - the current record loaded in the form before any update. | All columns of the current record from the current table. See :ref:`STORE_BEFORE`. | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | C | :ref:`STORE_CLIENT`: POST variable, if not found: GET variable. | Parameter sent from the Client (=Browser). See :ref:`STORE_CLIENT`. | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | D | Default values column : The *table.column* specified *default value*. | | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | E | *Empty* - always an empty string, might be helpful if a variable is empty or undefined | Any key | | | and will be used in an SQL statement. | | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | F | :ref:`STORE_FORM`: data not saved in database yet. | All native *FormElements*. Recent values from the Browser. See: :ref:`STORE_FORM` | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | L | :ref:`STORE_LDAP`: Will be filled on demand during processing of a *FormElement*. | Custom specified list of LDAP attributes. See :ref:`STORE_LDAP`. | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | M | Column type: The *table.column* specified *type*. | | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | P | Parent record. E.g.: on multi & copy forms the current record of the outer query. | All columns of the MultiSQL Statement from the table for the current row | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | R | :ref:`STORE_RECORD`: Record - the current record loaded in the form. | All columns of the current record from the current table. See :ref:`STORE_RECORD`. | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | S | :ref:`STORE_SIP`: Client parameter 's' will indicate the current SIP, which will be | sip, r (recordId), form. See :ref:`STORE_SIP`. | | | loaded from the SESSION repo to the SIP-Store. | | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | T | :ref:`STORE_TYPO3`: a) Bodytext (ttcontent record), b) Typo3 internal variables. | See Typo3 tt_content record configuration. See `STORE_TYPO3`_. | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | U | :ref:`STORE_USER`: per user variables, valid as long as the browser session lives. | Set via report: '...' AS '_=' See: :ref:`STORE_USER`, | | | | :ref:`store_user_examples` | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | V | :ref:`STORE_VARS`: Generic variables. | See :ref:`STORE_VARS`. | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | Y | :ref:`STORE_SYSTEM`: a) Database, b) helper vars for logging/debugging: | See :ref:`STORE_SYSTEM`. | | | SYSTEM_SQL_RAW ... SYSTEM_FORM_ELEMENT_COLUMN, c) Any custom fields: CONTACT, HELP, ... | | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ | 0 | *Zero* - always value: 0, might be helpful if a variable is empty or undefined and | Any key | | | will be used in an SQL statement. | | +------+-----------------------------------------------------------------------------------------+------------------------------------------------------------------------------------+ * Default **: *FSRVD* - Form / SIP / Record / Vars / Table definition. * Hint: Preferable, parameter should be submitted by SIP, not by Client (=URL). * Warning: Data submitted via 'Client' can be easily spoofed and altered. * Best: Data submitted via SIP never leaves the server, cannot be spoofed or altered by the user. * SIPs can _only_ be defined by using *Report*. Inside of *Report* use columns 'Link' (with attribute 's'), 'page?' or 'Page?'. .. _STORE_FORM: Store: *FORM* - F ----------------- * Sanitized: *yes* * Represents the values in the form, typically before saving them. * Used for: * *FormElements* which will be rerendered, after a parent *FormElement* has been changed by the user. * *FormElement* actions, before saving the form. * Values will be sanitized by the class configured in corresponding the *FormElement*. By default, the sanitize class is *alnumx*. +---------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | Name | Explanation | +=================================+============================================================================================================================================+ | | Name of native *FormElement*. To get, exactly and only, the specified *FormElement* (for 'pId'): *{{pId:F}}* | +---------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+ .. _STORE_SIP: Store: *SIP* - S ---------------- * Sanitized: *no* * Filled automatically by creating links. E.g.: * in *Report* by using ``_page*`` or ``_link`` (with active 's') * in *Form* by using subrecords: *new*, *edit*, *delete* links (system) or by column type ``_page*``, ``_link``. +-------------------------+-----------------------------------------------------------+ | Name | Explanation | +=========================+===========================================================+ | sip | 13 char uniqid | +-------------------------+-----------------------------------------------------------+ | r | current record id | +-------------------------+-----------------------------------------------------------+ | form | current form name | +-------------------------+-----------------------------------------------------------+ | table | current table name | +-------------------------+-----------------------------------------------------------+ | urlparam | all non Typo3 parameter in one string | +-------------------------+-----------------------------------------------------------+ | | additional user defined link parameter | +-------------------------+-----------------------------------------------------------+ .. _STORE_RECORD: Store: *RECORD* - R ------------------- * Sanitized: *no* * *Form*: Current record. * *Report*: See :ref:`access-column-values` * If r=0, all values are empty. +------------------------+-------------------------------------------------------------------------------------------------------------------------+ | Name | Type | Explanation | +========================+==========+==============================================================================================================+ | | Form | Name of a column of the primary table (as defined in the current form). Example: *{{pId:R}}* | +------------------------+----------+--------------------------------------------------------------------------------------------------------------+ | | Report | Name of a column of a previous fired SQL query. Example: *{{pId:R}}* | +------------------------+----------+--------------------------------------------------------------------------------------------------------------+ | & | Report | Name of a column of a previous fired SQL query, typically used by columns with a :ref:`special-column-names`.| | | (final) | Final value. Example: '{{link:R}}' returns 'p:home&form=Person|s|b:success|t:Edit'. | | | | Whereas '{{&link:R}}' returns 'Edit | +------------------------+----------+--------------------------------------------------------------------------------------------------------------+ .. _STORE_BEFORE: Store: *BEFORE* - B ------------------- * Sanitized: *no* * Current record loaded in Form without any modification. * If r=0, all values are empty. This store is handy to compare new and old values of a form. +------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ | Name | Explanation | +========================+==================================================================================================================================================+ | | Name of a column of the primary table (as defined in the current form). To get, exactly and only, the specified form *FormElement*: *{{pId:B}}* | +------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ .. _STORE_CLIENT: Store: *CLIENT* - C ------------------- * Sanitized: *yes* +-------------------------+------------------------------------------------------------------------------------------------------------------------------------------+ | Name | Explanation | +=========================+==========================================================================================================================================+ | s | =SIP | +-------------------------+------------------------------------------------------------------------------------------------------------------------------------------+ | r | record id. Only if specified as GET parameter - typically stored in SIP (=STORE_SIP) | +-------------------------+------------------------------------------------------------------------------------------------------------------------------------------+ | form | Name of form to load. Only if specified as GET parameter - typically stored in SIP (=STORE_SIP) | +-------------------------+------------------------------------------------------------------------------------------------------------------------------------------+ | HTTP_HOST | current HTTP HOST | +-------------------------+------------------------------------------------------------------------------------------------------------------------------------------+ | REMOTE_ADDR | Client IP address | +-------------------------+------------------------------------------------------------------------------------------------------------------------------------------+ | All HTTP Header | SERVER_ADDR, SERVER_NAME, SERVER_SOFTWARE,SERVER_PROTOCOL, REQUEST_METHOD, REQUEST_TIME, REQUEST_TIME_FLOAT, QUERY_STRING, DOCUMENT_ROOT,| | variables | HTTP_ACCEPT, HTTP_ACCEPT_CHARSET, HTTP_ACCEPT_ENCODING, HTTP_ACCEPT_LANGUAGE, HTTP_CONNECTION, HTTP_HOST, HTTP_REFERER, | | | HTTP_USER_AGENT, HTTPS, REMOTE_ADDR, REMOTE_HOST, REMOTE_PORT, REMOTE_USER, REDIRECT_REMOTE_USER, SCRIPT_FILENAME, SERVER_ADMIN, | | | SERVER_PORT, SERVER_SIGNATURE, PATH_TRANSLATED, SCRIPT_NAME, REQUEST_URI, PHP_AUTH_DIGEST, PHP_AUTH_USER, PHP_AUTH_PW, | | | AUTH_TYPE, PATH_INFO, ORIG_PATH_INFO | +-------------------------+------------------------------------------------------------------------------------------------------------------------------------------+ | Authorization | Value of the HTTP Header 'Authorization'. This is typically not set. Mostly used for authentication of REST requests | +-------------------------+------------------------------------------------------------------------------------------------------------------------------------------+ | X-Api-Key | Value of the HTTP Header 'X-Api-Key'. This is typically not set. | +-------------------------+------------------------------------------------------------------------------------------------------------------------------------------+ .. tip:: Variable names are case sensitive. .. _STORE_TYPO3: Store: *TYPO3* (Bodytext) - T ----------------------------- * Sanitized: *no* +------------------------------------------+-------------------------------------------------------------------+-----+ | Name | Explanation | API | +==========================================+===================================================================+=====+ | form | | Formname defined in ttcontent record bodytext | no | | | | * Fix. E.g. *form = person* | | | | | * via SIP. E.g. *form = {{form:SE}}* | | +------------------------------------------+-------------------------------------------------------------------+-----+ | pageId | Record id of current Typo3 page | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | pageAbstract | Abstract of current Typo3 page | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | pageAlias (DEPRECATED) | Alias of current Typo3 page. If empty, take pageId. | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | pageSlug | Slug of current Typo3 page. | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | pageDescription | Description of current Typo3 page | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | pageKeywords | Keywords of current Typo3 page | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | pageLanguage | Current selected page language (typically URL parameter 'L') | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | pageNavTitle | Alternative navigation title of current Typo3 page | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | pageTitle | Title of current Typo3 page | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | pageType | Current selected page type (typically URL parameter 'type') | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | ttcontentSubheader | Subheader of the current ttcontent record | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | ttcontentUid | Record id of current Typo3 content element | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | feUser | Logged in Typo3 FE User | yes | +------------------------------------------+-------------------------------------------------------------------+-----+ | feUserEmail | Email of logged in Typo3 FE User (if given in T3) | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | feUserGroup | FE groups of logged in Typo3 FE User | yes | +------------------------------------------+-------------------------------------------------------------------+-----+ | feUserUid | Logged in Typo3 FE User uid | yes | +------------------------------------------+-------------------------------------------------------------------+-----+ | beUser | Logged in Typo3 BE User | yes | +------------------------------------------+-------------------------------------------------------------------+-----+ | beUserUid | T3 Uid of logged in Typo3 BE User | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | beUserEmail | Email of logged in Typo3 BE User (if given in T3) | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | beUserLoggedIn | 'yes' | 'no' - Status if a BE-User is logged in | yes | +------------------------------------------+-------------------------------------------------------------------+-----+ | t3version | Current T3 version | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | oidcBeUid, oidcFeUid | OIDC BE/FE uid | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | oidcBeProvider, oidcFeProvider | OIDC BE/FE Provider | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | oidcBeProviderId, oidcFeProviderId | OIDC BE/FE Provider ID | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | oidcBeResourceId, oidcFeResourceId | OIDC BE/FE Resource ID | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | oidcBeSub, oidcFeSub | OIDC BE/FE Subject | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | oidcBeEmail, oidcFeEmail | OIDC BE/FE Email | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | oidcBeEmailVerified, oidcFeEmailVerified | OIDC BE/FE Email verified (only if provided, like Edu-ID) | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | oidcBeName, oidcFeName | OIDC BE/FE Name | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | oidcBeGivenName, oidcFeGivenName | OIDC BE/FE Given Name | no | +------------------------------------------+-------------------------------------------------------------------+-----+ | oidcBeFamilyName, oidcFeFamilyName | OIDC BE/FE Family Name | no | +------------------------------------------+-------------------------------------------------------------------+-----+ * **API**: available: * in :ref:`dynamic-update` or * by *FormElement* class 'action' with type 'beforeSave', 'afterSave', 'beforeDelete', 'afterDelete'. * **oidc...** Variables * Only available if the T3 oidc... extension is installed. .. _STORE_VARS: Store: *VARS* - V ----------------- * Sanitized: *no* * The store contains automatically filled *QFQ values* and optional *custom values*. QFQ values ^^^^^^^^^^ +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | Name | Scope | Explanation | +===================+=============+============================================================================================================================================+ | random | Always | Random string with length of 32 alphanum chars (lower & upper case). See :ref:`RANDOM`. | +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | slaveId | FE *any* | See :ref:`slave-id` | +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | allRequiredGiven | Form | Form save - Set during check of all required FE. If every *required* FE is given: *1*. Else: *0*. If there is no required FE: *1*. | | | | Even with ``formModeGlobal = requiredOff | requiredOffButMark`` the variable will be set. | +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | filename | FE *upload* | Original filename of an uploaded file via an 'upload'-FormElement. Valid only during processing of the current 'upload'-formElement. | +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | filenameOnly | FE *upload* | Like filename, but without path. | +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | filenameBase | FE *upload* | Like *filename*, but without an optional extension. E.g. filename='image.png' comes to filenameBase='image' | +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | filenameExt | FE *upload* | Like *filename*, but only the optional extension. E.g. filename='image.png' comes to filenameExt='png' | +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | fileDestination | FE *upload* | Destination (path & filename) for an uploaded file. Defined in an 'upload'-FormElement.parameter. Valid: same as 'filename'. | +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | fileSize | FE *upload* | Size of the uploaded file. | +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | mimeType | FE *upload* | Mime type of the uploaded file. | +-------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ .. _RANDOM: {{random:V}} ^^^^^^^^^^^^ * Random string with length of 32 alphanum chars (lower & upper case). * The variable *{{random:V}}* is always filled. * Hint: QFQ variables will be replaced **before** a SQL statement is fired. * Each access gives a new value. * Execution of a SQL statement is **one** access - therefore ``SELECT '{{random:V}}' FROM Person`` will give the same random value for all *Person*. * Several ``SELECT ...{{random:V}}...`` will give several different random values. * Uniqueness is added via PHP function *uniqid()* * This just prepends 13 chars at the beginning of the random string. * *uniqid()* is only a very precise timestamp - timestamp means it becomes bigger and bigger and the first characters stays the same. * These first 13 chars should *not* be taken as random! They will make *uniqness* for *{{random:V}}* more likely. Custom values (via fillStoreVar) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The directive *fillStoreVar* fills STORE_VARS with custom values:: # The values can be retrieved via `{{name:V}}` and `{{email:V}}` fillStoreVar = {{! SELECT p.name, p.email FROM Person AS p WHERE p.id={{pId:S}} }} * `fillStoreVar` can be used in :ref:`Form.parameter` and :ref:`FormElement.parameter`. * If *fillStoreVar* is defined in Form and/or multiple FormElements: * Already existing variables with different names will be merged. * Already existing variables with same names will be overwritten by the latest definition. .. tip:: Specify STORE_VARS explicit to avoid naming collision. E.g. ``{{person:V}}`` references cleary the STORE_VAR, instead ``{person}}`` uses the default *FSRVD*, where as STORE_VARS is late on position 4 and might be overwritten by STORE_FORM, STORE_SIP and STORE_RECORD. .. _STORE_LDAP: Store: *LDAP* - L ----------------- * Sanitized: *yes* * See also :ref:`LDAP` +-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | Name | Explanation | +=========================+============================================================================================================================================+ | | See *ldapAttributes* | +-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------+ .. _STORE_SYSTEM: Store: *SYSTEM* - Y ------------------- * Sanitized: *no* All settings can be accessed via this store. See :ref:`configuration` for a list of all settings. Additional variables: +-------------------------+------------------------------------------------------------------------------+ | Name | Explanation | +=========================+==============================================================================+ | qfqProjectPath | Absolute path to the qfq project directory. See :ref:`qfq-project-path-php` | +-------------------------+------------------------------------------------------------------------------+ .. _STORE_USER: Store: *USER* - U ----------------- * Sanitized: *no* At start of a new browser session (=user calls the website the first time or was logged out before) the store is empty. As soon as a value is set in the store, it remains as long as the browser session is alive (=until user logs out). Values can be set in report via ``... AS "_="`` See also: :ref:`store_user_examples`