`4.3.0 (2019-04-15) <https://github.com/neos/neos-development-collection/releases/tag/4.3.0>`_
==============================================================================================

Overview of merged pull requests
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

`BUGFIX: Fix site-package generator <https://github.com/neos/neos-development-collection/pull/2447>`_
-----------------------------------------------------------------------------------------------------

Somehow the classic site generator did not replace the occurrences of the package names
in fusion `reference://{packageKey}/...` strings any more while in other places this still worked.

This works around this by falling back to a very plain search replace based implementation that is only used on the fusion files.

With this change a site package created with the setup tool or the kickstart:site command will not directly welcome the user with fusion-errors which it did before.

* Packages: ``SiteKickstarter``

`FEATURE: Variant view in react and possibility of cropping <https://github.com/neos/neos-development-collection/pull/2426>`_
-----------------------------------------------------------------------------------------------------------------------------

This variant view based on React is a beta feature, just like the current
implementation of the variant view. It allows to crop any preset variant
with a crop, retaining the current aspect ratio.

* Packages: ``Browser`` ``Media``

`BUGFIX: Apply enforced image format conversions to all generated images <https://github.com/neos/neos-development-collection/pull/2431>`_
------------------------------------------------------------------------------------------------------------------------------------------

Previously the configured image format conversions were only applied when a target size was specified. That made the preview images in the media module still not show thumbnails for tiff images. 

In addition the new configuration is much more generic and is easier to support in future when we may improve the implementation.

This change removes the ConvertImageThumbnail Generator and the Configuration that came with it and introduces a setting `Neos.Media.image.defaultOptions.convertFormats` instead. The setting is a key-value-list that allows to specify which media types shall be converted whenever they are rendered. The key in the new configuration is the the source media-type and the value is the target media-type or file-extension.

By default the setting is empty since all format conversions have to be supported by by the imagine driver and especially ``Gd`` lacks some features. 

With the following setting you setup automatic conversion of tiff images to jpg:
```
Neos:
  Media:
    image:
      defaultOptions:
        # Image formats that shall always be converted regardless wether an adjustment was applied or not
        # The key is the the source media-type and the value is the target media-type or file-extension.
        convertFormats:
          image/tiff: image/jpeg
```

!!! This replaces the implementation for the default conversions in #2389 with a more generic approach wich is non breaking since it was not released yet.


* Packages: ``Media`` ``Neos``

`FEATURE: Add release notes <https://github.com/neos/neos-development-collection/pull/2440>`_
---------------------------------------------------------------------------------------------

* Packages: ``Neos``

`BUGFIX: add missing and new copyright field to the edit and new dialog in the media manager <https://github.com/neos/neos-development-collection/pull/2444>`_
--------------------------------------------------------------------------------------------------------------------------------------------------------------

add the missing copyright field again and also added a new on for the "new" dialog

* Packages: ``Browser``

`BUGFIX: add equals() methods on ContentStreamIdentifier and TraversableNode, use it in TraversableNodes <https://github.com/neos/neos-development-collection/pull/2442>`_
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

* Packages: ``ContentRepository``

`BUGFIX: Fix tag rendering in media module <https://github.com/neos/neos-development-collection/pull/2439>`_
------------------------------------------------------------------------------------------------------------

The names of tags were not rendered in the sidebar of the media module since https://github.com/neos/neos-development-collection/pull/2408 was merged because of an incomplete renaming from `tag` to `retrievedTag`

* Packages: ``Browser``

`TASK: Adjust created responses to \`\`ActionResponse\`\` <https://github.com/neos/neos-development-collection/pull/2438>`_
---------------------------------------------------------------------------------------------------------------------------

This changes responses created in various areas of Neos to be
of the new ``ActionResponse`` class in preparation of the next
major version.

Related: #2437

* Packages: ``Fusion`` ``Neos``

`Namespace and interface adjustments <https://github.com/neos/neos-development-collection/pull/2430>`_
------------------------------------------------------------------------------------------------------

This

* moves the new interfaces and value objects to conceptually matching namespaces (e.g. NodeAggregateIdentifier -> NodeAggregate, NodeTypeConstraintFactory -> NodeType)
* makes NodeName nullable
* moves getDimensionSpacePoint from NodeInterface to TraversableNodeInterface
* removes getSubgraph from TraversableNodeInterface
* removes the now obsolete RootNodeIdentifiers class
* removes the now obsolete NodeIdentifier class

* Packages: ``Browser``

` FEATURE: Set crop image adjustment by aspect ratio <https://github.com/neos/neos-development-collection/pull/2408>`_
----------------------------------------------------------------------------------------------------------------------

This change introduces a new property "aspectRatio" for the crop image
adjustment. It allows users to set a cropping area simply by providing
an aspect ratio, instead of x, y, width and height.

If an aspect ratio is specified, the x, y, width, and height parameters
are automatically deactivated. Likewise, if x, y, width or height are
specified, a potentially defined aspect ratio value will be reset.

* Packages: ``Media``

`TASK: Remove NodeInterface::getNodeIdentifier and add root node type name constant <https://github.com/neos/neos-development-collection/pull/2425>`_
-----------------------------------------------------------------------------------------------------------------------------------------------------

This change is required to adjust the codebase to our current Event Sourced CR refactoring, where we drop the NodeInterface::nodeIdentifier.

`TASK: Adjust Login Wallpaper for Neos 4.3 <https://github.com/neos/neos-development-collection/pull/2421>`_
------------------------------------------------------------------------------------------------------------

* Packages: ``Neos``

`BUGFIX: Respect settings for quality and format even if images are smaller that target dimensions <https://github.com/neos/neos-development-collection/pull/2422>`_
--------------------------------------------------------------------------------------------------------------------------------------------------------------------

Thumbnail images always returned the original source if allowUpscaling is false and the target size is smaller than the original image. This is unexpected when quality and format are defined.

This change makes sure the new assets are rendered when quality and format is defined.
The dimension calculation of the target images respects the allowUpscaling if the source is smaller that the target dimension.

Resolves: #2416

* Packages: ``AssetList`` ``BaseMixins`` ``Browser`` ``ColumnLayouts`` ``ContentReferences`` ``ContentRepository`` ``Form`` ``Html`` ``Media`` ``Navigation`` ``Neos`` ``NodeTypes``

`BUGFIX: Lowercase Node Names upon creation <https://github.com/neos/neos-development-collection/pull/2419>`_
-------------------------------------------------------------------------------------------------------------

This adjusts the `NodeName` Value Object to always convert the given
value to lower case when created via the `fromString()` constructor.

Background:
Node names are considered to be case insensitive. Internally they are
stored lower case but the `NodeInterface::MATCH_PATTERN_NAME` does not
allow for camel case names.

Fixes: #2418

* Packages: ``ContentRepository`` ``Media``

`FEATURE: Trigger signal when Thumbnail is persisted <https://github.com/neos/neos-development-collection/pull/2390>`_
----------------------------------------------------------------------------------------------------------------------

PR for issue #2387 

**What I did**
Added a signal `thumbnailPersisted` and an ORM lifecycle callback that triggers the signal once the thumbnail is persisted.

**How I did it**
Added two methods in Neos\\Media\\Domain\\Model\\Thumbnail: one for the signal and one for the lifecycle callback that triggers the signal.

**Checklist**

- [x] Code follows the PSR-2 coding style
- [x] Tests have been created, run and adjusted as needed
- [x] The PR is created against the [lowest maintained branch](https://www.neos.io/features/release-roadmap.html)

* Packages: ``Media``

`BUGFIX: node:repair now handles node->getProperties() as ArrayObject <https://github.com/neos/neos-development-collection/pull/2411>`_
---------------------------------------------------------------------------------------------------------------------------------------

**What I did**
I changed the code of the node:repair command to handle the result of node->getProperties() as ArrayObject and not as array, because that recently changed.

**How I did it**
Instead of getting the key via array_keys the properties are now iterated to find undefinded properties.

**How to verify it**
* run the node:repair-command on a content repository that is fine already => it should not complain about anything
* add a undefinded property to a node (by editing a record in the nodedata-table directly) and run node:repair => you should be asked if you want to remove the undefinded property

* Packages: ``ContentRepository``

`BUGFIX: Image previews should be rendered for asset proxies as well <https://github.com/neos/neos-development-collection/pull/2412>`_
--------------------------------------------------------------------------------------------------------------------------------------

The previous code must be a leftover from an upmerge and it results in
fatal errors when trying to open the details of an asset coming from a
proxy source.

* Packages: ``Browser`` ``Neos``

`TASK: Add PgSQL migration to support variant presets <https://github.com/neos/neos-development-collection/pull/2410>`_
-----------------------------------------------------------------------------------------------------------------------

* Packages: ``Media`` ``Neos``

`BUGFIX: Add missing Eel FileHelper registration <https://github.com/neos/neos-development-collection/pull/2407>`_
------------------------------------------------------------------------------------------------------------------

Register the file helper by default so that they can be used in Fusion, without the need of separate registration.

Solves Issue: #2405 

* Packages: ``Fusion`` ``Neos``

`FEATURE: Automatic image variants generation <https://github.com/neos/neos-development-collection/pull/2396>`_
---------------------------------------------------------------------------------------------------------------

This change adds a feature which allows to automatically generate variants of an original image based on the newly introduced image variant presets configuration.

In this first version, variants are automatically created as soon as an asset is created – for example, when it has been uploaded by an editor or otherwise been imported. Future versions may defer this
generation into a job queue, or provide a way to put conditions of the generation of these variants.

See the included documentation for configuration syntax and further background.

This change also includes a basic view displaying all variants of an asset in the edit view of the Media Browser. While this new view (implemented as a tab) may be useful already, it is neither especially
polished nor does it provide additional features. Therefore it is disabled by a feature switch for now. See the Settings.yaml of Neos.Media.Browser for details on enabling the tab.

* Packages: ``Media``

`FEATURE: Add fallback from \`itemRenderer\` to \`content\` for \`Neos.Fusion:Map\` and derived prototypes <https://github.com/neos/neos-development-collection/pull/2400>`_
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

This allows to declare the itemRenderers in `afx` without `@children` annotation and avoids a 
common error in afx code.

Affected prototypes:
-  `Neos.Fusion:Map`
-  `Neos.Fusion:RawCollection`
-  `Neos.Fusion:Loop`
-  `Neos.Fusion:Collection`

* Packages: ``Fusion`` ``Neos``

`FEATURE: Add native 404 error rendering that can be controlled via Fusion <https://github.com/neos/neos-development-collection/pull/2374>`_
--------------------------------------------------------------------------------------------------------------------------------------------

This change adds the default fusion path `error` that is used to render status messages
for the status codes 403, 404 and 410.

The matcher receives the context values `exception`, `renderingOptions`, `statusCode`,
 `statusMessage` and `referenceCode` and will by default render the previous template.

By extending the `error` Case you can add custom 404 rendering like in the example below.

```
#
# Extend error matcher to render the document with uriPathSegment `notfound`
# for exceptions with 4xx status code
#
error {
	@context.notfoundDocument = ${q(site).children('[instanceof Neos.Neos:Document]').filter('[uriPathSegment="notfound"]').get(0)}

	4xx {
		@position = 'start'
		condition = ${statusCode >= 400 && statusCode < 500 && notfoundDocument}
		renderer = Neos.Fusion:Renderer {
			@context.node = ${notfoundDocument}
			renderPath = '/root'
		}
	}
}
```

Resolves: #2325

* Packages: ``Neos``

`BUGFIX: Remove coupling of functional tests to \`Neos:Demo\` and \`Neos.NodeTypes\` <https://github.com/neos/neos-development-collection/pull/2401>`_
------------------------------------------------------------------------------------------------------------------------------------------------------

The previous tests tested nodetypes from those external packages which lead to testing errors because of changes to the master of Neos.Demo. This change uses nodetypes local to the testing context of the cr itself. 

This is cleaner and a preparation to move Neos.NodeTypes out of the development collection someday. Right now it allows to run the functional tests without Neos.Demo or Neos.NodeTyoes beeing installed.

* Packages: ``Neos``

`FEATURE: Move new NodeInterface and TraversableNodeInterface to core <https://github.com/neos/neos-development-collection/pull/2202>`_
---------------------------------------------------------------------------------------------------------------------------------------

## Ready for final review / Merging.

This Pull Request does three things:

1. Introduce the Event-Sourced `NodeInterface` and `TraversableNodeInterface` in the core
2. make the "old" `Node` implement `TraversableNodeInterface` as far as possible.
3. adjust FlowQuery operation code to work on the new `TraversableNodeInterface` whereever it makes sense.

This change is necessary to ensure a **smooth upgrade lateron to the Event Sourced CR**; so people working with `NodeInterface` in their custom code can already start using `TraversableNodeInterface` today.

*The change is rather big, but **not breaking*** (at least it should not be breaking ;) )

## ToDo List

- [x] move new NodeInterface and TraversableNodeInterface to CR
- [x] adjust TraversableNodeInterface to have proper method namings. Everything which queries something should be called find*; as opposed to get*.
- [x] make old Node implement TraversableNodeInterface
- [x] make compatible to PHP 7.1 (not sure if things need to be done; travis will tell us!)
- [x] **fix test cases**
- [x] go through all FlowQueryOperations in Neos and ensure they work with TraversableNodeInterface / new NodeInterface (partially done)
- [x] ensure the new NodeInterface and TraversableNodeInterface have proper API descriptions; and the old NodeInterface has proper deprecation messages set up

* Packages: ``Neos``

`FEATURE: Add \`\`format\`\` option for image-prototypes, viewHelpers and presets <https://github.com/neos/neos-development-collection/pull/2389>`_
---------------------------------------------------------------------------------------------------------------------------------------------------

The option ``format`` is added to imagePresets, viewHelpers and FusionPrototypes.
The format is passed as string "jpg", "jpeg", "gif", "png", "wbmp", "xbm", "webp" and "bmp" are supported. If no format is given the crops will use the format of the original image.

This allows to to enforce rendering of crops in jpeg or png but also adds support for rendering 
of webp-images as alternate sources.

Additionally this pr adds the ConvertImageThumbnailGenerator that allows to specify images that should be converted for online-presentation to an optimized target format. While the default imageFormat is specified in the settings this can still be overridden via `format` option on
the thumbnail-configurations.

The ConvertImageThumbnailGenerator is configured via settings:

```
Neos:
  Media:
    thumbnailGenerators:
      Neos\\Media\\Domain\\Model\\ThumbnailGenerator\\ConvertImageThumbnailGenerator:
        supportedExtensions:
          - tiff
        targetExtension: jpg
```


Resolves. #2320

* Packages: ``Media`` ``Neos``

`FEATURE: Add \`Neos.Neos:MenuItems\`, \`Neos.Neos:DimensionMenuItems\` and \`Neos.Neos:BreadcrumbMenuItems\` prototypes <https://github.com/neos/neos-development-collection/pull/2381>`_
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Three new fusion prototypes are added that extract the rendering of the ``items`` that are passed to the template from ``Neos.Neos:Menu``, ``Neos.Neos:BreadcrumbMenu`` and ``Neos.Neos:DimensionsMenu`` and make those items available for direct Fusion use without Template.

In addition the ``Neos.Neos:*Menu`` prototypes are now based on ``Neos.Neos:Template`` and do not have a custom implementation any more. 

*Attention: This change removes the old MenuImplementation classes. Those are not part of the api so this is still non-breaking since the ``*Menu``fusion prototypes still support all previous options by beeing based on ``Neos.Fusion:Template`` now instead of extending the TemplateImplementation class.*

### ``Neos.Neos:MenuItems``

Create a list of menu items for nodes. Each menuItem has the properties: ``node``, ``originalNode``, ``state``, ``label`` and ``menuLevel``.

- ``entryLevel`` (integer) Start the menu at the given depth
- ``maximumLevels`` (integer) Restrict the maximum depth of items in the menu (relative to ``entryLevel``)
- ``startingPoint`` (Node) The parent node of the first menu level (defaults to ``node`` context variable)
- ``lastLevel`` (integer) Restrict the menu depth by node depth (relative to site node)
- ``filter`` (string) Filter items by node type (e.g. ``'!My.Site:News,Neos.Neos:Document'``), defaults to ``'Neos.Neos:Document'``
- ``renderHiddenInIndex`` (boolean) Whether nodes with ``hiddenInIndex`` should be rendered, defaults to ``false``
- ``itemCollection`` (array) Explicitly set the Node items for the menu (alternative to ``startingPoints`` and levels)

### ``Neos.Neos:BreadcrumbMenuItems``

Create a list of of menu-items for a breadcrumb (ancestor documents), based on ``Neos.Neos:MenuItems``.

### ``Neos.Neos:DimensionsMenuItems``

Create a list of menu-items for other node variants (e.g. variants of the current node in other dimensions) by using this Fusion object.

If the ``dimension`` setting is given, the menu will only include items for this dimension, with all other configured dimension being set to the value(s) of the current node. Without any ``dimension`` being configured, all possible variants will be included.

If no node variant exists for the preset combination, a ``NULL`` node will be included in the item with a state ``absent``.

- ``dimension`` (optional, string): name of the dimension which this menu should be based on. Example: "language".
- ``presets`` (optional, array): If set, the presets rendered will be taken from this list of preset identifiers
- ``includeAllPresets`` (boolean, default **false**) If TRUE, include all presets, not only allowed combinations
- ``renderHiddenInIndex`` (boolean, default **true**) If TRUE, render nodes which are marked as "hidded-in-index"

* Packages: ``Neos``

`BUGFIX: Allow using font awesome brand icons in backend modules <https://github.com/neos/neos-development-collection/pull/2388>`_
----------------------------------------------------------------------------------------------------------------------------------

This was broken with 4.0 as fontawesome styling changed.

**What I did**

Inherit the font family for the icon pseudo element from the surrounding fa* class.

**How to verify it**

Use `fab fa-google` as icon for a backend module, f.e. Media Browser.
Instead of an empty square you should see the Google icon.

* Packages: ``Neos``

`FEATURE: Add NodeLink fusion prototype <https://github.com/neos/neos-development-collection/pull/2370>`_
---------------------------------------------------------------------------------------------------------

The ``Neos.Neos:NodeLink`` fusion prototype is added which renders an ``<a>`` tag based on ``Neos.Neos:NodeUri``, similar to ``Neos.Neos:ImageTag`` and ``Neos.Neos:ImageUri``. 

- all properties of ``Neos.Neos:NodeUri`` are supported and passed over
- ``attributes`` (:ref:`Neos_Fusion__Attributes`) Link tag attributes
- ``content`` (string) The label of the link, defaults to the node label ``q(node).property('_label')``.

This helps reducing code lines especially when using fusion-afx, with this prototype you can now directly link nodes in an afx renderer.

* Packages: ``Neos``

`TASK: More adjustments to Behat code <https://github.com/neos/neos-development-collection/pull/2382>`_
-------------------------------------------------------------------------------------------------------

* Packages: ``BaseMixins`` ``Browser`` ``ContentRepository`` ``Neos``

`!!!TASK: Upgrade to latest neos/behat version <https://github.com/neos/neos-development-collection/pull/2343>`_
----------------------------------------------------------------------------------------------------------------

Test distribution for travis:
https://travis-ci.com/johannessteu/neos-development-distribution/builds/97495679

* Packages: ``Neos``

`!!! TASK: Tweak CR Value Objects <https://github.com/neos/neos-development-collection/pull/2362>`_
---------------------------------------------------------------------------------------------------

for better type safety and interoperability

* Packages: ``ContentRepository``

`Add Pull Reminders badge <https://github.com/neos/neos-development-collection/pull/2335>`_
-------------------------------------------------------------------------------------------

Hi everyone!

Over 500 open-source organizations (like yours) use [Pull Reminders](http://pullreminders.com) for free. We've created this README badge so we can hopefully drive some traffic back to our website and continue sustainably providing free accounts to open-source orgazniations.  Let me know if you have any concerns about adding it. Here's [more information](https://pullreminders.com/badge) about the badge program.

`FEATURE: Hide property "target" of Neos.Neos.ShortCut depending on targetMode <https://github.com/neos/neos-development-collection/pull/2303>`_
------------------------------------------------------------------------------------------------------------------------------------------------

*What I did/How I did it*
I added configuration to the shortcut nodetype definition to hide the target-property in the UI when targetMode is not "selectedTarget"

*How to verify it*
Insert a shortcut node. You should not see the target-property untill you change the targetMode to "selectedTarget"

* Packages: ``Neos``

`Add deprecation annotations to methods that will be removed <https://github.com/neos/neos-development-collection/pull/2332>`_
------------------------------------------------------------------------------------------------------------------------------

Adds `@deprecated` annotations to methods from `NodeInterface`
and `Node` that will be replaced/removed with the CR rewrite.

* Packages: ``ContentRepository`` ``Neos``

`TASK: Update 3rd party dependency constraints <https://github.com/neos/neos-development-collection/pull/2318>`_
----------------------------------------------------------------------------------------------------------------

This allows semantically non-breaking updates for a number of 3rd
party dependencies. It includes PR #2299 and is related to
neos/flow-development-collection#1481

It makes `ImportedAsset` a non-final class to allow Doctrine to create
a proxy for it.

* Packages: ``Media``

`WIP: TASK: Cleanup Node and TraversableNode interfaces <https://github.com/neos/neos-development-collection/pull/2288>`_
-------------------------------------------------------------------------------------------------------------------------

* Introduce `TraversableNodes` as replacement for `array<TraversableNodeInterface>`
* Replace nullable param and return types where possible
* Add missing (return) type annotations
* Packages: ``ContentRepository``

`Detailed log <https://github.com/neos/neos-development-collection/compare/4.2.9...4.3.0>`_
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
