=====
3.2.0
=====

Allow non-uuid node identifiers
===============================
This replaces all occurrences of node identifier validation against the UUID pattern with a validation against a less restrictive NodeIdentifier pattern
In addition to removing the restriction that characters have to appear in a specific order, it also allows all other lowercase characters.

Allow to select all changes in a document with one click
========================================================
The workspace module shows changes grouped by document, but until now
there it was only possible to select individual or all changes for
further action.
This change adds the possibility to select all changes on a document
with a single click.

Setting authentication provider on new user creation in user backend module
===========================================================================
Allow setting authentication provider on new user creation in user backend module.
If less then two providers are given, the selector does not appear and the default authentication provider is used. Same as no authentication provider is explicit selected.

Add ModulePrivilege to protect Neos Backend modules
===================================================
Introduces a new Privilege `ModulePrivilege` that should be used to
access-protect Neos Backend modules. Usage::

  privilegeTargets:
    'Neos\\Neos\\Security\\Authorization\\Privilege\\ModulePrivilege':

      'SomePrivilegeTargetIdentifier':
        matcher: 'module/path'

This new privilege will be used to hide links to inaccessible modules
in the Backend. Furthermore they automatically protect access to all
actions of the configured controller of the affected module.

Setting a `privilegeTarget` in the module settings is still supported
but deprecated as of Neos 3.2.

HtmlAugmenter will augment plaintext with the given fallback-tag
================================================================
If plaintext is given to the html augmenter now uses the fallback-tag
as it already does if multiple tags are found on the same level.

This fixed the problem of contents not beeing selectable in the backend
if no tags are found but just some text.

Add async flag to the ``Neos.Neos:ImageUri`` and ``Neos.Neos:ImageTag``
=======================================================================
Adds support for generating asynchronous image URIs in case the requested image does
not exist already. The feature is already supported in the `ImageViewHelper` but was missing
in the fusion objects.

This works as follows:

- If a resource still has to be processed a /media/thumbnail-uri is rendered that will do the
  actual processing and return the image.
- Later if the resource is already processed the _Resource-uri is rendered as previously.

Fallback graph visualization
============================
The content repository is extended by two essential features,

* The Intra Dimensional Fallback Graph
* The Inter Dimensional Fallback Graph

which are supposed to be used for graph-aware projections in future versions.

These can be populated in-memory from the registered ``DimensionPresetSourceInterface`` by an application service and thus provide a read-only interface for applications in need of fallback logic.

In addition, Neos is extended by a backend module that visualizes these fallbacks.
They are displayed as an interactive graph using SVG and vanilla JS.

This can be tested/verified by setting up an arbitrary dimension configuration and visiting the Dimensions administration module

Add extension point for domain specific languages to fusion
===========================================================
DSLs are implemented for fusion-assignments using the tagged-template-string syntax of es6.
DSL-identifiers are configured in the configuration key `Neos.Fusion.dsl`. The configured objects must satisfy the `DslInterface`
and return fusion code that is parsed by the fusion-parser afterwards.

.. code-block:: text

    value = dslExample`... the code that is passed to the dsl ...`

In addition this pr adds a schema for the fusion part of the Settings and integrates it into the automatic schema-validation.

Allow strings and arrays in ``CachingHelper::nodeTypeTag``
===================================================================
This makes the `CachingHelper::nodeTypeTag` method much more flexible
for it's use case by allowing also strings and arrays (or `\\Traversable`) as
input, always returning an array of tags to be applied and gracefully
ignoring anything that won't result in a valid tag.

Evaluate `@if` in fusion as falsy or truthy values
==================================================
The behavior of ``@if`` is altered to make the distinction between falsy or truthy
values and no longer check for an exactly false value in the condition-expression.
For the distinction the php rules for casting to boolean are applied.
Examples for falsy-values that are now detected in ``@if``:

- empty array
- number zero
- null
- empty string

~~~~~~~~~~~~~~~~~~~~
Upgrade instructions
~~~~~~~~~~~~~~~~~~~~
See https://www.neos.io/download-and-extend/upgrade-instructions-3-1-3-2.html

.. note::

   Additionally all changes in Flow 4.2 apply, see the release notes to further information.
   See http://flowframework.readthedocs.org/en/4.2/TheDefinitiveGuide/PartV/ReleaseNotes/420.html
