Skip to content

Commit 9952526

Browse files
author
olysenko
committed
MAGETWO-93792: Issues with Multi website YouTube Videos
1 parent 4eae75e commit 9952526

File tree

4 files changed

+215
-90
lines changed

4 files changed

+215
-90
lines changed

app/code/Magento/ProductVideo/Block/Product/View/Gallery.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*
1010
* @author Magento Core Team <core@magentocommerce.com>
1111
*/
12+
1213
namespace Magento\ProductVideo\Block\Product\View;
1314

1415
/**
@@ -85,6 +86,6 @@ public function getVideoSettingsJson()
8586
*/
8687
public function getOptionsMediaGalleryDataJson()
8788
{
88-
return $this->jsonEncoder->encode([]);
89+
return $this->jsonEncoder->encode([]);
8990
}
9091
}

app/code/Magento/ProductVideo/Model/Plugin/Catalog/Product/Gallery/CreateHandler.php

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\ProductVideo\Model\Plugin\Catalog\Product\Gallery;
78

89
use Magento\ProductVideo\Model\Product\Attribute\Media\ExternalVideoEntryConverter;
@@ -30,14 +31,15 @@ public function beforeExecute(
3031
\Magento\Catalog\Model\Product $product,
3132
array $arguments = []
3233
) {
34+
/** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
3335
$attribute = $mediaGalleryCreateHandler->getAttribute();
3436
$mediaCollection = $this->getMediaEntriesDataCollection($product, $attribute);
3537
if (!empty($mediaCollection)) {
3638
$storeDataCollection = $this->loadStoreViewVideoData($mediaCollection, $product->getStoreId());
3739
$mediaCollection = $this->addAdditionalStoreData($mediaCollection, $storeDataCollection);
3840
$product->setData(
3941
$attribute->getAttributeCode(),
40-
$mediaCollection + $product->getData($attribute->getAttributeCode())
42+
$mediaCollection
4143
);
4244
}
4345
}
@@ -57,6 +59,10 @@ public function afterExecute(
5759
);
5860

5961
if (!empty($mediaCollection)) {
62+
$newVideoCollection = $this->collectNewVideos($mediaCollection);
63+
$this->saveVideoData($newVideoCollection, 0);
64+
$this->saveAdditionalStoreData($newVideoCollection);
65+
6066
$videoDataCollection = $this->collectVideoData($mediaCollection);
6167
$this->saveVideoData($videoDataCollection, $product->getStoreId());
6268
$this->saveAdditionalStoreData($videoDataCollection);
@@ -168,10 +174,7 @@ protected function collectVideoData(array $mediaCollection)
168174
{
169175
$videoDataCollection = [];
170176
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)) {
175178
$videoData = $this->extractVideoDataFromRowData($item);
176179
$videoDataCollection[] = $videoData;
177180
}
@@ -200,11 +203,7 @@ protected function collectVideoEntriesIdsToAdditionalLoad(array $mediaCollection
200203
{
201204
$ids = [];
202205
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'])) {
208207
$ids[] = $item['save_data_from'];
209208
}
210209
}
@@ -216,26 +215,27 @@ protected function collectVideoEntriesIdsToAdditionalLoad(array $mediaCollection
216215
* @param array $data
217216
* @return array
218217
*/
219-
protected function addAdditionalStoreData(array $mediaCollection, array $data)
218+
protected function addAdditionalStoreData(array $mediaCollection, array $data): array
220219
{
221-
foreach ($mediaCollection as &$mediaItem) {
220+
$return = [];
221+
foreach ($mediaCollection as $key => $mediaItem) {
222222
if (!empty($mediaItem['save_data_from'])) {
223223
$additionalData = $this->createAdditionalStoreDataCollection($data, $mediaItem['save_data_from']);
224224
if (!empty($additionalData)) {
225225
$mediaItem[self::ADDITIONAL_STORE_DATA_KEY] = $additionalData;
226226
}
227227
}
228+
$return[$key] = $mediaItem;
228229
}
229-
230-
return ['images' => $mediaCollection];
230+
return ['images' => $return];
231231
}
232232

233233
/**
234234
* @param array $storeData
235235
* @param int $valueId
236236
* @return array
237237
*/
238-
protected function createAdditionalStoreDataCollection(array $storeData, $valueId)
238+
protected function createAdditionalStoreDataCollection(array $storeData, $valueId): array
239239
{
240240
$result = [];
241241
foreach ($storeData as $item) {
@@ -247,4 +247,41 @@ protected function createAdditionalStoreDataCollection(array $storeData, $valueI
247247

248248
return $result;
249249
}
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+
}
250287
}

app/code/Magento/ProductVideo/Model/Plugin/Catalog/Product/Gallery/ReadHandler.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\ProductVideo\Model\Plugin\Catalog\Product\Gallery;
78

89
use Magento\ProductVideo\Model\Product\Attribute\Media\ExternalVideoEntryConverter;
@@ -56,8 +57,8 @@ protected function collectVideoEntriesIds(array $mediaCollection)
5657
{
5758
$ids = [];
5859
foreach ($mediaCollection as $item) {
59-
if ($item['media_type'] == ExternalVideoEntryConverter::MEDIA_TYPE_CODE
60-
&& !array_key_exists('video_url', $item)
60+
if ($item['media_type'] === ExternalVideoEntryConverter::MEDIA_TYPE_CODE
61+
&& !isset($item['video_url'])
6162
) {
6263
$ids[] = $item['value_id'];
6364
}
@@ -73,7 +74,7 @@ protected function collectVideoEntriesIds(array $mediaCollection)
7374
protected function loadVideoDataById(array $ids, $storeId = null)
7475
{
7576
$mainTableAlias = $this->resourceModel->getMainTableAlias();
76-
$joinConditions = $mainTableAlias.'.value_id = store_value.value_id';
77+
$joinConditions = $mainTableAlias . '.value_id = store_value.value_id';
7778
if (null !== $storeId) {
7879
$joinConditions = implode(
7980
' AND ',
@@ -135,10 +136,10 @@ protected function addVideoDataToMediaEntries(array $mediaCollection, array $dat
135136
protected function substituteNullsWithDefaultValues(array $rowData)
136137
{
137138
foreach ($this->getVideoProperties(false) as $key) {
138-
if (empty($rowData[$key]) && !empty($rowData[$key.'_default'])) {
139-
$rowData[$key] = $rowData[$key.'_default'];
139+
if (empty($rowData[$key]) && !empty($rowData[$key . '_default'])) {
140+
$rowData[$key] = $rowData[$key . '_default'];
140141
}
141-
unset($rowData[$key.'_default']);
142+
unset($rowData[$key . '_default']);
142143
}
143144

144145
return $rowData;
@@ -151,8 +152,7 @@ protected function substituteNullsWithDefaultValues(array $rowData)
151152
protected function getVideoProperties($withDbMapping = true)
152153
{
153154
$properties = $this->videoPropertiesDbMapping;
154-
unset($properties['value_id']);
155-
unset($properties['store_id']);
155+
unset($properties['value_id'], $properties['store_id']);
156156

157157
return $withDbMapping ? $properties : array_keys($properties);
158158
}

0 commit comments

Comments
 (0)