8.0.0 (2022-04-05)

Overview of merged pull requests

!!! FEATURE: Rewrite Fusion Parser

The fusion parser has been rewritten from a single file to an architecture with separate parser and lexer. The architecture is more precise and accessible and will allow to add new features and optimization to fusion in future. The fusion parser tests are generally unchanged, only the removed fusion namespace support required some adjustments.

The existing parser class and interface are unchanged but the inner working is: - The Fusion Parser hands the parsing of fusion files to the ObjectTreeParser which returns not an Array but actual Objects representing the parsed fusion - The Parser then uses the MergedArrayTreeVisitor to traverse the ObjectTree and convert convert it to the Array structure the Fusion Runtime expects. Closures for handling includes and dsl are allow the visitor to resolve those on the go.

About breakiness: - The fusion namespace feature is removed so the new parser only supports fully qualified prototype names - The new parser is a bit stricter as the old parser. However only clearly broken fusion-syntax is rejected. Since the parser adds clear error messages that help to fix such issues.

About Performance: - In Production the Fusion ObjectTreeArray is cached so as this is unchanged the Performance in Production is unchanged. - In Development mode the architecture adds a little to the parsing time for now. However the architecture will eventually allow us to cache the parsed fusion for each fusion file and only parse changed fusion files. This is not part of this pr but a follow up.

Note: The architecture with the old Parser staying in place as a wrapper is an immediate step as is the generation of the old ArrayAst via MergedArrayTreeVisitor. In the end also the runtime should use an object tree directly but this step allowed to adjust the parser separately with high confidence because the testsuite is unchanged. That us also the reason the new ObjectTreeParser is not marked as beeing public api yet.

!!! FEATURE: Remove legacy cache tag support

What I did

In Neos 4.1 new Eel helpers were introduced to generate content cache tags in Fusion. Those make sure that the cache tags provided by the integrator are valid. Until Neos 4.0 they needed to be written manually as string which was error prone.

But to support old cache tags that were lacking the workspace context the ContentCacheFlusher still cleared them. This change removes that support. So this is breaking and projects need to be adjusted when upgrading and still using those old cache tags.

The advantage of removing them is that the number of cache tags to be flushed during publishing is lower. TODO: Add number.

This change requires `#3631 <https://github.com/neos/neos-development-collection/issues/3631>`_to be merged first.

How I did it

Removed the legacy cache tag generation.

The change also include a new code migration version 20220318111600 to replace the most commonly used legacy cache tags with matching eel helper calls:

` node = ${'Node_' + node.identifier} descendants = ${'DescendantOf_' + node.identifier} nodeType = 'NodeType_My.Vendor:Content.Foo' `

  • Packages: Neos

!!! FEATURE: Neos.Media: Extend SupportsTaggingInterface by countByTag

What I did Currently classes that implement the SupportsTaggingInterface can only count untagged Assets. When using the interface with external Assets, this leads to the MediaBrowser displaying the count of Neos Media Assets for the external Source, not the count of the Assets matching that Tag in the external source. I extended the SupportsTaggingInterface so that Classes using this interface can change the count of the Tags that are displayed in the Media Browser, just like they can change the count of untagged Assets.

How I did it I added the countByTag method to the SupportsTaggingInterface and implemented it in the Neos MediaBrowser where the count happens. Since I am new to Neos I was not sure if countByTags should also pass the active AssetCollection, but I decided against it since the findByTag function also does not pass the active AssetCollection and the count should match the result. This could both be changed. Also, this could throw errors with Packages implementing the Interface.

How to verify it When implementing the SupportsTaggingInterface the method countByTag must be implemented and will change the count of Assets for every tag displayed in the left sidebar.

  • Related: #3452

  • Packages: Neos Media

FEATURE: Add ParsePartials cache to the fusion parser

The New Fusion Parser now uses a Neos_Fusion_ParsePartials cache to store the generated FileAst _*_ for each Fusion File. Those File partials are flushed via file monitor when the source Fusion file was changed. The generated merged array Fusion tree for a Fusion DSL is also cached seperately in this cache.

With this cache layer in place, only changed files are reparsed which speeds up Fusion parsing in Development mode by factor of 2 to 8 depending on context. _**_

The ParsePartials cache is disabled in Production mode as this one already uses the ObjectTreeCache.

since we cache mostly AstNode objects its recommended to have the php extension igbinary installed.

the cache can be turned of by disabling: Neos.Fusion.enableParsePartialsCache

_*_ there are now more representations of the Fusion code - we created a step in between where we create AstNode Objects see for more infos the PR of the New Fusion Parser: https://github.com/neos/neos-development-collection/pull/3497

_**_ in my tests, when the cached is warmed _***_, performance boost might not be notable on small projects.

_***_ of course is the cache warmed - as always for the statistics ;)

  • Packages: Fusion

FEATURE: Optimise cache tag generation before flushing content cache after publishing

What I did

The generation of cache tags is quite slow for a large number of published changes as many operations are done for each involved node and workspace. I improved the performance by skipping repeated operations on the same node with the same context and by caching the result of nodetype related calculations.

How I did it

  • Reuse calculated list of implemented nodetypes for each node changed by introducing a variable to store each calculation

  • Stop traversal through a nodes parents if one of the parents was already traversed before to generate DescendantOf cache tags.

How to verify it

  • Tests still run fine

  • Packages: Neos

FEATURE: Implement user impersonation

Extending the Neos with endpoints to impersonate a logged-in user and also restoring the user. For that, the change will add a new controller ImpersonateController for the backend.

Backend Administrators will get the permission to impersonate users, and everybody is able to restore the origin user if the user is authenticated by the impersonation. The change extends the user management module with a button for each user and the user menu in the to bar to be able to restore the user.

The user menu in the content module needs to be adjusted in the neos-ui.

https://user-images.githubusercontent.com/1014126/159288830-23440aea-399b-444a-a0f4-c0f01408977e.mp4

  • Resolves: #3647

  • Packages: Neos

FEATURE: Pass tags to be flushed to content cache backend

What I did

Instead of calling the cache backend for each tag to flush individually, the list of tags is passed to the backend with the newly introduced flushByTags method in https://github.com/neos/flow-development-collection/pull/2718.

This allows each type of backend to optimise the flushing of all tags, which can lead to huge performance improvements. Especially when content is published to the live workspace which leads to large numbers of cache tags that will be flushed.

Also the messages stored with individual content cache tags take up a lot of unnecessary memory in production context and not are even used there.

With this change the behaviour can be enabled via the setting Neos.Neos.fusion.contentCacheDebugMode.

How I did it

The ContentCacheFlusher now calls the flushByTags method introduced in https://github.com/neos/flow-development-collection/pull/2718.

Only in the newly introduced debug mode the old style of flushing by tag individually is used to provide the individual logged feedback why entries were flushed.

  • Packages: Neos

FEATURE: Add external rel attribute to link in ConvertUrisImplementation

closes #3543

What I did I added the posibility of adding ‘rel=”external”’ to external links, when using the ConvertUrisImplementation

How I did it Just like the already existing attribute setNoOpener, I added the option setExternal.

I was wondering about making this more open by allowing a string/array to be set here, since rel-attributes can contain a lot of different attributes. But then again, this could be misused.

How to verify it When using the ConvertUrisImplementation in fusion, the option setExternal can be used to add rel=”external” to a link.

`
@class = ‘Neos\Neos\Fusion\ConvertUrisImplementation’

value = ${value} node = ${node} externalLinkTarget = ‘_blank’ resourceLinkTarget = ‘_blank’ absolute = false forceConversion = false setNoOpener = true setExternal = true

`

  • Packages: Neos

!!! BUGFIX: Prevent busting the configuration cache version when a user logs in or is updated

What I did

Without this patch the configuration version was flushed and raised after every login or any other change to an account, always forcing the browsers to reload nodetype schemas and other configuration-requests which used the configuration version as cache-buster parameter. So if a user would reload the Neos backend after someone else logged in or logs in and out, the backend loading time would be much slower, as the nodetype schema and xliff data would have to be regenerated and downloaded skipping the possibly already cached version in the browser.

Also each role combination of users now has their own version identifier and therefore can share the resulting nodetype schema, xliff, etc.

Before everyone had the version of the user that last logged in or had any other change to their account as every change would have flushed the configuration version.

How I did it

  • Removed the AccountPostEventListener which only flushed the Neos_Neos_Configuration_Version. This could be breaking if anyone relied on it.

  • Make sure every role combination has their own configuration version.

How to verify it

  • Log in with first user and note down configuration version query parameter of nodetype request

  • Log in with second user with same roles and compare configuration version, should be the same

  • Reload with first user and make sure the version is still the same

  • Packages: Neos

BUGFIX: Separate fusion parserCache and parserCacheFlusher

This fixes a race condition described in #3685. When PHP code was changed at the same time as Fusion code, the parse partial cache tried to flush before the cache was injected which lead to a PHP error.

The change extracts the logic for flushing the partial cache into a very simple object with the generating of identifiers kept as a shared trait between ParserCacheFlusher and ParserCache.

resolves: https://github.com/neos/neos-development-collection/issues/3685 related: https://github.com/neos/neos-development-collection/pull/3659 replaces: https://github.com/neos/neos-development-collection/pull/3688

  • Packages: Neos Fusion

BUGFIX: Add missing placeholder to sprintf call

In removeBrokenEntityReferences the number of placeholders did not match the number of variables given.

  • Packages: ContentRepository

BUGFIX: Adjust code leading to deprecation warnings with PHP 8.1

  • Fixes: #3682

  • Packages: Neos SiteKickstarter Fusion

BUGFIX: Remove unused nodetype configuration cache

The cache with its current implementation actually hurts performance as it forces loading of all nodetypes instead of lazy loading the required ones. Also the cached data is never used. In development context all nodetypes are reloaded on every request accessing the nodetypemanager.

Therefore its better to remove the cache until there is a proper implementation.

  • Resolves: #3681

  • Packages: ContentRepository

BUGFIX: Initialize assetCollections in ImageVariant

BUGFIX: Use media type of new resource during asset replacement

When the resource of an asset is replaced but the filename kept, the media type of the new asset is replaced by whatever the original filename indicates.

This change fixes that by re-setting the media type from the new resource after the original filename has been set.

  • Fixes: #3365

  • Packages: Media

BUGFIX: Only emit thumbnailCreated when successful

BUGFIX: Persist Thumbnail using DBAL to avoid unique constraint errors

This uses a direct SQL INSERT via DBAL to store Thumbnails. Doing this avoid unique constraint exceptions that otherwise occur when multiple concurrent requests trigger Thumbnail creation.

  • Fixes: #3479

  • Packages: Neos Media

BUGFIX: Allow adding first asset collection again

What I did

This fix resolves a regression in 0143d67d8bdfa4458fd9bfb02f3ce6d82d1b400f which prevents adding an asset collection if there was none before as the form was not rendered.

How I did it

Move collection creation form outside of condition which checks for the existence of any least one collection.

How to verify it

Try to add a new collection inside the media module in a fresh Neos without any collections

  • Packages: Neos Media.Browser

BUGFIX: Check for the native PHP extension instead of the ImagineService, since ImageService is not used further in this generator.

Since there is no use of the ImagineService within the DocumentThumbnailGenerator, the availability of the native PHP extension for Imagick should be checked instead. This allows the use of the DocumentThumbnailGenerator with Imagick and the use of other Imagine based thumbnail generators using GDlib, for example.

  • Packages: NodeTypes Media

BUGFIX: Remove unused formatting options

fixes: #3612

Thanks to MonTea from Slack reporting that, we appreciate it!

  • Packages: Neos

BUGFIX: backend message partials not found

What I did

Fix error the circumstances leading to:

` The partial files "resource://Neos.Neos/Private/Templates/FusionObjects/NeosBackendHeaderData.html", "resource://Neos.Neos/Private/Templates/FusionObjects/NeosBackendHeaderData" could not be loaded. `

This error message is hiding the actual error message I need to see.

How I did it

Remove usage of partials that had been deleted already in 2019 in 86088dc

How to verify it

Go to various page in backend with a certain content Node Type on it. Go to this Node Type’s yaml and change its Name from, e.g. Vendor.Site:Box to Vendor.Site:Boxers. Reload the backend and find the partial error above occur. After applying this bugfix, you’ll find the real error message, An exception was thrown while Neos tried to render your page

fixes: #2757

  • Packages: Neos

BUGFIX: Fusion Runtime when no context is set, preparing it for Eel will fail

fixes: #3548 fixes: #3556

added tests, that verify that the runtime context stack is working correctly.

  • Packages: Neos Fusion

BUGFIX: Update Noto Sans to latest version

We cannot use some accent signs with the font NotoSans. This has been fixed in the latest version of NotoSans. This change just updates the Font assets to the latest version of Noto fonts v20201206-phase3 as of 2020.12.06.

What I did Replaced the Font assets to the latest version.

How to verify it Go to a textfield in the backend module (e.g. the user management) and enter an accent like `

Related to https://github.com/neos/neos-ui/issues/3006

  • Packages: Neos

BUGFIX: move comment on @FlowSkipCsrfProtection tag

When using Neos 7.2+ with the Flowpack.Neos.FrontendLogin package trying to login with a frontend leads to a CSRF protection error:

21-12-12 10:29:27 6580       DEBUG                          CSRF: token was empty but a valid token is required for Neos\\Neos\\Controller\\Frontend\\NodeController::showAction()

See #2612 – that discusses a change from Neos 7.1 to 7.2 where the tag changes in combination with a comment.

This PR allows to use the FrontendLogin again.

  • Packages: Neos

!!! TASK: Remove remaining aloha configuration compatibility code

What I did

Removed the last remaining PHP and SCSS code related to the old aloha editor which was deprecated since Neos 4.x.

This can be breaking if nodetypes still contain old style aloha specific configurations. But the Neos.Ui package contains a migration 20180907103800 to adjust it.

  • Packages: Neos

!!! TASK: Remove window.Typo3Neos API

The successor of the JavaScript API has been introduced due to the removal of the EmberJS UI. For more details check the pull request or the release blog post. https://github.com/neos/neos-development-collection/pull/3302 https://www.neos.io/blog/neos-flow-71-released.html#neos-7-1-emberjs

The new API is window.NeosCMS is available since Neos 7.1. With Neos 8.0 we will remove the compatibility layer of the old JS API. When a developer need to support multiple Neos versions at once, it is of course possible to write a wrapper for that in the package.

  • Packages: Neos

!!! TASK: Cleanup inheritence of ArrayFusionObjects

Many FusionObjects inherited from DateStructure or Join because they used methods like sortNestedFusionKeys. This change moves the methods that made this necessary to the AbstractArrayFusionObject and adjusts the inheritence chain.

New methods of the AbstractArrayFusionObject - evaluateNestedProperties(?string $defaultFusionPrototypeName = null) - evaluate all children after sorting and applying an optional default fusion prototype name - isUntyped($key) - dermine wether a fusion path configuration is untyped or not - sortNestedProperties() - return the property configuration with sorted keys

The methods sortNestedFusionKeys and isUntypedProperty are still in the DateStructureImplementation but deprecated.

!!! This is breaky for everyone that inherited from the join implementation if methods previously inherited from DataStructure are used !!!

This also removes unwanted effects of the inheritance when unnamed keys of HttpMessges or Join were interpreted as DataStructure which caused trouble. Also the problem that keys with only meta attributes where treated as typed was addressed.

Fixes: https://github.com/neos/neos-development-collection/issues/3513 Fixes: https://github.com/neos/neos-development-collection/issues/3441 Fixes: https://github.com/neos/neos-development-collection/issues/3576

Related: https://github.com/neos/neos-development-collection/pull/2729

  • Packages: Fusion

!!! TASK: Remove (long) deprecated ConvertNodeUris

This has been replaced by ConvertUris since 1.1

  • Packages: Neos

!!! TASK: Fusion ContentCollectionRenderer remove legacy ‘collection’ prop

resolves: #3642

## !!! Breaking, migrate the following in your Fusion:

`diff Neos.Neos:ContentCollectionRenderer { -    collection = ${[]} +    items = ${[]} } `

With 5.3 https://github.com/neos/neos-development-collection/pull/2772 Neos.Neos:ContentCollectionRenderer was changed from Neos.Fusion:Collection to Neos.Fusion:Loop

for backwards compatibility, the prop collection was also allowed to be set as alias for items

but the collection prop alias doenst fully work as 1:1 replacement fx. it doesnt work if it was set to an empty array: https://github.com/neos/neos-development-collection/issues/3114

this pr removes this this legacy fallback with 8.0

  • Packages: Neos

!!! TASK: Raise minimal supported PHP version to 8.0.0

Adjust composer json and test matrix to match raised version requirements for flow.

  • Resolves: #3625

  • Packages: .github

TASK: Add new login wallpaper for Neos 8.0

  • Packages: Neos

TASK: Streamline role description, ensure gender neutrality

What I did

I streamlined the role labels and description and ensured gender neutrality. The descriptions are now a bit shorted, using less space in the Neos backend.

  • Packages: Neos

TASK: Remove deprecated VIE schema

This schema was required for the Aloha editor which is not supported by Neos anymore. Backend modules were still loading this schema, so this might help making them a slightly more responsive on initial load.

  • Packages: Neos Media.Browser

TASK: Fix Fusion Test And Make Them Test What They Say

currently, when testing this locally: ` NestedOverwritesAndProcessorsTest::applyingProcessorToNonExistingValueWorks `

one gets a:

` Array to string conversion `

this is because the test is lying in our faces.

the fixture NestedOverwritesAndProcessors.fusion is telling us, that Neos.Fusion:Tag uses as attributes Neos.Fusion:Attributes.

but it’s not!

Neos.Fusion:Tag uses Neos.Fusion:DataStructure because the fixtures are all merged together and not namespaced. So someplace this was changed to a DataStructure, and now we have a Tag with a DataStructure.

This was fine until we changed the behaviour of the DataStructure with: https://github.com/neos/neos-development-collection/pull/3645

so when a DataStructure

previously didn’t make nested DataStructures here: ``` nestedOverwritesAndProcessors.deepProcessorAppliesWithNoBaseValue = Neos.Fusion:SpecialTag {

attributes = Neos.Fusion:DataStructure {
coffee { // since `#3645 <https://github.com/neos/neos-development-collection/issues/3645>`_becomes a Neos.Fusion:DataStructure

@process.addProcessed = ${String.trim(value + ‘ harvey’)}

}

}

}

it now does. That leads to coffee being an empty array, what leads to the process trying to append a string to it - what surprisingly always fails.

I agree, that based on the code above It’s not really clear at first glance, that value is an empty array. But then again I would expect it to be null - which surprisingly isn’t it either! Since we magically give @process an empty string, in case there is no value: https://github.com/neos/neos-development-collection/blob/694649dab4f4b8bf9c71c605bb5cf00180396198/Neos.Fusion/Classes/Core/RuntimeConfiguration.php#L161

so either way there stucks the worm in this issue, and I choose know to make the tests do what they say - no more.

we can still think about if a DataStructure should not create nested DataStructures when the only key is a @process.


note this targets master on purpose.

  • Packages: Fusion

TASK: Correct class loading for Neos.CliSetup in master and restore alphabetical order

as is in the 7.3 branch already

TASK: Drop $packagePath from getFilteredPackages()

See #2774

  • Packages: Neos

TASK: Introduce migration to convert Fusion objects without namespace

Fusion Objects without namespace were located in Neos.Fusion namespace in the past. The namespace support is dropped with Neos 8 and this migration migrates Object names that made use of this to the fully qualified names.

Note: This converts the only the default namespace. If custom namespaces are used they are not touched but have to be removed manually. The new Fusion parser tell you that.

This is based on an older migration when we changed the default Namespace to Neos.Fusion with Neos 4.0 see: https://github.com/neos/neos-development-collection/blob/4.0/Neos.Fusion/Migrations/Code/Version20180211175500.php

How to verify it

Run the migration with some fusion code that uses FusionObjects without the Neos.Fusion namespace

` ./flow core:migrate Neos.Demo --force --verbose --version Neos.Fusion-20220326120900 `

A possible example for fusion code to check is here.

``` test = Join {

objectWithoutBraces1 = Tag objectWithoutBraces2 = Http.Message

objectWithBraces1 = Tag {

tagName = “div”

} objectWithBraces2 = Http.Message {

foo = “bar”

}

namespacedObjectWithoutBraces1 = Neos.Fusion:Tag namespacedObjectWithoutBraces1 = Neos.Fusion:Http.Message

namespacedObjectWithBraces1 = Neos.Fusion:Tag {

tagName = “div”

} namespacedObjectWithBraces1 = Neos.Fusion:Http.Message {

foo = “bar”

}

# Examples for objects without namespace that did not exist and # # that should not be touched and are left as invalid as before # #################################################################

unknownObjectNameWithoutBraces1 = TagFooBar unknownObjectNameWithoutBraces2 = FooBarTag unknownObjectNameWithoutBraces3 = FooTagBar unknownObjectNameWithoutBraces4 = Tag.FooBar unknownObjectNameWithoutBraces5 = Foo.Tag.Bar unknownObjectNameWithoutBraces6 = FooBar.Tag

unknownObjectNameWithBraces1 = TagFooBar {

foo = “bar”

} unknownObjectNameWithBraces2 = FooTagBar {

foo = “bar”

} unknownObjectNameWithBraces3 = FooBarTag {

foo = “bar”

} unknownObjectNameWithBraces4 = Tag.FooBar {

foo = “bar”

} unknownObjectNameWithBraces5 = Foo.Tag.Bar {

foo = “bar”

} unknownObjectNameWithBraces6 = FooBar.Tag {

foo = “bar”

}

}

  • Packages: Neos Fusion

TASK: Avoid deprecated Doctrine ORM proxy

The Doctrine\\ORM\\Proxy\\Proxy is deprecated and extends the Doctrine\\Persistence\\Proxy.

  • Packages: ContentRepository Fusion

TASK: Render CSS from Neos.Neos

This is a follow-up PR from #3665

I’ve just run yarn build:styles:prod in the Neos.Neos folder

  • Packages: Neos

TASK: Add documentation for previewIcon

What I did

The neos-ui introduces a new NodeType setting called previewIcon and previewIconSize. As the neos-ui does not contain documentation, the PR will add the new options here.

The change also adjust the icon description, as we are now able to use custom SVG icons.

Related PR: https://github.com/neos/neos-ui/pull/3042

  • Packages: Neos

TASK: Fusion clean up the usages how `@process adds css classes. <https://github.com/neos/neos-development-collection/pull/3654>`_

with: https://github.com/neos/flow-development-collection/issues/2710

we can add any scalar types to Array.push as base, which will be auto casted to an array: Array.push("foo", "bar") which results in -> ["foo", "bar"] which is rendered as foo bar

previously we had to cast it to an array beforehand. I integrated this for the ‘neos-contentcollection’ once: https://github.com/neos/neos-development-collection/pull/3438 - but this cleans the manual cast up.

(this also fixes any real low level css class adding via Type.isString() etc by just casting to an array and then pushing the new value.)

Also the last use of copy will be removed, by manually copying the (now little) code over. fixes: https://github.com/neos/neos-development-collection/issues/3588

  • Packages: Neos NodeTypes.Navigation

TASK: Fusion use glob includes.

this makes it easier for us to maintain those lists. As when adding or removing prototypes this can be forgotten.

  • Packages: Fusion Neos

TASK: Fusion Page Rendering - access internal node properties directly: `node.nodeType.name <https://github.com/neos/neos-development-collection/pull/3641>`_

replace FlowQuery style syntax (underscore for internal props) with direct object access via get* in EEL.

see discussion: https://neos-project.slack.com/archives/C04PYL8H3/p1647433062072679

There is no performance difference, it just reads better IMO - and is easier to understand.

  • Packages: Neos

TASK: Add workspace/parent index to NodeEvent table

  • Packages: Neos

TASK: Address PHP 8 deprecation warnings

This fixes the following deprecation warnings by removing optional arguments that were placed before non optional ones. While this changes the api it should not break any code as the optional arguments could not be used that way anyways.

` PHP Deprecated:  Optional parameter $junkCallback declared before required parameter $options is implicitly treated as a required parameter in /var/www/html/Packages/Neos/Neos.Diff/Classes/SequenceMatcher.php on line 83 PHP Deprecated:  Optional parameter $arguments declared before required parameter $renderingContext is implicitly treated as a required parameter in /var/www/html/Packages/Neos/Neos.Neos/Classes/ViewHelpers/Backend/IfModuleAccessibleViewHelper.php on line 66 PHP Deprecated:  Optional parameter $tidy declared before required parameter $packageKey is implicitly treated as a required parameter in /var/www/html/Packages/Neos/Neos.Neos/Classes/Domain/Service/SiteExportService.php on line 91 PHP Deprecated:  Optional parameter $tidy declared before required parameter $pathAndFilename is implicitly treated as a required parameter in /var/www/html/Packages/Neos/Neos.Neos/Classes/Domain/Service/SiteExportService.php on line 119 `

This change targets Neos 7.0 as this is the lowest version that allows php 8. No class or method that is @api is changed. When used the changes are non breaking and the modified classes are unlikely to be extended.

  • Resolves: #3619

  • Packages: NodeTypes.BaseMixins Diff Neos

TASK: Replace TS (TypoScript) with Fusion

I’ve found some old TS (TypoScript) wording in the code. I replaced it with Fusion

  • Packages: Neos Fusion NodeTypes.ColumnLayouts NodeTypes.ContentReferences NodeTypes.Form

TASK: improve admin command description

What I did I have adapted the description for the user:create command.

How I did it I have customized the WelcomeCommandController.php.

  • Packages: Neos CliSetup

TASK: Allow Neos.Fusion:Match to return a default value with a type other than string

What I did

I removed the return type declaration of the Neos\\Fusion\\FusionObjects\\MatchImplementation::getDefault() method. This allows developers to return other types then string when using Neos.Fusion:Match.

How to verify it

Create a new fusion value and use a value that is not a string, for example:

``` prototype(Vendor.Prefix:Component) {

value = Neos.Fusion:Match {

@subject = ${q(node).property(‘someProp’)} valueA = Neos.Fusion:DataStructure {

key = ‘valueA’

} @default = Neos.Fusion:DataStructure {

key = ‘valueB’

}

}

}

  • Packages: Neos Fusion

TASK: Replace deprecated fusion protoypes from transpiled AFX code

Neos.Fusion:Array and Neos.Fusion:RawArray are deprected for a while now but are still used in AFX. This change makes afx use:

  • Neos.Fusion:Join instead of Neos.Fusion:Array

  • Neos.Fusion:DataStructure instead of Neos.Fusion:RawArray

  • Resolves: #3558

  • Packages: Neos Fusion.Afx

TASK: Update lowest maintained branch in readme

  • Packages: Neos

TASK: Add documentation of range slider

Add documentation for newly added range slider https://github.com/neos/neos-ui/pull/2986

  • Packages: Neos

TASK: Adds 7.3.0 changelog

  • Packages: Neos

Detailed log