Bug #92363
closedEpic #92636: felogin bug collection
Flexform always overwrites TS-Settings in Extbase-Version
0%
Description
With the old pibase-version the flexform-values where only used when not empty (see FrontendLoginController->mergeflexFormValuesIntoConf), otherwise the values definied by typoscript where taken into account.
The new version always uses the values from flexform, as the fieldnames start with "settings." and - as far as I understand - Extbase automatically merges such fields with the typoscript plugin-settings, overriding the typoscript settings.
This is especially relevant for the fields on the redirect sheet of the flexform (the label for redirectMode still states that "TS or flexform" would be used even in the extbase version).
Example:
This works with the piBase-Version (used it already in 6.2, but works also in current 10.4.8) when leaving the related flexform field empty:
plugin.tx_felogin_pi1.redirectPageLogin = xxx
Whereas with the extbase version, this
plugin.tx_felogin_login.settings.redirectPageLogin = xxx
ends up with redirectPageLogin = '' (empty string) in the settings-array.
Do I miss a new way to set these values with typoscript?
If not, I guess there are two possible ways to allow the same behavior as with the pibase version:
a) renaming the fields in flexform, so that extbase doesn't merge them automatically, and use the logic in mergeflexFormValuesIntoConf of the pibase version
b) allowing something like "settings.override.xxx" and merging these values over flexform values before usage
Updated by Sybille Peters about 4 years ago
ext:news has a good solution for this: overrideFlexformSettingsIfEmpty
Perhaps we can do something similar in the core.
Updated by Felix Nagel almost 4 years ago
Another, related issue: there a quite a few TS constants which are never considered.
Updated by Jigal van Hemert almost 4 years ago
Sybille Peters wrote in #note-1:
ext:news has a good solution for this: overrideFlexformSettingsIfEmpty
Perhaps we can do something similar in the core.
Maybe the FAL solution for the alt text, caption and title should be standard behaviour with flexform settings. overrideFlexformSettingIfEmpty has the disadvantage that you can clear those settings (which would be a problem for e.g.g redirects if you can't override the TS setting).
Updated by Robert Vock almost 3 years ago
- Has duplicate Bug #96921: Globally set storagePid get's overwritten added
Updated by Felix Nagel over 2 years ago
TypoScript settings are still overridden by flexform in TYPO3 11.5.13.
Updated by Markus Klein about 2 years ago
Updating some technical information:
\TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager::overrideConfigurationFromFlexForm
is the one doing "the work".
as noted above: empty flexform values override whatever is there from TypoScript.
While this is wanted/needed for some settings, this is not the case for all settings, e.g. pages/pids.
But maybe there is even a usecase for this with pages/pids.
$GLOBALS['TYPO3_CONF_VARS']['FE']['checkFeUserPid']
is a config worth to mention.
Set it to false
to work around this problem completely and allow all pids.
Updated by Davide Alghi about 2 years ago
(T3-11)
One way to set via TypoScript is to remove the settings field from original flexform by overwriting the xml related to the tt_content.pi_flexform field
here an example
https://gist.github.com/einpraegsam/c16ba695a5e3d903c2a2f795d98bca71
In this way you can set different flexforms according to different conditions.
In my case, I needed to set the storage folders (pages) via TypoScript (by $constant), so I overwrote the FlexForm without the 'pages' field.
In my FlexForm, I removed 'settings.pages'
https://github.com/TYPO3/typo3/blob/ec00fb81a0f64050e37eb032fca7d28daaf6b3f8/typo3/sysext/felogin/Configuration/FlexForms/Login.xml#L46
Updated by Sybille Peters almost 2 years ago
Do we have a general issue for combining Flexform and TypoScript? Because I think there are several problems when you want to combine TypoScript and Flexform and it is not just the problem described here.
Updated by Xavier Perseguers almost 2 years ago
Yes we have a general issue for combining FlexForm and TypoScript.
I have the exact same problem with the login plugin since I switched to the Extbase-based version (instead of old pi1).
I want to dynamically configure the redirect after login and logout (redirectPageLogin
and redirectPageLogout
) but my TS is systematically overridden by the (empty) configuration coming from FlexForm, thus the plugin.
A solution that looks ok for that use case, but it would need extensive testing to ensure this has no side-effect would be to modify that line:
that way:
- ArrayUtility::mergeRecursiveWithOverrule($frameworkConfiguration[$configurationPartName], $configuration[$configurationPartName]); + ArrayUtility::mergeRecursiveWithOverrule($frameworkConfiguration[$configurationPartName], $configuration[$configurationPartName], true, false);
For TYPO3 v10:
--- a/Classes/Configuration/FrontendConfigurationManager.bak.php 2022-12-05 15:29:19 +++ b/Classes/Configuration/FrontendConfigurationManager.php 2022-12-05 15:21:08 @@ -220,7 +220,7 @@ { if (isset($configuration[$configurationPartName]) && is_array($configuration[$configurationPartName])) { if (isset($frameworkConfiguration[$configurationPartName]) && is_array($frameworkConfiguration[$configurationPartName])) { - ArrayUtility::mergeRecursiveWithOverrule($frameworkConfiguration[$configurationPartName], $configuration[$configurationPartName]); + ArrayUtility::mergeRecursiveWithOverrule($frameworkConfiguration[$configurationPartName], $configuration[$configurationPartName], true, false); } else { $frameworkConfiguration[$configurationPartName] = $configuration[$configurationPartName]; }
Updated by Lidia Demin almost 2 years ago
Can confirm on TYPO3 11.5.21 (noticed it during an upgrade from 8.7. to 11.5). It seems that it also leads to some status messages not being shown anymore (empty).
Also, don't know if this relates, but in the piBase-Version it was possible to use the password change form for a logged-in user. This is not the case anymore. Instead, the user is redirected to the "redirectPageLogin" page when clicking on the link to the password change form.
Updated by Torben Hansen almost 2 years ago
- Related to Feature #99976: Ignore empty flexform values in extbase extension settings added
Updated by Torben Hansen almost 2 years ago
Xavier Perseguers wrote in #note-11:
A solution that looks ok for that use case, but it would need extensive testing to ensure this has no side-effect would be to modify that line:
that way:
[...]
For TYPO3 v10:
[...]
This does not work for me for boolean fields. If TypoScript has defined settings.showPermaLogin = 1
and FlexForm has no config for this setting (= empty), the result for the setting is settings.showPermaLogin = 0
, since the empty checkbox is saved with a 0
value to FlexForm.
I am currently trying to come up with a configurable solution for the problem in general (see #99976).
Updated by Xavier Perseguers over 1 year ago
- File before.png added
- File after.png added
Updated by Torben Hansen over 1 year ago
For v10 and v11, this problem can sadly not be fixed. For v12, extbase extensions can now use the new setting ignoreFlexFormSettingsIfEmpty
to define FlexForm field, which will be ignored if either empty or zero. See #99976 for details.
Updated by Torben Hansen over 1 year ago
- Status changed from New to Closed
Closing the issue, since it is fixed in v12 but can not be backported to v11.
Updated by Ernesto Baschny about 1 year ago
FYI in case you reach this issue later on:
I created the "backport" for our own usage - since we need it in our projects as a bugfix. Feel free to use it in your v11 projects: