[BUGFIX] Tolerate record without pid (#2087)

[BUGFIX] Tolerate record without pid (#2087)

This fix the bug which leads to an BE error for newly placed content elements with a flud:field.text and enabled rte.
New placed content elements which are not saved doesn't have a pid in the record.

---------

Co-authored-by: Claus Due <[email protected]>
paulAtSlim 2023-06-01

[TASK] Remove interceptor from test configuration

[TASK] Remove interceptor from test configuration
NamelessCoder 2023-06-01

[BUGFIX] Check if initializeObject method exists before calling

[BUGFIX] Check if initializeObject method exists before calling
NamelessCoder 2023-06-01

[BUGFIX] Restore TCEforms wrapper patching

[BUGFIX] Restore TCEforms wrapper patching

Although nearly every aspect of TYPO3 has no issues with a DS that
does not contain the "TCEforms" wrapper around every field, there are
still a couple of places (e.g. SuggestWizardController), as well as some
third party solutions like l10n_mgr that will not tolerate a DS without
this wrapper.

Close: #1805
NamelessCoder 2023-04-18

[BUGFIX] Read FF data from current field if passed

[BUGFIX] Read FF data from current field if passed
NamelessCoder 2023-04-10

[BUGFIX] Preserve custom showitem but ensure presence of pi_flexform …

[BUGFIX] Preserve custom showitem but ensure presence of pi_flexform field
NamelessCoder 2023-04-10

[BUGFIX] Do not deliver DS for CType with existing DS definition

[BUGFIX] Do not deliver DS for CType with existing DS definition
NamelessCoder 2023-04-07

[BUGFIX] Do not naively override existing TCA showitem

[BUGFIX] Do not naively override existing TCA showitem
NamelessCoder 2023-04-07

[BUGFIX] Ensure CType is registered in CType selection field

[BUGFIX] Ensure CType is registered in CType selection field
NamelessCoder 2023-04-07

[BUGFIX] Add field name to key of extracted variables

[BUGFIX] Add field name to key of extracted variables
NamelessCoder 2023-04-07

[BUGFIX] Avoid registering content types as plugin types

[BUGFIX] Avoid registering content types as plugin types
NamelessCoder 2023-03-27

[TASK] Make phpcs happy again

[TASK] Make phpcs happy again
NamelessCoder 2023-03-23

[TASK] Make phpstan happy again

[TASK] Make phpstan happy again
NamelessCoder 2023-03-23

[BUGFIX] Use TYPO3_REQUESTTYPE if it is defined

[BUGFIX] Use TYPO3_REQUESTTYPE if it is defined

Fixes issue on TYPO3v10/v11 where Extbase-based backend modules
may not work correctly due to retained instance of ConfigurationManager
having a FrontendConfigurationManager in BE context.
NamelessCoder 2023-03-23

[BUGFIX] Do not attempt to call non-existing setter methods

[BUGFIX] Do not attempt to call non-existing setter methods
NamelessCoder 2023-03-17

[TASK] Remove unused internal method

[TASK] Remove unused internal method
NamelessCoder 2023-03-14

[BUGFIX] Fix version matching in CompatibilityRegistry

[BUGFIX] Fix version matching in CompatibilityRegistry
NamelessCoder 2023-03-14

[FEATURE] Pass field name and Form instance to custom transform methods

[FEATURE] Pass field name and Form instance to custom transform methods
NamelessCoder 2023-03-14

[FEATURE] Allow single provider to handle multiple fields/forms

[FEATURE] Allow single provider to handle multiple fields/forms

This change allows a single provider class to return multiple different
forms (based on field name). A custom provider may return multiple
different values from the "getConfigurationSectionName" method,
causing Flux to extract a Form definition from different sections based
on which field name is currently being processed.

The provider must override the "trigger" method with a custom
implementation to make it return TRUE for all handled values of $field,
including NULL.

Example implementation, custom Provider class:

```php
class MyProvider extends AbstractProvider
{
    public function trigger(array $row, ?string $table, ?string $field, ?string $extensionKey = null): bool
    {
        return $table === 'tt_content'
            && $this->getContentObjectType() === $row['CType']
            && in_array($field, [null, 'pi_flexform', 'header_options', 'wrapper_options'], true);
    }

    public function getConfigurationSectionName(array $row, ?string $forField = null): ?string
    {
        return match($forField) {
            'header_options' => 'HeaderOptions',
            'wrapper_options' => 'WrapperOptions',
            'pi_flexform' => 'Configuration',
            null => 'Configuration',
        };
    }
}
```

Example implementation, template file:

```xml
<f:section name="WrapperOptions">
    <flux:form id="my-wrapperoptions">
        <flux:field type="input" name="wrapper" label="Field in wrapper options Form" />
    </flux:form>
</f:section>

<f:section name="HeaderOptions">
    <flux:form id="my-headeroptions">
        <flux:field type="input" name="header" label="Field in header options Form" />
    </flux:form>
</f:section>

<f:section name="Configuration">
    <flux:form id="my-default-form">
        <flux:field type="input" name="default" label="Field in default Form" />
    </flux:form>
</f:section>

<f:section name="Main">
    <!-- output -->
</f:section>
```
NamelessCoder 2023-03-06

[BUGFIX] Avoid duplicate event identifier

[BUGFIX] Avoid duplicate event identifier
NamelessCoder 2023-03-03