99use Sylius \Bundle \ResourceBundle \SyliusResourceBundle ;
1010use Symfony \Component \Config \FileLocator ;
1111use Symfony \Component \DependencyInjection \ContainerBuilder ;
12+ use Symfony \Component \DependencyInjection \Extension \PrependExtensionInterface ;
1213use Symfony \Component \DependencyInjection \Loader \XmlFileLoader ;
1314use Symfony \Component \HttpKernel \Bundle \BundleInterface ;
1415
15- final class SetonoSyliusConversionAttributionExtension extends AbstractResourceExtension
16+ final class SetonoSyliusConversionAttributionExtension extends AbstractResourceExtension implements PrependExtensionInterface
1617{
1718 public function load (array $ configs , ContainerBuilder $ container ): void
1819 {
@@ -29,48 +30,10 @@ public function load(array $configs, ContainerBuilder $container): void
2930 $ config = $ this ->processConfiguration ($ this ->getConfiguration ([], $ container ), $ configs );
3031 $ loader = new XmlFileLoader ($ container , new FileLocator (__DIR__ . '/../Resources/config ' ));
3132
32- $ queryParameters = array_merge_recursive ([
33- 'facebook ' => [
34- 'matches ' => ['fbclid ' ], 'source ' => 'facebook.com ' , 'medium ' => 'cpc ' ,
35- ],
36- 'google ' => [
37- 'matches ' => ['gclid ' , 'gbraid ' , 'wbraid ' ], 'source ' => 'google ' , 'medium ' => 'cpc ' ,
38- ],
39- 'microsoft ' => [
40- 'matches ' => ['msclkid ' ], 'source ' => 'bing ' , 'medium ' => 'cpc ' ,
41- ],
42- 'generic ' => [
43- 'matches ' => ['source ' , 'ref ' ],
44- ],
45- 'tiktok ' => [
46- 'matches ' => ['ttclid ' ], 'source ' => 'tiktok ' , 'medium ' => 'cpc ' ,
47- ],
48- 'x ' => [
49- 'matches ' => ['twclid ' ], 'source ' => 'x ' , 'medium ' => 'cpc ' ,
50- ],
51- ], $ config ['query_parameters ' ]);
52- $ queryParameters = array_filter ($ queryParameters , static function (array $ queryParameter ): bool {
53- return !array_key_exists ('enabled ' , $ queryParameter ) || true === $ queryParameter ['enabled ' ];
54- });
55- $ queryParameters = array_map (
56- /** @param array{matches: list<string>, source?: list<string|null>|string|null, medium?: list<string|null>|string|null, campaign?: list<string|null>|string|null, enabled?: bool} $queryParameter */
57- static function (array $ queryParameter ): array {
58- unset($ queryParameter ['enabled ' ]);
59-
60- $ queryParameter ['matches ' ] = array_values (array_unique ($ queryParameter ['matches ' ]));
61-
62- // Because array_merge_recursive will merge associative keys by creating a new array, we will turn it back into a string
63- $ queryParameter ['source ' ] = self ::firstValue ($ queryParameter ['source ' ] ?? null );
64- $ queryParameter ['medium ' ] = self ::firstValue ($ queryParameter ['medium ' ] ?? null );
65- $ queryParameter ['campaign ' ] = self ::firstValue ($ queryParameter ['campaign ' ] ?? null );
66-
67- return $ queryParameter ;
68- },
69- $ queryParameters ,
70- );
71-
7233 $ container ->setParameter ('setono_sylius_conversion_attribution.javascript.enabled ' , $ config ['javascript ' ]['enabled ' ]);
73- $ container ->setParameter ('setono_sylius_conversion_attribution.query_parameters ' , $ queryParameters );
34+ $ container ->setParameter ('setono_sylius_conversion_attribution.query_parameters ' , array_filter ($ config ['query_parameters ' ], static function (array $ queryParameter ): bool {
35+ return !array_key_exists ('enabled ' , $ queryParameter ) || true === $ queryParameter ['enabled ' ];
36+ }));
7437 $ container ->setParameter ('setono_sylius_conversion_attribution.session_timeout ' , $ config ['session_timeout ' ]);
7538 $ container ->setParameter ('setono_sylius_conversion_attribution.referrers.cache.file ' , '%kernel.cache_dir%/referrers.php ' );
7639
@@ -114,18 +77,29 @@ private static function bundleEnabled(ContainerBuilder $container, string $bundl
11477 return isset ($ bundles [$ bundle ->getName ()]);
11578 }
11679
117- /**
118- * @param string|list<string|null>|null $value
119- */
120- private static function firstValue (null |string |array $ value ): ?string
80+ public function prepend (ContainerBuilder $ container ): void
12181 {
122- $ array = (array ) $ value ;
123- foreach ($ array as $ item ) {
124- if (null !== $ item ) {
125- return $ item ;
126- }
127- }
128-
129- return null ;
82+ $ container ->prependExtensionConfig ('setono_sylius_conversion_attribution ' , [
83+ 'query_parameters ' => [
84+ 'facebook ' => [
85+ 'matches ' => ['fbclid ' ], 'source ' => 'facebook.com ' , 'medium ' => 'cpc ' ,
86+ ],
87+ 'google ' => [
88+ 'matches ' => ['gclid ' , 'gbraid ' , 'wbraid ' ], 'source ' => 'google ' , 'medium ' => 'cpc ' ,
89+ ],
90+ 'microsoft ' => [
91+ 'matches ' => ['msclkid ' ], 'source ' => 'bing ' , 'medium ' => 'cpc ' ,
92+ ],
93+ 'generic ' => [
94+ 'matches ' => ['source ' , 'ref ' ],
95+ ],
96+ 'tiktok ' => [
97+ 'matches ' => ['ttclid ' ], 'source ' => 'tiktok ' , 'medium ' => 'cpc ' ,
98+ ],
99+ 'x ' => [
100+ 'matches ' => ['twclid ' ], 'source ' => 'x ' , 'medium ' => 'cpc ' ,
101+ ],
102+ ],
103+ ]);
130104 }
131105}
0 commit comments