Project

General

Profile

Actions

Bug #92902

open

TypoScript formDefinitionOverrides recipients

Added by Raphael Zschorsch over 3 years ago. Updated 8 months ago.

Status:
New
Priority:
Should have
Assignee:
-
Category:
Form Framework
Target version:
-
Start date:
2020-11-22
Due date:
% Done:

0%

Estimated time:
TYPO3 Version:
10
PHP Version:
7.3
Tags:
Complexity:
Is Regression:
Sprint Focus:

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, "" contains invalid character "@". Must be alphanumeric or one of: "_:-\." (edited)


Related issues 1 (0 open1 closed)

Related to TYPO3 Core - Task #101732: Verify @-sign is a valid TypoScript identifierClosed2023-08-22

Actions
Actions #1

Updated by Raphael Zschorsch over 3 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 = __UNSET
will not work either.

Actions #2

Updated by Ayke Halder about 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
    }
  }
}
Actions #3

Updated by Raphael Zschorsch about 3 years ago

Yes, this works for TYPO3 9, but the YAML configuration changed to "recipients" in TYPO3 10.

https://docs.typo3.org/c/typo3/cms-core/10.2/en-us/Changelog/10.0/Feature-80420-AllowMultipleRecipientsInEmailFinisher.html

Actions #4

Updated by Björn Jacob over 2 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.

Actions #5

Updated by Philipp Kitzberger about 2 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

Actions #6

Updated by Bernhard Eckl 8 months 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 =
1 = TEXT
1.value =
2 = TEXT
2.value =
}
}
}
}

Actions #7

Updated by Christian Kuhn 8 months ago

  • Category set to Form Framework
Actions #8

Updated by Christian Kuhn 8 months 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.

Actions #9

Updated by Christian Kuhn 8 months ago

Actions #10

Updated by Christian Kuhn 8 months ago

  • Related to Task #101732: Verify @-sign is a valid TypoScript identifier added
Actions #11

Updated by Christian Kuhn 8 months ago

Actions

Also available in: Atom PDF