diff --git a/README.md b/README.md
index a2cf536bb6520..6b2ac458eb403 100644
--- a/README.md
+++ b/README.md
@@ -58,7 +58,7 @@ To learn more about issue gate labels click [here](https://github.com/magento/ma
Reporting security issues
-To report security vulnerabilities in Magento software or web sites, please e-mail security@magento.com. Please do not report security issues using GitHub. Be sure to encrypt your e-mail with our encryption key if it includes sensitive information. Learn more about reporting security issues here.
+To report security vulnerabilities in Magento software or web sites, please create a Bugcrowd researcher account there to submit and follow-up your issue. Learn more about reporting security issues here.
Stay up-to-date on the latest security news and patches for Magento by signing up for Security Alert Notifications.
diff --git a/app/code/Magento/Backend/view/adminhtml/ui_component/design_config_form.xml b/app/code/Magento/Backend/view/adminhtml/ui_component/design_config_form.xml
index 46902363f1fd7..79c987383299f 100644
--- a/app/code/Magento/Backend/view/adminhtml/ui_component/design_config_form.xml
+++ b/app/code/Magento/Backend/view/adminhtml/ui_component/design_config_form.xml
@@ -92,7 +92,7 @@
-
+
-
- false
diff --git a/app/code/Magento/Catalog/Model/Product/Option.php b/app/code/Magento/Catalog/Model/Product/Option.php
index 39595cdaa60ad..acfc454883e1d 100644
--- a/app/code/Magento/Catalog/Model/Product/Option.php
+++ b/app/code/Magento/Catalog/Model/Product/Option.php
@@ -8,6 +8,7 @@
use Magento\Catalog\Api\Data\ProductCustomOptionInterface;
use Magento\Catalog\Api\Data\ProductCustomOptionValuesInterface;
+use Magento\Catalog\Api\Data\ProductCustomOptionValuesInterfaceFactory;
use Magento\Catalog\Api\Data\ProductInterface;
use Magento\Catalog\Model\Product;
use Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection;
@@ -102,6 +103,11 @@ class Option extends AbstractExtensibleModel implements ProductCustomOptionInter
*/
private $metadataPool;
+ /**
+ * @var ProductCustomOptionValuesInterfaceFactory
+ */
+ private $customOptionValuesFactory;
+
/**
* @param \Magento\Framework\Model\Context $context
* @param \Magento\Framework\Registry $registry
@@ -114,6 +120,7 @@ class Option extends AbstractExtensibleModel implements ProductCustomOptionInter
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
* @param array $data
+ * @param ProductCustomOptionValuesInterfaceFactory|null $customOptionValuesFactory
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
@@ -127,12 +134,16 @@ public function __construct(
Option\Validator\Pool $validatorPool,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
- array $data = []
+ array $data = [],
+ ProductCustomOptionValuesInterfaceFactory $customOptionValuesFactory = null
) {
$this->productOptionValue = $productOptionValue;
$this->optionTypeFactory = $optionFactory;
$this->validatorPool = $validatorPool;
$this->string = $string;
+ $this->customOptionValuesFactory = $customOptionValuesFactory ?:
+ \Magento\Framework\App\ObjectManager::getInstance()->get(ProductCustomOptionValuesInterfaceFactory::class);
+
parent::__construct(
$context,
$registry,
@@ -390,20 +401,21 @@ public function beforeSave()
*/
public function afterSave()
{
- $this->getValueInstance()->unsetValues();
$values = $this->getValues() ?: $this->getData('values');
if (is_array($values)) {
foreach ($values as $value) {
- if ($value instanceof \Magento\Catalog\Api\Data\ProductCustomOptionValuesInterface) {
+ if ($value instanceof ProductCustomOptionValuesInterface) {
$data = $value->getData();
} else {
$data = $value;
}
- $this->getValueInstance()->addValue($data);
- }
- $this->getValueInstance()->setOption($this)->saveValues();
- } elseif ($this->getGroupByType($this->getType()) == self::OPTION_GROUP_SELECT) {
+ $this->customOptionValuesFactory->create()
+ ->addValue($data)
+ ->setOption($this)
+ ->saveValues();
+ }
+ } elseif ($this->getGroupByType($this->getType()) === self::OPTION_GROUP_SELECT) {
throw new LocalizedException(__('Select type options required values rows.'));
}
@@ -804,7 +816,7 @@ public function setImageSizeY($imageSizeY)
}
/**
- * @param \Magento\Catalog\Api\Data\ProductCustomOptionValuesInterface[] $values
+ * @param ProductCustomOptionValuesInterface[] $values
* @return $this
*/
public function setValues(array $values = null)
diff --git a/app/code/Magento/Catalog/Model/Product/Option/Type/Text.php b/app/code/Magento/Catalog/Model/Product/Option/Type/Text.php
index fd0eae188fea9..9ffe75e513bce 100644
--- a/app/code/Magento/Catalog/Model/Product/Option/Type/Text.php
+++ b/app/code/Magento/Catalog/Model/Product/Option/Type/Text.php
@@ -84,7 +84,7 @@ public function validateUserValue($values)
*/
public function prepareForCart()
{
- if ($this->getIsValid() && strlen($this->getUserValue()) > 0) {
+ if ($this->getIsValid() && ($this->getUserValue() !== '')) {
return $this->getUserValue();
} else {
return null;
diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php
index fb7759b210bd9..ebbc060c99edf 100644
--- a/app/code/Magento/Catalog/Model/Product/Option/Value.php
+++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php
@@ -76,6 +76,7 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
* @param array $data
+ * @param CustomOptionPriceCalculator|null $customOptionPriceCalculator
*/
public function __construct(
\Magento\Framework\Model\Context $context,
@@ -89,6 +90,7 @@ public function __construct(
$this->_valueCollectionFactory = $valueCollectionFactory;
$this->customOptionPriceCalculator = $customOptionPriceCalculator
?? \Magento\Framework\App\ObjectManager::getInstance()->get(CustomOptionPriceCalculator::class);
+
parent::__construct(
$context,
$registry,
@@ -201,19 +203,15 @@ public function getProduct()
*/
public function saveValues()
{
+ $option = $this->getOption();
+
foreach ($this->getValues() as $value) {
$this->isDeleted(false);
- $this->setData(
- $value
- )->setData(
- 'option_id',
- $this->getOption()->getId()
- )->setData(
- 'store_id',
- $this->getOption()->getStoreId()
- );
-
- if ($this->getData('is_delete') == '1') {
+ $this->setData($value)
+ ->setData('option_id', $option->getId())
+ ->setData('store_id', $option->getStoreId());
+
+ if ((bool) $this->getData('is_delete') === true) {
if ($this->getId()) {
$this->deleteValues($this->getId());
$this->delete();
@@ -222,7 +220,7 @@ public function saveValues()
$this->save();
}
}
- //eof foreach()
+
return $this;
}
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/CategoryProcessor.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/CategoryProcessor.php
index 5de9d3880b5d2..db5b07279ed1c 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product/CategoryProcessor.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/CategoryProcessor.php
@@ -75,6 +75,7 @@ protected function initCategories()
$collection->addAttributeToSelect('name')
->addAttributeToSelect('url_key')
->addAttributeToSelect('url_path');
+ $collection->setStoreId(\Magento\Store\Model\Store::DEFAULT_STORE_ID);
/* @var $collection \Magento\Catalog\Model\ResourceModel\Category\Collection */
foreach ($collection as $category) {
$structure = explode(self::DELIMITER_CATEGORY, $category->getPath());
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php
index dd33b94423696..afd018f077d20 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php
@@ -28,6 +28,13 @@ abstract class AbstractType
*/
public static $commonAttributesCache = [];
+ /**
+ * Maintain a list of invisible attributes
+ *
+ * @var array
+ */
+ public static $invAttributesCache = [];
+
/**
* Attribute Code to Id cache
*
@@ -278,7 +285,14 @@ protected function _initAttributes()
}
}
foreach ($absentKeys as $attributeSetName => $attributeIds) {
- $this->attachAttributesById($attributeSetName, $attributeIds);
+ $unknownAttributeIds = array_diff(
+ $attributeIds,
+ array_keys(self::$commonAttributesCache),
+ self::$invAttributesCache
+ );
+ if ($unknownAttributeIds || $this->_forcedAttributesCodes) {
+ $this->attachAttributesById($attributeSetName, $attributeIds);
+ }
}
foreach ($entityAttributes as $attributeRow) {
if (isset(self::$commonAttributesCache[$attributeRow['attribute_id']])) {
@@ -303,37 +317,45 @@ protected function _initAttributes()
protected function attachAttributesById($attributeSetName, $attributeIds)
{
foreach ($this->_prodAttrColFac->create()->addFieldToFilter(
- 'main_table.attribute_id',
- ['in' => $attributeIds]
+ ['main_table.attribute_id', 'main_table.attribute_code'],
+ [
+ ['in' => $attributeIds],
+ ['in' => $this->_forcedAttributesCodes]
+ ]
) as $attribute) {
$attributeCode = $attribute->getAttributeCode();
$attributeId = $attribute->getId();
if ($attribute->getIsVisible() || in_array($attributeCode, $this->_forcedAttributesCodes)) {
- self::$commonAttributesCache[$attributeId] = [
- 'id' => $attributeId,
- 'code' => $attributeCode,
- 'is_global' => $attribute->getIsGlobal(),
- 'is_required' => $attribute->getIsRequired(),
- 'is_unique' => $attribute->getIsUnique(),
- 'frontend_label' => $attribute->getFrontendLabel(),
- 'is_static' => $attribute->isStatic(),
- 'apply_to' => $attribute->getApplyTo(),
- 'type' => \Magento\ImportExport\Model\Import::getAttributeType($attribute),
- 'default_value' => strlen(
- $attribute->getDefaultValue()
- ) ? $attribute->getDefaultValue() : null,
- 'options' => $this->_entityModel->getAttributeOptions(
- $attribute,
- $this->_indexValueAttributes
- ),
- ];
+ if (!isset(self::$commonAttributesCache[$attributeId])) {
+ self::$commonAttributesCache[$attributeId] = [
+ 'id' => $attributeId,
+ 'code' => $attributeCode,
+ 'is_global' => $attribute->getIsGlobal(),
+ 'is_required' => $attribute->getIsRequired(),
+ 'is_unique' => $attribute->getIsUnique(),
+ 'frontend_label' => $attribute->getFrontendLabel(),
+ 'is_static' => $attribute->isStatic(),
+ 'apply_to' => $attribute->getApplyTo(),
+ 'type' => \Magento\ImportExport\Model\Import::getAttributeType($attribute),
+ 'default_value' => strlen(
+ $attribute->getDefaultValue()
+ ) ? $attribute->getDefaultValue() : null,
+ 'options' => $this->_entityModel->getAttributeOptions(
+ $attribute,
+ $this->_indexValueAttributes
+ ),
+ ];
+ }
+
self::$attributeCodeToId[$attributeCode] = $attributeId;
$this->_addAttributeParams(
$attributeSetName,
self::$commonAttributesCache[$attributeId],
$attribute
);
+ } else {
+ self::$invAttributesCache[] = $attributeId;
}
}
}
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/AbstractTypeTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/AbstractTypeTest.php
index 70ac3a4fa2e97..bd2fe896b8c0a 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/AbstractTypeTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/AbstractTypeTest.php
@@ -134,8 +134,28 @@ protected function setUp()
->expects($this->any())
->method('addFieldToFilter')
->with(
- 'main_table.attribute_id',
- ['in' => ['attribute_id', 'boolean_attribute']]
+ ['main_table.attribute_id', 'main_table.attribute_code'],
+ [
+ [
+ 'in' =>
+ [
+ 'attribute_id',
+ 'boolean_attribute',
+ ],
+ ],
+ [
+ 'in' =>
+ [
+ 'related_tgtr_position_behavior',
+ 'related_tgtr_position_limit',
+ 'upsell_tgtr_position_behavior',
+ 'upsell_tgtr_position_limit',
+ 'thumbnail_label',
+ 'small_image_label',
+ 'image_label',
+ ],
+ ],
+ ]
)
->willReturn([$attribute1, $attribute2]);
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
index 3d42217de5f91..5581fcc07b861 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
@@ -64,7 +64,7 @@ public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $produ
foreach ($this->lowestPriceOptionsProvider->getProducts($product) as $subProduct) {
$productPrice = $this->priceResolver->resolvePrice($subProduct);
- $price = $price ? min($price, $productPrice) : $productPrice;
+ $price = isset($price) ? min($price, $productPrice) : $productPrice;
}
return (float)$price;
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Pricing/Price/ConfigurablePriceResolverTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Pricing/Price/ConfigurablePriceResolverTest.php
index 99c31420473f5..189730e18080c 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Pricing/Price/ConfigurablePriceResolverTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Pricing/Price/ConfigurablePriceResolverTest.php
@@ -55,24 +55,31 @@ protected function setUp()
* situation: one product is supplying the price, which could be a price of zero (0)
*
* @dataProvider resolvePriceDataProvider
+ *
+ * @param $variantPrices
+ * @param $expectedPrice
*/
- public function testResolvePrice($expectedValue)
+ public function testResolvePrice($variantPrices, $expectedPrice)
{
- $price = $expectedValue;
-
$product = $this->getMockBuilder(
\Magento\Catalog\Model\Product::class
)->disableOriginalConstructor()->getMock();
$product->expects($this->never())->method('getSku');
- $this->lowestPriceOptionsProvider->expects($this->once())->method('getProducts')->willReturn([$product]);
- $this->priceResolver->expects($this->once())
+ $products = array_map(function () {
+ return $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ }, $variantPrices);
+
+ $this->lowestPriceOptionsProvider->expects($this->once())->method('getProducts')->willReturn($products);
+ $this->priceResolver
->method('resolvePrice')
- ->with($product)
- ->willReturn($price);
+ ->willReturnOnConsecutiveCalls(...$variantPrices);
- $this->assertEquals($expectedValue, $this->resolver->resolvePrice($product));
+ $actualPrice = $this->resolver->resolvePrice($product);
+ self::assertSame($expectedPrice, $actualPrice);
}
/**
@@ -81,8 +88,40 @@ public function testResolvePrice($expectedValue)
public function resolvePriceDataProvider()
{
return [
- 'price of zero' => [0.00],
- 'price of five' => [5],
+ 'Single variant at price 0.00 (float), should return 0.00 (float)' => [
+ $variantPrices = [
+ 0.00,
+ ],
+ $expectedPrice = 0.00,
+ ],
+ 'Single variant at price 5 (integer), should return 5.00 (float)' => [
+ $variantPrices = [
+ 5,
+ ],
+ $expectedPrice = 5.00,
+ ],
+ 'Single variants at price null (null), should return 0.00 (float)' => [
+ $variantPrices = [
+ null,
+ ],
+ $expectedPrice = 0.00,
+ ],
+ 'Multiple variants at price 0, 10, 20, should return 0.00 (float)' => [
+ $variantPrices = [
+ 0,
+ 10,
+ 20,
+ ],
+ $expectedPrice = 0.00,
+ ],
+ 'Multiple variants at price 10, 0, 20, should return 0.00 (float)' => [
+ $variantPrices = [
+ 10,
+ 0,
+ 20,
+ ],
+ $expectedPrice = 0.00,
+ ],
];
}
}
diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
index e5cc543db6aac..ab940c9e84533 100644
--- a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
+++ b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
@@ -593,6 +593,18 @@ protected function _validateRowForUpdate(array $rowData, $rowNumber)
if (in_array($attributeCode, $this->_ignoredAttributes)) {
continue;
}
+
+ $isFieldRequired = $attributeParams['is_required'];
+ $isFieldNotSetAndCustomerDoesNotExist =
+ !isset($rowData[$attributeCode]) && !$this->_getCustomerId($email, $website);
+ $isFieldSetAndTrimmedValueIsEmpty
+ = isset($rowData[$attributeCode]) && '' === trim($rowData[$attributeCode]);
+
+ if ($isFieldRequired && ($isFieldNotSetAndCustomerDoesNotExist || $isFieldSetAndTrimmedValueIsEmpty)) {
+ $this->addRowError(self::ERROR_VALUE_IS_REQUIRED, $rowNumber, $attributeCode);
+ continue;
+ }
+
if (isset($rowData[$attributeCode]) && strlen($rowData[$attributeCode])) {
$this->isAttributeValid(
$attributeCode,
@@ -603,8 +615,6 @@ protected function _validateRowForUpdate(array $rowData, $rowNumber)
? $this->_parameters[Import::FIELD_FIELD_MULTIPLE_VALUE_SEPARATOR]
: Import::DEFAULT_GLOBAL_MULTI_VALUE_SEPARATOR
);
- } elseif ($attributeParams['is_required'] && !$this->_getCustomerId($email, $website)) {
- $this->addRowError(self::ERROR_VALUE_IS_REQUIRED, $rowNumber, $attributeCode);
}
}
}
diff --git a/app/code/Magento/Dhl/Model/Carrier.php b/app/code/Magento/Dhl/Model/Carrier.php
index 258dcbe9595d4..6262d71c4edcc 100644
--- a/app/code/Magento/Dhl/Model/Carrier.php
+++ b/app/code/Magento/Dhl/Model/Carrier.php
@@ -1263,8 +1263,20 @@ protected function _doShipmentRequest(\Magento\Framework\DataObject $request)
*
* @param \Magento\Framework\DataObject $request
* @return $this|\Magento\Framework\DataObject|boolean
+ * @deprecated
*/
public function proccessAdditionalValidation(\Magento\Framework\DataObject $request)
+ {
+ return $this->processAdditionalValidation($request);
+ }
+
+ /**
+ * Processing additional validation to check is carrier applicable.
+ *
+ * @param \Magento\Framework\DataObject $request
+ * @return $this|\Magento\Framework\DataObject|boolean
+ */
+ public function processAdditionalValidation(\Magento\Framework\DataObject $request)
{
//Skip by item validation if there is no items in request
if (!count($this->getAllItems($request))) {
diff --git a/app/code/Magento/ImportExport/Files/Sample/customer.csv b/app/code/Magento/ImportExport/Files/Sample/customer.csv
index 64c09574aea73..522e59f566739 100644
--- a/app/code/Magento/ImportExport/Files/Sample/customer.csv
+++ b/app/code/Magento/ImportExport/Files/Sample/customer.csv
@@ -1,2 +1,2 @@
-email,_website,_store,confirmation,created_at,created_in,disable_auto_group_change,dob,firstname,gender,group_id,lastname,middlename,password_hash,prefix,reward_update_notification,reward_warning_notification,rp_token,rp_token_created_at,store_id,suffix,taxvat,updated_at,website_id,password
-jondoe@example.com,base,default,,"2015-10-30 12:49:47","Default Store View",0,,Jon,,1,Doe,,d708be3fe0fe0120840e8b13c8faae97424252c6374227ff59c05814f1aecd79:mgLqkqgTwLPLlCljzvF8hp67fNOOvOZb:1,,,,07e71459c137f4da15292134ff459cba,"2015-10-30 12:49:48",1,,,"2015-10-30 12:49:48",1,
+email,_website,_store,confirmation,created_at,created_in,disable_auto_group_change,dob,firstname,gender,group_id,lastname,middlename,password_hash,prefix,rp_token,rp_token_created_at,store_id,suffix,taxvat,updated_at,website_id,password
+jondoe@example.com,base,default,,"2015-10-30 12:49:47","Default Store View",0,,Jon,,1,Doe,,d708be3fe0fe0120840e8b13c8faae97424252c6374227ff59c05814f1aecd79:mgLqkqgTwLPLlCljzvF8hp67fNOOvOZb:1,,07e71459c137f4da15292134ff459cba,"2015-10-30 12:49:48",1,,,"2015-10-30 12:49:48",1,
diff --git a/app/code/Magento/ImportExport/Model/Import/ErrorProcessing/ProcessingErrorAggregator.php b/app/code/Magento/ImportExport/Model/Import/ErrorProcessing/ProcessingErrorAggregator.php
index 079b2e60c4785..7f49e2022c410 100644
--- a/app/code/Magento/ImportExport/Model/Import/ErrorProcessing/ProcessingErrorAggregator.php
+++ b/app/code/Magento/ImportExport/Model/Import/ErrorProcessing/ProcessingErrorAggregator.php
@@ -77,7 +77,7 @@ public function addError(
$errorMessage = null,
$errorDescription = null
) {
- if ($this->isErrorAlreadyAdded($rowNumber, $errorCode)) {
+ if ($this->isErrorAlreadyAdded($rowNumber, $errorCode, $columnName)) {
return $this;
}
$this->processErrorStatistics($errorLevel);
@@ -333,13 +333,14 @@ public function clear()
/**
* @param int $rowNum
* @param string $errorCode
+ * @param string $columnName
* @return bool
*/
- protected function isErrorAlreadyAdded($rowNum, $errorCode)
+ protected function isErrorAlreadyAdded($rowNum, $errorCode, $columnName = null)
{
$errors = $this->getErrorsByCode([$errorCode]);
foreach ($errors as $error) {
- if ($rowNum == $error->getRowNumber()) {
+ if ($rowNum == $error->getRowNumber() && $columnName == $error->getColumnName()) {
return true;
}
}
diff --git a/app/code/Magento/Shipping/Model/Carrier/AbstractCarrier.php b/app/code/Magento/Shipping/Model/Carrier/AbstractCarrier.php
index 5575792c346d3..6763046373ce7 100644
--- a/app/code/Magento/Shipping/Model/Carrier/AbstractCarrier.php
+++ b/app/code/Magento/Shipping/Model/Carrier/AbstractCarrier.php
@@ -329,11 +329,24 @@ public function checkAvailableShipCountries(\Magento\Framework\DataObject $reque
* @return $this|bool|\Magento\Framework\DataObject
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
- public function proccessAdditionalValidation(\Magento\Framework\DataObject $request)
+ public function processAdditionalValidation(\Magento\Framework\DataObject $request)
{
return $this;
}
+ /**
+ * Processing additional validation to check is carrier applicable.
+ *
+ * @param \Magento\Framework\DataObject $request
+ * @return $this|bool|\Magento\Framework\DataObject
+ * @deprecated
+ * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+ */
+ public function proccessAdditionalValidation(\Magento\Framework\DataObject $request)
+ {
+ return $this->processAdditionalValidation($request);
+ }
+
/**
* Determine whether current carrier enabled for activity
*
diff --git a/app/code/Magento/Shipping/Model/Carrier/AbstractCarrierOnline.php b/app/code/Magento/Shipping/Model/Carrier/AbstractCarrierOnline.php
index 8244fcc4bad9d..be2588dc48711 100644
--- a/app/code/Magento/Shipping/Model/Carrier/AbstractCarrierOnline.php
+++ b/app/code/Magento/Shipping/Model/Carrier/AbstractCarrierOnline.php
@@ -302,10 +302,24 @@ public function getAllItems(RateRequest $request)
*
* @param \Magento\Framework\DataObject $request
* @return $this|bool|\Magento\Framework\DataObject
+ * @deprecated
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
public function proccessAdditionalValidation(\Magento\Framework\DataObject $request)
+ {
+ return $this->processAdditionalValidation($request);
+ }
+
+ /**
+ * Processing additional validation to check if carrier applicable.
+ *
+ * @param \Magento\Framework\DataObject $request
+ * @return $this|bool|\Magento\Framework\DataObject
+ * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+ * @SuppressWarnings(PHPMD.NPathComplexity)
+ */
+ public function processAdditionalValidation(\Magento\Framework\DataObject $request)
{
//Skip by item validation if there is no items in request
if (!count($this->getAllItems($request))) {
diff --git a/app/code/Magento/Shipping/Model/Shipping.php b/app/code/Magento/Shipping/Model/Shipping.php
index 2223cb8ae3bf2..57e055e83a58a 100644
--- a/app/code/Magento/Shipping/Model/Shipping.php
+++ b/app/code/Magento/Shipping/Model/Shipping.php
@@ -259,7 +259,7 @@ public function collectCarrierRates($carrierCode, $request)
$carrier->setActiveFlag($this->_availabilityConfigField);
$result = $carrier->checkAvailableShipCountries($request);
if (false !== $result && !$result instanceof \Magento\Quote\Model\Quote\Address\RateResult\Error) {
- $result = $carrier->proccessAdditionalValidation($request);
+ $result = $carrier->processAdditionalValidation($request);
}
/*
* Result will be false if the admin set not to show the shipping module
diff --git a/app/code/Magento/Shipping/Test/Unit/Model/Carrier/AbstractCarrierOnlineTest.php b/app/code/Magento/Shipping/Test/Unit/Model/Carrier/AbstractCarrierOnlineTest.php
index 6f87eb171a398..b40f5b26b89f1 100644
--- a/app/code/Magento/Shipping/Test/Unit/Model/Carrier/AbstractCarrierOnlineTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Model/Carrier/AbstractCarrierOnlineTest.php
@@ -100,7 +100,7 @@ public function testComposePackages()
$this->stockItemData->expects($this->atLeastOnce())->method('getIsDecimalDivided')
->will($this->returnValue(true));
- $this->carrier->proccessAdditionalValidation($request);
+ $this->carrier->processAdditionalValidation($request);
}
public function testParseXml()
diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/products_to_import_with_two_stores.csv b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/products_to_import_with_two_stores.csv
index f343cd20ecc78..eda9f3a01bf55 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/products_to_import_with_two_stores.csv
+++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/products_to_import_with_two_stores.csv
@@ -1,4 +1,4 @@
product_websites,store_view_code,attribute_set_code,product_type,categories,sku,price,name,url_key
-base,,Default,simple,Default Category/category-defaultstore,product,123,product,product
+base,,Default,simple,Default Category/category-admin,product,123,product,product
,default,Default,simple,,product,,product-default,product-default
,fixturestore,Default,simple,,product,,product-fixture,product-fixture
diff --git a/lib/web/css/source/lib/_rating.less b/lib/web/css/source/lib/_rating.less
index e585e4489d65e..535fa44616039 100644
--- a/lib/web/css/source/lib/_rating.less
+++ b/lib/web/css/source/lib/_rating.less
@@ -38,7 +38,7 @@
input[type="radio"] {
.lib-visually-hidden();
- &:focus,
+ &:hover,
&:checked {
+ label {
&:before {
diff --git a/lib/web/css/source/lib/_tables.less b/lib/web/css/source/lib/_tables.less
index 9c37e17b4fe82..43b63152946f8 100644
--- a/lib/web/css/source/lib/_tables.less
+++ b/lib/web/css/source/lib/_tables.less
@@ -530,7 +530,7 @@
display: block;
.lib-css(padding, @_table-responsive-cell-padding);
- &:before {
+ &[data-th]:before {
.lib-css(padding-right, @table-cell__padding-horizontal);
content: attr(data-th)': ';
display: inline-block;