Skip to content

Commit dad7c08

Browse files
Merge branch 2.2-develop into ENGCOM-3874-magento-magento2-20184
2 parents d317a76 + 8fdae10 commit dad7c08

File tree

61 files changed

+1306
-492
lines changed

Some content is hidden

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

61 files changed

+1306
-492
lines changed

app/code/Magento/Backend/view/adminhtml/templates/widget/tabshoriz.phtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<?php $_tabType = (!preg_match('/\s?ajax\s?/', $_tabClass) && $block->getTabUrl($_tab) != '#') ? 'link' : '' ?>
1919
<?php $_tabHref = $block->getTabUrl($_tab) == '#' ? '#' . $block->getTabId($_tab) . '_content' : $block->getTabUrl($_tab) ?>
2020
<li>
21-
<a href="<?= /* @escapeNotVerified */ $_tabHref ?>" id="<?= /* @escapeNotVerified */ $block->getTabId($_tab) ?>" title="<?= /* @escapeNotVerified */ $block->getTabTitle($_tab) ?>" class="<?php $_tabClass ?>" data-tab-type="<?php $_tabType ?>">
21+
<a href="<?= $block->escapeHtmlAttr($_tabHref) ?>" id="<?= $block->escapeHtmlAttr($block->getTabId($_tab)) ?>" title="<?= $block->escapeHtmlAttr($block->getTabTitle($_tab)) ?>" class="<?= $block->escapeHtmlAttr($_tabClass) ?>" data-tab-type="<?= $block->escapeHtmlAttr($_tabType) ?>">
2222
<span>
2323
<span class="changed" title="<?= /* @escapeNotVerified */ __('The information in this tab has been changed.') ?>"></span>
2424
<span class="error" title="<?= /* @escapeNotVerified */ __('This tab contains invalid data. Please resolve this before saving.') ?>"></span>

app/code/Magento/Braintree/view/adminhtml/templates/form/cc.phtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ $ccType = $block->getInfoData('cc_type');
8383
id="<?= /* @noEscape */ $code ?>_vault"
8484
name="payment[is_active_payment_token_enabler]"
8585
class="admin__control-checkbox"/>
86-
<label class="label" for="<?= /* @noEscape */ $code ?>_vault">
86+
<label class="label admin__field-label" for="<?= /* @noEscape */ $code ?>_vault">
8787
<span><?= $block->escapeHtml(__('Save for later use.')) ?></span>
8888
</label>
8989
</div>

app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml

Lines changed: 81 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -7,129 +7,150 @@
77
// @codingStandardsIgnoreFile
88

99
/** @var $block \Magento\Bundle\Block\Sales\Order\Items\Renderer */
10+
$parentItem = $block->getItem();
11+
$items = array_merge([$parentItem], $parentItem->getChildrenItems());
12+
$index = 0;
13+
$prevOptionId = '';
1014
?>
11-
<?php $parentItem = $block->getItem() ?>
12-
<?php $items = array_merge([$parentItem], $parentItem->getChildrenItems()); ?>
13-
<?php $_index = 0 ?>
1415

15-
<?php $_prevOptionId = '' ?>
16+
<?php foreach ($items as $item): ?>
1617

17-
<?php foreach ($items as $_item): ?>
18-
19-
<?php if ($block->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?>
20-
<?php $_showlastRow = true ?>
18+
<?php if ($block->getItemOptions()
19+
|| $parentItem->getDescription()
20+
|| $this->helper('Magento\GiftMessage\Helper\Message')->isMessagesAllowed('order_item', $parentItem)
21+
&& $parentItem->getGiftMessageId()): ?>
22+
<?php $showLastRow = true; ?>
2123
<?php else: ?>
22-
<?php $_showlastRow = false ?>
24+
<?php $showLastRow = false; ?>
2325
<?php endif; ?>
2426

25-
<?php if ($_item->getParentItem()): ?>
26-
<?php $attributes = $block->getSelectionAttributes($_item) ?>
27-
<?php if ($_prevOptionId != $attributes['option_id']): ?>
27+
<?php if ($item->getParentItem()): ?>
28+
<?php $attributes = $block->getSelectionAttributes($item) ?>
29+
<?php if ($prevOptionId != $attributes['option_id']): ?>
2830
<tr class="options-label">
29-
<td class="col label" colspan="5"><?= /* @escapeNotVerified */ $attributes['option_label'] ?></td>
31+
<td class="col label" colspan="5"><?= $block->escapeHtml($attributes['option_label']); ?></td>
3032
</tr>
31-
<?php $_prevOptionId = $attributes['option_id'] ?>
33+
<?php $prevOptionId = $attributes['option_id'] ?>
3234
<?php endif; ?>
3335
<?php endif; ?>
34-
<tr id="order-item-row-<?= /* @escapeNotVerified */ $_item->getId() ?>" class="<?php if ($_item->getParentItem()): ?>item-options-container<?php else: ?>item-parent<?php endif; ?>"<?php if ($_item->getParentItem()): ?> data-th="<?= /* @escapeNotVerified */ $attributes['option_label'] ?>"<?php endif; ?>>
35-
<?php if (!$_item->getParentItem()): ?>
36-
<td class="col name" data-th="<?= $block->escapeHtml(__('Product Name')) ?>">
37-
<strong class="product name product-item-name"><?= $block->escapeHtml($_item->getName()) ?></strong>
36+
<tr id="order-item-row-<?= /* @noEscape */ $item->getId() ?>"
37+
class="<?php if ($item->getParentItem()): ?>
38+
item-options-container
39+
<?php else: ?>
40+
item-parent
41+
<?php endif; ?>"
42+
<?php if ($item->getParentItem()): ?>
43+
data-th="<?= $block->escapeHtml($attributes['option_label']); ?>"
44+
<?php endif; ?>>
45+
<?php if (!$item->getParentItem()): ?>
46+
<td class="col name" data-th="<?= $block->escapeHtml(__('Product Name')); ?>">
47+
<strong class="product name product-item-name"><?= $block->escapeHtml($item->getName()); ?></strong>
3848
</td>
3949
<?php else: ?>
40-
<td class="col value" data-th="<?= $block->escapeHtml(__('Product Name')) ?>"><?= $block->getValueHtml($_item) ?></td>
50+
<td class="col value" data-th="<?= $block->escapeHtml(__('Product Name')); ?>">
51+
<?= $block->getValueHtml($item); ?>
52+
</td>
4153
<?php endif; ?>
42-
<td class="col sku" data-th="<?= $block->escapeHtml(__('SKU')) ?>"><?= /* @escapeNotVerified */ $block->prepareSku($_item->getSku()) ?></td>
43-
<td class="col price" data-th="<?= $block->escapeHtml(__('Price')) ?>">
44-
<?php if (!$_item->getParentItem()): ?>
45-
<?= $block->getItemPriceHtml() ?>
54+
<td class="col sku" data-th="<?= $block->escapeHtml(__('SKU')); ?>">
55+
<?= /* @noEscape */ $block->prepareSku($item->getSku()); ?>
56+
</td>
57+
<td class="col price" data-th="<?= $block->escapeHtml(__('Price')); ?>">
58+
<?php if (!$item->getParentItem()): ?>
59+
<?= /* @noEscape */ $block->getItemPriceHtml(); ?>
4660
<?php else: ?>
4761
&nbsp;
4862
<?php endif; ?>
4963
</td>
50-
<td class="col qty" data-th="<?= $block->escapeHtml(__('Quantity')) ?>">
64+
<td class="col qty" data-th="<?= $block->escapeHtml(__('Quantity')); ?>">
5165
<?php if (
52-
($_item->getParentItem() && $block->isChildCalculated()) ||
53-
(!$_item->getParentItem() && !$block->isChildCalculated()) || ($_item->getQtyShipped() > 0 && $_item->getParentItem() && $block->isShipmentSeparately())):?>
66+
($item->getParentItem() && $block->isChildCalculated()) ||
67+
(!$item->getParentItem() && !$block->isChildCalculated()) ||
68+
($item->getQtyShipped() > 0 && $item->getParentItem() && $block->isShipmentSeparately())): ?>
5469
<ul class="items-qty">
5570
<?php endif; ?>
56-
<?php if (($_item->getParentItem() && $block->isChildCalculated()) ||
57-
(!$_item->getParentItem() && !$block->isChildCalculated())): ?>
58-
<?php if ($_item->getQtyOrdered() > 0): ?>
71+
<?php if (($item->getParentItem() && $block->isChildCalculated()) ||
72+
(!$item->getParentItem() && !$block->isChildCalculated())): ?>
73+
<?php if ($item->getQtyOrdered() > 0): ?>
5974
<li class="item">
60-
<span class="title"><?= /* @escapeNotVerified */ __('Ordered') ?></span>
61-
<span class="content"><?= /* @escapeNotVerified */ $_item->getQtyOrdered()*1 ?></span>
75+
<span class="title"><?= $block->escapeHtml(__('Ordered')); ?></span>
76+
<span class="content"><?= /* @noEscape */ $item->getQtyOrdered() * 1; ?></span>
6277
</li>
6378
<?php endif; ?>
64-
<?php if ($_item->getQtyShipped() > 0 && !$block->isShipmentSeparately()): ?>
79+
<?php if ($item->getQtyShipped() > 0 && !$block->isShipmentSeparately()): ?>
6580
<li class="item">
66-
<span class="title"><?= /* @escapeNotVerified */ __('Shipped') ?></span>
67-
<span class="content"><?= /* @escapeNotVerified */ $_item->getQtyShipped()*1 ?></span>
81+
<span class="title"><?= $block->escapeHtml(__('Shipped')); ?></span>
82+
<span class="content"><?= /* @noEscape */ $item->getQtyShipped() * 1; ?></span>
6883
</li>
6984
<?php endif; ?>
70-
<?php if ($_item->getQtyCanceled() > 0): ?>
85+
<?php if ($item->getQtyCanceled() > 0): ?>
7186
<li class="item">
72-
<span class="title"><?= /* @escapeNotVerified */ __('Canceled') ?></span>
73-
<span class="content"><?= /* @escapeNotVerified */ $_item->getQtyCanceled()*1 ?></span>
87+
<span class="title"><?= $block->escapeHtml(__('Canceled')); ?></span>
88+
<span class="content"><?= /* @noEscape */ $item->getQtyCanceled() * 1; ?></span>
7489
</li>
7590
<?php endif; ?>
76-
<?php if ($_item->getQtyRefunded() > 0): ?>
91+
<?php if ($item->getQtyRefunded() > 0): ?>
7792
<li class="item">
78-
<span class="title"><?= /* @escapeNotVerified */ __('Refunded') ?></span>
79-
<span class="content"><?= /* @escapeNotVerified */ $_item->getQtyRefunded()*1 ?></span>
93+
<span class="title"><?= $block->escapeHtml(__('Refunded')); ?></span>
94+
<span class="content"><?= /* @noEscape */ $item->getQtyRefunded() * 1; ?></span>
8095
</li>
8196
<?php endif; ?>
82-
<?php elseif ($_item->getQtyShipped() > 0 && $_item->getParentItem() && $block->isShipmentSeparately()): ?>
97+
<?php elseif ($item->getQtyShipped() > 0 && $item->getParentItem() && $block->isShipmentSeparately()): ?>
8398
<li class="item">
84-
<span class="title"><?= /* @escapeNotVerified */ __('Shipped') ?></span>
85-
<span class="content"><?= /* @escapeNotVerified */ $_item->getQtyShipped()*1 ?></span>
99+
<span class="title"><?= $block->escapeHtml(__('Shipped')); ?></span>
100+
<span class="content"><?= /* @noEscape */ $item->getQtyShipped() * 1; ?></span>
86101
</li>
87102
<?php else: ?>
88-
&nbsp;
103+
<span class="content"><?= /* @noEscape */ $parentItem->getQtyOrdered() * 1; ?></span>
89104
<?php endif; ?>
90105
<?php if (
91-
($_item->getParentItem() && $block->isChildCalculated()) ||
92-
(!$_item->getParentItem() && !$block->isChildCalculated()) || ($_item->getQtyShipped() > 0 && $_item->getParentItem() && $block->isShipmentSeparately())):?>
106+
($item->getParentItem() && $block->isChildCalculated()) ||
107+
(!$item->getParentItem() && !$block->isChildCalculated()) ||
108+
($item->getQtyShipped() > 0 && $item->getParentItem() && $block->isShipmentSeparately())):?>
93109
</ul>
94110
<?php endif; ?>
95111
</td>
96112
<td class="col subtotal" data-th="<?= $block->escapeHtml(__('Subtotal')) ?>">
97-
<?php if (!$_item->getParentItem()): ?>
98-
<?= $block->getItemRowTotalHtml() ?>
113+
<?php if (!$item->getParentItem()): ?>
114+
<?= /* @noEscape */ $block->getItemRowTotalHtml(); ?>
99115
<?php else: ?>
100116
&nbsp;
101117
<?php endif; ?>
102118
</td>
103119
</tr>
104120
<?php endforeach; ?>
105121

106-
<?php if ($_showlastRow && (($_options = $block->getItemOptions()) || $block->escapeHtml($_item->getDescription()))): ?>
122+
<?php if ($showLastRow && (($options = $block->getItemOptions()) || $block->escapeHtml($item->getDescription()))): ?>
107123
<tr>
108124
<td class="col options" colspan="5">
109-
<?php if ($_options = $block->getItemOptions()): ?>
125+
<?php if ($options = $block->getItemOptions()): ?>
110126
<dl class="item-options">
111-
<?php foreach ($_options as $_option) : ?>
112-
<dt><?= $block->escapeHtml($_option['label']) ?></dt>
127+
<?php foreach ($options as $option) : ?>
128+
<dt><?= $block->escapeHtml($option['label']) ?></dt>
113129
<?php if (!$block->getPrintStatus()): ?>
114-
<?php $_formatedOptionValue = $block->getFormatedOptionValue($_option) ?>
115-
<dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="tooltip wrapper"<?php endif; ?>>
116-
<?= /* @escapeNotVerified */ $_formatedOptionValue['value'] ?>
117-
<?php if (isset($_formatedOptionValue['full_view'])): ?>
130+
<?php $formattedOptionValue = $block->getFormatedOptionValue($option) ?>
131+
<dd<?php if (isset($formattedOptionValue['full_view'])): ?>
132+
class="tooltip wrapper"
133+
<?php endif; ?>>
134+
<?= /* @noEscape */ $formattedOptionValue['value'] ?>
135+
<?php if (isset($formattedOptionValue['full_view'])): ?>
118136
<div class="tooltip content">
119137
<dl class="item options">
120-
<dt><?= $block->escapeHtml($_option['label']) ?></dt>
121-
<dd><?= /* @escapeNotVerified */ $_formatedOptionValue['full_view'] ?></dd>
138+
<dt><?= $block->escapeHtml($option['label']); ?></dt>
139+
<dd><?= /* @noEscape */ $formattedOptionValue['full_view']; ?></dd>
122140
</dl>
123141
</div>
124142
<?php endif; ?>
125143
</dd>
126144
<?php else: ?>
127-
<dd><?= $block->escapeHtml((isset($_option['print_value']) ? $_option['print_value'] : $_option['value'])) ?></dd>
145+
<dd><?= $block->escapeHtml((isset($option['print_value']) ?
146+
$option['print_value'] :
147+
$option['value'])); ?>
148+
</dd>
128149
<?php endif; ?>
129150
<?php endforeach; ?>
130151
</dl>
131152
<?php endif; ?>
132-
<?= $block->escapeHtml($_item->getDescription()) ?>
153+
<?= $block->escapeHtml($item->getDescription()); ?>
133154
</td>
134155
</tr>
135156
<?php endif; ?>

app/code/Magento/Catalog/Model/Product.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ public function getIdBySku($sku)
714714
public function getCategoryId()
715715
{
716716
$category = $this->_registry->registry('current_category');
717-
if ($category) {
717+
if ($category && in_array($category->getId(), $this->getCategoryIds())) {
718718
return $category->getId();
719719
}
720720
return false;
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Catalog\Model\ResourceModel\Category;
9+
10+
use Magento\Catalog\Api\CategoryListInterface;
11+
use Magento\Framework\Api\SearchCriteriaBuilder;
12+
13+
/**
14+
* Check if Image is currently used in any category as Category Image.
15+
*/
16+
class RedundantCategoryImageChecker
17+
{
18+
/**
19+
* @var SearchCriteriaBuilder
20+
*/
21+
private $searchCriteriaBuilder;
22+
23+
/**
24+
* @var CategoryListInterface
25+
*/
26+
private $categoryList;
27+
28+
public function __construct(
29+
CategoryListInterface $categoryList,
30+
SearchCriteriaBuilder $searchCriteriaBuilder
31+
) {
32+
$this->categoryList = $categoryList;
33+
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
34+
}
35+
36+
/**
37+
* Checks if Image is currently used in any category as Category Image.
38+
*
39+
* Returns true if not.
40+
*
41+
* @param string $imageName
42+
* @return bool
43+
*/
44+
public function execute(string $imageName): bool
45+
{
46+
/** @var SearchCriteriaBuilder $searchCriteriaBuilder */
47+
$searchCriteria = $this->searchCriteriaBuilder->addFilter('image', $imageName)->create();
48+
$categories = $this->categoryList->getList($searchCriteria)->getItems();
49+
50+
return empty($categories);
51+
}
52+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Catalog\Plugin\Model\ResourceModel\Category;
9+
10+
use Magento\Catalog\Model\ImageUploader;
11+
use Magento\Catalog\Model\ResourceModel\Category as CategoryResource;
12+
use Magento\Catalog\Model\ResourceModel\Category\RedundantCategoryImageChecker;
13+
use Magento\Framework\App\Filesystem\DirectoryList;
14+
use Magento\Framework\Filesystem;
15+
use Magento\Framework\Model\AbstractModel;
16+
17+
/**
18+
* Remove old Category Image file from pub/media/catalog/category directory if such Image is not used anymore.
19+
*/
20+
class RemoveRedundantImagePlugin
21+
{
22+
/**
23+
* @var Filesystem
24+
*/
25+
private $filesystem;
26+
27+
/**
28+
* @var ImageUploader
29+
*/
30+
private $imageUploader;
31+
32+
/**
33+
* @var RedundantCategoryImageChecker
34+
*/
35+
private $redundantCategoryImageChecker;
36+
37+
public function __construct(
38+
Filesystem $filesystem,
39+
ImageUploader $imageUploader,
40+
RedundantCategoryImageChecker $redundantCategoryImageChecker
41+
) {
42+
$this->filesystem = $filesystem;
43+
$this->imageUploader = $imageUploader;
44+
$this->redundantCategoryImageChecker = $redundantCategoryImageChecker;
45+
}
46+
47+
/**
48+
* Removes Image file if it is not used anymore.
49+
*
50+
* @param CategoryResource $subject
51+
* @param CategoryResource $result
52+
* @param AbstractModel $category
53+
* @return CategoryResource
54+
*
55+
* @throws \Magento\Framework\Exception\FileSystemException
56+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
57+
*/
58+
public function afterSave(
59+
CategoryResource $subject,
60+
CategoryResource $result,
61+
AbstractModel $category
62+
): CategoryResource {
63+
$originalImage = $category->getOrigData('image');
64+
if (null !== $originalImage
65+
&& $originalImage !== $category->getImage()
66+
&& $this->redundantCategoryImageChecker->execute($originalImage)
67+
) {
68+
$basePath = $this->imageUploader->getBasePath();
69+
$baseImagePath = $this->imageUploader->getFilePath($basePath, $originalImage);
70+
/** @var \Magento\Framework\Filesystem\Directory\WriteInterface $mediaDirectory */
71+
$mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA);
72+
$mediaDirectory->delete($baseImagePath);
73+
}
74+
75+
return $result;
76+
}
77+
}

0 commit comments

Comments
 (0)