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