@@ -41,6 +41,10 @@ class ConfigurableAsyncWriter implements
41
41
42
42
private $ variants = [];
43
43
44
+ private $ origins = [];
45
+
46
+ private $ models = [];
47
+
44
48
public function __construct (
45
49
MessageProducerInterface $ messageProducer ,
46
50
DoctrineHelper $ doctrineHelper ,
@@ -56,6 +60,8 @@ public function __construct(
56
60
public function initialize ()
57
61
{
58
62
$ this ->variants = [];
63
+ $ this ->origins = [];
64
+ $ this ->models = [];
59
65
60
66
$ this ->additionalOptionalListenerManager ->disableListeners ();
61
67
$ this ->optionalListenerManager ->disableListeners ($ this ->optionalListenerManager ->getListeners ());
@@ -64,39 +70,57 @@ public function initialize()
64
70
public function write (array $ items )
65
71
{
66
72
foreach ($ items as $ item ) {
73
+ $ origin = $ item ['origin ' ];
67
74
$ sku = $ item ['sku ' ];
68
75
69
- if (!empty ($ item ['family_variant ' ])) {
70
- if (isset ($ item ['parent ' ], $ this ->variants [$ sku ])) {
71
- $ parent = $ item ['parent ' ];
72
- foreach (array_keys ($ this ->variants [$ sku ]) as $ sku ) {
73
- $ this ->variants [$ parent ][$ sku ] = ['parent ' => $ parent , 'variant ' => $ sku ];
74
- }
76
+ if (isset ($ item ['family_variant ' ])) {
77
+ $ this ->origins [$ origin ] = $ sku ;
78
+
79
+ if (isset ($ item ['parent ' ])) {
80
+ $ this ->models [$ origin ] = $ item ['parent ' ];
75
81
}
76
82
77
83
continue ;
78
84
}
79
85
80
- if (empty ($ item ['parent ' ])) {
86
+ if (! isset ($ item ['parent ' ])) {
81
87
continue ;
82
88
}
83
89
84
90
$ parent = $ item ['parent ' ];
91
+ if (!array_key_exists ($ parent , $ this ->origins )) {
92
+ continue ;
93
+ }
85
94
86
- $ this ->variants [$ parent ][$ sku ] = ['parent ' => $ parent , 'variant ' => $ sku ];
95
+ $ this ->variants [$ parent ][$ origin ] = [
96
+ 'parent ' => $ this ->origins [$ parent ] ?? $ parent ,
97
+ 'variant ' => $ sku ,
98
+ 'enabled ' => $ item ['enabled ' ] ?? false ,
99
+ ];
87
100
}
88
101
}
89
102
90
103
public function close ()
91
104
{
92
105
$ this ->variants = [];
106
+ $ this ->origins = [];
107
+ $ this ->models = [];
93
108
94
109
$ this ->optionalListenerManager ->enableListeners ($ this ->optionalListenerManager ->getListeners ());
95
110
$ this ->additionalOptionalListenerManager ->enableListeners ();
96
111
}
97
112
98
113
public function flush ()
99
114
{
115
+ foreach ($ this ->models as $ levelTwo => $ levelOne ) {
116
+ if (array_key_exists ($ levelTwo , $ this ->variants )) {
117
+ foreach ($ this ->variants [$ levelTwo ] as $ sku => $ item ) {
118
+ $ item ['parent ' ] = $ this ->origins [$ levelOne ] ?? $ levelOne ;
119
+ $ this ->variants [$ levelOne ][$ sku ] = $ item ;
120
+ }
121
+ }
122
+ }
123
+
100
124
$ channelId = $ this ->stepExecution ->getJobExecution ()->getExecutionContext ()->get ('channel ' );
101
125
102
126
$ chunks = array_chunk ($ this ->variants , self ::VARIANTS_BATCH_SIZE , true );
0 commit comments