-
Notifications
You must be signed in to change notification settings - Fork 82
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #434 from magento/develop
Merge develop into 2002.0
- Loading branch information
Showing
56 changed files
with
1,217 additions
and
736 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
diff -Naur a/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php b/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php | ||
--- a/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php | ||
+++ b/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php | ||
@@ -2955,7 +2955,7 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface | ||
if (isset($condition['to'])) { | ||
$query .= empty($query) ? '' : ' AND '; | ||
$to = $this->_prepareSqlDateCondition($condition, 'to'); | ||
- $query = $this->_prepareQuotedSqlCondition($query . $conditionKeyMap['to'], $to, $fieldName); | ||
+ $query = $query . $this->_prepareQuotedSqlCondition($conditionKeyMap['to'], $to, $fieldName); | ||
} | ||
} elseif (array_key_exists($key, $conditionKeyMap)) { | ||
$value = $condition[$key]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
diff -Naur a/vendor/magento/module-catalog/Model/Product/ProductFrontendAction/Synchronizer.php b/vendor/magento/module-catalog/Model/Product/ProductFrontendAction/Synchronizer.php | ||
--- a/vendor/magento/module-catalog/Model/Product/ProductFrontendAction/Synchronizer.php | ||
+++ b/vendor/magento/module-catalog/Model/Product/ProductFrontendAction/Synchronizer.php | ||
@@ -138,7 +138,9 @@ private function getProductIdsByActions(array $actions) | ||
$productIds = []; | ||
|
||
foreach ($actions as $action) { | ||
- $productIds[] = $action['product_id']; | ||
+ if (isset($action['product_id']) && is_int($action['product_id'])) { | ||
+ $productIds[] = $action['product_id']; | ||
+ } | ||
} | ||
|
||
return $productIds; | ||
@@ -159,33 +161,37 @@ public function syncActions(array $productsData, $typeId) | ||
$customerId = $this->session->getCustomerId(); | ||
$visitorId = $this->visitor->getId(); | ||
$collection = $this->getActionsByType($typeId); | ||
- $collection->addFieldToFilter('product_id', $this->getProductIdsByActions($productsData)); | ||
- | ||
- /** | ||
- * Note that collection is also filtered by visitor id and customer id | ||
- * This collection shouldnt be flushed when visitor has products and then login | ||
- * It can remove only products for visitor, or only products for customer | ||
- * | ||
- * ['product_id' => 'added_at'] | ||
- * @var ProductFrontendActionInterface $item | ||
- */ | ||
- foreach ($collection as $item) { | ||
- $this->entityManager->delete($item); | ||
- } | ||
- | ||
- foreach ($productsData as $productId => $productData) { | ||
- /** @var ProductFrontendActionInterface $action */ | ||
- $action = $this->productFrontendActionFactory->create([ | ||
- 'data' => [ | ||
- 'visitor_id' => $customerId ? null : $visitorId, | ||
- 'customer_id' => $this->session->getCustomerId(), | ||
- 'added_at' => $productData['added_at'], | ||
- 'product_id' => $productId, | ||
- 'type_id' => $typeId | ||
- ] | ||
- ]); | ||
- | ||
- $this->entityManager->save($action); | ||
+ $productIds = $this->getProductIdsByActions($productsData); | ||
+ | ||
+ if ($productIds) { | ||
+ $collection->addFieldToFilter('product_id', $productIds); | ||
+ | ||
+ /** | ||
+ * Note that collection is also filtered by visitor id and customer id | ||
+ * This collection shouldnt be flushed when visitor has products and then login | ||
+ * It can remove only products for visitor, or only products for customer | ||
+ * | ||
+ * ['product_id' => 'added_at'] | ||
+ * @var ProductFrontendActionInterface $item | ||
+ */ | ||
+ foreach ($collection as $item) { | ||
+ $this->entityManager->delete($item); | ||
+ } | ||
+ | ||
+ foreach ($productsData as $productId => $productData) { | ||
+ /** @var ProductFrontendActionInterface $action */ | ||
+ $action = $this->productFrontendActionFactory->create([ | ||
+ 'data' => [ | ||
+ 'visitor_id' => $customerId ? null : $visitorId, | ||
+ 'customer_id' => $this->session->getCustomerId(), | ||
+ 'added_at' => $productData['added_at'], | ||
+ 'product_id' => $productId, | ||
+ 'type_id' => $typeId | ||
+ ] | ||
+ ]); | ||
+ | ||
+ $this->entityManager->save($action); | ||
+ } | ||
} | ||
} | ||
|
||
diff -Naur a/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php b/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php | ||
index 3d06e27542f0..a6c0dba6e175 100644 | ||
--- a/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php | ||
+++ b/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php | ||
@@ -2904,7 +2904,7 @@ public function prepareSqlCondition($fieldName, $condition) | ||
if (isset($condition['to'])) { | ||
$query .= empty($query) ? '' : ' AND '; | ||
$to = $this->_prepareSqlDateCondition($condition, 'to'); | ||
- $query = $this->_prepareQuotedSqlCondition($query . $conditionKeyMap['to'], $to, $fieldName); | ||
+ $query = $query . $this->_prepareQuotedSqlCondition($conditionKeyMap['to'], $to, $fieldName); | ||
} | ||
} elseif (array_key_exists($key, $conditionKeyMap)) { | ||
$value = $condition[$key]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
diff -Naur a/vendor/magento/module-catalog/Model/Product/ProductFrontendAction/Synchronizer.php b/vendor/magento/module-catalog/Model/Product/ProductFrontendAction/Synchronizer.php | ||
--- a/vendor/magento/module-catalog/Model/Product/ProductFrontendAction/Synchronizer.php | ||
+++ b/vendor/magento/module-catalog/Model/Product/ProductFrontendAction/Synchronizer.php | ||
@@ -16,6 +16,8 @@ | ||
use Magento\Framework\EntityManager\EntityManager; | ||
|
||
/** | ||
+ * A Product Widget Synchronizer. | ||
+ * | ||
* Service which allows to sync product widget information, such as product id with db. In order to reuse this info | ||
* on different devices | ||
*/ | ||
@@ -85,9 +87,10 @@ public function __construct( | ||
} | ||
|
||
/** | ||
- * Find lifetime in configuration. Configuration is hold in Stores Configuration | ||
- * Also this configuration is generated by: | ||
- * @see \Magento\Catalog\Model\Widget\RecentlyViewedStorageConfiguration | ||
+ * Finds lifetime in configuration. | ||
+ * | ||
+ * Configuration is hold in Stores Configuration. Also this configuration is generated by | ||
+ * {@see Magento\Catalog\Model\Widget\RecentlyViewedStorageConfiguration} | ||
* | ||
* @param string $namespace | ||
* @return int | ||
@@ -108,6 +111,8 @@ private function getLifeTimeByNamespace($namespace) | ||
} | ||
|
||
/** | ||
+ * Filters actions. | ||
+ * | ||
* In order to avoid suspicious actions, we need to filter them in DESC order, and slice only items that | ||
* can be persisted in database. | ||
* | ||
@@ -138,7 +143,9 @@ private function getProductIdsByActions(array $actions) | ||
$productIds = []; | ||
|
||
foreach ($actions as $action) { | ||
- $productIds[] = $action['product_id']; | ||
+ if (isset($action['product_id']) && is_int($action['product_id'])) { | ||
+ $productIds[] = $action['product_id']; | ||
+ } | ||
} | ||
|
||
return $productIds; | ||
@@ -159,33 +166,37 @@ public function syncActions(array $productsData, $typeId) | ||
$customerId = $this->session->getCustomerId(); | ||
$visitorId = $this->visitor->getId(); | ||
$collection = $this->getActionsByType($typeId); | ||
- $collection->addFieldToFilter('product_id', $this->getProductIdsByActions($productsData)); | ||
- | ||
- /** | ||
- * Note that collection is also filtered by visitor id and customer id | ||
- * This collection shouldn't be flushed when visitor has products and then login | ||
- * It can remove only products for visitor, or only products for customer | ||
- * | ||
- * ['product_id' => 'added_at'] | ||
- * @var ProductFrontendActionInterface $item | ||
- */ | ||
- foreach ($collection as $item) { | ||
- $this->entityManager->delete($item); | ||
- } | ||
- | ||
- foreach ($productsData as $productId => $productData) { | ||
- /** @var ProductFrontendActionInterface $action */ | ||
- $action = $this->productFrontendActionFactory->create([ | ||
- 'data' => [ | ||
- 'visitor_id' => $customerId ? null : $visitorId, | ||
- 'customer_id' => $this->session->getCustomerId(), | ||
- 'added_at' => $productData['added_at'], | ||
- 'product_id' => $productId, | ||
- 'type_id' => $typeId | ||
- ] | ||
- ]); | ||
- | ||
- $this->entityManager->save($action); | ||
+ $productIds = $this->getProductIdsByActions($productsData); | ||
+ | ||
+ if ($productIds) { | ||
+ $collection->addFieldToFilter('product_id', $productIds); | ||
+ | ||
+ /** | ||
+ * Note that collection is also filtered by visitor id and customer id | ||
+ * This collection shouldn't be flushed when visitor has products and then login | ||
+ * It can remove only products for visitor, or only products for customer | ||
+ * | ||
+ * ['product_id' => 'added_at'] | ||
+ * @var ProductFrontendActionInterface $item | ||
+ */ | ||
+ foreach ($collection as $item) { | ||
+ $this->entityManager->delete($item); | ||
+ } | ||
+ | ||
+ foreach ($productsData as $productId => $productData) { | ||
+ /** @var ProductFrontendActionInterface $action */ | ||
+ $action = $this->productFrontendActionFactory->create([ | ||
+ 'data' => [ | ||
+ 'visitor_id' => $customerId ? null : $visitorId, | ||
+ 'customer_id' => $this->session->getCustomerId(), | ||
+ 'added_at' => $productData['added_at'], | ||
+ 'product_id' => $productId, | ||
+ 'type_id' => $typeId | ||
+ ] | ||
+ ]); | ||
+ | ||
+ $this->entityManager->save($action); | ||
+ } | ||
} | ||
} | ||
|
||
diff -Naur a/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php b/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php | ||
--- a/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php | ||
+++ b/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php | ||
@@ -2955,7 +2955,7 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface | ||
if (isset($condition['to'])) { | ||
$query .= empty($query) ? '' : ' AND '; | ||
$to = $this->_prepareSqlDateCondition($condition, 'to'); | ||
- $query = $this->_prepareQuotedSqlCondition($query . $conditionKeyMap['to'], $to, $fieldName); | ||
+ $query = $query . $this->_prepareQuotedSqlCondition($conditionKeyMap['to'], $to, $fieldName); | ||
} | ||
} elseif (array_key_exists($key, $conditionKeyMap)) { | ||
$value = $condition[$key]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.