2020use CoreShop \Bundle \AddressBundle \CoreShopAddressBundle ;
2121use CoreShop \Bundle \ClassDefinitionPatchBundle \CoreShopClassDefinitionPatchBundle ;
2222use CoreShop \Bundle \ConfigurationBundle \CoreShopConfigurationBundle ;
23- use CoreShop \Bundle \StudioFormBundle \CoreShopStudioFormBundle ;
2423use CoreShop \Bundle \CoreBundle \DependencyInjection \Compiler \RegisterIndexProductExtensionPass ;
2524use CoreShop \Bundle \CoreBundle \DependencyInjection \Compiler \RegisterPortletsPass ;
2625use CoreShop \Bundle \CoreBundle \DependencyInjection \Compiler \RegisterReportsPass ;
2726use CoreShop \Bundle \ProductQuantityPriceRulesBundle \DependencyInjection \Compiler \ProductQuantityPriceRulesActionPass ;
2827use CoreShop \Bundle \ProductQuantityPriceRulesBundle \DependencyInjection \Compiler \ProductQuantityPriceRulesConditionPass ;
29- use CoreShop \Bundle \StudioFormBundle \DependencyInjection \Compiler \RegisterFormTypesFromTagsPass ;
3028use CoreShop \Bundle \CurrencyBundle \CoreShopCurrencyBundle ;
3129use CoreShop \Bundle \CustomerBundle \CoreShopCustomerBundle ;
3230use CoreShop \Bundle \IndexBundle \CoreShopIndexBundle ;
5250use Doctrine \Bundle \FixturesBundle \DoctrineFixturesBundle ;
5351use Pimcore \Bundle \CustomReportsBundle \PimcoreCustomReportsBundle ;
5452use Pimcore \HttpKernel \BundleCollection \BundleCollection ;
53+ use Symfony \Component \DependencyInjection \Compiler \CompilerPassInterface ;
5554use Symfony \Component \DependencyInjection \ContainerBuilder ;
55+ use Symfony \Component \HttpKernel \Bundle \BundleInterface ;
5656
5757final class CoreShopCoreBundle extends AbstractResourceBundle
5858{
@@ -70,8 +70,12 @@ public function build(ContainerBuilder $container): void
7070 $ container ->addCompilerPass (new RegisterIndexProductExtensionPass ());
7171 $ container ->addCompilerPass (new RegisterReportsPass ());
7272 $ container ->addCompilerPass (new RegisterPortletsPass ());
73- $ container ->addCompilerPass (new RegisterFormTypesFromTagsPass (ProductQuantityPriceRulesConditionPass::PRODUCT_QUANTITY_PRICE_RULE_CONDITION_TAG ));
74- $ container ->addCompilerPass (new RegisterFormTypesFromTagsPass (ProductQuantityPriceRulesActionPass::PRODUCT_QUANTITY_PRICE_RULE_ACTION_TAG ));
73+
74+ $ registerFormTypesFromTagsPassClass = self ::getRegisterFormTypesFromTagsPassClass ();
75+ if (null !== $ registerFormTypesFromTagsPassClass ) {
76+ $ container ->addCompilerPass (new $ registerFormTypesFromTagsPassClass (ProductQuantityPriceRulesConditionPass::PRODUCT_QUANTITY_PRICE_RULE_CONDITION_TAG ));
77+ $ container ->addCompilerPass (new $ registerFormTypesFromTagsPassClass (ProductQuantityPriceRulesActionPass::PRODUCT_QUANTITY_PRICE_RULE_ACTION_TAG ));
78+ }
7579 }
7680
7781 public static function registerDependentBundles (BundleCollection $ collection ): void
@@ -102,7 +106,14 @@ public static function registerDependentBundles(BundleCollection $collection): v
102106 $ collection ->addBundle (new CoreShopProductQuantityPriceRulesBundle (), 1600 );
103107 $ collection ->addBundle (new CoreShopWishlistBundle (), 1500 );
104108 $ collection ->addBundle (new CoreShopClassDefinitionPatchBundle (), 1400 );
105- $ collection ->addBundle (new CoreShopStudioFormBundle (), 3900 );
109+
110+ if (self ::isStudioUiBundleAvailable ()) {
111+ $ studioFormBundleClass = self ::getStudioFormBundleClass ();
112+ if (null !== $ studioFormBundleClass ) {
113+ $ collection ->addBundle (new $ studioFormBundleClass (), 3900 );
114+ }
115+ }
116+
106117 $ collection ->addBundle (new PimcoreCustomReportsBundle (), 20000 );
107118 }
108119
@@ -155,4 +166,41 @@ public function getEditmodeCssPaths(): array
155166 {
156167 return [];
157168 }
169+
170+ private static function isStudioUiBundleAvailable (): bool
171+ {
172+ $ studioUiBundleClass = sprintf ('Pimcore \\Bundle \\%s \\PimcoreStudioUiBundle ' , 'StudioUiBundle ' );
173+
174+ return class_exists ($ studioUiBundleClass ) && is_subclass_of ($ studioUiBundleClass , BundleInterface::class);
175+ }
176+
177+ /**
178+ * @return class-string<BundleInterface>|null
179+ */
180+ private static function getStudioFormBundleClass (): ?string
181+ {
182+ $ studioFormBundleClass = sprintf ('CoreShop \\Bundle \\%s \\CoreShopStudioFormBundle ' , 'StudioFormBundle ' );
183+ if (!class_exists ($ studioFormBundleClass ) || !is_subclass_of ($ studioFormBundleClass , BundleInterface::class)) {
184+ return null ;
185+ }
186+
187+ return $ studioFormBundleClass ;
188+ }
189+
190+ /**
191+ * @return class-string<CompilerPassInterface>|null
192+ */
193+ private static function getRegisterFormTypesFromTagsPassClass (): ?string
194+ {
195+ $ registerFormTypesFromTagsPassClass = sprintf (
196+ 'CoreShop \\Bundle \\%s \\DependencyInjection \\Compiler \\RegisterFormTypesFromTagsPass ' ,
197+ 'StudioFormBundle ' ,
198+ );
199+
200+ if (!class_exists ($ registerFormTypesFromTagsPassClass ) || !is_subclass_of ($ registerFormTypesFromTagsPassClass , CompilerPassInterface::class)) {
201+ return null ;
202+ }
203+
204+ return $ registerFormTypesFromTagsPassClass ;
205+ }
158206}
0 commit comments