diff --git a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Category.php b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Category.php
index 6a8190c2b765..85f8c0c6f4b4 100644
--- a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Category.php
+++ b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Category.php
@@ -6,6 +6,7 @@
namespace Magento\Sitemap\Model\ResourceModel\Catalog;
use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
+use Magento\Framework\App\ObjectManager;
/**
* Sitemap resource catalog collection model
@@ -45,27 +46,38 @@ class Category extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
*/
protected $metadataPool;
+ /**
+ * @var CategorySelectBuilder
+ */
+ private $categorySelectBuilder;
+
/**
* @param \Magento\Framework\Model\ResourceModel\Db\Context $context
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
* @param \Magento\Catalog\Model\ResourceModel\Category $categoryResource
* @param \Magento\Framework\EntityManager\MetadataPool $metadataPool
* @param string $connectionName
+ * @param CategorySelectBuilder|null $categorySelectBuilder
*/
public function __construct(
\Magento\Framework\Model\ResourceModel\Db\Context $context,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Catalog\Model\ResourceModel\Category $categoryResource,
\Magento\Framework\EntityManager\MetadataPool $metadataPool,
- $connectionName = null
+ $connectionName = null,
+ CategorySelectBuilder $categorySelectBuilder = null
) {
$this->_storeManager = $storeManager;
$this->_categoryResource = $categoryResource;
parent::__construct($context, $connectionName);
$this->metadataPool = $metadataPool;
+ $this->categorySelectBuilder = $categorySelectBuilder ??
+ ObjectManager::getInstance()->get(CategorySelectBuilder::class);
}
/**
+ * Initialize catalog category entity resource model
+ *
* @return void
*/
protected function _construct()
@@ -104,23 +116,17 @@ public function getCollection($storeId)
return false;
}
- $this->_select = $connection->select()->from(
- ['e' => $this->getMainTable()],
- [$this->getIdFieldName(), 'updated_at']
- )->joinLeft(
- ['url_rewrite' => $this->getTable('url_rewrite')],
- 'e.entity_id = url_rewrite.entity_id AND url_rewrite.is_autogenerated = 1'
- . $connection->quoteInto(' AND url_rewrite.store_id = ?', $store->getId())
- . $connection->quoteInto(' AND url_rewrite.entity_type = ?', CategoryUrlRewriteGenerator::ENTITY_TYPE),
- ['url' => 'request_path']
- )->where(
- 'e.path LIKE ?',
- $categoryRow['path'] . '/%'
+ $this->_select = $this->categorySelectBuilder->execute(
+ $this->getMainTable(),
+ $this->getIdFieldName(),
+ $store,
+ $categoryRow['path']
);
$this->_addFilter($storeId, 'is_active', 1);
$query = $connection->query($this->_select);
+
while ($row = $query->fetch()) {
$category = $this->_prepareCategory($row);
$categories[$category->getId()] = $category;
@@ -186,7 +192,6 @@ protected function _addFilter($storeId, $attributeCode, $value, $type = '=')
break;
default:
return false;
- break;
}
if ($attribute['backend_type'] == 'static') {
diff --git a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/CategorySelectBuilder.php b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/CategorySelectBuilder.php
new file mode 100644
index 000000000000..f35639735d13
--- /dev/null
+++ b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/CategorySelectBuilder.php
@@ -0,0 +1,67 @@
+resource = $resource;
+ }
+
+ /**
+ * Allow to modify a select statement with plugins
+ *
+ * @param string $mainTableName
+ * @param string $idField
+ * @param StoreInterface $store
+ * @param string $path
+ * @return Select
+ * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+ */
+ public function execute(string $mainTableName, string $idField, StoreInterface $store, string $path)
+ {
+ $connection = $this->resource->getConnection();
+
+ return $connection->select()->from(
+ ['e' => $mainTableName],
+ [$idField, 'updated_at']
+ )->joinLeft(
+ ['url_rewrite' => $this->resource->getTableName('url_rewrite')],
+ 'e.entity_id = url_rewrite.entity_id AND url_rewrite.is_autogenerated = 1'
+ . $connection->quoteInto(' AND url_rewrite.store_id = ?', $store->getId())
+ . $connection->quoteInto(' AND url_rewrite.entity_type = ?', CategoryUrlRewriteGenerator::ENTITY_TYPE),
+ ['url' => 'request_path']
+ )->where(
+ 'e.path LIKE ?',
+ $path . '/%'
+ );
+ }
+}
diff --git a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Product.php b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Product.php
index dc15819b087b..f1771ee79689 100644
--- a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Product.php
+++ b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/Product.php
@@ -5,11 +5,9 @@
*/
namespace Magento\Sitemap\Model\ResourceModel\Catalog;
-use Magento\Catalog\Helper\Product as HelperProduct;
use Magento\Catalog\Model\Product\Image\UrlBuilder;
use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
use Magento\Framework\App\ObjectManager;
-use Magento\Store\Model\ScopeInterface;
use Magento\Store\Model\Store;
/**
@@ -21,7 +19,7 @@
*/
class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
{
- const NOT_SELECTED_IMAGE = 'no_selection';
+ public const NOT_SELECTED_IMAGE = 'no_selection';
/**
* Collection Zend Db select
@@ -44,8 +42,6 @@ class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
protected $mediaGalleryReadHandler;
/**
- * Sitemap data
- *
* @var \Magento\Sitemap\Helper\Data
*/
protected $_sitemapData = null;
@@ -79,30 +75,19 @@ class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
/**
* @var \Magento\Catalog\Model\Product\Media\Config
* @deprecated 100.2.0 unused
+ * @see getProductImageUrl
*/
protected $_mediaConfig;
- /**
- * @var \Magento\Catalog\Model\Product
- */
- private $productModel;
-
- /**
- * @var \Magento\Catalog\Helper\Image
- */
- private $catalogImageHelper;
-
/**
* @var UrlBuilder
*/
private $imageUrlBuilder;
/**
- * Scope Config
- *
- * @var \Magento\Framework\App\Config\ScopeConfigInterface
+ * @var ProductSelectBuilder
*/
- private $scopeConfig;
+ private $productSelectBuilder;
/**
* Product constructor.
@@ -121,7 +106,9 @@ class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
* @param \Magento\Catalog\Helper\Image $catalogImageHelper
* @param \Magento\Framework\App\Config\ScopeConfigInterface|null $scopeConfig
* @param UrlBuilder $urlBuilder
+ * @param ProductSelectBuilder $productSelectBuilder
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
+ * @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function __construct(
\Magento\Framework\Model\ResourceModel\Db\Context $context,
@@ -137,7 +124,8 @@ public function __construct(
\Magento\Catalog\Model\Product $productModel = null,
\Magento\Catalog\Helper\Image $catalogImageHelper = null,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig = null,
- UrlBuilder $urlBuilder = null
+ UrlBuilder $urlBuilder = null,
+ ProductSelectBuilder $productSelectBuilder = null
) {
$this->_productResource = $productResource;
$this->_storeManager = $storeManager;
@@ -147,13 +135,9 @@ public function __construct(
$this->mediaGalleryReadHandler = $mediaGalleryReadHandler;
$this->_mediaConfig = $mediaConfig;
$this->_sitemapData = $sitemapData;
- $this->productModel = $productModel ?: ObjectManager::getInstance()->get(\Magento\Catalog\Model\Product::class);
- $this->catalogImageHelper = $catalogImageHelper;
$this->imageUrlBuilder = $urlBuilder ?? ObjectManager::getInstance()->get(UrlBuilder::class);
- $this->catalogImageHelper = $catalogImageHelper ?: ObjectManager::getInstance()
- ->get(\Magento\Catalog\Helper\Image::class);
- $this->scopeConfig = $scopeConfig ?: ObjectManager::getInstance()
- ->get(\Magento\Framework\App\Config\ScopeConfigInterface::class);
+ $this->productSelectBuilder = $productSelectBuilder ??
+ ObjectManager::getInstance()->get(ProductSelectBuilder::class);
parent::__construct($context, $connectionName);
}
@@ -311,28 +295,12 @@ public function getCollection($storeId)
}
$connection = $this->getConnection();
- $urlRewriteMetaDataCondition = '';
- if (!$this->isCategoryProductURLsConfig($storeId)) {
- $urlRewriteMetaDataCondition = ' AND url_rewrite.metadata IS NULL';
- }
- $this->_select = $connection->select()->from(
- ['e' => $this->getMainTable()],
- [$this->getIdFieldName(), $this->_productResource->getLinkField(), 'updated_at']
- )->joinInner(
- ['w' => $this->getTable('catalog_product_website')],
- 'e.entity_id = w.product_id',
- []
- )->joinLeft(
- ['url_rewrite' => $this->getTable('url_rewrite')],
- 'e.entity_id = url_rewrite.entity_id AND url_rewrite.is_autogenerated = 1'
- . $urlRewriteMetaDataCondition
- . $connection->quoteInto(' AND url_rewrite.store_id = ?', $store->getId())
- . $connection->quoteInto(' AND url_rewrite.entity_type = ?', ProductUrlRewriteGenerator::ENTITY_TYPE),
- ['url' => 'request_path']
- )->where(
- 'w.website_id = ?',
- $store->getWebsiteId()
+ $this->_select = $this->productSelectBuilder->execute(
+ $this->getMainTable(),
+ $this->getIdFieldName(),
+ $this->_productResource->getLinkField(),
+ $store
);
$this->_addFilter($store->getId(), 'visibility', $this->_productVisibility->getVisibleInSiteIds(), 'in');
@@ -491,20 +459,4 @@ private function getProductImageUrl($image)
{
return $this->imageUrlBuilder->getUrl($image, 'product_page_image_large');
}
-
- /**
- * Return Use Categories Path for Product URLs config value
- *
- * @param null|string $storeId
- *
- * @return bool
- */
- private function isCategoryProductURLsConfig($storeId)
- {
- return $this->scopeConfig->isSetFlag(
- HelperProduct::XML_PATH_PRODUCT_URL_USE_CATEGORY,
- ScopeInterface::SCOPE_STORE,
- $storeId
- );
- }
}
diff --git a/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/ProductSelectBuilder.php b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/ProductSelectBuilder.php
new file mode 100644
index 000000000000..a95ba1e59be5
--- /dev/null
+++ b/vendor/magento/module-sitemap/Model/ResourceModel/Catalog/ProductSelectBuilder.php
@@ -0,0 +1,76 @@
+resource = $resource;
+ }
+
+ /**
+ * Allow to modify a select statement with plugins
+ *
+ * @param string $mainTableName
+ * @param string $idField
+ * @param string $linkField
+ * @param StoreInterface $store
+ * @return Select
+ */
+ public function execute(
+ string $mainTableName,
+ string $idField,
+ string $linkField,
+ StoreInterface $store
+ ): Select {
+ $connection = $this->resource->getConnection();
+
+ return $connection->select()->from(
+ ['e' => $mainTableName],
+ [$idField, $linkField, 'updated_at']
+ )->joinInner(
+ ['w' => $this->resource->getTableName('catalog_product_website')],
+ 'e.entity_id = w.product_id',
+ []
+ )->joinLeft(
+ ['url_rewrite' => $this->resource->getTableName('url_rewrite')],
+ 'e.entity_id = url_rewrite.entity_id AND url_rewrite.is_autogenerated = 1'
+ . ' AND url_rewrite.metadata IS NULL'
+ . $connection->quoteInto(' AND url_rewrite.store_id = ?', $store->getId())
+ . $connection->quoteInto(' AND url_rewrite.entity_type = ?', ProductUrlRewriteGenerator::ENTITY_TYPE),
+ ['url' => 'request_path']
+ )->where(
+ 'w.website_id = ?',
+ $store->getWebsiteId()
+ );
+ }
+}
diff --git a/vendor/magento/module-url-rewrite/etc/db_schema.xml b/vendor/magento/module-url-rewrite/etc/db_schema.xml
index 2812efac0bfb..696e721e8efa 100644
--- a/vendor/magento/module-url-rewrite/etc/db_schema.xml
+++ b/vendor/magento/module-url-rewrite/etc/db_schema.xml
@@ -40,5 +40,9 @@
+
+
+
+
diff --git a/vendor/magento/module-url-rewrite/etc/db_schema_whitelist.json b/vendor/magento/module-url-rewrite/etc/db_schema_whitelist.json
index 658673959a73..92e34fed6c96 100644
--- a/vendor/magento/module-url-rewrite/etc/db_schema_whitelist.json
+++ b/vendor/magento/module-url-rewrite/etc/db_schema_whitelist.json
@@ -15,7 +15,8 @@
"index": {
"URL_REWRITE_TARGET_PATH": true,
"URL_REWRITE_STORE_ID_ENTITY_ID": true,
- "URL_REWRITE_ENTITY_ID": true
+ "URL_REWRITE_ENTITY_ID": true,
+ "URL_REWRITE_IS_AUTOGENERATED_METADATA": true
},
"constraint": {
"PRIMARY": true,