3
3
* Copyright © Magento, Inc. All rights reserved.
4
4
* See COPYING.txt for license details.
5
5
*/
6
+
6
7
namespace Magento \ProductVideo \Model \Plugin \Catalog \Product \Gallery ;
7
8
8
9
use Magento \ProductVideo \Model \Product \Attribute \Media \ExternalVideoEntryConverter ;
@@ -29,14 +30,15 @@ public function beforeExecute(
29
30
\Magento \Catalog \Model \Product $ product ,
30
31
array $ arguments = []
31
32
) {
33
+ /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
32
34
$ attribute = $ mediaGalleryCreateHandler ->getAttribute ();
33
35
$ mediaCollection = $ this ->getMediaEntriesDataCollection ($ product , $ attribute );
34
36
if (!empty ($ mediaCollection )) {
35
37
$ storeDataCollection = $ this ->loadStoreViewVideoData ($ mediaCollection , $ product ->getStoreId ());
36
38
$ mediaCollection = $ this ->addAdditionalStoreData ($ mediaCollection , $ storeDataCollection );
37
39
$ product ->setData (
38
40
$ attribute ->getAttributeCode (),
39
- $ mediaCollection + $ product -> getData ( $ attribute -> getAttributeCode ())
41
+ $ mediaCollection
40
42
);
41
43
}
42
44
}
@@ -56,6 +58,9 @@ public function afterExecute(
56
58
);
57
59
58
60
if (!empty ($ mediaCollection )) {
61
+ $ newVideoCollection = $ this ->collectNewVideos ($ mediaCollection );
62
+ $ this ->saveVideoData ($ newVideoCollection , 0 );
63
+
59
64
$ videoDataCollection = $ this ->collectVideoData ($ mediaCollection );
60
65
$ this ->saveVideoData ($ videoDataCollection , $ product ->getStoreId ());
61
66
$ this ->saveAdditionalStoreData ($ videoDataCollection );
@@ -167,10 +172,7 @@ protected function collectVideoData(array $mediaCollection)
167
172
{
168
173
$ videoDataCollection = [];
169
174
foreach ($ mediaCollection as $ item ) {
170
- if (!empty ($ item ['media_type ' ])
171
- && empty ($ item ['removed ' ])
172
- && $ item ['media_type ' ] == ExternalVideoEntryConverter::MEDIA_TYPE_CODE
173
- ) {
175
+ if ($ this ->isVideoItem ($ item )) {
174
176
$ videoData = $ this ->extractVideoDataFromRowData ($ item );
175
177
$ videoDataCollection [] = $ videoData ;
176
178
}
@@ -199,11 +201,7 @@ protected function collectVideoEntriesIdsToAdditionalLoad(array $mediaCollection
199
201
{
200
202
$ ids = [];
201
203
foreach ($ mediaCollection as $ item ) {
202
- if (!empty ($ item ['media_type ' ])
203
- && empty ($ item ['removed ' ])
204
- && $ item ['media_type ' ] == ExternalVideoEntryConverter::MEDIA_TYPE_CODE
205
- && isset ($ item ['save_data_from ' ])
206
- ) {
204
+ if ($ this ->isVideoItem ($ item ) && isset ($ item ['save_data_from ' ])) {
207
205
$ ids [] = $ item ['save_data_from ' ];
208
206
}
209
207
}
@@ -215,26 +213,27 @@ protected function collectVideoEntriesIdsToAdditionalLoad(array $mediaCollection
215
213
* @param array $data
216
214
* @return array
217
215
*/
218
- protected function addAdditionalStoreData (array $ mediaCollection , array $ data )
216
+ protected function addAdditionalStoreData (array $ mediaCollection , array $ data ): array
219
217
{
220
- foreach ($ mediaCollection as &$ mediaItem ) {
218
+ $ return = [];
219
+ foreach ($ mediaCollection as $ key => $ mediaItem ) {
221
220
if (!empty ($ mediaItem ['save_data_from ' ])) {
222
221
$ additionalData = $ this ->createAdditionalStoreDataCollection ($ data , $ mediaItem ['save_data_from ' ]);
223
222
if (!empty ($ additionalData )) {
224
223
$ mediaItem [self ::ADDITIONAL_STORE_DATA_KEY ] = $ additionalData ;
225
224
}
226
225
}
226
+ $ return [$ key ] = $ mediaItem ;
227
227
}
228
-
229
- return ['images ' => $ mediaCollection ];
228
+ return ['images ' => $ return ];
230
229
}
231
230
232
231
/**
233
232
* @param array $storeData
234
233
* @param int $valueId
235
234
* @return array
236
235
*/
237
- protected function createAdditionalStoreDataCollection (array $ storeData , $ valueId )
236
+ protected function createAdditionalStoreDataCollection (array $ storeData , $ valueId ): array
238
237
{
239
238
$ result = [];
240
239
foreach ($ storeData as $ item ) {
@@ -246,4 +245,41 @@ protected function createAdditionalStoreDataCollection(array $storeData, $valueI
246
245
247
246
return $ result ;
248
247
}
248
+
249
+ /**
250
+ * @param array $mediaCollection
251
+ * @return array
252
+ */
253
+ private function collectNewVideos (array $ mediaCollection ): array
254
+ {
255
+ $ return = [];
256
+ foreach ($ mediaCollection as $ item ) {
257
+ if ($ this ->isVideoItem ($ item ) && $ this ->isNewVideo ($ item )) {
258
+ $ return [] = $ this ->extractVideoDataFromRowData ($ item );
259
+ }
260
+ }
261
+ return $ return ;
262
+ }
263
+
264
+ /**
265
+ * @param array $item
266
+ * @return bool
267
+ */
268
+ private function isVideoItem (array $ item ): bool
269
+ {
270
+ return !empty ($ item ['media_type ' ])
271
+ && empty ($ item ['removed ' ])
272
+ && $ item ['media_type ' ] == ExternalVideoEntryConverter::MEDIA_TYPE_CODE ;
273
+ }
274
+
275
+ /**
276
+ * @param array $item
277
+ * @return bool
278
+ */
279
+ private function isNewVideo (array $ item ): bool
280
+ {
281
+ return !isset ($ item ['video_url_default ' ], $ item ['video_title_default ' ])
282
+ || empty ($ item ['video_url_default ' ])
283
+ || empty ($ item ['video_title_default ' ]);
284
+ }
249
285
}
0 commit comments