7.2.0 (2021-09-30)

Overview of merged pull requests

FEATURE: Allow NodeTypes to be defined in hierarchical folders

This feature allows NodeType.*.yaml files to be put into nested folders underneath <Package-Root>/NodeTypes:

Packages
  Some.Package
    Configuration
      NodeTypes.yaml (still supported!)
    NodeTypes
      Foo
        Bar.yaml (new)
  • Resolves: #3000

  • Packages: ContentRepository

FEATURE: Fusion Memo object

This Fusion object stores its value based on the given discriminator and returns the same result in future calls during the same rendering. The value will then not be evaluated again.

Example:

prototype(My.Vendor:Expensive.Calculation) < prototype(Neos.Fusion:Memo) {
    discriminator = 'expensive-calculation'
    value = ${1+2}
}
myValue = My.Vendor:Expensive.Calculation
myValue2 = My.Vendor:Expensive.Calculation
  • Packages: Fusion

FEATURE: Upgrade font awesome to version 5.15

With this PR we get news brand icons and covid-19 icons. Also some bugfixes related to unicode issues and much more.

See the changes here https://github.com/FortAwesome/Font-Awesome/compare/5.12.1…5.15.3

https://user-images.githubusercontent.com/1014126/127469797-6586f13f-60ff-47e0-a973-a4815d89e42e.png
  • Releated: #3390

  • Packages: NodeTypes.ColumnLayouts Neos

FEATURE: Show the last login date in the user/account list

https://user-images.githubusercontent.com/642226/125079072-7ddfde00-e0c3-11eb-8111-e2d55a012769.png
  • Packages: Neos

BUGFIX: Use Testing/Behat for DB setup in Behat steps

The command FLOW_CONTEXT=Testing/Behat ./flow behat:setup && ./flow doctrine:create && ./flow doctrine:migrationversion --add --version all is broken, because the context is only active for the behat:setup call, not the doctrine:… calls later.

  • Packages: .github

BUGFIX: Make test actually test what is says it tests

The BackendControllerSecurityTest did not assert the login actually works in the test indexActionIsGrantedForAdministrator().

  • Packages: Neos

BUGFIX: Adjust assetsource icon color on hover and active

The icons are always white and when the asset source is active and on a small viewport we switch the background also to white. So the icons are not visible anymore.

This patch will adjust the color of the icon via filter functions. As we are not able to use the fill rule.

What I did We now use the css filter to modify the color of the icons. ` filter: invert(.5) sepia(1) saturate(5) hue-rotate(175deg); `

How to verify it

  1. Install a second asset source and go to the media module.

  2. Shrink the viewport to less than 767 pixels width

  3. Check if the icon of the active asset source is visible

https://user-images.githubusercontent.com/1014126/134674449-e293e16b-0a03-434b-9914-9434701fa56b.mp4

  • Packages: Media.Browser

BUGFIX: Use correct hotel icon mapping

Show hotel icon instead of bed

  • Relates: #2697

  • Packages: Neos

BUGFIX: Fallback to jpg if webp is not supported on login screen

This is the following PR for #3413

If the browser doesn’t support webp, it will fall back to the same filename with jpg.

  • Packages: Neos

BUGFIX: Don’t skip childnodes when discarding nodes

Previously autocreated childnodes like ContentCollections were ignored when discarding selected nodes via the workspace module.

When deleting a node and discarding the change the auto created children would then stay deleted in the database and the backend would show no content/errors.

The behaviour is now the same as for publishing nodes and the direct child nodes are included in the discard if the node has auto-created child nodes or is a document.

BUGFIX: Create Localisation API structure earlier

Like in the new media-ui it could happen that the backend module throws an error because the Localization init is not completed yet.

See https://github.com/Flowpack/media-ui/issues/78 for more information.

This patch will split the init step of the Localization API to a plain init that builds the structure and the new initTranslations that will create the raw translation data. As the translation data is fetched first, it could take some time. Now we first build the structure and set initialized to false and after that we fetch the xliff data and create the localization mapping.

So the initialized flag is now working way better.

What I did Split up the init function to be able to create the structure and data separately. And then build the structure before fetching the data.

How to verify it Install the new media-ui for instance and check the console for an error ;)

  • Packages: Neos

BUGFIX: Reset accidentally upmerged branch version constraints

Some constraints of the 7.1 branch seem to have been accidentally upmerged to master. This change reset those to dev-master again.

BUGFIX: Remove broken @FlowIgnoreValidation from ContentRepository context

This fixes the following error on master:

Argument 1 passed to Neos\\Flow\\Annotations\\IgnoreValidation::__construct() must be of the type string, null given, called in /var/www/html/Packages/Libraries/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php on line 971
Type: TypeError
  File: Packages/Framework/Neos.Flow/Classes/Annotations/IgnoreValidation.php
  Line: 41

  Type: N eos\\Flow\\Core\\Booting\\Exception\\SubProcessException
  Code: 1355480641
  File: Packages/Framework/Neos.Flow/Classes/Core/Booting/Scripts.php
  Line: 712

Since the variable with the annotation is populated in the constructor with a fresh instance the need of this annotation is at least questionable.

  • Packages: ContentRepository

BUGFIX: Prevent repeated queries for non existing nodes

What I did

The first level node cache stores non existing nodes as null. This should have prevented repeated queries for the same non existing nodes. But isset returns false for a stored value of null in this case therefore saying that the node is unknown unstead of non existing, which triggers another db query. With this change, null is now returned and no additional query triggered by the context.

How I did it

The node cache returns the stored value of null instead of false.

How to verify it

Run test or manually query a CR context for non existing identifiers multiple times.

  • Packages: ContentRepository

BUGFIX: Only document Nodes should appear in Breadcrumb

When rendering the Breadcrumb menu in a Content node, the Content node itself is no longer added to the menu.

This is done by replacing q(node).add(...) with q(documentNode).add(...)

  • Packages: Media.Browser Neos

BUGFIX: Use vanilla js for toggling class

Use vanilla JS for toggling the technical information

  • Resolves: #3351

  • Packages: Neos SiteKickstarter

BUGFIX: Fix cascade argument of childEvents relation

#3341 build failures made me aware of this

  • Packages: Neos

BUGFIX: Fix depth comparison in hasHiddenNodeParent(…)

The comparison in this is wrong. Because the depth is 0-based, but the nodes returned by getNodesOnPath(…) contain the root node, less-than-or-equal must be used.

  • Fixes: #3363

  • Packages: Neos

BUGFIX: Adjust contributing section to composer changes

When installing for development purposes, --prefer-install=auto needs to be used since Composer 2.1, see https://getcomposer.org/doc/06-config.md#preferred-install

BUGFIX: Deletion of assets from media overview works again

  • Fixes: #3349

  • Packages: Neos Media.Browser

BUGFIX: Skip unnecessary queries for nodedata

What I did and how I did it

  1. Prevent node queries when is is clear that there would be an empty result

  2. Prevent childnode count queries, when the children are already known due to previously cached query results for the same children

How to verify it

In the Neos page /en/features.html this reduces the number of queries from 138 to 133. In larger projects with more complex components this has a larger effect.

In a large project this reduced the SQL query count on one page from 1379 to 1115 (~23%) and the resulting rendering time by ~20%.

  • Packages: ContentRepository

BUGFIX: Don’t evaluate reference nodes collection twice

The condition in fluid evaluates the „referenceNodes“ and the result is not cached. Therefore when the variable is used for the output the whole code is evaluated again.

  • Resolves: #3355

  • Packages: NodeTypes.ContentReferences

BUGFIX: Avoid use of removed isMethodSafe()

This has obviously been forgotten in the past… and since it’s not used by the new UI, that wasn’t noticed yet.

  • Packages: Neos

TASK: Add release notes for Neos 7.2

  • Packages: Neos

TASK: Add `NodeTypes folder to fusion file monitoring for cache invalidation <https://github.com/neos/neos-development-collection/pull/3414>`_

The NodeTypes folder was just added to have a hierarchical structure for the nodeTypes. Since nodetypes are often tightly coupled to the integration it makes sense to put the fusion prototypes that implement the rendering of for the prototype there aswell. Especially when presentation and integration are seperated.

This can already be done via include: ../../../NodeTypes/**/*.fusion in the Root.fusion. However changes to fusion files in the NodeTypes folder are not detected yet.

To support this pattern this change adds the folder NodeTypes to the folders that are monitored for fusion file changes.

See: https://github.com/neos/neos-development-collection/issues/3000

  • Packages: Fusion

TASK: Exchange Wallpaper for Neos 7.2

The picture is taken by myself and can be used free of charge.

I used a webp this time for the wallpaper, as it is only 286k instead of 1.2M for the jpg variant.

Voting result: https://discuss.neos.io/t/neos-7-2-login-wallpaper/5571/12

  • Packages: Neos

TASK: Bump postcss from 8.2.8 to 8.3.4

Bumps postcss from 8.2.8 to 8.3.4.

  • Packages: Neos

TASK: Enable PHP 8 build

This enables a PHP 8 build and adjusts some things to achieve PHP8-compatibility of the code-base.

Thanks a lot to @gerdemann !

  • Packages: ContentRepository

TASK: Replace deprecated guzzle functions with static methods

See https://github.com/guzzle/psr7/pull/345

Related to https://github.com/neos/flow-development-collection/pull/2455 - hence why this targets 7.1 instead of master

  • Packages: Neos Fusion

TASK: Use nodeIdentifier instead of getNodeAggregateIdentifier

As the NodeAggregateIdentifier class is final and not mockable in unit tests.

  • Resolves: #3374

  • Packages: ContentRepository

TASK: Replace deprecated window.Typo3Neos

The usage of window.Typo3Neos has been replaces with window.NeosCMS and with version 8 the old Typo3Neos will not work anymore. So we as core should use the latest version of course.

What I did Just replaced the old window.Typo3Neos with window.NeosCMS

How to verify it Just edit tags, create tags or images.

  • Packages: Neos Media.Browser

TASK: Remove deprecated removed content wraps

What I did

Every content collections renders nodedata for its removed content. This creates a lot of queries in the backend context of Neos as the query uses a modified context and therefore skips the first level nodecache. But the nodedata was only used by the old Neos UI and has no effect anymore on the new UI. Therefore removing this from rendering reduces rendering time a lot in the backend.

How I did it

Removed the Fusion part responsible for rendering the removed node wraps.

This could be breaking if anyone implemented some modification of the removedContent part of the ContentCollectionRenderer object in their project which I can hardly imagine.

How to verify it

Load a page with 1 or more contentcollections in the Neos backend and compare query count.

In a large project this change reduced the number of SQL queries in the Neos backend or preview by ~21%.

  • Packages: Media.Browser Neos

Detailed log