4.3.0 (2019-04-15)

Overview of merged pull requests

BUGFIX: Fix site-package generator

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

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

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:


# 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

BUGFIX: add missing and new copyright field to the edit and new dialog in the media manager

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

  • Packages: Browser

BUGFIX: Fix tag rendering in media module

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``

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


  • 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

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

BUGFIX: Respect settings for quality and format even if images are smaller that target dimensions

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

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

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.


  • Packages: Media

BUGFIX: node:repair now handles node->getProperties() as ArrayObject

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

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

BUGFIX: Add missing Eel FileHelper registration

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

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

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

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`

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

## 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

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:

  • tiff

targetExtension: jpg


Resolves. #2320

  • Packages: Media Neos

FEATURE: Add `Neos.Neos:MenuItems`, `Neos.Neos:DimensionMenuItems` and `Neos.Neos:BreadcrumbMenuItems` prototypes

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

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

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 (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

  • Packages: BaseMixins Browser ContentRepository Neos

!!! TASK: Tweak CR Value Objects

for better type safety and interoperability

  • Packages: ContentRepository

Add Pull Reminders badge

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

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

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

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

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