Skip to content

Commit 49c408a

Browse files
authored
Merge pull request #4680 from magento-tango/BUGFIX-2.2-0823
[tango] BUGFIX 2.2 0823
2 parents ab841f5 + f312045 commit 49c408a

File tree

46 files changed

+1484
-195
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1484
-195
lines changed

app/code/Magento/AuthorizenetAcceptjs/view/adminhtml/templates/payment/script.phtml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@
1010
//<![CDATA[
1111
require(
1212
[
13-
'Magento_AuthorizenetAcceptjs/js/payment-form'
14-
], function(Authorizenet) {
13+
'Magento_AuthorizenetAcceptjs/js/authorizenet',
14+
'jquery',
15+
'domReady!'
16+
], function(AuthorizenetAcceptjs, $) {
1517
var config = <?= /* @noEscape */ $block->getPaymentConfig() ?>,
16-
form = "#payment_form_<?= $block->escapeJs($block->escapeHtml($block->getMethodCode())) ?>";
18+
form = $('#payment_form_<?= /* @noEscape */ $block->escapeJs($block->escapeHtml($block->getMethodCode())) ?>');
1719

18-
new Authorizenet(config, form);
20+
config.active = form.length > 0 && !form.is(':hidden');
21+
new AuthorizenetAcceptjs(config);
1922
});
2023
//]]>
2124
</script>

app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,42 @@ private function initMediaGalleryResources()
284284
}
285285
}
286286

287+
/**
288+
* Get the last media position for each product from the given list
289+
*
290+
* @param int $storeId
291+
* @param array $productIds
292+
* @return array
293+
*/
294+
private function getLastMediaPositionPerProduct(int $storeId, array $productIds): array
295+
{
296+
$result = [];
297+
if ($productIds) {
298+
$productKeyName = $this->getProductEntityLinkField();
299+
// this result could be achieved by using GROUP BY. But there is no index on position column, therefore
300+
// it can be slower than the implementation below
301+
$positions = $this->connection->fetchAll(
302+
$this->connection
303+
->select()
304+
->from($this->mediaGalleryValueTableName, [$productKeyName, 'position'])
305+
->where("$productKeyName IN (?)", $productIds)
306+
->where('value_id is not null')
307+
->where('store_id = ?', $storeId)
308+
);
309+
// Make sure the result contains all product ids even if the product has no media files
310+
$result = array_fill_keys($productIds, 0);
311+
// Find the largest position for each product
312+
foreach ($positions as $record) {
313+
$productId = $record[$productKeyName];
314+
$result[$productId] = $result[$productId] < $record['position']
315+
? $record['position']
316+
: $result[$productId];
317+
}
318+
}
319+
320+
return $result;
321+
}
322+
287323
/**
288324
* Save media gallery data per store.
289325
*
@@ -301,24 +337,30 @@ private function processMediaPerStore(
301337
) {
302338
$multiInsertData = [];
303339
$dataForSkinnyTable = [];
340+
$lastMediaPositionPerProduct = $this->getLastMediaPositionPerProduct(
341+
$storeId,
342+
array_unique(array_merge(...array_values($valueToProductId)))
343+
);
344+
304345
foreach ($mediaGalleryData as $mediaGalleryRows) {
305346
foreach ($mediaGalleryRows as $insertValue) {
306-
foreach ($newMediaValues as $value_id => $values) {
347+
foreach ($newMediaValues as $valueId => $values) {
307348
if ($values['value'] == $insertValue['value']) {
308-
$insertValue['value_id'] = $value_id;
349+
$insertValue['value_id'] = $valueId;
309350
$insertValue[$this->getProductEntityLinkField()]
310351
= array_shift($valueToProductId[$values['value']]);
311-
unset($newMediaValues[$value_id]);
352+
unset($newMediaValues[$valueId]);
312353
break;
313354
}
314355
}
315356
if (isset($insertValue['value_id'])) {
357+
$productId = $insertValue[$this->getProductEntityLinkField()];
316358
$valueArr = [
317359
'value_id' => $insertValue['value_id'],
318360
'store_id' => $storeId,
319-
$this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()],
361+
$this->getProductEntityLinkField() => $productId,
320362
'label' => $insertValue['label'],
321-
'position' => $insertValue['position'],
363+
'position' => $lastMediaPositionPerProduct[$productId] + $insertValue['position'],
322364
'disabled' => $insertValue['disabled'],
323365
];
324366
$multiInsertData[] = $valueArr;

app/code/Magento/CatalogUrlRewrite/Observer/AfterImportDataObserver.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -275,12 +275,16 @@ protected function _populateForUrlGeneration($rowData)
275275
*/
276276
private function isNeedToPopulateForUrlGeneration($rowData, $newSku, $oldSku): bool
277277
{
278-
if ((empty($newSku) || !isset($newSku['entity_id']))
279-
|| ($this->import->getRowScope($rowData) == ImportProduct::SCOPE_STORE
280-
&& empty($rowData[self::URL_KEY_ATTRIBUTE_CODE]))
281-
|| (array_key_exists($rowData[ImportProduct::COL_SKU], $oldSku)
282-
&& !isset($rowData[self::URL_KEY_ATTRIBUTE_CODE])
283-
&& $this->import->getBehavior() === ImportExport::BEHAVIOR_APPEND)) {
278+
if ((
279+
(empty($newSku) || !isset($newSku['entity_id']))
280+
|| ($this->import->getRowScope($rowData) == ImportProduct::SCOPE_STORE
281+
&& empty($rowData[self::URL_KEY_ATTRIBUTE_CODE]))
282+
|| (array_key_exists(strtolower($rowData[ImportProduct::COL_SKU]), $oldSku)
283+
&& !isset($rowData[self::URL_KEY_ATTRIBUTE_CODE])
284+
&& $this->import->getBehavior() === ImportExport::BEHAVIOR_APPEND)
285+
)
286+
&& !isset($rowData["categories"])
287+
) {
284288
return false;
285289
}
286290
return true;

app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
*/
66
namespace Magento\CatalogUrlRewrite\Observer;
77

8-
use Magento\Catalog\Api\CategoryRepositoryInterface;
98
use Magento\Catalog\Model\Category;
10-
use Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider;
119
use Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator;
1210
use Magento\CatalogUrlRewrite\Service\V1\StoreViewService;
11+
use Magento\Catalog\Api\CategoryRepositoryInterface;
12+
use Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider;
1313
use Magento\Framework\Event\ObserverInterface;
1414
use Magento\Store\Model\Store;
1515

@@ -67,13 +67,15 @@ public function execute(\Magento\Framework\Event\Observer $observer)
6767
{
6868
/** @var Category $category */
6969
$category = $observer->getEvent()->getCategory();
70-
$useDefaultAttribute = !$category->isObjectNew() && !empty($category->getData('use_default')['url_key']);
70+
$useDefaultAttribute = !empty($category->getData('use_default')['url_key']);
7171
if ($category->getUrlKey() !== false && !$useDefaultAttribute) {
7272
$resultUrlKey = $this->categoryUrlPathGenerator->getUrlKey($category);
7373
$this->updateUrlKey($category, $resultUrlKey);
74-
} else if ($useDefaultAttribute) {
75-
$resultUrlKey = $category->formatUrlKey($category->getOrigData('name'));
76-
$this->updateUrlKey($category, $resultUrlKey);
74+
} elseif ($useDefaultAttribute) {
75+
if (!$category->isObjectNew()) {
76+
$resultUrlKey = $category->formatUrlKey($category->getOrigData('name'));
77+
$this->updateUrlKey($category, $resultUrlKey);
78+
}
7779
$category->setUrlKey(null)->setUrlPath(null);
7880
}
7981
}

0 commit comments

Comments
 (0)