Skip to content

Commit f227808

Browse files
author
Sergey Shvets
committed
MAGETWO-94029: Issues with Multi website YouTube Videos
1 parent f1154d4 commit f227808

File tree

3 files changed

+62
-26
lines changed

3 files changed

+62
-26
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@
99
*
1010
* @author Magento Core Team <core@magentocommerce.com>
1111
*/
12-
namespace Magento\ProductVideo\Block\Product\View;
1312

14-
use Magento\Catalog\Model\Product\Image\UrlBuilder;
13+
namespace Magento\ProductVideo\Block\Product\View;
1514

1615
/**
1716
* @api
@@ -93,6 +92,6 @@ public function getVideoSettingsJson()
9392
*/
9493
public function getOptionsMediaGalleryDataJson()
9594
{
96-
return $this->jsonEncoder->encode([]);
95+
return $this->jsonEncoder->encode([]);
9796
}
9897
}

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;
@@ -29,14 +30,15 @@ public function beforeExecute(
2930
\Magento\Catalog\Model\Product $product,
3031
array $arguments = []
3132
) {
33+
/** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
3234
$attribute = $mediaGalleryCreateHandler->getAttribute();
3335
$mediaCollection = $this->getMediaEntriesDataCollection($product, $attribute);
3436
if (!empty($mediaCollection)) {
3537
$storeDataCollection = $this->loadStoreViewVideoData($mediaCollection, $product->getStoreId());
3638
$mediaCollection = $this->addAdditionalStoreData($mediaCollection, $storeDataCollection);
3739
$product->setData(
3840
$attribute->getAttributeCode(),
39-
$mediaCollection + $product->getData($attribute->getAttributeCode())
41+
$mediaCollection
4042
);
4143
}
4244
}
@@ -56,6 +58,10 @@ public function afterExecute(
5658
);
5759

5860
if (!empty($mediaCollection)) {
61+
$newVideoCollection = $this->collectNewVideos($mediaCollection);
62+
$this->saveVideoData($newVideoCollection, 0);
63+
$this->saveAdditionalStoreData($newVideoCollection);
64+
5965
$videoDataCollection = $this->collectVideoData($mediaCollection);
6066
$this->saveVideoData($videoDataCollection, $product->getStoreId());
6167
$this->saveAdditionalStoreData($videoDataCollection);
@@ -167,10 +173,7 @@ protected function collectVideoData(array $mediaCollection)
167173
{
168174
$videoDataCollection = [];
169175
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)) {
174177
$videoData = $this->extractVideoDataFromRowData($item);
175178
$videoDataCollection[] = $videoData;
176179
}
@@ -199,11 +202,7 @@ protected function collectVideoEntriesIdsToAdditionalLoad(array $mediaCollection
199202
{
200203
$ids = [];
201204
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'])) {
207206
$ids[] = $item['save_data_from'];
208207
}
209208
}
@@ -215,26 +214,27 @@ protected function collectVideoEntriesIdsToAdditionalLoad(array $mediaCollection
215214
* @param array $data
216215
* @return array
217216
*/
218-
protected function addAdditionalStoreData(array $mediaCollection, array $data)
217+
protected function addAdditionalStoreData(array $mediaCollection, array $data): array
219218
{
220-
foreach ($mediaCollection as &$mediaItem) {
219+
$return = [];
220+
foreach ($mediaCollection as $key => $mediaItem) {
221221
if (!empty($mediaItem['save_data_from'])) {
222222
$additionalData = $this->createAdditionalStoreDataCollection($data, $mediaItem['save_data_from']);
223223
if (!empty($additionalData)) {
224224
$mediaItem[self::ADDITIONAL_STORE_DATA_KEY] = $additionalData;
225225
}
226226
}
227+
$return[$key] = $mediaItem;
227228
}
228-
229-
return ['images' => $mediaCollection];
229+
return ['images' => $return];
230230
}
231231

232232
/**
233233
* @param array $storeData
234234
* @param int $valueId
235235
* @return array
236236
*/
237-
protected function createAdditionalStoreDataCollection(array $storeData, $valueId)
237+
protected function createAdditionalStoreDataCollection(array $storeData, $valueId): array
238238
{
239239
$result = [];
240240
foreach ($storeData as $item) {
@@ -246,4 +246,41 @@ protected function createAdditionalStoreDataCollection(array $storeData, $valueI
246246

247247
return $result;
248248
}
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+
}
249286
}

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;
@@ -55,8 +56,8 @@ protected function collectVideoEntriesIds(array $mediaCollection)
5556
{
5657
$ids = [];
5758
foreach ($mediaCollection as $item) {
58-
if ($item['media_type'] == ExternalVideoEntryConverter::MEDIA_TYPE_CODE
59-
&& !array_key_exists('video_url', $item)
59+
if ($item['media_type'] === ExternalVideoEntryConverter::MEDIA_TYPE_CODE
60+
&& !isset($item['video_url'])
6061
) {
6162
$ids[] = $item['value_id'];
6263
}
@@ -72,7 +73,7 @@ protected function collectVideoEntriesIds(array $mediaCollection)
7273
protected function loadVideoDataById(array $ids, $storeId = null)
7374
{
7475
$mainTableAlias = $this->resourceModel->getMainTableAlias();
75-
$joinConditions = $mainTableAlias.'.value_id = store_value.value_id';
76+
$joinConditions = $mainTableAlias . '.value_id = store_value.value_id';
7677
if (null !== $storeId) {
7778
$joinConditions = implode(
7879
' AND ',
@@ -138,10 +139,10 @@ protected function addVideoDataToMediaEntries(array $mediaCollection, array $dat
138139
protected function substituteNullsWithDefaultValues(array $rowData)
139140
{
140141
foreach ($this->getVideoProperties(false) as $key) {
141-
if (empty($rowData[$key]) && !empty($rowData[$key.'_default'])) {
142-
$rowData[$key] = $rowData[$key.'_default'];
142+
if (empty($rowData[$key]) && !empty($rowData[$key . '_default'])) {
143+
$rowData[$key] = $rowData[$key . '_default'];
143144
}
144-
unset($rowData[$key.'_default']);
145+
unset($rowData[$key . '_default']);
145146
}
146147

147148
return $rowData;
@@ -154,8 +155,7 @@ protected function substituteNullsWithDefaultValues(array $rowData)
154155
protected function getVideoProperties($withDbMapping = true)
155156
{
156157
$properties = $this->videoPropertiesDbMapping;
157-
unset($properties['value_id']);
158-
unset($properties['store_id']);
158+
unset($properties['value_id'], $properties['store_id']);
159159

160160
return $withDbMapping ? $properties : array_keys($properties);
161161
}

0 commit comments

Comments
 (0)