![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-catalog/Helper/Product/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Catalog\Helper\Product; use Magento\Catalog\Model\Product; use Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection; /** * Catalog Product Compare Helper * * @api * @SuppressWarnings(PHPMD.LongVariable) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.CookieAndSessionMisuse) * @since 100.0.2 */ class Compare extends \Magento\Framework\Url\Helper\Data { /** * Product Compare Items Collection * * @var Collection */ protected $_itemCollection; /** * Product Comapare Items Collection has items flag * * @var bool */ protected $_hasItems; /** * Allow used Flat catalog product for product compare items collection * * @var bool */ protected $_allowUsedFlat = true; /** * Customer id for Compare Helper * * @var null|int */ protected $_customerId = null; /** * Catalog session for Compare Helper * * @var \Magento\Catalog\Model\Session */ protected $_catalogSession; /** * Customer session for Compare Helper * * @var \Magento\Customer\Model\Session */ protected $_customerSession; /** * Customer visitor for Compare Helper * * @var \Magento\Customer\Model\Visitor */ protected $_customerVisitor; /** * Catalog product visibility for Compare Helper * * @var \Magento\Catalog\Model\Product\Visibility */ protected $_catalogProductVisibility; /** * Product compare item collection factory * * @var \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory */ protected $_itemCollectionFactory; /** * @var \Magento\Framework\Data\Form\FormKey */ protected $_formKey; /** * @var \Magento\Wishlist\Helper\Data */ protected $_wishlistHelper; /** * @var \Magento\Framework\Data\Helper\PostHelper */ protected $postHelper; /** * @var \Magento\Store\Model\StoreManagerInterface */ private $_storeManager; /** * @param \Magento\Framework\App\Helper\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory * @param \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility * @param \Magento\Customer\Model\Visitor $customerVisitor * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Catalog\Model\Session $catalogSession * @param \Magento\Framework\Data\Form\FormKey $formKey * @param \Magento\Wishlist\Helper\Data $wishlistHelper * @param \Magento\Framework\Data\Helper\PostHelper $postHelper * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Framework\App\Helper\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory, \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility, \Magento\Customer\Model\Visitor $customerVisitor, \Magento\Customer\Model\Session $customerSession, \Magento\Catalog\Model\Session $catalogSession, \Magento\Framework\Data\Form\FormKey $formKey, \Magento\Wishlist\Helper\Data $wishlistHelper, \Magento\Framework\Data\Helper\PostHelper $postHelper ) { $this->_itemCollectionFactory = $itemCollectionFactory; $this->_catalogProductVisibility = $catalogProductVisibility; $this->_customerVisitor = $customerVisitor; $this->_customerSession = $customerSession; $this->_catalogSession = $catalogSession; $this->_formKey = $formKey; $this->_wishlistHelper = $wishlistHelper; $this->postHelper = $postHelper; $this->_storeManager = $storeManager; parent::__construct($context); } /** * Retrieve compare list url * * @return string */ public function getListUrl() { $params = [ \Magento\Framework\App\ActionInterface::PARAM_NAME_URL_ENCODED => $this->getEncodedUrl() ]; return $this->_getUrl('catalog/product_compare', $params); } /** * Get parameters used for build add product to compare list urls * * @param Product $product * @return string */ public function getPostDataParams($product) { $params = ['product' => $product->getId()]; $requestingPageUrl = $this->_getRequest()->getParam('requesting_page_url'); if (!empty($requestingPageUrl)) { $encodedUrl = $this->urlEncoder->encode($requestingPageUrl); $params[\Magento\Framework\App\ActionInterface::PARAM_NAME_URL_ENCODED] = $encodedUrl; } return $this->postHelper->getPostData($this->getAddUrl(), $params); } /** * Retrieve url for adding product to compare list * * @return string */ public function getAddUrl() { return $this->_getUrl('catalog/product_compare/add'); } /** * Retrieve add to wishlist params * * @param Product $product * @return string */ public function getAddToWishlistParams($product) { $beforeCompareUrl = $this->_catalogSession->getBeforeCompareUrl(); $encodedUrl = [ \Magento\Framework\App\ActionInterface::PARAM_NAME_URL_ENCODED => $this->getEncodedUrl($beforeCompareUrl) ]; return $this->_wishlistHelper->getAddParams($product, $encodedUrl); } /** * Retrieve add to cart url * * @param Product $product * @return string */ public function getAddToCartUrl($product) { $beforeCompareUrl = $this->_catalogSession->getBeforeCompareUrl(); $params = [ 'product' => $product->getId(), \Magento\Framework\App\ActionInterface::PARAM_NAME_URL_ENCODED => $this->getEncodedUrl($beforeCompareUrl), '_secure' => $this->_getRequest()->isSecure() ]; return $this->_getUrl('checkout/cart/add', $params); } /** * Retrieve remove item from compare list url * * @return string */ public function getRemoveUrl() { return $this->_getUrl('catalog/product_compare/remove'); } /** * Get parameters to remove products from compare list * * @param Product $product * @return string */ public function getPostDataRemove($product) { $data = [ \Magento\Framework\App\ActionInterface::PARAM_NAME_URL_ENCODED => '', 'product' => $product->getId(), 'confirmation' => true, 'confirmationMessage' => __('Are you sure you want to remove this item from your Compare Products list?') ]; return $this->postHelper->getPostData($this->getRemoveUrl(), $data); } /** * Retrieve clear compare list url * * @return string */ public function getClearListUrl() { return $this->_getUrl('catalog/product_compare/clear'); } /** * Get parameters to clear compare list * * @return string */ public function getPostDataClearList() { $params = [ \Magento\Framework\App\ActionInterface::PARAM_NAME_URL_ENCODED => '', 'confirmation' => true, 'confirmationMessage' => __('Are you sure you want to remove all items from your Compare Products list?'), ]; return $this->postHelper->getPostData($this->getClearListUrl(), $params); } /** * Retrieve compare list items collection * * @return Collection */ public function getItemCollection() { if (!$this->_itemCollection) { // cannot be placed in constructor because of the cyclic dependency which cannot be fixed with proxy class // collection uses this helper in constructor when calling isEnabledFlat() method $this->_itemCollection = $this->_itemCollectionFactory->create(); $this->_itemCollection->useProductItem()->setStoreId($this->_storeManager->getStore()->getId()); if ($this->_customerSession->isLoggedIn()) { $this->_itemCollection->setCustomerId($this->_customerSession->getCustomerId()); } elseif ($this->_customerId) { $this->_itemCollection->setCustomerId($this->_customerId); } else { $this->_itemCollection->setVisitorId($this->_customerVisitor->getId()); } $this->_itemCollection->setVisibility($this->_catalogProductVisibility->getVisibleInSiteIds()); /* Price data is added to consider item stock status using price index */ $this->_itemCollection->addPriceData(); $this->_itemCollection->addAttributeToSelect('name')->addUrlRewrite()->load(); /* update compare items count */ $count = count($this->_itemCollection); $counts = $this->_catalogSession->getCatalogCompareItemsCountPerWebsite() ?: []; $counts[$this->_storeManager->getWebsite()->getId()] = $count; $this->_catalogSession->setCatalogCompareItemsCountPerWebsite($counts); $this->_catalogSession->setCatalogCompareItemsCount($count); //deprecated } return $this->_itemCollection; } /** * Calculate cache product compare collection * * @param bool $logout * @return $this */ public function calculate($logout = false) { /** @var $collection Collection */ $collection = $this->_itemCollectionFactory->create() ->useProductItem(); if (!$logout && $this->_customerSession->isLoggedIn()) { $collection->setCustomerId($this->_customerSession->getCustomerId()); } elseif ($this->_customerId) { $collection->setCustomerId($this->_customerId); } else { $collection->setVisitorId($this->_customerVisitor->getId()); } /* Price data is added to consider item stock status using price index */ $collection->addPriceData() ->setVisibility($this->_catalogProductVisibility->getVisibleInSiteIds()); $count = $collection->getSize(); $counts = $this->_catalogSession->getCatalogCompareItemsCountPerWebsite() ?: []; $counts[$this->_storeManager->getWebsite()->getId()] = $count; $this->_catalogSession->setCatalogCompareItemsCountPerWebsite($counts); $this->_catalogSession->setCatalogCompareItemsCount($count); //deprecated return $this; } /** * Retrieve count of items in compare list * * @return int */ public function getItemCount() { $counts = $this->_catalogSession->getCatalogCompareItemsCountPerWebsite() ?: []; if (!isset($counts[$this->_storeManager->getWebsite()->getId()])) { $this->calculate(); } return $counts[$this->_storeManager->getWebsite()->getId()] ?? 0; } /** * Check has items * * @return bool */ public function hasItems() { return $this->getItemCount() > 0; } /** * Set is allow used flat (for collection) * * @param bool $flag * @return $this */ public function setAllowUsedFlat($flag) { $this->_allowUsedFlat = (bool)$flag; return $this; } /** * Retrieve is allow used flat (for collection) * * @return bool * @SuppressWarnings(PHPMD.BooleanGetMethodName) */ public function getAllowUsedFlat() { return $this->_allowUsedFlat; } /** * Setter for customer id * * @param int $id * @return $this */ public function setCustomerId($id) { $this->_customerId = $id; return $this; } }