Similar to what has been done in v7 already, v8 now
sets config.platform.php in composer.json.

See https://getcomposer.org/doc/06-config.md#platform
for more details.

Mind this setting (as all other 'config' section settings)
is only valid for the root composer.json file,
it has no meaning if core is used as dependency in a project
with its own composer.json file. For core however, this setting
is relevant since composer.json is also used as root file
during packaging of standalone core packages.

The setting now effectively prevents core from installing
dependencies that require higher PHP versions, even if the
locally installed PHP version is higher.

The value is set to 7.0.0: Symfony raised PHP requirements
from 7.0.0 to 7.0.8 between 3.3.6 and 3.3.7 versions, setting
7.0.0 as platform.php thus forces downgrade from 3.3.10 to 3.3.6
of symfony dependencies. Wether we raise to 7.0.8 ourselfs for
v8 may be decided with another patch if really needed. This
version downgrade from 3.3.10 to 3.3.6 should be ok since
the upgrade happened with #82834 which has not yet been released
in a stable v8 patch level release.

There is a difference between Apache and CLI exposing global path
configuration on Windows Systems. The CommandUtility uses the global
path to initialize an internal path storage for possible command
resources. The patch ensures both possible keys on Windows systems are
taken into account to resolve possible application locations.

Clicking the close button in a editing popup accesses Close.html in
Resources/Public/Html/ which is a folder accessible by a web user
instead of Resources/Private/Templates/ which lead to a HTTP 403 error
on closing the popup.

We properly escape some characters of "dropzone-target" data attribute,
since it is being used as a CSS selector to insert the dropzone in
our DOM. The "dropzone-target" might contain characters that have a
special meaning in CSS, like for example a dot. Especially the dot
is typical for cases like flexforms fields.

This allows drag and drop file uploads even on such cases (like for
example working drag and drop file uploads in DCE content elements).

Global function debug() initializes its 6th argument
to constant E_DEBUG which does not exist and then defaults
to string 'E_DEBUG'. This raises a PHP 7.2 warning.
Relevant for v8 & v7 only, this argument has been removed
in master already.
Fix by defaulting to string 'E_DEBUG' in method signature.

A data provider uses the not defined constant "NL". PHP 7.2
throws warnings on this. Warnings from data providers do not
lead to failing tests, still this is ugly and pollutes test
runs with warnings in the head part.

The table and column name quoting method {#tableName}.{#columnName}
introduced for TypoScript in issue #80506 is now used to quote
identifiers in TCA column definitions known to possibly contain SQL
fragments. Missing quotes for identifiers containing e.g. uppercase
letters lead to exceptions when performing a query in PostgreSQL.

In order to achieve this a new Class TcaPreparation is added as this is
not a typical TcaMigration.

When a parent record (e.g. tt_content) has inline relations
(e.g. sys_file_reference)and these relations show a placeholder
for records related to them (e.g. sys_file and sys_file_metadata)
then we need to pass the context of the language so that
the placeholders are shown in the correct language.

We now do so by putting the value of the language field
of the parent record into the data set and update it
in case child records are also translatable.

This way when going down the list of children, we always
know the language id of the last applicable parent element,
even if one element in between was not translatable (e.g. sys_file)

If we know the language, we can pick the correct record uid
out of the list of possible related uids, instead of
just picking the first one.

Furthermore the language field for sys_file_metadata is removed from
editor form as the language is set by GET parameter already.

The FlexFormTools class tries to resolve the datastructure
of flex fields by the given TCA configuration. The flexform
definition can either be set directly in the TCA or it is
fetched from another record.

Example:
TemplaVoilà fetches the data structure from the table
tx_templavoila_datastructure.

When trying to resolve the data structure from another
table and the identifier is invalid (e.g. empty or does
not point to a valid record), several exceptions are
thrown that need to be caught at several points to keep
the user interface accessible.

Other than these mentioned exceptions there are ones
that indicate that the TCA configuration is simply wrong.
These ones are not caught and will still bubble up.

$pathsToProvideInTestInstance offers the possibility to use real
duplicates instead of linked resources in the filesystem - especially
in scenarios when files shall be modified inside a testing instance this
is the better approach and avoid side-effects during test execution.

[TASK] Install Tool: Display a warning if PHP fileinfo extension is not loaded

Show a warning message during the installation process if
the PHP fileinfo extension is not loaded.
It only displays a warning because the fileinfo extension is just
a suggestions and not required.
The fileinfo extension is useful to extract file metadata.

[BUGFIX] Make category tree filterable for editors with category mounts

TCEFORM.pages.categories.config.treeConfig.rootUid should filter
the category tree. Non-Admin users with category mounts currently
need every child category of rootUid in their category mounts
since the rootline of rootUid is not checked against the category
mounts.

When IRRE actions (localize/synchronize) are triggered that result in a
DataHandler error (e.g. "Localization failed, "languageField" and
"transOrigPointerField" must be defined for the table") because of a missing
configuration, the current implementation does not evaluate DataHandler
results in the JSON response.

The change adds the same functionality as for other DataHandler calls
to evaluate the JSON response.

Fix method findInStorageAndNotInUidList where $uidList
contains more then 65536 records in MySQL, 64000 in Oracle,
34464 in PostgreSQL by avoiding using prepared statements
and just passing values directly in query.

Avoid a SQL error on PostgreSQL when editing a FileStorage from FileTree
by passing the UID instead of a combined identifier like '1:/' to
EditDocumentController. Additionally fix the possibility for an SQL
error in BackendUtility::getRecord() by casting the UID.

The field l18n_parent was missing in table
tx_blogexample_domain_model_tag, but configured in TCA.
This causes an exception with adding a new tag in BE.
Also the field l18n_diffsource was missing in TCA and database.

* Add the fields l18n_parent and l18_diffsource to
the databse table tx_blogexample_domain_model_tag
* Add TCA configuration for field l18n_diffsource to
tx_blogexample_domain_model_tag TCA

Also add missing icon and label for
tx_blogexample_domain_model_dateexample.

The returnUrl is not available if the access module is accessed via
context menu of the page tree. The module now checks whether the
returnUrl is available and renders the close button only in such case.

GIFBUILDER uses provided file names and text snippets in order to
generate the final name for files to be written to. In case text
snippets start with a dot, this is also reflected into the file
name - preventing some web servers to deliver the file since it's
considered to be internal.