8.4.0 (2025-10-10)
Overview of merged pull requests
FEATURE: Restrict site creation module to site nodetype and hide legacy options
Hide “Import a site” and “Create a new site-package” by default in Neos 8.4 and add settings to re-enable
these options were removed via Neos 9.0 but can be restored by settings:
`yaml
Neos.Neos.modules.administration.submodules.sites.settings.enableLegacyPackageImport: true
Neos.Neos.modules.administration.submodules.sites.settings.enableLegacyPackageCreation: true
`
Upgrade instructions
Packages:
Neos
FEATURE: Add image helper and render image dimensions in image tag attributes
With this change a new image helper is introduced in Neos.Media which allows creating a thumbnail and using its various properties in Fusion object. This way the actual size of a thumbnail can be rendered into the HTML attributes. Until now we only had the uri from the ImageUri helper and component.
Review instructions
Adjust the image prototype renderer in the Demo like this: ``` prototype(Neos.Demo:Content.Image) < prototype(Neos.Neos:ContentComponent) {
- renderer = afx`
- <figure>
- <Neos.Neos:ImageTag
asset={q(node).property(‘image’)} width={900} height={200} allowUpScaling={true}
/>
</figure>
// renderer = afx``<Neos.Demo:Presentation.Image {…props} />`` } ```
The resulting image should have with and height properties of the generated thumbnail and not the ones of the original.
I’m not 100% sure if we could break something with this change if somebody modified the ImageTag prototype. We can also target 9.0 if the anybody thinks this would be better.
Packages:
MediaNeos
FEATURE: Fusion (EEL) core migrations for new 9.0 API (replaces `neos/rector for Fusion) <https://github.com/neos/neos-development-collection/pull/5638>`_
Fixes the fusion part of https://github.com/neos/neos-development-collection/issues/5607 in a simple manner as a first iteration
### Behaviour for 9.0
This change introduces an extended way to write flow core migrations by providing a trait which allows for exact eel replacements. For this framework code see the changes in “Neos.Fusion” and its tests.
Also this change introduces a first major user of this new migration api. The migration “20251005080230” contains all fusion migrations concerning the content repository that currently reside in neos/rector and were executed with rector.
They are now part of “Neos.Neos” and can be executed as any flow core migration:
`
flow flow:core:migrate Neos.Demo --version 20251005080230
`
The comprehensive testsuite for this cr-fusion migration was copied and adjusted from neos/rector to ensure all replacements work as desired.
### Behaviour for Neos 8.4
Introducing a core migration for 8.4 was considered but was found to be too magic as its truly an optional step which makes the code not backwardscompatible to previous neos versions.
You can run the adjustments manually. They will not add todo comments like the 9.0 migration. It will be safe to rerun this migration and also to run the 9.0 migration via flow:core:migrate when updating.
`
./flow neos9preparation:preadjustfusion Neos.Demo
`
Upgrade instructions
Packages:
Neos
FEATURE: Filter users by role
Resolves: #5208
Review instructions
Go to there users module and filter the users by their role, also in combination with the search term
!`CleanShot 2024-08-16 at 11 07 15@2x <https://github.com/user-attachments/assets/af7d834c-4ed8-476d-b500-854f381012da>`_
Packages:
Neos
FEATURE: Improve user sorting behavior
Upgrade instructions
_None_
Review instructions
Original PR: #5159
Packages:
Neos
FEATURE: Backport NodeHelper methods from 9.0
Resolves: #5627
Upgrade instructions
Packages:
ContentRepositoryNeos
FEATURE: Hacky backport of the 9.0 `renderingMode in Fusion <https://github.com/neos/neos-development-collection/pull/5637>`_
Neos 9.0 contains the introduction of FusionGlobals https://github.com/neos/neos-development-collection/pull/4425 which allowed to introduce renderingMode https://github.com/neos/neos-development-collection/pull/4505 as global like request.
We evaluated to fully back-port these features but this would require lots of effort and might be not agreeable as it certainly would break APIs across Fusion and Neos.
But herby we introduce a super slim backport which disregards any architecture and makes ${renderingMode} magically possible in Fusion when Neos is installed and nodes are rendered.
The renderingMode attempts to align to the new 9.0 specification as close as possible - but the implementation is limited in two regards:
site,documentNodeornodehave to be available in the current fusion context which can be tampered with in fusion by forgetting to register those in a cached segment. This would lead torenderingModenot being available but in 9.0 it would as its ever-present.when nodes from the “live” workspace are rendered the renderingMode will switch to
frontendwhich results inrenderingMode.isEditbeing false. In Neos 9 the rendering mode and the rendered nodes are decoupled from each other. With this backport a decoupling is not possible and usingq().context()on a node and replacing that fusion variable might thus have implications on therenderingMode.
Also users of the herby introduced 8.4 renderingMode and its 9.0 brother should be aware its not behaving exactly as node.context.currentRenderingMode.
The rendering mode of the context returns for every logged in users its current rendering mode. This leads to edit being true for the frontend and for the backend in the neos ui. Only if logged out or when using a private window the frontend behaviour aligns to the Neos 9 specification and edit is false.
The rector migration `FusionContextCurrentRenderingModeRector <https://github.com/neos/rector/blob/e397f70ed1340c5a62b9d20b0b70253b87201617/src/ContentRepository90/Rules/FusionContextCurrentRenderingModeRector.php#L27-L28>`_ still migrates it as an exact replacement to improve the current situation.
Upgrade instructions
Packages:
Neos
FEATURE: Adds new login wallpaper and backport attribution
resolves #5620
<img width=”1829” height=”1066” alt=”Bildschirmfoto 2025-10-07 um 09 04 07” src=”https://github.com/user-attachments/assets/499b6b22-9921-4396-bd78-f55730c109d2” />
Packages:
ContentRepositoryDiffFusion.AfxFusionMedia.BrowserMediaNeosNodeTypes.FormSiteKickstarter
FEATURE: Backport Neos.Caching Helper
Backport of Neos.Caching Eel Helper to provide forward compatibility in Neos 8.4. ``` prototype(Acme.Site:Document) {
- @cache {
mode = “cached” entryIdentifier {
documentNode = ${Neos.Caching.entryIdentifierForNode(documentNode)}
}
}
}
Fixes: #5628
Packages:
Neos
FEATURE: Backport Neos.Site Helper
Backport of Neos.Site Eel Helper to provide forward compatibility in Neos 8.4.
``` prototype(Acme.Site:Document) {
name = ${Neos.Site.findBySiteNode(site).siteResourcesPackageKey}
}
Fixes: #5629
Packages:
Neos
FEATURE: Backport aggregateId from 9.0
Resolves: #5633
Upgrade instructions
With this change it’s possible to use node.aggregateId which will return an instance of NodeAggregateIdentifier that can also be cast to a string which equals the node.identifier. It is recommended to replace all node.identifier instances this way to already be compatible with Neos 9. See the related rector rule https://github.com/neos/rector/blob/main/docs/rules_overview.md#fusionnodeidentifierrector.
Keep in mind to adjust places where you do a strict comparison as the returned value is not a plain string.
Packages:
Neos
FEATURE: Site nodetype
Resolves: #5617
Upgrade instructions
Add the abstract nodetype Neos.Neos:Site to your homepage nodetype like this:
```yaml ‘My.SitePackage:Document.Homepage’:
- superTypes:
‘Neos.Neos:Site’: true
Review instructions
Newly generated sites and empty content repository should be initialised with the new sites nodetype and use the site mixing in the generated homepage.
Packages:
SiteKickstarter
FEATURE: add more details to user list and user show command
### Description
Adds more informations to the ./flow user:list and ./flow user:show command.
Upgrade instructions
_None_
Review instructions
resolves: #4357
[ ] Reviewer - Breaking Changes are marked with
!!!and have upgrade-instructions
Packages:
ContentRepositoryMedia.BrowserNeosNodeTypes.BaseMixins
FEATURE: Custom label for auto created child nodes
Resolves: https://github.com/neos/neos-development-collection/issues/2276
This change add a node type configuration to generate a custom node label for auto created child nodes:
``` ‘Neos.Neos.NodeTypes:Page’:
- superTypes:
‘Neos.Neos:Document’: TRUE
- childNodes:
- main:
label: ‘Main Content Collection’ type: ‘Neos.Neos:ContentCollection’
This allow to have a less technical content tree. This change include the schema validation and default label for default node types.
The label can be a string or an EEL expression. Inside the
expression you can access the parent node in the variable parentNode.
Packages:
NeosContentRepository
FEATURE: Support doctrine/dbal 2.x and 3.x
Declares compatibility with doctrine/dbal 3.x (in addition to the already supported versions 2.8+) and adjusts affected code such that it works with both versions
Packages:
ContentRepository
FEATURE: Improve site:list command
Upgrade instructions
_None_
Review instructions
Improves our ./flow site:list command by render the list of all available sites directly in a table.
!`WindowsTerminal_2VE3pBUkYq <https://github.com/neos/neos-development-collection/assets/39345336/63951db9-dab5-4fdc-90da-531769f0b4a1>`_
Packages:
Neos
FEATURE: Link Neos logo in modules to primary module
In the default configuration this links to the content module, or to their user settings if they don’t have access to the content module.
Resolves: #4799
Packages:
NeosSiteKickstarter
BUGFIX: Preview modes do not display hidden nodes
This makes the preview more realistic and helps editors better estimate how the end result will look like.
Packages:
Neos
BUGFIX: Avoid duplicating shadow nodes
This fixes a regression in handling shadow nodes while publishing in nested workspaces.
Without this change we first create a new shadow node by replicating the move in the target workspace and then try to adjust the existing source shadow node to exist in the target, which triggers a duplicate key error.
As commented, we can be sufficiently sure that the move operation will take care of (not) creating shadow nodes as necessary and any previously existing shadow node in the source workspace can be discarded safely.
The new “else” branch should probably not be necessary, as if there was no move, there should never be a shadow node to adjust. Just in case though we leave this in place. Might clean up some leftover shadow nodes.
Revert “BUGFIX: Reload node if hidden state is updated via inspector”
Reverts #5602 as it raises issues while using the toolbar actions to hide and show nodes.
See: #5615
Packages:
ContentRepositoryMedia.BrowserNeosNodeTypes.AssetListNodeTypes.BaseMixinsNodeTypes.ColumnLayoutsNodeTypes.ContentReferencesNodeTypes.FormNodeTypes.HtmlNodeTypes.NavigationNodeTypes
BUGFIX: backend module links with no hover color
Upgrade instructions
_None_
Review instructions
Issue: #5586
This fixes the issue at some places in the neos backend where links dont have a hover color. That where all places i found 🤔:
https://github.com/user-attachments/assets/7c448606-5922-46b1-a0ae-400f724a2fad
Packages:
Neos
BUGFIX: Reload node if hidden state is updated via inspector
With this change nodes are updated in the guest frame when the hidden state is updated in the inspector.
Resolves: #5601
Packages:
Neos
BUGFIX: Neos backend login autofocus username
When loading the backend login screen, one have to either TAB or click in the username field to input the login.
Increase accessibility (and convenience) by autofocusing the field upon loading.
Note: The password field already gets autofocus if the username is already filled (i.e. after a failed password attempt), which is why we have the @if here.
Packages:
Neos
BUGFIX: Convert *DateTime XML elements to DateTimeImmutable during import
fixes: #5248
Steps To Reproduce
Run ./flow site:import on a site export (presumably one that has been done with Neos 8.3 or earlier) in a Neos 8.4 setup. Make sure doctrine/dbal@3.* is installed. You should see an error like this:
`
Exception `#1300360480 <https://github.com/neos/neos-development-collection/issues/1300360480>`_in line 99 of [...]/Framework/Neos.Flow/Classes/ObjectManagement/DependencyInjection/DependencyProxy.php: Error: During import an exception occurred: "Could not convert PHP value of type DateTime to type date_immutable. Expected one of the following types: null, DateTimeImmutable".
`
After checking out this branch, the error should be gone.
Packages:
ContentRepository
BUGFIX: Fix checking workspaces when move nodes
Upgrade instructions
While fixing the move of nodes in #5561 <https://github.com/neos/neos-development-collection/issues/5561>``_I also noticed, that the workspace itself has not been checked correctly, as the workspaceName was checked against the Workspace (class) in the ``beginning of the move()-Method <https://github.com/neos/neos-development-collection/blob/`65cbf7b7e0aeedcaea68eae4332d15b719a694c9/Neos.ContentRepository/Classes/Domain/Model/NodeData.php#L886>``_. This PR fixes this and correctly compares the workspaces at the beginning of the ``NodaData::move()` method.
Packages:
ContentRepository
BUGFIX: MediaBrowser’s upload action shows empty flash message if file is too big
expected (like in the standalone media browser)
<img width=”1118” alt=”image” src=”https://github.com/user-attachments/assets/bcb151bf-c240-409e-803e-36693f604fe8” />
actual (media browser insider neos ui):
<img width=”873” alt=”image” src=”https://github.com/user-attachments/assets/bbc5de87-0133-47f3-b932-c6718b693d3b” />
interestingly the error works in the neos ui when one uses the media browsers drag and drop
<img width=”747” alt=”image” src=”https://github.com/user-attachments/assets/312b2cc8-79b6-4fb0-bb5b-4fd1a4f125a1” />
The existence of this bug was uncovered via https://github.com/neos/neos-development-collection/pull/5528 because previously no validation error was shown and on upload the server just died:
<img width=”670” alt=”image” src=”https://github.com/user-attachments/assets/95b5a2ec-0c5c-4c12-8d66-2d9bcf874b0a” />
> Could not convert target type “Neos\Media\Domain\Model\Asset”: Missing constructor argument “resource” for object of type “Neos\Media\Domain\Model\Asset”.
Upgrade instructions
Review instructions
This bug was uncovered because translate() simply returns undefined, if not initialised. No error no fallback, nuthing.
Also while I18n.init() _IS_ called, it doesnt actually initialise anything. For that
https://github.com/neos/neos-development-collection/blob/847e4647d761249b5c48ade07fe08ad7d1db58c5/Neos.Neos/Resources/Public/JavaScript/index.js#L23-L27
has to be invoked and that is done by adding the link.
Notice also that ist not particularly keen of us to initialise I18n once in the host (neos.ui) and then in the iframe too. This is just extra work for the browser, and we dump the iframe after selecting the image. Now my pr doenst improve that but there are ideas outlined here https://github.com/neos/neos-ui/issues/3119 and the first step for a global translate api was already introduced via https://github.com/neos/neos-ui/pull/3804. Nothing for a bugfix to build up on though.
Packages:
Media.Browser
BUGFIX: Convert selectbox group labels i18n values
Review instructions
This change converts i18n values of group labels to shorthand strings like Neos.Demo:NodeTypes.Content.Headline:properties.tagName.selectBoxEditor.groups.h1.
This works together with https://github.com/neos/neos-ui/pull/3955 to make it possible to localise group labels for select box values like in the following example:
- ```yaml
- tagName:
type: string defaultValue: ‘h2’ ui:
label: i18n reloadIfChanged: true inspector:
group: settings position: 10 editor: Neos.Neos/Inspector/Editors/SelectBoxEditor editorOptions:
- values:
- h1:
label: h1 group: i18n
- h2:
label: h2 group: i18n
- h3:
label: h3 group: ‘Neos.Demo:Main:group.label’
- h4:
label: h4 group: Just some text
- h5:
label: h5 group: ‘Neos.Demo:Main:group.label’
Packages:
Neos
BUGFIX: Replace skip migrations with simple return
If we use the skip migrations feature of doctrine, the migrations never get marked as applied. Which leads to situations, where your migration status will never be clean. So I replaced all skipif with a simple return.
See also: https://github.com/doctrine/migrations/issues/1179
Packages:
ContentRepository
BUGFIX: Fix publishing for `Neos.Neos:RestrictedEditor from 3rd level workspace <https://github.com/neos/neos-development-collection/pull/5546>`_
Changes I made:
- WorkspacesController: explicitly define the target workspace for case publish in publishOrDiscardNodesAction()
Why I’m changing this:
Our project has a workspace setup like Workspace A -> Workspace B -> Live. Users, who are not allowed to publish to Live (like Neos.Neos:RestrictedEditor) cannot publish nodes with childNodes from Workspace A to Workspace B, because it wrongly assumes that the targetWorkspace for the childNodes is Live. This fix sets the target workspace explicitly to prevent the system from assuming the wrong target workspace. The problem is more fully explained in the linked issue.
resolved: https://github.com/neos/neos-development-collection/issues/5373
Packages:
Neos
BUGFIX: Find nodes marked as removed in other dimension
If you delete a node in a workspace that has already been deleted in the workspace in another dimension, the node is not marked as removed in the database.
With this PR, nodes marked as removed are also found in non-live workspaces.
related: #5031
Packages:
ContentRepository
BUGFIX: Boot media module flash-messages correctly if rendered outside Neos module
Solves the bug described in https://github.com/neos/neos-development-collection/issues/5379#issuecomment-2701041702
Previously only flashmessages in the Default template (e.g. on show) where shown but neither for editing or uploading
Flashmessages in the media module are not shown for all actions if the media module is booted within the Neos ui.
The current error for edit or new action is that this.container (#neos-notification-container) is null and thus no flashmessages can be rendered in the dom:
https://github.com/neos/neos-development-collection/blob/c7be41ac865e096b62a019f3cf700222834b29f6/Neos.Neos/Resources/Public/JavaScript/Components/Notification/Toast.ts#L39
The mentioned container is normally created by js itself as child to #neos-application
https://github.com/neos/neos-development-collection/blob/c7be41ac865e096b62a019f3cf700222834b29f6/Neos.Neos/Resources/Public/JavaScript/Components/Notification/Toast.ts#L24
But the #neos-application is only rendered by the Backend Module Index template from Neos:
https://github.com/neos/neos-development-collection/blob/89d4c84c5640a49867d56592b6def1a2c6e5db0d/Neos.Neos/Resources/Private/Templates/Backend/Module/Index.html#L90
As the Media Ui provides a layout for the case of being rendered in the Neos backend module and for plain rendering as in the neos ui iframe (added via https://github.com/neos/neos-development-collection/pull/2171), the non module layouts must ensure that the shared javascript works by providing the desired dom structure.
Module/Default.html
Module/UploadImage.html
Module/EditImage.html
Default.html
UploadImage.html
EditImage.html
The flashmessages for showAction (e.g. default layout) work already in the neos ui as two changes https://github.com/neos/neos-development-collection/pull/5133 and https://github.com/neos/neos-development-collection/pull/5117 provided a fix to make the flashmessages work by ensuring <div id="neos-notification-container"> is present.
This pull request extends the fix of providing an #neos-notification-container container for the UploadImage and EditImage template:
<img width=”1179” alt=”image” src=”https://github.com/user-attachments/assets/53d17902-a6ae-40f3-8449-0cc7194ae589” />
Upgrade instructions
Packages:
Media.Browser
BUGFIX: Allow boolean values for hidden properties in nodetype schema
This prevents matching warnings in the configuration module or when verifying nodetypes via cli.
Resolves: #5520
Packages:
Neos
BUGFIX: Missing flash messages after Dropzone upload in Neos Media Browser
related: https://github.com/neos/neos-development-collection/issues/5522
Review instructions
Navigate to the Neos Media Browser backend Module
Upload an Asset via the Dropzone by either Drag’n Dropping or clicking into the dropzone
Packages:
NeosMedia.Browser
BUGFIX: Recognize removed-state while reducing
Please read Issue #3651, to get the problem.
By adding the removed-state as 3rd priority while reducing NodeData results, we should always get the not-removed NodeData, if there are 2 (because of Node-move).
I tested this fix on our projects, and it worked. I can’t find something breaking. But since this is deep inside NodeData, I’ve no idea, if we could get unexpected side-effects on it. Thanks to @Nikdro for the change.
Fixes: #3651
Packages:
ContentRepository
BUGFIX: Fix return type error with `getUriForThumbnail() <https://github.com/neos/neos-development-collection/pull/5447>`_
In getUriForThumbnail() the result of getPublicPersistentResourceUri() is returned unchecked, but may be false. This conflicts with the declared return type string.
In that case an exception is now thrown (similar to when a static resource thumbnail URI cannot be generated).
Packages:
Media.BrowserNeosMedia
BUGFIX: fix error during site import
This adjusts the annotation to work with Flow 8.3.13 … before the type with spaces was interpreted as mixed and caused the following error during site:import.
`
During the import of the "Sites.xml" from the package "Neos.Demo" an exception occurred: Error: During import an exception occurred: "Could not convert target type "Neos\\Media\\Domain\\Model\\ImageVariant": Could not convert target type "Neos\\Media\\Domain\\Model\\Adjustment\\CropImageAdjustment", at property path "aspectRatio": Could not find a suitable type converter for "mixed" because the class / interface "mixed" does not exist."., see log for further information.
`
Resolves: #5448
Review instructions
The new behavior was introduced to flow with pr: https://github.com/neos/flow-development-collection/pull/3424
Packages:
NeosMedia
BUGFIX: Add missing event emitters to internal node properties
Review instructions
Currently, when using the event log, internal node data is not logged. So whenever an internal property like _hiddenBeforeDateTime is changed, you can’t see that property in the event log. Therefore, this PR adds missing event emitters to the methods used to set the internal properties.
resolved: #3284
Packages:
NeosContentRepository
BUGFIX: Force direct access on setting node properties in node data similarize
The creationDateTime has no setters in AbstractNodeData, so the NodeData::similarize can’t set them in the target node propery. We need to allow the ObjectAccess::setProperty to force direct access to the class properties.
The lastModificationDateTime was also not copied before this bugfix and shouldn’t be copied anyways.
Fixes: #5280
Packages:
ContentRepository
BUGFIX: Fixed table view of asset editor
Related to https://github.com/neos/neos-development-collection/issues/5430
This table view:
<img width=”1594” alt=”image” src=”https://github.com/user-attachments/assets/3ff81f3e-477a-42fe-ad77-3074fa0d14ae” />
doesn’t currently work because the event listener checks whether there is an <a> or a <button> but doesn’t check for <tr>. I fixed it by removing the check completely and using e.currentTarget instead of e.target.
The check was not necessary because the eventlistener was already only added to the elements that meet the criteria. The use of event.currentTarget ensures that you always use the element that the eventlistener was actually added to, whereas event.target is the element that was clicked, which is not necessary in this case.
Nothing has to be adjusted to use this.
Packages:
Media.Browser
BUGFIX: Share same role details when adding user as when editing them
When editing users, much more information was shown about the individual roles than when adding a user, where whoever adds them gets no information about the role except its name.
With this change the descriptions of the role and their individual privileges are displayed in the same way as in the edit account view.
Review instructions
Before:
<img src=”https://github.com/user-attachments/assets/744c1f60-3927-4178-810e-1e0635af9dcc” width=”500” />
After:
<img src=”https://github.com/user-attachments/assets/b725bf47-925e-474b-890b-0e06eae410a3” width=”500” />
Current edit account view:
<img src=”https://github.com/user-attachments/assets/603889c7-38af-4d6f-92b0-e3e1640a1f5e” width=”500” />
Packages:
Neos
BUGFIX: Correct node naming scheme in nodetype definition example
The example uses an outdated camelcase variant for node names.
Relates: https://github.com/Sebobo/Shel.Neos.Schema/issues/26
Packages:
Neos
BUGFIX: Restore asset collection assignment capabilities
Upgrade instructions
none
Review instructions
none
Packages:
NeosMedia.Browser
BUGFIX: show workspace owner/title in media usage tab
Issue: https://github.com/neos/neos-development-collection/issues/5181
Possibility to enable showing all workspace titles/owners to user with certain roles in the media usage tab.
Packages:
NeosMedia.Browser
BUGFIX: Fix autoselection of ancestor nodes in Workspace module
Fixes: #5231
Packages:
Neos
BUGFIX: Remove rootnode when user workspace is deleted
Fixes: #2193
Review instructions
Previously all root nodes of workspaces that belonged to removed users stayed in the database. With this change, the root nodes are removed as well.
Create a user
Delete the new user
No root node should remain of the personal workspace of the removed user
Packages:
Neos
BUGFIX: Translate FlashMessage if asset is still in use in media browser inspector
Bugfix for `#5085 <https://github.com/neos/neos-development-collection/issues/5085>`_no error if asset still in use and show flashmessage solution set class neos-notification-container as id
In media browser inspector if assets are deleted wich are still used no FlashMessage was showed and on second delete an error pages was showed.
Solution: In Neos.Media:Browser/Resources/Private/Layouts/Default.html change class neos-notification-container to id neos-notification-container, because Notification.js / Toast is searching for id neos-notification-container to insert FlashMessages.
- ` <div class=”neos-media-content{f:if(condition: ‘{tags -> f:count()} > 25’, then: ‘ neos-media-aside-condensed’)}”>
- <div class=”neos-media-assets”>
- <div id=”neos-notification-container”>
<f:render partial=”FlashMessages”/>
</div> <f:render section=”Content”/>
</div> <aside class=”neos-media-aside”>`
related: #5085
Packages:
NeosMedia.Browser
BUGFIX: Sort roles for users by label instead of internal name in the UI
Review instructions
Before:
!`CleanShot 2024-08-15 at 13 01 03@2x <https://github.com/user-attachments/assets/61fb4a4f-4a43-45e9-bc1f-7c5b417848e7>`_
After:
!`CleanShot 2024-08-15 at 13 00 37@2x <https://github.com/user-attachments/assets/91f4e486-6e0e-4f03-9f57-5058b06c3044>`_
Packages:
Neos
BUGFIX: Don’t copy removed nodes
With this change, removed nodes are not copied anymore in the recursive copy actions.
Also the removed state is now kept when a node is similarisied to prevent unpublished removed nodes from popping up again inadvertendly.
Resolves: #5185
Packages:
NeosContentRepository
BUGFIX: Don’t include subnodetypes of subnodetypes in node search
The subnodetypes of the given filter are collected twice (once in the NodesController and once in the NodeDataRepository) leading to nodetypes being included which don’t inherit from the given list of nodetypes as the second list of nodetypes is not checked against the nodetypefilter but against the subnodetypes of the nodetypefilter. See details in #4502.
Resolves: #4502
Packages:
Neos
BUGFIX: Changed from hardcoded date format to user-localized format.
Changes the hardcoded Y-m-d date format with an user-localized format.
German Interface Language !`image <https://github.com/user-attachments/assets/280593ac-53aa-4739-9745-a31d090a2905>`_
English Interface Language !`image <https://github.com/user-attachments/assets/09d00aed-54ea-4f82-b290-004a2e15e53d>`_
Upgrade instructions
Tested within neos 8.3.15
Review instructions
Changed the branch to 8.3, as i’ve accidentally choose 8.0 👼 As discussed in slack we (actually Bastian) changed from a hardcoded date format to an user-localization.
Packages:
Neos
BUGFIX: Forward status codes and headers set in module actions
Previously the status code set in module actions via throwStatus or response->setStatusCode() was ignored. With this change the individual module response is merged into the generic module response which then contains the desired status code, headers and other properties.
This is essential if the client (f.e. HTMX) relies on proper headers and status codes to behave properly.
Review instructions
Use f.e. $this->throwStatus(404) in a Neos module controller action and check the status code of the response when calling the action.
The response code should now be 404 instead of 200.
Packages:
Neos
BUGFIX: Case insensitive user search on PostgreSQL
PostgreSQL is by default case sensitive and its hard to find users depending on their name in the users module.
Packages:
Neos
BUGFIX: Access isNil function from Helper function to apply selected image to property
Upgrade instructions
_None_
Review instructions
Follow-up to: #5117
With the latest Bugfix release of Neos 8.3.14 currently when selecting an image from the media browser it not will be applyied to the image property as the IsNil function has to be accessed inside of the Helper function.
`javascript
NeosCMS.isNil()
`
In this case, leads to an unresolved function or method.
### Before
### After
Packages:
NeosMedia.Browser
BUGFIX: Prevent multiple imports of the same remote asset in the frontend
This is a frontend fix for `#5116 <https://github.com/neos/neos-development-collection/issues/5116>`_and prevents users from triggering multiple import processes for the same remote asset. It is not a sufficient fix to only prevent this in the frontend though, since it doesn’t catch it, if two or more different users trigger the import for the same asset at the same time.
Changes:
- select.js: add data attribute data-import-in-process to asset once import process has started and remove it when import is done
- select.js: check for new data attribute and only start import process if attribute does not exist
- select.js: add notification to inform user that asset is being imported
- select.js: add notification as warning for user if import is already in process
- Main.xlf: add new notification messages for english
- Default.html: add id for notification container to be able to send notifications to it via js
- Configuration.js: update hasConfiguration after configuration object was created, because otherwise it will always be false and the translations don’t work
related: https://github.com/neos/neos-development-collection/issues/5116
Info for testing:
You need to bundle the Neos.Neos assets to get the text for the notification messages.
- navigate to the Neos.Neos package
- run yarn
- run yarn build
Packages:
Media.Browser
BUGFIX: Flush cache also for deleted nodes
Removed nodes can’t get found, so they regarding caches don’t get flushed.
The bug was introduced with #4291 * Fixes: #5105
Packages:
Neos
BUGFIX: Fix title attribute for impersonate button in user management
With this change the localized text is rendered instead of always defaulting to english.
Changes:
ImpersonateButton.js change postion of const localizedTooltip inside ImpersonateButton function and change isNil(window.Typo3Neos) to isNil(window.NeosCMS)
RestoreButton.js it was always fallback text used change isNil(window.NeosCMS) to !isNil(window.NeosCMS)
Fixes: #4511
Checklist
[ ] Code follows the PSR-2 coding style
[ ] Tests have been created, run and adjusted as needed
[x] The PR is created against the lowest maintained branch
[x] Reviewer - PR Title is brief but complete and starts with
FEATURE|TASK|BUGFIX[ ] Reviewer - The first section explains the change briefly for change-logs
[ ] Reviewer - Breaking Changes are marked with
!!!and have upgrade-instructions
Packages:
Neos
BUGFIX: Workspace module: Tweak UX for collapsed rows in rewiew
This change adds a checkbox to all rows of the workspace review module in order to get a unified look and feel when collapsing those lines.
Previously, the checkbox was hidden for documents that only contained a single change:
!`image <https://github.com/neos/neos-development-collection/assets/307571/fe3a4964-0604-4394-b9a3-29879880d76d>`_
With this change, the list looks cleaner and single changes can be selected more easily even when collapsed:
!`image <https://github.com/neos/neos-development-collection/assets/307571/fd098312-6b58-4df1-b9d2-bdd23c9e7699>`_
Packages:
Neos
BUGFIX: Fix handling of unset/nulled DataStructure keys
Re-establishes the Neos < 8.0 behavior of removed/nulled data structure keys
## Background:
With #3645 <https://github.com/neos/neos-development-collection/issues/3645>``_a lot of Fusion core logic was refactored. As an unwanted side-effect, ``Neos.Fusion:DataStructure` prototypes (effectively all implementations of the ``AbstractArrayFusionObject`) now behave differently when it comes to removed or nulled keys and
```fusion Neos.Fusion:DataStructure {
someProperty >
}
led to an array with:
`json
{"someProperty":[]}
`
in Neos 8.0+.
This fix reverts this side-effect, making the above return
`json
[]
`
again.
BUGFIX: Invalidate caches correctly after node move changes have been discarded
NOTE: This PR needs to be tested in combination with its companion PR over at neos-ui: https://github.com/neos/neos-ui/pull/3503
## The overall problem
This one’s a bit complex and it stretches over two repositories. The basic scenario is:
You move some (document) node(s) to a position below a different parent node (so, just sorting them within their own hierarchical level doesn’t count)
You discard those changes
Chaos ensues
https://github.com/neos/neos-ui/issues/3184 describes the issues that happen only partially. During my investigation I found several problems that I need to disect piece by piece.
## (I) The UI does not (entirely) recognize that nodes have been moved to a position below a different parent node
The problem
https://github.com/neos/neos-ui/assets/2522299/9ce3bdb9-35d7-423d-90af-b2c55a009c9d
In the video you can see that after the two document nodes have been moved, the change is not made visible by the usual orange change indicator on the left hand side of the tree nodes. Also, on the attempt to discard the current set of changes, an error occurs that reads:
`
Call to a member function isRemoved() on null - Check logs for details
`
Both phenomena are related, because - as it turns out - the UpdateWorkspaceInfo feedback object, that is supposed to inform the UI about pending changes, delivers the wrong node context paths for the nodes that have just been moved (the context paths are still the old ones).
Because the context paths are now out of sync, the UI is unable to associate the pending change with the respective tree node. It then also uses the stale workspace information as payload to the discard command, which leads to the above error at the following line:
https://github.com/neos/neos-ui/blob/5c52e08b8a1effc985911390a7124579c4018c25/Classes/Controller/BackendServiceController.php#L272
How come the context paths are incorrect after the nodes have been moved?
<s>After some investigation I found that the Neos\\ContentRepository\\Domain\\Factory\\NodeFactory class memoizes stale data - as opposed to e.g. ContentContext which gets its in-memory cache flushed when nodes were moved:
https://github.com/neos/neos-development-collection/blob/0e28ef208111f5b1576df9078bb9abfedf12500c/Neos.ContentRepository/Classes/Domain/Factory/NodeFactory.php#L81
When the PublishingService is asked for unpublished nodes via getUnpublishedNodes, it receives cache hits within NodeFactory->createFromNodeData for the nodes that have just been moved - thus the old context paths.</s>
EDIT: Not at all true :sweat_smile:! I investigated further after the functional tests over here failed (hooray for functional tests!). The actual reason is as follows:
The Neos UI API uses a slightly different content context configuration than getUnpublishedNodes. So, NodeFactory actually keeps track of two variants of the moved nodes. The ones that getUnpublishedNodes receives are not the ones that the move operation has been performed on.
The solution
The solution for this is implemented over here: https://github.com/neos/neos-ui/pull/3503
## (II) Discarded move changes are not properly reflected in the document tree
The problem
Problem (I) can be circumvented by hard-reloading the UI (after that, the workspace info will be correct again). But, there’s still some strangeness going on…
https://github.com/neos/neos-ui/assets/2522299/9f4e6d55-9c92-4590-8b1a-362532f7f799
In the video you can see that the tree actually reflects the discarded changes correctly for a brief moment there. It then quickly jumps to a broken state in which the nodes that should be at their original positions just disappear.
This problem persists even if you hard-reload the UI after discarding:
https://github.com/neos/neos-ui/assets/2522299/7085ee21-91a3-428a-a5e0-55bc0a7899a6
Now, if you use the reload button of the document tree to manually reload the tree, the nodes reappear:
https://github.com/neos/neos-ui/assets/2522299/c7b2dafd-8113-4a28-a3a8-ac3bc56675f8
(But also: If you hard-reload the UI again, the nodes will once again flash briefly and then disappear)
How does this happen?
In those videos, the parent document that originally contained the moved nodes is focused and open in the guest frame. After discard, it should contain those nodes again. The UI reloads the guest frame, but the document is now rendered with stale node metadata. After the guest frame finished loading, the stale metadata (which still thinks the nodes have been moved elsewhere) overwrites the node data in the UI redux store.
This is why the correct state shows up for a brief moment. It gets overwritten after a short delay when the guest frame is loaded. (Also: The nodes do not disappear if you focus a different document and hard-reload the UI).
Looking at the cache configuration for the node metadata:
https://github.com/neos/neos-ui/blob/5c52e08b8a1effc985911390a7124579c4018c25/Resources/Private/Fusion/Prototypes/Page.fusion#L26-L46
… one should actually assume that the data shouldn’t be stale (Neos.Caching.descendantOfTag(documentNode) should do the trick). It turns out though, that the Neos\\Neos\\Fusion\\Cache\\ContentCacheFlusher class - in case of discard - will only flush tags related to a node’s current workspace. We actually need to have all tags flushed in the base workspace as well to cover the DescendantOf_*-tag of the original parent node.
The solution
I’m not entirely sure about this. I did two things:
I modified the
nodeDiscardedsignal so that it carries the base workspace of each discarded node
The reason behind this is that the ContentCacheFlusher listens to both the nodeDiscarded and the nodePublished signal with its method registerNodeChange. nodePublished carries the target workspace of the publishing operation, which is accepted as a second argument by registerNodeChange. nodeDiscarded used to not carry such “target workspace” information, so that the ContentCacheFlusher had no chance to actually flush tags for this workspace.
It feels to me like a bit of a stretch on semantics to just add the base workspace to the nodeDiscarded signal in such fashion, but I found it to be the least invasive yet most effective solution.
I made sure that the
registerAllTagsToFlushForNodeInWorkspacemethod of theContentCacheFlusheractually deals with the given node in the given workspace.
registerAllTagsToFlushForNodeInWorkspace takes a node and a workspace as arguments. It used to just assume that the given node is actually its variant in the given workspace, which seems to be working in a lot of cases, but in the case of discarded node move changes, the method makes false assumptions. It goes up the parent chain of the given node to find all DescendantOf_*-tags that need to be flushed. The given node however has the wrong parent.
I therefore added some code at the start of the method, that replaces the $node variable with the given node’s variant in the given workspace, if the respective workspace names differ.
Related Commit(s): https://github.com/neos/neos-development-collection/pull/4291/commits/`f97268a7a3b4259285b45a7a0ed7572d0e03d02a <https://github.com/neos/neos-development-collection/commit/f97268a7a3b4259285b45a7a0ed7572d0e03d02a>``_, https://github.com/neos/neos-development-collection/pull/4291/commits/``184692dd6398924ff769fc8d452454d3427f92c0 <https://github.com/neos/neos-development-collection/commit/184692dd6398924ff769fc8d452454d3427f92c0>`_
## (III) Discarding a node move while having a moved document node open in the guest frame results in an error page
The problem
https://github.com/neos/neos-ui/assets/2522299/7ddda073-47b7-4587-bf3f-ad5c50bdf411
The video shows that when you’re currently editing a moved document and then discard the move change, the guest frame reloads and shows a misleading fusion error. This is because the guest frame tries to render a document node that doesn’t exist anymore.
A similar situation would be a document that has just been created. If you stay on that document and then discard it, the UI behaves correctly and redirects you to the next-higher document:
https://github.com/neos/neos-ui/assets/2522299/bce265f5-507e-4dd2-bb05-9c72d53564a0
Here, the problem lies within the discardAction of the Neos\\Neos\\Ui\\Controller\\BackendServiceController which does not recognize discarded move changes and thus misses to inform the UI that it needs to remove the nodes at their former positions and re-insert them at their original positions.
The solution
The solution for this is implemented over here: https://github.com/neos/neos-ui/pull/3503
## All solutions combined
Here’s what it looks like when the PRs in neos-ui and neos-development-collection are combined:
https://github.com/neos/neos-ui/assets/2522299/2904f731-e101-4033-b617-5c196a44bdec
BUGFIX: Add missing type converts for asset subtypes
This prevents the raw data from being base64 encoded into the rendered output of the Neos backend and included in xhr requests from the Neos UI.
Additionally the default settings for editor and constraints makes the usage of those affected types easier in nodetype properties.
Resolves: #5006
Review instructions
Example nodetype to use in the Neos backend with the raw content mode:
``` ‘Neos.Demo:Content.Test’:
- superTypes:
‘Neos.Neos:Content’: true ‘Neos.Demo:Constraint.Content.Column’: true ‘Neos.Demo:Constraint.Content.Main’: true
- ui:
label: Test icon: picture position: start inspector:
- groups:
- settings:
label: Test Settings
- properties:
- video:
type: Neos\Media\Domain\Model\Video ui:
label: ‘Video’ reloadIfChanged: true showInCreationDialog: true inspector:
group: ‘settings’ editor: Neos.Neos/Inspector/Editors/AssetEditor
- document:
type: Neos\Media\Domain\Model\Document ui:
label: Document inspector:
group: ‘settings’ editor: Neos.Neos/Inspector/Editors/AssetEditor
- audio:
type: Neos\Media\Domain\Model\Audio ui:
label: Audio inspector:
group: ‘settings’ editor: Neos.Neos/Inspector/Editors/AssetEditor
Without the change in this PR, setting the 3 properties will each increase the size of the preview html and node change requests.
Also errors are thrown if the editor for each property is not defined.
With this change, the size of the output does not increase and the editor does not need to be defined anymore.
Packages:
Neos
BUGFIX: Fix the check for RedirectStorageInterface
Existance of interfaces needs to be checked with interface_exists
Fixes: #5000
Packages:
Media
BUGFIX: Remove br from role tooltip and improve readability
A <br> was displayed as text in the title of roles in the user management module.
With this change it is replaced by a proper line break and the parent roles are now displayed as list with their name and identifier.
Before:
!`CleanShot 2024-04-11 at 13 37 07@2x <https://github.com/neos/neos-development-collection/assets/596967/d1fc5f07-f5bd-454c-ab7d-196222537ad3>`_
After:
!`CleanShot 2024-04-11 at 13 40 50@2x <https://github.com/neos/neos-development-collection/assets/596967/1cc40c6b-6222-495f-a22c-60f1592ed24b>`_
Packages:
Neos
BUGFIX: Sort properties in raw content mode
Previously there was no obvious sorting for properties in the Raw content mode and the resulting order of properties appeared “random”, which is an issue if the properties don’t appear in the order the editor should edit them.
With this change the sorting option which is also used for the inspector is used to sort the items and therefore giving an option to the integrator on their arrangement.
That the inspector order is used for the raw content is not the cleanest solution, but introducing another sorting option also doesn’t seem the right choice at this point.
Packages:
Neos
BUGFIX: Make text formatting visible in raw content mode
This change removes the css reset which made it impossible to see any text formatting in raw content mode.
Also the font is now set to use the Neos font instead of just arial which matches the backend default font.
Before:
!`CleanShot 2024-04-11 at 09 26 51@2x <https://github.com/neos/neos-development-collection/assets/596967/3484adf2-0361-4b4f-8849-ca2f138acec4>`_
After:
!`CleanShot 2024-04-11 at 09 23 08@2x <https://github.com/neos/neos-development-collection/assets/596967/ae9285f9-fc58-4847-9122-3aedeef8ddff>`_
Packages:
Neos
BUGFIX: Strip image to prevent wrong orientation information in exif data
After autorotating the thumbnail image we need to remove the according exif data for the thumbnail, to prevent the thumbnail is shown rotated again.
See also: https://github.com/php-imagine/Imagine/issues/467
Fixes: #3148
!`image <https://github.com/neos/neos-development-collection/assets/13046100/c039f852-623c-4d8a-9848-416f0ab27498>`_
Packages:
NeosMedia
BUGFIX: Fix argument order of implode()
Passing the separator after the array is not supported since PHP 8.0 anymore
Upgrade instructions
Packages:
NeosContentRepository
BUGFIX: 4915 fusion `ParsePartials cache not flushed for symlinked packages <https://github.com/neos/neos-development-collection/pull/4916>`_
Resolves: #4915
By reverting fix https://github.com/neos/neos-development-collection/pull/4838 Which will lead to the original problem to resurface https://github.com/neos/neos-development-collection/issues/4415 (but silently this time, no one will notice the cache flodding :D)
Upgrade instructions
Packages:
NeosFusion
BUGFIX: Fix disablingSetNoOpenerWorks test for convertUri
Fixes the disablingSetNoOpenerWorks test for the convertUri. Now, the test respects the value of setNoOpener.
fixes: #3605
Packages:
MediaNeos
BUGFIX: Search assets in a case-insensitive way
This solves the problem that with Postgres the search was case-sensitive. Other database platforms didn’t have this issue as they ran case-insensitive comparisons by default.
Resolves: #3432
Packages:
Media
BUGFIX: Allow dimension preset keys to be different from values for DimensionsMenu
This removes the implicit convention that dimensionPresetKey must be the same as the dimensionValue.
Review instructions
- Follow the manual to set up a bilingual site: https://docs.neos.io/guide/manual/content-repository/content-dimensions/multiple-languages#configuring-a-bilingual-site
- Open frontend with rendering of Neos.Neos:DimensionsMenu
Fixes https://github.com/neos/neos-development-collection/issues/4857
Packages:
Neos
BUGFIX: Allow non-entity asset variants
Allow implementations of the AssetVariantInterface to not be doctrine entities.
Without this fix, all AssetRepository::find*() calls lead to an exception when a class implements the interface but is not an entity (for example because it is just used to generate dummy images for Monocle).
## Steps to reproduce
Implement the interface with a new custom class like
```php final class DummyImageVariant implements AssetVariantInterface {
// …
}
Trigger
AssetRepository::find*()method, eg. by invoking./ flow media:removeunused
### Expected result
No error, the custom implementation should be ignored
### Actual result
Exception:
``` Failure while fetching class schema class “Some\Package\DummyImageVariant”: No class schema found for “Some\Package\DummyImageVariant”.
Type: Doctrine\ORM\Mapping\MappingException Code: 1542792708 File: Data/Temporary/Development/Cache/Code/Flow_Object_Classes/Neos_Flow_Persist
ence_Doctrine_Mapping_Driver_FlowAnnotationDriver.php
Line: 187
Packages:
Media
BUGFIX: Neos Ui JSON serializable property values
This bugfix will make use of the \\JsonSerializable interface instead directly when serializing properties for the neos ui.
With https://github.com/neos/flow-development-collection/pull/2762 native support for vo’s in flow_json_array was introduced.
That also allows value object support for node properties, as they can be stored directly the node properties flow_json_array.
Unfortunately the property serialisation for the NeosUi does NOT use the expected \\JsonSerializable::jsonSerialize but the property mapper and the ArrayFromObjectConverter for object types to get an array that will be json encoded.
This works mostly fine but in some cases it fails:
- when your fromArray fields and property names values dont match
- when a “object” subtypes the object mapper is no convertable like the GuzzleHttp\\Psr7\\Uri:
``` Too few arguments to function GuzzleHttp\Psr7\Uri::isAbsolute(), 0 passed in /core/neos-manufacture-highest/Packages/Framework/Neos.Utility.ObjectHandling/Classes/ObjectAccess.php on line 151 and exactly 1 expected
72 GuzzleHttp\Psr7\Uri::isAbsolute() 71 Neos\Utility\ObjectAccess::getPropertyInternal(GuzzleHttp\Psr7\Uri, “absolute”, false, true) 70 Neos\Utility\ObjectAccess::getGettableProperties(GuzzleHttp\Psr7\Uri) 69 Neos\Flow\Property\TypeConverter\ArrayFromObjectConverter_Original::getSourceChildPropertiesToBeConverted(GuzzleHttp\Psr7\Uri) ```
Current workarounds are aop: https://github.com/sitegeist/Sitegeist.InspectorGadget/blob/78f5f4a206287b1c4bedf5cb88582ed51cb4a311/Classes/Infrastructure/NodeInfo/NodeInfoPostProcessingAspect.php#L17 Or to use a dumb property mapper: https://github.com/sitegeist/Sitegeist.Archaeopteryx/blob/9322b9cb8e4824bcaf7aaa247c23b1244a2f1167/Classes/LinkToArrayForNeosUiConverter.php#L12C16-L12C78
Upgrade instructions
Packages:
NeosContentRepository
BUGFIX: Private props obscure error
…uated
instead of the original error that something went wrong
> Circular reference detected while evaluating prop: “private.thepath”
is shown.
That happens because the locking didnt anticipate this case.
Upgrade instructions
Review instructions
this code reproduces the problem … yes i know :D
``` prototype(YourVendor:FusionPrototype) < prototype(Neos.Fusion:Component) {
- @private {
lol = ${true} throwingPath = ${private.lol && NonExistingFunctionError()}
}
- renderer = YourVendor:FusionPrototypeWithPrivate {
content = ${private.throwingPath}
}
}
- prototype(YourVendor:FusionPrototypeWithPrivate) < prototype(Neos.Fusion:Component) {
renderer = ${props.content}
}
Packages:
NeosFusion
BUGFIX: Fusion parser fix multi line comment
This fixes a bug where the Fusion parser would not parse following c-style comments correctly:
`
/**
comment with multiple stars even
**/
`
This happed when the ending count of * was even. So ending a comment with ***/ worked previously.
Now we use the “correct” regex from Jeffrey E.F. Friedl’s book “Mastering Regular Expressions” Page 272 “Unrolling C Comments”
We already use his regex for string matching and it is really fast due to the unrolled loop. Faster than using the lazy quantifier ~^/\\*.*?\\*/~s.
I did a performance test with 1 million iteration on three different comment samples (with each sample having a dynamic part to clear possible caches):
|--------|——–| | 0.143725s | 0.160235s | | 0.181047s | 0.203759s | | 0.156254s | 0.170144s |
Additionally the error message for comments starting with /** was improved. Previously $nextLine->char(1) would return ** instead of just one * because wrongly implemented.
Upgrade instructions
Packages:
Fusion
BUGFIX: Use a dynamic URL for user impersonation
As described in the issue, the impersonation does not work when Neos is running in a subfolder. This change adds a data attribute with a dynamic URL to the DOM, and the user impersonation is using this module URL as base.
Fixes: #4797
Review instructions
Use the user impersonation in the Backend modules (User Management and other) when Neos is running in a subfolder. e.g. BASEURL.com/cms/neos
Packages:
Neos
BUGFIX: Add assetcollection privilege condition to asset edit view in Media.Browser
In the Media.Browser you can change the AssetCollections via checkboxes even when you don’t have the privilege (Neos.Media.Browser:ManageAssetCollections) to do so. With this PR the checkboxes are only rendered with the right privilege.
Packages:
NeosMedia.Browser
BUGFIX: MenuHelper uses content dimensions to get node for privilege check
Resolves: #4625
The Neos backend MenuHelper received a bugfix to filter sites listed by the menu using NodePrivileges. In case of sites with multiple dimensions the dimensionCombinations are considered too.
Upgrade instructions
Review instructions
This bugfix tries to fix #4025. If 7.3 and upwards is used on a multi site project with multiple dimensions, it might be that
`
$node = $context->getNode(\\Neos\\ContentRepository\\Domain\\Utility\\NodePaths::addNodePathSegment(SiteService::SITES_ROOT_PATH, $site->getNodeName()));
`
returns null, causing the next line
`
if ($this->privilegeManager->isGranted(NodeTreePrivilege::class, new NodePrivilegeSubject($node))) {
`
to throw an exception. Thus the backend is not accessible anymore.
The reason is, that for multisite projects with multiple dimensions it might be that $node cannot be retrieved by the default context created.
The fix is to use contentDimensionCombinator and also to explicitly check if $node could be retrieved.
I’m also using the property invisibleContentShown and inaccessibleContentShown because it might be that an editor set the Home of a site to hidden by mistake. Thus the site might not accessible via the menu anymore to possibly fix an editor mistake.
Packages:
Neos
BUGFIX: Prevent cache overflow when querying nodes by related entities
Without this change new cache entries in Flow_Persistence_Doctrine are generated for each entry in the relationMap causing massive slowdowns in Neos f.e. when many assets are deleted as the file system cache cannot handle large numbers of entries well.
With this change only one entry per number of relations is generated which is usually only a few and the entries can be reused.
Resolves: #4876
Packages:
NeosContentRepository
BUGFIX: Followup `nodeTypes:show with –path to primitive value <https://github.com/neos/neos-development-collection/pull/4837>`_
Related: #4619
Primitive values cannot be shown currently:
`
flow nodetypes:show Neos.Neos:Document --path properties.title.ui.label
Neos\\ContentRepository\\Command\\NodeTypesCommandController_Original::truncateArrayAtLevel(): Argument `#1 <https://github.com/neos/neos-development-collection/issues/1>`_($array) must be of type array, string given
`
Upgrade instructions
Packages:
NeosContentRepository
BUGFIX: Fusion avoid error parser cache to crash if cache is broken
Resolves: #4595
It seems a cache’s has operation doesnt work that reliable thats why we will be using get instead and check against false.
Upgrade instructions
Packages:
NeosFusion
BUGFIX: #3624 Node::getProperty does not always return list for references
EEL can only operate on an array of nodes if the [0] item is a node (simple duck typing)
Instead of fixing eel like proposed here https://github.com/neos/neos-development-collection/pull/3946 with this fix we avoid returning non 0 indexed arrays here:
`
${q(node).property("someReference")}
`
Currently, this might indeed return an array with holes like [1 => NODE, 2 => NODE, 5 => NODE] if the identifiers in fields 0, 3 and 4 are not resolvable.
Thats because of the “unsafe” array_filter method in resolvePropertyReferences https://github.com/neos/neos-development-collection/blob/378a029d0cc7ea6acb853751e7592873584a4aac/Neos.ContentRepository/Classes/Domain/Model/Node.php#L961 which will leave holes in the array.
Using array_filter was introduced with Neos 2.2 so this is technically a regression of https://github.com/neos/neos-development-collection/commit/87804e12082e7d6d06bd22f50739e20eeaa45539 ^^
Fixes: #3624
Packages:
NeosContentRepository
BUGFIX: Add dimensions to Workspace module
resolves: #3470
This adds Dimension handling to the current workspaces module.
Currently the Module only displays changes in different languages as one change. This is because the node path is the same in different languages after they are copied.
Packages:
Neos
BUGFIX: Fusion avoid error on cache invalidation while developing
Replaces #4509 * Resolves: #4415
After deleting a fusion file like BrandLogo.fusion one will face the error after booting flow and thus triggering the file monitor and its listeners: (even like a simple flow help)
`
Couldn't resolve realpath for: '/absolutePath/Code/core/Neos.NeosIo/Packages/Sites/Neos.NeosIo/Resources/Private/Fusion/Content/BrandLogo/BrandLogo.fusion'
`
This is caused as realpath returns false if the file was deleted, and we were to eager validating this. But as flows file monitor already returns absolute paths we can skip the realpath calculation here and move it to the ParserCache::cacheForFusionFile. Initially the call to realpath was made in a single place to avoid making to many assumptions about the form flow returned file paths.
Upgrade instructions
Packages:
NeosFusion
BUGFIX: More precise selection of the DomNode with CSFR token
To prevent issues with selecting the wrong CSFR Token in the DOM, we now have a more precise selection of the DomNode with the CSFR token.
fixes: #4822
Review instructions
Install a version before 1.0.1 of the Shel.Neos.WorkspaceModule and go to the user management module to impersonate a user. Then switch to the Workspace module and try to restore the original user. Without this patch, it should fail. With version 1.0.1 it will not fail btw.
Packages:
Media.BrowserNeos
BUGFIX: Check SVG files for malicious code before providing original asset url links
This adds a check in the preview of assets in the media module and checks for malicous content in svgs. If detected, the direct links to the original url get removed from the preview pages and a warning is shown.
!`image <https://github.com/neos/neos-development-collection/assets/13046100/bb8a2b73-a251-499e-926a-1e6b866bbc87>`_
Fixes: - https://github.com/neos/neos-development-collection/issues/4833 - https://github.com/neos/flow-development-collection/issues/3248
Packages:
NeosMedia.Browser
BUGFIX: Resolve StyleCI issues
Packages:
NeosFusion
BUGFIX: Fix StyleCI issues
Packages:
Neos
BUGFIX: add dimensionshash migration to postgres
Regression https://github.com/neos/neos-development-collection/pull/3279
We need to generate add dimensions hash to node event model in order to be able to save new nodes as we do in MySQL: Neos.Neos/Migrations/Mysql/Version20210125134503.php
Upgrade instructions
Run ./flow doctrine:migrate
Review instructions
You want to make sure that the dimensions table has valid values. If not you might want to add a custom migration like this one:
```php <?php declare(strict_types=1);
namespace Neos\Flow\Persistence\Doctrine\Migrations;
use Doctrine\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema;
class Version20230727164559 extends AbstractMigration {
public function getDescription(): string {
return ‘Correct null entries in event log caused by automated import’;
}
public function up(Schema $schema): void {
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== ‘postgresql’, ‘Migration can only be executed safely on \’postgresql\’.’);
$this->addSql(‘UPDATE neos_neos_eventlog_domain_model_event SET dimension = NULL WHERE dimension = :dimension AND dtype = :dtype;’, [‘dimension’ => ‘N;’, ‘dtype’ => ‘ttree_contentrepositoryimporter_event’]);
}
public function down(Schema $schema): void {
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== ‘postgresql’, ‘Migration can only be executed safely on \’postgresql\’.’);
$this->addSql(‘UPDATE neos_neos_eventlog_domain_model_event SET dimension = :dimension WHERE dimension IS NULL AND dtype = :dtype;’, [‘dimension’ => ‘N;’, ‘dtype’ => ‘ttree_contentrepositoryimporter_event’]);
}
}
Packages:
Neos
BUGFIX: node:repair fails with could not be converted to string
Fixes the following crash during node:repair
```shell ./flow node:repair –dry-run –only removeBrokenEntityReferences Dry run, not committing any changes.
Checking for broken entity references … Object of class Neos\Flow\Persistence\Doctrine\Proxies\__CG__\Neos\Media\Domain\Model\ImageVariant could not be converted to string
Type: Error File: Data/Temporary/Development/SubContextWbWeb/Cache/Code/Flow_Object_Classes/Neos_ContentRepository_Command_NodeCommandControllerPlugin.php Line: 836
resolved #4794
Upgrade instructions
[x] Code follows the PSR-2 coding style
- ~~Tests have been created, run and adjusted as needed~~
There are not tests in place and I added none.
[x] The PR is created against the lowest maintained branch -> 7.3
[ ] Reviewer - PR Title is brief but complete and starts with
FEATURE|TASK|BUGFIX[ ] Reviewer - The first section explains the change briefly for change-logs
[ ] Reviewer - Breaking Changes are marked with
!!!and have upgrade-instructions
Packages:
NeosContentRepository
BUGFIX: Filter for assets by asset collection by using constraints
Fixes a bug, that was introduced with: https://github.com/neos/neos-development-collection/pull/4724
Because of using the QueryBuilder twice, the count of the paramter and for the query is not correct anymore.
Fixes: #4801
Packages:
NeosMedia
BUGFIX: Remove unnecessary basemixins dependency for ContentReferences
The package has no direct dependency to the basemixins and should be usable without the other basemixins.
Packages:
NodeTypes.ContentReferences
BUGFIX: Replace incorrect mention of itemRenderer to itemReducer
I’m not sure if we should target the 7.0 branch and then apply this to all following versions?
Was introduced here: https://github.com/neos/neos-development-collection/commit/`a7bc229541baa91dde6a85fbe4853b88db511af5 <https://github.com/neos/neos-development-collection/commit/a7bc229541baa91dde6a85fbe4853b88db511af5>``_#diff-``3ed794da2fb825c61dd55eee6535b77958799b33 <https://github.com/neos/neos-development-collection/commit/3ed794da2fb825c61dd55eee6535b77958799b33>`_384df7c47ac2a22242608969R207-R210
Packages:
Neos
BUGFIX: Add workspace hash to NodeDynamicTag_ and AssetDynamicTag_ cache tags
Fixes: #4781
Packages:
Neos
BUGFIX: Filter for assets by asset collection without overriding existing WHERE conditions
The query to fetch assets gets build in multiple steps. E.g in findAll it creates the query, adds the “variant filter clause” and afterwards the “asset collection filter clause”.
- ```
public function findAll(AssetCollection $assetCollection = null): QueryResultInterface {
$query = $this->createQuery(); $this->addAssetVariantFilterClause($query); $this->addAssetCollectionToQueryConstraints($query, $assetCollection); return $query->execute();
}
``` But adding the “asset collection filter clause” removes/overrides the existing “variant filter clause”
This fix replaces the way of setting “asset collection filter clause”, so the existing where clauses are retained.
Fixes: #4723
Packages:
Media
BUGFIX: flashmessages in legacy modules work as expected
This applies the, since a while unused, presets for message severity types to notifications in classic Neos backend modules again so that eg. warnings and errors stay on display and can be copied / screenshotted.
Also regenerates js maps that seem to have compiled wrongly before.
Fixes: #4672
Packages:
Neos
BUGFIX: Check if image is possible to refit on replacement
Fixes: #4752
Checks if the replacement is an image and has a size.
Packages:
NeosNodeTypes.BaseMixinsMedia
BUGFIX: Fix and make `nodeTypes:show command usable <https://github.com/neos/neos-development-collection/pull/4619>`_
Fixes handling of invalid nodetype or invalid path.
And introduces new option level to clamp the input (previously this command was useless for bigger nodetypes):
``` flow nodeTypes:show Neos.Demo:Document.Homepage –path properties –level 1 NodeType configuration “Neos.Demo:Document.Homepage.properties”:
_removed: … _creationDateTime: … _lastModificationDateTime: … _lastPublicationDateTime: … _path: … _name: … _nodeType: … _hidden: … _hiddenBeforeDateTime: … _hiddenAfterDateTime: … titleOverride: … metaDescription: … … ```
Packages:
NeosContentRepository
BUGFIX: Allow disabling of auto-created Image Variants
Fixes support for the setting autoCreateImageVariantPresets that was documented for a long time but never actually evaluated.
This change set:
Adjusts
AssetService::assetCreated()signal to only triggerAssetVariantGenerator::createVariants()if theautoCreateImageVariantPresetsflag is setSets the default value of the flag to
truefor greater backwards compatibilityAdjusts
AssetVariantGenerator::createVariant()to only create a variant if it does not exist already – previously multiple variants with the same identifiers could be created for a single asset leading to undeterministic behaviorAdds a button “Create missing Variants” to the
Variantstab of the Media Module allowing editors to manually trigger creation of (missing) variants.Fixes: #4300
Packages:
NeosMedia
BUGFIX: `props will be unset after an exception <https://github.com/neos/neos-development-collection/pull/4526>`_
Resolves: #4525
The rendering in a Neos.Fusion Component had a bug where the props might be undefined if an exception happened earlier in an eel expression.
This was caused by not correctly poping the runtimes context and thus causing a unexpected shift in the context stack.
Upgrade instructions
Packages:
NeosFusion
BUGFIX: Reduce nodetype schema size
With this change the following optimisations are done to improve speed and reduce size of the schema generation:
Abstract nodetypes are not queried anymore for constraints as they are already resolved by the nodetype manager.
Entries in the inheritance map and constraints will be skipped if they don’t contain any data.
These optimisations reduce the size of the schema in the Neos.Demo from ~357KB to ~300KB and improve the response time by ~20% in my tests.
The more nodetypes a project has, the bigger the benefit is.
Review instructions
Everything should work the same, adding nodes, constraints, etc.
Packages:
Neos
BUGFIX: Only discard nodes in same workspace
Resolves: #4577
Packages:
ContentRepository
BUGFIX: Load all thumbnails for an asset to skip further requests
For the usecase of images with responsive variants this change prevents additional database requests for each additional variant of an image.
This can greatly reduce the number of queries on pages with many source tags or sources attributes for pictures and images.
Review instructions
As soon as an image is rendered in several sizes on a page the patch should skip additional db requests in the thumbnails repository. Persistent resources and image entities are still queried as via the node property getter and to resolve the thumbnail.
Packages:
NeosMedia
BUGFIX: Allow unsetting thumbnail presets
Resolves: #3544
Packages:
NeosMedia
BUGFIX: Don’t query for abstract nodetypes in nodedata repository
As abstract nodetypes don’t (shouldn’t) appear in the database it makes no sense to query them.
This is a regression that was introduced a long time ago, when the default parameter to include abstract nodetypes was added to the getSubNodeTypes method in the NodeTypeManager without adjusting the call in the NodeDataRepository->getNodeTypeFilterConstraintsForDql which relied on the previous behaviour.
The call in the method getNodeTypeFilterConstraints was fixed some years ago, but that method seems unused.
Packages:
ContentRepository
BUGFIX: Consistently initialize asset sources via `createFromConfiguration <https://github.com/neos/neos-development-collection/pull/4008>`_
fixes: #3965
The Problem
The case at hand was an asset source that uses a value object to validate the incoming asset source options. I expected to be able to define a promoted constructor property with said value object as its declared type:
```php final class MyAssetSource implements AssetSourceInterface {
- public function __construct(
private readonly string $assetSourceIdentifier, private readonly Options $options
) { }
/* … */
}
…and initialize the value object in the createFromConfiguration static factory method defined by the AssetSourceInterface:
```php final class MyAssetSource implements AssetSourceInterface {
/* … */
public static function createFromConfiguration(string $assetSourceIdentifier, array $assetSourceOptions): AssetSourceInterface {
- return new static(
$assetSourceIdentifier, Options::fromArray($assetSourceOptions)
);
}
}
This failed with a Type Error, because the AssetSourceService, which is responsible for initializing asset sources, at one point does not utilize createFromConfiguration to perform initialization, but calls the asset source constructor directly:
https://github.com/neos/neos-development-collection/blob/a4791b623161259b31d2d11b343310bd7ef76507/Neos.Media/Classes/Domain/Service/AssetSourceService.php#L178
The Solution
I adjusted the aforementioned routine of the AssetSourceService to use the AssetSourceInterface-defined createFromConfiguration static factory method instead of the asset source’s constructor.
Even though the pattern I described above only makes sense in a PHP >8.0 environment, I decided to target Neos 7.3 with this PR, because it should constitute a non-breaking bugfix.
Packages:
NeosMedia
BUGFIX: Guard that Fusion path cannot be empty
Previously in php 7.4 this Neos\\Fusion\\Exception\\MissingFusionObjectException was thrown
> No Fusion object found in path “”
but with php 8 this ValueError is thrown which is unexpected
> strrpos(): Argument `#3 <https://github.com/neos/neos-development-collection/issues/3>``_($offset) must be contained in argument ``#1 <https://github.com/neos/neos-development-collection/issues/1>`_($haystack)
This change takes care of throwing an explicit Neos\\Fusion\\Exception instead:
> Fusion path cannot be empty.
This error was noticed in the out of band rendering, when there is no content element wrapping: https://discuss.neos.io/t/argument-3-offset-must-be-contained-in-argument-1-haystack/6416/4
<img width=”593” alt=”image” src=”https://github.com/neos/neos-development-collection/assets/85400359/0ac8d025-3ab4-44e8-9034-eb883f0b1894”>
Upgrade instructions
Packages:
NeosFusion
BUGFIX: Fix `NodeType getTypeOfAutoCreatedChildNode and getPropertyType <https://github.com/neos/neos-development-collection/pull/4482>`_
resolves partially #4333 resolves partially #4344
Upgrade instructions
Packages:
NeosContentRepository
BUGFIX: show title on hover in ImpersonateButton
Review instructions
Currently if you hovered over the button, the title was not showing up.
Since the Feature `#3648 <https://github.com/neos/neos-development-collection/issues/3648>`_was introduced in Neos 8.0 I’m open this against the 8.0 Branch.
### Demo !`SCR-20230803-nhty <https://github.com/neos/neos-development-collection/assets/39345336/b3a75136-d493-49e1-a82a-e70f599e5cca>`_
Packages:
Neos
BUGFIX: Make getParent work in NodeData
resolved: #4283
Review instructions I am unsure why the dimensions were not passed to findOneByPath, but without it it does not really work. Also, it is kind of strange that the dimensions in findOneByPath is optional but returns nothing if it is not set. This fixes it for now.
Packages:
NeosContentRepository
BUGFIX: Use correct URL to FontAwesome icons
Upgrade instructions
Packages:
Neos
BUGFIX: Assign original asset collections to variant
Fixes: #3560
Packages:
Neos
BUGFIX: Fix editing of Electronic Address type in Backend module
Fixes: #4418
Packages:
Neos
BUGFIX: Disable content element wrapping and inline editable for references in content reference list
The NeosUI tries to initialize the inline editor for rendered references in content reference list. But they are not accessable at this moment. As references shouldn’t get edited anyways, we can simple disable the content element wrapping for these references.
Fixes https://github.com/neos/neos-ui/issues/3574
Packages:
NeosNodeTypes.ContentReferences
BUGFIX: Disable publish checkmark for new pages in workspace
closes #3991
Review instructions If the document is new, I show a small disabled checkmark instead of the functioning checkmark. This will force the user to use the checkboxes on the left side to publish changes. This does not solve the underlying problem but it will at least disable the function for Editors.
<img width=”1240” alt=”Bildschirmfoto 2023-05-12 um 11 12 21” src=”https://github.com/neos/neos-development-collection/assets/91674611/bc7d0f47-a54b-474d-a74a-230eb3a92546”>
Packages:
Neos
BUGFIX: Fusion’s FilePatternResolver windows compatible
The FilePatternResolver is responsible to handle glob patterns in includes in fusion. For more in depth information see the test: https://github.com/neos/neos-development-collection/blob/a461dbc8f976588b30f34a5ed34f1eeebf5a0cd2/Neos.Fusion/Tests/Unit/Core/Parser/ParserIncludeTest.php#L156-L167
Upgrade instructions
Packages:
NeosFusion
BUGFIX: Allow string position values in NodeType schema
The PositionalArraySorter implementation allows string values for the position of nodetypes, tabs, groups and views since a long time but the schema validation showed warnings.
Review instructions
Open the NodeTypes tab in the Configuration module with the Neos.Demo and the previous validation warnings shouldn’t show up anymore.
Packages:
Neos
BUGFIX: Undefined array key “ui” in nodeType creationDialog
Currently, its not possible to use the shorthand ```yaml
- creationDialog:
- elements:
- hasFoo:
type: boolean # ui: {} # this must be set to an empty array
as there is an unsafe access on the ui property > Warning: Undefined array key “ui” in /Data/Temporary/Development/Cache/Code/Flow_Object_Classes/Neos_Neos_NodeTypePostprocessor_DefaultPropertyEditorPostprocessor.php line 110
regression from #3473
Upgrade instructions
Packages:
Neos
BUGFIX: flow command typo in exception in nearestContentCollection method
Upgrade instructions
_None_
Review instructions
Command in exception should be start with ./flow command... and not flow command...
!`SCR-20230605-jytx <https://github.com/neos/neos-development-collection/assets/39345336/0d9bb60e-2335-4afa-80e3-1a0ed4942610>`_
Packages:
Neos
BUGFIX: CreationDialog hideable elements
closes cross repo issue: https://github.com/neos/neos-ui/issues/3483
In the UI it will be once https://github.com/neos/neos-ui/pull/3507 is merged possible to use the hidden property in the node creation dialog
- creationDialog:
- elements:
- hiddenProperty:
type: string ui:
hidden: true
This change adjusts neos creationDialogPostprocessor so that creationDialog items that are generated from properties via showInCreationDialog will have the hidden property copied
- hiddenProperty:
type: string ui:
showInCreationDialog: true inspector:
hidden: true
Upgrade instructions
Packages:
ContentRepositoryFusion.AfxNeos
BUGFIX: Use correct configuration path for enableObjectTreeCache
Due to the wrong path the value of enableObjectTreeCache was always interpreted as false. So in Neos in production context the Cache was disabled.
Packages:
Neos
BUGFIX: RenderAttributesTrait allows Stringable objects
RenderAttributesTrait converts Stringable objects to strings via __toString()
related: #4225
Upgrade instructions
Not sure what to write here :thinking:
Review instructions
Up until 8.3 it was possible to use EelHelpers with a fluent interface like API for attributes. E.g. the following was working fine in fusion afx:
`
class={[block.element('subline').modifier('light')]}
`
The variable block is an EelHelper which returns self. In 8.3 this fails with an Exception
`
$attributes may contain values of type array<string|bool|null> type: array...
`
The reason is, that with PR #4225, in RenderAttributesTrait there are two different ways the object is processed:
1. In case $attributeValue is not an array, e.g. an object, it is basically converted to a string
2. In case of an array it is checked if $attributeValuePart is actually of type plain string, boolean or null. In case of an object an exception is raised. This exception then breaks the previous behaviour in case of a \\Stringable object.
Packages:
NeosFusion
BUGFIX: point to 8.3.x-dev branch in README
Set the correct branch name to setup the neos-development-collection for 8.3.x-dev
Packages:
Neos
BUGFIX: Add translation keys in translation files
The following translation keys are missing their translation in the Main.xlf file.
https://github.com/neos/neos-ui/blob/7.3/packages/neos-ui/src/Containers/LeftSideBar/index.js#L82 https://github.com/neos/neos-ui/blob/7.3/packages/neos-ui/src/Containers/LeftSideBar/NodeTreeToolBar/Buttons/ToggleContentTree/index.js#L39
Packages:
Neos
BUGFIX: HtmlAugmenter & Attributes Rendering
Regression: https://github.com/neos/neos-development-collection/pull/4081
Fixes: #4213 - null should not remove existing attribute
Fixes applying string on existing empty attribute (or empty string)
Thanks to @tellenrieder @ClaraRuna and @KommunikativCh and @fcool ;)
Upgrade instructions
Packages:
NeosFusion
BUGFIX: Fix missing icon in case of fusion errors
Change html class for icon which gets rendered if a fusion error occurs.
Closes #4223
Packages:
NeosFusion
BUGFIX: make pagination work with Traversable
Fixes a warning: array_slice() expects parameter 1 to be array, object given in /…/Neos_ContentRepository_ViewHelpers_Widget_Controller_PaginateController.php line 124
Variant of #3891 based on the (correct) 7.3 branch.
See: #1112
Packages:
NeosContentRepository
BUGFIX: Add php version declaration to neos/fusion-afx
Packages:
NeosFusion.Afx
TASK: Add missing fusion migrations and runtime helper for 9.0
Followup to https://github.com/neos/neos-development-collection/pull/5638
I did a full re-review on all the Fusion migrations that were copied from neos/rector
The Fusion migrations were refined to ensure we handle even more cases (and in 9.0 write comments for all the things)
Doing that i noticed we were missing the 8.4 api for node.workspaceName and node.classification.tethered and q(node).property("hiddenInMenu") and ~enableAfterDateTime, disableAfterDateTime~ so i added the missing runtime layers for those too.
Upgrade instructions
Packages:
Neos
TASK: Adjust README to 8.4 branch
TASK: Adjust to new behat refactoring from 90 and fix CI test for previous PRs
these behat refactorings were backmerged to 8.4 and thus neos needs an adjustment herby.
The @Isolated tests are still broken because of changes in flow and are currently skipped in CI in favour of having some tests running already.
In Neos 9 everything will be better because all the code i attemted to fix is already dead and new written. Dont you worry.
TASK: New build of neos/neos css assets
Relates: #5588
Packages:
Neos
TASK: Update enshrined/svg-sanitize to ^0.22.0
Upgraded the enshrined/svg-sanitize dependency from ^0.17.0 to ^0.22.0 in composer.json due to CVE-2025-55166
Relates to: #4812
Packages:
Media.Browser
TASK: Allow neos/fusion-form in version 3.x to support neos/symfonymailer.
Packages:
Neos
TASK: Update github actions to checkout@v4 and cache@v4
Packages:
Neos.github
TASK: Check if index need to be renamed
In some instances the index is already renamed. This PR adds a check if this is the case and skips the migration in these cases.
resolves #5445
Packages:
NeosContentRepository
TASK: Render command references
also for Neos.ContentRepository.Migration, Neos.Neos.Setup and Neos.Setup
They were simply missing in the list of command identifier which are allowed to render the command reference.
See: https://github.com/neos/neos-development-collection/pull/4177#issuecomment-2598509517
Packages:
Neos
TASK: Fix MySQL migration differences on fresh setup
This eliminates some differences in the actual vs the expected DB setup in a fresh Neos 8.3 installation.
Fixes: #3118 (at least partly.)
Review instructions
doctrine:migrationgenerate should just say No changes detected after Neos has been set up.
Packages:
NeosContentRepositoryMedia
TASK: Allow setting itemsPerPage in user administration listing
With Neos 8.3, pagination was added to the user management module, but the number of users page page was not made configurable and set at a very low number of 10. This non-breaking change introduces this as a setting, keeping the default of 10.
Packages:
ContentRepositoryNeos
TASK: Make nullable parameter explicit to become PHP 8.4 compatible
I’ve used rector to migrate all occurrences.
https://getrector.com/rule-detail/explicit-nullable-param-type-rector
See also for Flow: https://github.com/neos/flow-development-collection/pull/3429
Note: We should run the rector migration again on 9.0 after upmerging this PR
Packages:
.github
TASK: Update GitHub actions (8.3)
Fix warnings:
> The following actions uses node12 which is deprecated and will be forced to run on node16: actions/checkout@v2, actions/cache@v2, actions/upload-artifact@v2. For more info: https://github.blog/changelog/2023-06-13-github-actions-all-actions-will-run-on-node16-instead-of-node12-by-default/
Packages:
Neos.github
TASK: Update textarea docs to latest version
Depends on https://github.com/neos/neos-ui/pull/3821
Packages:
.githubNeos
TASK: Upgrade to FontAwesome 6.5.2
Issue: https://github.com/neos/neos-development-collection/issues/5107
Upgraded FontAwesome in neos-development-collection to 6.5.2.
Briefly tested locally and it was functioning fine. Oriented on the last upgrade branch for 5.8.2.
Packages:
Neos
TASK: set new-password in EditAccount page
Solves https://github.com/neos/neos-development-collection/issues/4944
Upgrade instructions
Not needed
Review instructions
Allow your password manager to autofill everything on page load. The password field (for setting new password) will not be autofilled.
Packages:
Neos
TASK: Update plupload library to latest 2.3.9
Backport of https://github.com/neos/neos-development-collection/pull/5003 for 7.3
Fixes https://github.com/advisories/GHSA-rp2c-jrgp-cvr8: https://nvd.nist.gov/vuln/detail/CVE-2021-23562
Packages:
NeosMedia.Browser
TASK: Update plupload library to latest 2.3.9
Fixes CVE-2021-23562: https://nvd.nist.gov/vuln/detail/CVE-2021-23562
Packages:
NeosMedia.Browser
TASK: Cleanup SVG Sanitzer workaround after 0.17.0 release
SVG Sanitizer has merged and released the fix for restoring libxml error handler. So we can remove the workaround.
See: https://github.com/darylldoyle/svg-sanitizer/pull/90
Packages:
NeosMedia.Browser
TASK: Fix fusion docs a little
Fixes: https://github.com/neos/neos-development-collection/pull/3915#issuecomment-1296302491
Upgrade instructions
Packages:
Neos
TASK: PhpStan level 1 for Neos 8.3
Adds phpstan to the Neos 8.3 branch to all packages with a minimal level 1:
Neos.ContentRepository/Classes
Neos.Diff/Classes
Neos.Fusion.Afx/Classes
Neos.Fusion/Classes
Neos.Media.Browser/Classes
Neos.Media/Classes
Neos.Neos/Classes
Neos.NodeTypes.Form/Classes
Neos.SiteKickstarter/Classes
Errors caused by the back-port of the ESCR TraversableNodeInterface, have been directly ignored via ignoreErrors.
Other actually fixable errors have been fixed in a non breaking way. (Adjusting the doc types e.g.)
This should provide a little starting base for extending php stan level across all packages to higher levels in the upcoming 9.0 branch, where we actually use phpstan at level 8 for the following packages:
Neos.ContentGraph.DoctrineDbalAdapter/src
Neos.ContentGraph.PostgreSQLAdapter/src
Neos.ContentRepository.BehavioralTests/Classes
Neos.ContentRepository.Core/Classes
Neos.ContentRepository.Export/src
Neos.ContentRepository.LegacyNodeMigration/Classes
Neos.ContentRepository.NodeAccess/Classes
Neos.ContentRepository.StructureAdjustment/src
Neos.ContentRepository.TestSuite/Classes
Neos.ContentRepositoryRegistry/Classes
Neos.Neos/Classes (also exists in 8.3)
Neos.NodeTypes.Form/Classes (also exists in 8.3)
As Neos.Fusion didnt need to be adjusted for neos 9 i started to migrate this package to level 8 for neos 8.3 already to avoid too many upmerge conflicts:
https://github.com/neos/neos-development-collection/pull/4844
More packages, if applicable, will follow.
Upgrade instructions
Packages:
NeosContentRepositoryDiffFusionMedia.BrowserMedia
TASK: Migrate Neos.Fusion/Core to phpstan level 8 (Neos 8.3)
Requires: https://github.com/neos/neos-development-collection/pull/4842
Only files in Neos.Fusion/Classes/Core have been migrated, as they contain relatively new code like the parser.
Two kind of errors have been partially ignored from the level 8
For one: “no value type specified in iterable type array” as adding array<int|string, mixed> would just bloat this commit up. In these files we are mostly dealing with the fusion configuration which is highly dynamic:
Neos.Fusion/Classes/Core/Runtime.php
Neos.Fusion/Classes/Core/Cache/RuntimeContentCache.php
Neos.Fusion/Classes/Core/Cache/ContentCache.php
Neos.Fusion/Classes/Core/Cache/CacheSegmentParser.php
Neos.Fusion/Classes/Core/RuntimeConfiguration.php
Neos.Fusion/Classes/Core/ObjectTreeParser/MergedArrayTreeVisitor.php
Neos.Fusion/Classes/Core/ObjectTreeParser/MergedArrayTree.php
And “has no return type specified” was noticed a lot in the ast visiting code. But i plan to refactor this instead to something better type- and readable in general:
Neos.Fusion/Classes/Core/ObjectTreeParser/MergedArrayTreeVisitor.php
Neos.Fusion/Classes/Core/ObjectTreeParser/AstNodeVisitorInterface.php
Neos.Fusion/Classes/Core/ObjectTreeParser/Ast/*
The phpstan config i used for local development & testing:
<details><summary>local phpstan config</summary> <p>
``` parameters:
level: 8 ignoreErrors:
message: ‘#no value type specified in iterable type array.$#’ paths:
Neos.Fusion/Classes/Core/Runtime.php
Neos.Fusion/Classes/Core/Cache/RuntimeContentCache.php
Neos.Fusion/Classes/Core/Cache/ContentCache.php
Neos.Fusion/Classes/Core/Cache/CacheSegmentParser.php
Neos.Fusion/Classes/Core/RuntimeConfiguration.php
Neos.Fusion/Classes/Core/ObjectTreeParser/MergedArrayTreeVisitor.php
Neos.Fusion/Classes/Core/ObjectTreeParser/MergedArrayTree.php
message: ‘#has no return type specified.$#’ paths:
Neos.Fusion/Classes/Core/ObjectTreeParser/MergedArrayTreeVisitor.php
Neos.Fusion/Classes/Core/ObjectTreeParser/AstNodeVisitorInterface.php
Neos.Fusion/Classes/Core/ObjectTreeParser/Ast
- paths:
Neos.Fusion/Classes/Core
- bootstrapFiles:
../Framework/bootstrap-phpstan.php
</p> </details>
As phpstan `doesnt <https://github.com/phpstan/phpstan/discussions/10459>``_ allow to configure multiple levels by path, and i dont want to have to burden running phpstan multiple times, i decided against actually linting the migrated ``Neos.Fusion/Core` code in ci for Neos 8.3. On the neos 9 branch this we will activate the full linting power though!
Packages:
NeosFusion
TASK: Correct `DoctrineProxy import in AssetController <https://github.com/neos/neos-development-collection/pull/4854>`_
The old import was deprecated with doctrine/persistence:1.3 and one should use Doctrine\Persistence\Proxy instead:
https://github.com/greg0ire/persistence/blob/da3b167cde5c029d7941941c635879524d6e1484/lib/Doctrine/Common/Persistence/Proxy.php#L26
slack -> https://neos-project.slack.com/archives/C04PYL8H3/p1705607919309889
Packages:
NeosMedia.Browser
TASK: Removes neos/neos-setup
Summary:
When attempting to install Neos version 8.3 using the command composer create-project neos/neos-development-distribution neos-development 8.3.x-dev --keep-vcs, the installation results in the neos-setup (version 1.x) being installed. The neos/cli-setup tool has been removed and the default command ./flow welcome is still called. But the command is no longer available due to the absence of the CLI setup tool. Consequently, the setup process is not possible as the recommended command is missing.
We remove the dependency from the development collection and adds the neos/neos-setup in the latest version to the neos-development-distribution
Packages:
Neos
TASK: Use role label in list users/new user view if available
In Neos 7 (and with https://github.com/neos/flow-development-collection/issues/2162), role labels were introduced. While we now have a nice table view in the “edit account” view, the role label is not displayed anywhere else.
I’m aware that Neos 7 and 8 are in maintenance-only mode, but I think we all agree that Neos 8 will be around for quite a while. I suggest the minimal change to use the role label in the user list and the “new user” view if there is one.
[N/A] Code follows the PSR-2 coding style
[N/A] Tests have been created, run and adjusted as needed
[x] The PR is created against the lowest maintained branch
[x] Reviewer - PR Title is brief but complete and starts with
FEATURE|TASK|BUGFIX[x] Reviewer - The first section explains the change briefly for change-logs
[N/A] Reviewer - Breaking Changes are marked with
!!!and have upgrade-instructions
Packages:
Neos
TASK: Add PHP 8.3 to build workflow matrix
This will test Flow against PHP 8.3
Packages:
Neos.github
TASK: Fusion Behat Test Make Sure To Throw Runtime Exceptions
Additional fix for https://github.com/neos/neos-development-collection/pull/4686
Instead of manually declaring @exceptionHandler we set it automatically for the entry point ;) This will help us detect exceptions which would otherwise be absorbed.
Dont worry, this is only temporary and not at all needed with neos 9
Upgrade instructions
Packages:
Neos
TASK: Adjust neos/neos css build to work on apple silicon
Packages:
Neos
TASK: Add tests for FlowQuery `nextUntil, prevUntil, siblings and find <https://github.com/neos/neos-development-collection/pull/4702>`_
The tests of nextUntil, prevUntil, siblings and find that were still missing.
Upgrade instructions
Packages:
Neos
TASK: Add behat tests for flowQuery cr operations
This should help to ensure that the behvior of flowQuery stays compatible with Neos 9.
Packages:
Neos
TASK: Add support information to package composer.json
The git url will be useful for automating the split configuration later.
Packages:
NeosMedia
TASK: 2nd fixup for PR #4641 ContentCollection.feature
see #4641
Upgrade instructions
Packages:
Neos
TASK: Tweak dependency on neos/twitter-bootstrap
move the dependency from
neos/neostoneos/media-browserchange from
*to^3.0.6(the first version allowing Neos 7.x)
Packages:
NeosMedia.Browser
TASK: All dependencies within collection point to `self.version <https://github.com/neos/neos-development-collection/pull/4666>`_
Re-adjusts dependencies to point to self.version for easier maintenance.
Fixes: #4257
Packages:
Neos
TASK: Behat-based Fusion tests (v1)
Related: #3594
Packages:
Neos
TASK: Fix documentation builds
… by pinning updated dependencies.
Review instructions
Best is to see if the builds succeed on RTD again with this merged…
Packages:
NeosMedia
TASK: Fix paths for Neos.Media RTD rendering setup
The paths need to be from the repo root, not relative to the .readthedocs.yaml file (it seems).
Packages:
NeosMedia
TASK: Add configuration files for RTD
This add .readthedocs.yaml files for the collection (handling Neos.Neos) and for neos.Media, to solve failing documentation rendering.
Review instructions
This can be compared to the configuration we have in place for Neos.Flow in the Flow development collection.
Packages:
Media
TASK: Avoid potential deprecation warnings
trim() and preg_match() expect strings, but Eel with it’s loose typing might pass in different types.
Packages:
NeosFusion
TASK: add default value for generatorName at kickstart command in SiteKickstarter
We tried to reproduce #4053. We can’t reproduce this issue, but while reproducing we found a flow command prompt, without a default value.
The command flow kickstart:site AnySite.Site asks for a site generator.
We added a default value by adding:
`php
array_key_first($selection)
`
Review instructions
At https://github.com/neos/neos-development-collection/blob/`79dd4e1a26b7ffceb80cc628fdbe570ff6013b16 <https://github.com/neos/neos-development-collection/commit/79dd4e1a26b7ffceb80cc628fdbe570ff6013b16>``_/Neos.CliSetup/Classes/Command/SetupCommandController.php#L165 array_key_last is used. Should we use array_key_last too or is ``array_key_first` fine for it?
Packages:
SiteKickstarter
TASK: PHP 8.1 deprecations compatibility
This tweaks the code so that it runs without deprecations on PHP 8.1.
Upgrade instructions
None.
Review instructions
None.
Packages:
FusionNeos
TASK: Change variablename in Neos Fusion documentation
Now use “myString” in documentation, because the return value is a string and not an array. This can lead to confusion under certain circumstances.
Upgrade instructions
Packages:
Neos
TASK: Adjust link editor documentation
Tiny mistake in link editor documentation: To refer to another node type the reference property type is used, not the reference node type.
Packages:
Neos
TASK: Require all collection packages as self.version
Any dependency from one package in the collection to another should always be “to the same version”.
This changes makes sure this is the case by using self.version as the required version.
See #4257
Upgrade instructions
Packages:
NeosFusion.AfxNodeTypes.AssetListNodeTypes.BaseMixinsNodeTypes.ColumnLayoutsNodeTypes.ContentReferencesNodeTypes.FormNodeTypes.HtmlNodeTypes.Navigation
TASK: Apply fixes from StyleCI
This pull request applies code style fixes from an analysis carried out by StyleCI.
—
For more information, click here.
Packages:
NeosContentRepositoryFusion.AfxFusionMediaSiteKickstarter
DOCS: Fix indentation of ImageEditor options
Packages:
Neos