1818namespace TYPO3 \CMS \ContentBlocks \EventListener ;
1919
2020use TYPO3 \CMS \Backend \Controller \Event \ModifyNewContentElementWizardItemsEvent ;
21- use TYPO3 \CMS \ContentBlocks \Definition \ ContentType \ ContentType ;
21+ use TYPO3 \CMS \ContentBlocks \Loader \ LoadedContentBlock ;
2222use TYPO3 \CMS \ContentBlocks \Registry \ContentBlockRegistry ;
23+ use TYPO3 \CMS \ContentBlocks \SiteSet \ContentBlockSiteRegistry ;
2324use TYPO3 \CMS \Core \Attribute \AsEventListener ;
2425use TYPO3 \CMS \Core \Site \Entity \Site ;
25- use TYPO3 \CMS \Core \Site \Set \SetRegistry ;
2626
27+ /**
28+ * @internal
29+ */
2730#[AsEventListener('RestrictContentBlockInNewContentElementWizard ' )]
2831readonly class RestrictContentBlockInNewContentElementWizard
2932{
3033 public function __construct (
31- protected SetRegistry $ setRegistry ,
3234 protected ContentBlockRegistry $ contentBlockRegistry ,
35+ protected ContentBlockSiteRegistry $ contentBlockSiteRegistry ,
3336 ) {}
3437
3538 public function __invoke (ModifyNewContentElementWizardItemsEvent $ event ): void
3639 {
37- $ contentBlocks = $ this ->resolveContentBlocksRegisteredAsSiteSet ($ event );
40+ /** @var Site $site */
41+ $ site = $ event ->getRequest ()->getAttribute ('site ' );
42+ $ contentBlocks = $ this ->contentBlockSiteRegistry ->resolveContentBlocksRegisteredAsSiteSet ($ site );
3843 // If there is no Content Block registered as Site Set, allow all.
3944 if ($ contentBlocks === []) {
4045 return ;
4146 }
47+ $ contentBlockTypeNames = array_map (fn (LoadedContentBlock $ contentBlock ) => $ contentBlock ->getYaml ()['typeName ' ], $ contentBlocks );
4248 $ wizardItems = $ event ->getWizardItems ();
4349 foreach ($ wizardItems as $ identifier => $ item ) {
4450 $ typeName = $ item ['defaultValues ' ]['CType ' ] ?? null ;
@@ -48,32 +54,11 @@ public function __invoke(ModifyNewContentElementWizardItemsEvent $event): void
4854 if ($ this ->contentBlockRegistry ->getByTypeName ('tt_content ' , $ typeName ) === null ) {
4955 continue ;
5056 }
51- if (in_array ($ typeName , $ contentBlocks , true )) {
57+ if (in_array ($ typeName , $ contentBlockTypeNames , true )) {
5258 continue ;
5359 }
5460 unset($ wizardItems [$ identifier ]);
5561 }
5662 $ event ->setWizardItems ($ wizardItems );
5763 }
58-
59- /**
60- * @return array<string>
61- */
62- protected function resolveContentBlocksRegisteredAsSiteSet (ModifyNewContentElementWizardItemsEvent $ event ): array
63- {
64- $ registeredContentBlocksTypeNames = [];
65- /** @var Site $site */
66- $ site = $ event ->getRequest ()->getAttribute ('site ' );
67- $ siteSets = $ this ->setRegistry ->getSets (...$ site ->getSets ());
68- foreach ($ siteSets as $ siteSet ) {
69- if ($ this ->contentBlockRegistry ->hasContentBlock ($ siteSet ->name )) {
70- $ contentBlock = $ this ->contentBlockRegistry ->getContentBlock ($ siteSet ->name );
71- if ($ contentBlock ->getContentType () !== ContentType::CONTENT_ELEMENT ) {
72- continue ;
73- }
74- $ registeredContentBlocksTypeNames [] = $ contentBlock ->getYaml ()['typeName ' ];
75- }
76- }
77- return $ registeredContentBlocksTypeNames ;
78- }
7964}
0 commit comments