flowpack / flowpack.neos.assetusage Goto Github PK
View Code? Open in Web Editor NEWProvides a fast asset usage calculation implemenation for Neos CMS
License: GNU General Public License v3.0
Provides a fast asset usage calculation implemenation for Neos CMS
License: GNU General Public License v3.0
When an asset is linked in a text property its usage is currently not registered
Looking at the code, only assets used in actual asset properties are added to the usage index.
Properties of type array<Neos\Media\Domain\Model\ImageInterface>
or CustomAssetType
are ignored.
More importantly, assets referenced in string
properties (via asset://<uuid>
) are ignored as well.
The original \Neos\Neos\Domain\Strategy\AssetUsageInNodePropertiesStrategy
does that more reliably.
I would suggest to use the original mechanism to determine usages (using \Neos\ContentRepository\Domain\Repository\NodeDataRepository::findNodesByPathPrefixAndRelatedEntities()
) if that's not too slow
Got this feedback from a customer:
When deleting an item, the usages are displayed incorrectly for documents in Media Management.
Procedure:
I can't publish a node because the $targetPropertyValue
was null
Exception in line 146 of /tmp/Production/SubContextDocker/Cache/Code/Flow_Object_Classes/Neos_Flow_Persistence_Doctrine_PersistenceManager.php: property_exists(): Argument #1 ($object_or_class) must be of type object|string, null given
80 property_exists(NULL, "Persistence_Object_Identifier")
79 Neos\Flow\Persistence\Doctrine\PersistenceManager_Original::getIdentifierByObject(NULL)
78 Flowpack\Neos\AssetUsage\Service\AssetIntegrationService_Original::resolveOriginalAssetIdentifier(NULL)
77 Flowpack\Neos\AssetUsage\Service\AssetIntegrationService_Original::unregisterUsageInNode(Neos\ContentRepository\Domain\Model\Node, NULL, false)
76 Flowpack\Neos\AssetUsage\Service\AssetIntegrationService_Original::beforeNodePublishing(Neos\ContentRepository\Domain\Model\Node, Neos\Flow\Persistence\Doctrine\Proxies\__CG__\Neos\ContentRepository\Domain\Model\Workspace, "Neos\ContentRepository\Domain\Model\Workspace::beforeNodePublishing")
75 call_user_func_array(array|2|, array|3|)
74 Neos\Flow\SignalSlot\Dispatcher::dispatch("Neos\ContentRepository\Domain\Model\Workspace", "beforeNodePublishing", array|2|)
73 Neos\Flow\SignalSlot\SignalAspect_Original::forwardSignalToDispatcher(Neos\Flow\Aop\JoinPoint)
72 Neos\Flow\Aop\Advice\AbstractAdvice::invoke(Neos\Flow\Aop\JoinPoint)
71 Neos\ContentRepository\Domain\Model\Workspace::emitBeforeNodePublishing(Neos\ContentRepository\Domain\Model\Node, Neos\Flow\Persistence\Doctrine\Proxies\__CG__\Neos\ContentRepository\Domain\Model\Workspace)
70 Neos\ContentRepository\Domain\Model\Workspace_Original::publishNode(Neos\ContentRepository\Domain\Model\Node, Neos\Flow\Persistence\Doctrine\Proxies\__CG__\Neos\ContentRepository\Domain\Model\Workspace)
69 Neos\ContentRepository\Domain\Model\Workspace::publishNode(Neos\ContentRepository\Domain\Model\Node, Neos\Flow\Persistence\Doctrine\Proxies\__CG__\Neos\ContentRepository\Domain\Model\Workspace)
68 Neos\ContentRepository\Domain\Model\Workspace::Flow_Aop_Proxy_invokeJoinPoint(Neos\Flow\Aop\JoinPoint)
67 Neos\Flow\Aop\Advice\AdviceChain::proceed(Neos\Flow\Aop\JoinPoint)
66 Neos\Flow\Security\Aspect\PolicyEnforcementAspect_Original::enforcePolicy(Neos\Flow\Aop\JoinPoint)
65 Neos\Flow\Aop\Advice\AroundAdvice::invoke(Neos\Flow\Aop\JoinPoint)
64 Neos\Flow\Aop\Advice\AdviceChain::proceed(Neos\Flow\Aop\JoinPoint)
63 Neos\ContentRepository\Domain\Model\Workspace::publishNode(Neos\ContentRepository\Domain\Model\Node, Neos\Flow\Persistence\Doctrine\Proxies\__CG__\Neos\ContentRepository\Domain\Model\Workspace)
62 Neos\ContentRepository\Domain\Model\Workspace_Original::publishNodes(array|1|, Neos\Flow\Persistence\Doctrine\Proxies\__CG__\Neos\ContentRepository\Domain\Model\Workspace)
61 Neos\ContentRepository\Domain\Model\Workspace::publishNodes(array|1|, Neos\Flow\Persistence\Doctrine\Proxies\__CG__\Neos\ContentRepository\Domain\Model\Workspace)
60 Neos\ContentRepository\Domain\Model\Workspace::Flow_Aop_Proxy_invokeJoinPoint(Neos\Flow\Aop\JoinPoint)
59 Neos\Flow\Aop\Advice\AdviceChain::proceed(Neos\Flow\Aop\JoinPoint)
58 Neos\Flow\Security\Aspect\PolicyEnforcementAspect_Original::enforcePolicy(Neos\Flow\Aop\JoinPoint)
57 Neos\Flow\Aop\Advice\AroundAdvice::invoke(Neos\Flow\Aop\JoinPoint)
56 Neos\Flow\Aop\Advice\AdviceChain::proceed(Neos\Flow\Aop\JoinPoint)
55 Neos\ContentRepository\Domain\Model\Workspace::publishNodes(array|1|, Neos\Flow\Persistence\Doctrine\Proxies\__CG__\Neos\ContentRepository\Domain\Model\Workspace)
54 Neos\Neos\Service\PublishingService_Original::publishNode(Neos\ContentRepository\Domain\Model\Node)
53 Neos\Flow\ObjectManagement\DependencyInjection\DependencyProxy::__call("publishNode", array|1|)
52 Neos\Neos\Controller\Module\Management\WorkspacesController_Original::publishNodeAction(Neos\ContentRepository\Domain\Model\Node, Neos\ContentRepository\Domain\Model\Workspace)
51 Neos\Neos\Controller\Module\Management\WorkspacesController::publishNodeAction(Neos\ContentRepository\Domain\Model\Node, Neos\ContentRepository\Domain\Model\Workspace)
50 Neos\Neos\Controller\Module\Management\WorkspacesController::Flow_Aop_Proxy_invokeJoinPoint(Neos\Flow\Aop\JoinPoint)
49 Neos\Flow\Aop\Advice\AdviceChain::proceed(Neos\Flow\Aop\JoinPoint)
48 Neos\Flow\Security\Aspect\PolicyEnforcementAspect_Original::enforcePolicy(Neos\Flow\Aop\JoinPoint)
47 Neos\Flow\Aop\Advice\AroundAdvice::invoke(Neos\Flow\Aop\JoinPoint)
46 Neos\Flow\Aop\Advice\AdviceChain::proceed(Neos\Flow\Aop\JoinPoint)
45 Neos\Neos\Controller\Module\Management\WorkspacesController::publishNodeAction(Neos\ContentRepository\Domain\Model\Node, Neos\ContentRepository\Domain\Model\Workspace)
44 Neos\Flow\Mvc\Controller\ActionController_Original::callActionMethod()
43 Neos\Flow\Mvc\Controller\ActionController_Original::processRequest(Neos\Flow\Mvc\ActionRequest, Neos\Flow\Mvc\ActionResponse)
42 Neos\Flow\Mvc\Dispatcher_Original::initiateDispatchLoop(Neos\Flow\Mvc\ActionRequest, Neos\Flow\Mvc\ActionResponse)
41 Neos\Flow\Mvc\Dispatcher_Original::dispatch(Neos\Flow\Mvc\ActionRequest, Neos\Flow\Mvc\ActionResponse)
40 Neos\Neos\Controller\Backend\ModuleController_Original::indexAction(array|3|)
39 Neos\Neos\Controller\Backend\ModuleController::indexAction(array|3|)
38 Neos\Neos\Controller\Backend\ModuleController::Flow_Aop_Proxy_invokeJoinPoint(Neos\Flow\Aop\JoinPoint)
37 Neos\Flow\Aop\Advice\AdviceChain::proceed(Neos\Flow\Aop\JoinPoint)
36 Neos\Flow\Security\Aspect\PolicyEnforcementAspect_Original::enforcePolicy(Neos\Flow\Aop\JoinPoint)
35 Neos\Flow\Aop\Advice\AroundAdvice::invoke(Neos\Flow\Aop\JoinPoint)
34 Neos\Flow\Aop\Advice\AdviceChain::proceed(Neos\Flow\Aop\JoinPoint)
33 Neos\Neos\Controller\Backend\ModuleController::indexAction(array|3|)
32 Neos\Flow\Mvc\Controller\ActionController_Original::callActionMethod()
31 Neos\Flow\Mvc\Controller\ActionController_Original::processRequest(Neos\Flow\Mvc\ActionRequest, Neos\Flow\Mvc\ActionResponse)
30 Neos\Flow\Mvc\Dispatcher_Original::initiateDispatchLoop(Neos\Flow\Mvc\ActionRequest, Neos\Flow\Mvc\ActionResponse)
29 Neos\Flow\Mvc\Dispatcher_Original::dispatch(Neos\Flow\Mvc\ActionRequest, Neos\Flow\Mvc\ActionResponse)
28 Neos\Flow\Mvc\DispatchMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
27 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
26 Sitegeist\Slipstream\Middleware\SlipstreamMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
25 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
24 Neos\Flow\Http\Middleware\SecurityEntryPointMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
23 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
22 Neos\Flow\Http\Middleware\RequestBodyParsingMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
21 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
20 Neos\Flow\Mvc\FlashMessage\FlashMessageMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
19 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
18 Neos\Flow\Http\Middleware\PoweredByMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
17 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
16 Neos\RedirectHandler\RedirectMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
15 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
14 Neos\Flow\Mvc\Routing\RoutingMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
13 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
12 Neos\Neos\Routing\RequestUriHostMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
11 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
10 Neos\FluidAdaptor\Core\Widget\AjaxWidgetMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
9 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
8 Neos\Flow\Http\Middleware\SessionMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
7 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
6 Neos\Flow\Http\Middleware\TrustedProxiesMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
5 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
4 Neos\Flow\Http\Middleware\StandardsComplianceMiddleware_Original::process(GuzzleHttp\Psr7\ServerRequest, Neos\Flow\Http\Middleware\MiddlewaresChain)
3 Neos\Flow\Http\Middleware\MiddlewaresChain_Original::handle(GuzzleHttp\Psr7\ServerRequest)
2 Neos\Flow\Http\RequestHandler::handleRequest()
1 Neos\Flow\Core\Bootstrap::run()
UseCase:
If you are using neos/metadata-contentrepositoryadapter to add custom metadata information, all assets will at least have one usage count. That's because the metadata node type has a property linked to the asset. See: NodeTypes.AbstractMetaData.yaml
Possible Solution:
getAssetPropertyNamesForNodeType
and return empty property array if an excluded node type is processedFlowpack.Neos.AssetUsage/Classes/Service/AssetIntegrationService.php
Lines 101 to 118 in f0ddc68
The newest Version of Neos is currently not supported
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.