Bug #92902
openTypoScript formDefinitionOverrides recipients
0%
Description
Overriding recipients in form framework in TYPO3 10 through TypoScript works in frontend, but the TypoScript analyzer in backend throws an error due to the @ symbol.
Configuration:
plugin.tx_form.settings.formDefinitionOverrides.contactForm.finishers { 0 { options { recipients { test@test.de = Name } } } }
Error/Warning in backend module "Template":
Warning : Line 4283: Object Name String, "test@test.de" contains invalid character "@". Must be alphanumeric or one of: "_:-\." (edited)
Updated by Raphael Zschorsch about 4 years ago
After further investigation, the @ symbol should be allowed by TypoScript parser.
https://github.com/TYPO3/TYPO3.CMS/blob/11c11675e62a8bdef428db63af291185fe35d4fc/typo3/sysext/form/Classes/Controller/FormFrontendController.php#L158
Also, the configuration needs to be:
plugin.tx_form.settings.formDefinitionOverrides.contactForm.finishers { 0 { options { recipients { test@test\.de = Name } } } }
The dot in the email address, has to be escaped, otherwise it won't work, as the dot notation of TypoScript kicks in. This is especially bad, if the email address is i.e. defined as a TypoScript constant without escaping the dot. I couldn't figure this out yet.
This won't work:
plugin.tx_form.settings.formDefinitionOverrides.contactForm.finishers { 0 { options { recipients > recipients { test@test\.de = Name } } } }
Clearing recipients in TypoScript will not work, because here the array is merged and the default value of the YAML form file is still in the array:
https://github.com/TYPO3/TYPO3.CMS/blob/11c11675e62a8bdef428db63af291185fe35d4fc/typo3/sysext/form/Classes/Controller/FormFrontendController.php#L158
Setting
recipients = __UNSETwill not work either.
Updated by Ayke Halder over 3 years ago
The following code variation works.
YAML form definiton:
finishers:
-
options:
recipientAddress: default@example.org
recipientName: Default Name
TypoScript setup:
plugin.tx_form.settings.formDefinitionOverrides.contactForm.finishers {
0 {
options {
recipientAddress = special@example.com
recipientName = Special Name
}
}
}
Updated by Raphael Zschorsch over 3 years ago
Yes, this works for TYPO3 9, but the YAML configuration changed to "recipients" in TYPO3 10.
Updated by Björn Jacob over 3 years ago
- Category deleted (
Form Framework)
This is not related to form. It is a problem of the TypoScript parser. Anyway, thank you for your contribution and all of the provided information.
Updated by Philipp Kitzberger almost 3 years ago
@Raphael, just had the very same challenge and came up with this solution that doesn't involve writing a custom finisher: https://gist.github.com/kitzberger/7a53d517b5991769783fd7326062e157
It's basically using the "variants" feature that got introduced with TYPO3 9.4
Updated by Bernhard Eckl over 1 year ago
Thanks a lot @Philipp, you saved my day! Your solution works great.
But it would be nice if the typoscript version also would work again (specially if options via data e.g. TSFE:fe_user|user|email will be used). This was my solution before:
kontakt_1 {
finishers {
0.options {
recipientAddress = CASE
recipientAddress {
key.data = GP : tx_form_formframework|kontakt_1-15509|singleselect-1
default = TEXT
default.value = email@domain.tld
1 = TEXT
1.value = anothermail@domain.tld
2 = TEXT
2.value = anothermail2@domain.tld
}
}
}
}
Updated by Christian Kuhn over 1 year ago
The misconception of ext:form with this TypoScript is having a "living value" on the left side as identifier. That's not good design.
It would be better to do something like this:
recipients { 10 { email = test@test.de name = John Doe } 20 { ... } }
As such, I'll keep this issue open, and still think this is an issue in ext:form.
However, for the parser issue: Since v12, with the new TS parser, identifiers can contain `@`. I'll add a patch that adds a dedicated test for this as proof.
Updated by Christian Kuhn over 1 year ago
- Related to Feature #97816: New TypoScript parser added
Updated by Christian Kuhn over 1 year ago
- Related to Task #101732: Verify @-sign is a valid TypoScript identifier added
Updated by Christian Kuhn over 1 year ago
- Related to deleted (Feature #97816: New TypoScript parser)
Updated by Christian Kuhn 3 months ago
- Related to Feature #97816: New TypoScript parser added