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,10 @@ public function afterExecute(
56
58
);
57
59
58
60
if (!empty ($ mediaCollection )) {
61
+ $ newVideoCollection = $ this ->collectNewVideos ($ mediaCollection );
62
+ $ this ->saveVideoData ($ newVideoCollection , 0 );
63
+ $ this ->saveAdditionalStoreData ($ newVideoCollection );
64
+
59
65
$ videoDataCollection = $ this ->collectVideoData ($ mediaCollection );
60
66
$ this ->saveVideoData ($ videoDataCollection , $ product ->getStoreId ());
61
67
$ this ->saveAdditionalStoreData ($ videoDataCollection );
@@ -167,10 +173,7 @@ protected function collectVideoData(array $mediaCollection)
167
173
{
168
174
$ videoDataCollection = [];
169
175
foreach ($ mediaCollection as $ item ) {
170
- if (!empty ($ item ['media_type ' ])
171
- && empty ($ item ['removed ' ])
172
- && $ item ['media_type ' ] == ExternalVideoEntryConverter::MEDIA_TYPE_CODE
173
- ) {
176
+ if ($ this ->isVideoItem ($ item )) {
174
177
$ videoData = $ this ->extractVideoDataFromRowData ($ item );
175
178
$ videoDataCollection [] = $ videoData ;
176
179
}
@@ -199,11 +202,7 @@ protected function collectVideoEntriesIdsToAdditionalLoad(array $mediaCollection
199
202
{
200
203
$ ids = [];
201
204
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
- ) {
205
+ if ($ this ->isVideoItem ($ item ) && isset ($ item ['save_data_from ' ])) {
207
206
$ ids [] = $ item ['save_data_from ' ];
208
207
}
209
208
}
@@ -215,26 +214,27 @@ protected function collectVideoEntriesIdsToAdditionalLoad(array $mediaCollection
215
214
* @param array $data
216
215
* @return array
217
216
*/
218
- protected function addAdditionalStoreData (array $ mediaCollection , array $ data )
217
+ protected function addAdditionalStoreData (array $ mediaCollection , array $ data ): array
219
218
{
220
- foreach ($ mediaCollection as &$ mediaItem ) {
219
+ $ return = [];
220
+ foreach ($ mediaCollection as $ key => $ mediaItem ) {
221
221
if (!empty ($ mediaItem ['save_data_from ' ])) {
222
222
$ additionalData = $ this ->createAdditionalStoreDataCollection ($ data , $ mediaItem ['save_data_from ' ]);
223
223
if (!empty ($ additionalData )) {
224
224
$ mediaItem [self ::ADDITIONAL_STORE_DATA_KEY ] = $ additionalData ;
225
225
}
226
226
}
227
+ $ return [$ key ] = $ mediaItem ;
227
228
}
228
-
229
- return ['images ' => $ mediaCollection ];
229
+ return ['images ' => $ return ];
230
230
}
231
231
232
232
/**
233
233
* @param array $storeData
234
234
* @param int $valueId
235
235
* @return array
236
236
*/
237
- protected function createAdditionalStoreDataCollection (array $ storeData , $ valueId )
237
+ protected function createAdditionalStoreDataCollection (array $ storeData , $ valueId ): array
238
238
{
239
239
$ result = [];
240
240
foreach ($ storeData as $ item ) {
@@ -246,4 +246,41 @@ protected function createAdditionalStoreDataCollection(array $storeData, $valueI
246
246
247
247
return $ result ;
248
248
}
249
+
250
+ /**
251
+ * @param array $mediaCollection
252
+ * @return array
253
+ */
254
+ private function collectNewVideos (array $ mediaCollection ): array
255
+ {
256
+ $ return = [];
257
+ foreach ($ mediaCollection as $ item ) {
258
+ if ($ this ->isVideoItem ($ item ) && $ this ->isNewVideo ($ item )) {
259
+ $ return [] = $ this ->extractVideoDataFromRowData ($ item );
260
+ }
261
+ }
262
+ return $ return ;
263
+ }
264
+
265
+ /**
266
+ * @param $item
267
+ * @return bool
268
+ */
269
+ private function isVideoItem ($ item ): bool
270
+ {
271
+ return !empty ($ item ['media_type ' ])
272
+ && empty ($ item ['removed ' ])
273
+ && $ item ['media_type ' ] == ExternalVideoEntryConverter::MEDIA_TYPE_CODE ;
274
+ }
275
+
276
+ /**
277
+ * @param $item
278
+ * @return bool
279
+ */
280
+ private function isNewVideo ($ item ): bool
281
+ {
282
+ return !isset ($ item ['video_url_default ' ], $ item ['video_title_default ' ])
283
+ || empty ($ item ['video_url_default ' ])
284
+ || empty ($ item ['video_title_default ' ]);
285
+ }
249
286
}
0 commit comments