| Current Path : /var/www/magento.test.indacotrentino.com/www/vendor/magento/module-catalog/Block/Product/ |
| Current File : /var/www/magento.test.indacotrentino.com/www/vendor/magento/module-catalog/Block/Product/View.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Catalog\Block\Product;
use Magento\Catalog\Api\ProductRepositoryInterface;
/**
* Product View block
* @api
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @since 100.0.2
*/
class View extends AbstractProduct implements \Magento\Framework\DataObject\IdentityInterface
{
/**
* Magento string lib
*
* @var \Magento\Framework\Stdlib\StringUtils
*/
protected $string;
/**
* @var \Magento\Framework\Json\EncoderInterface
*/
protected $_jsonEncoder;
/**
* @var \Magento\Framework\Pricing\PriceCurrencyInterface
* @deprecated 102.0.0
*/
protected $priceCurrency;
/**
* @var \Magento\Framework\Url\EncoderInterface
*/
protected $urlEncoder;
/**
* @var \Magento\Catalog\Helper\Product
*/
protected $_productHelper;
/**
* @var \Magento\Catalog\Model\ProductTypes\ConfigInterface
*/
protected $productTypeConfig;
/**
* @var \Magento\Framework\Locale\FormatInterface
*/
protected $_localeFormat;
/**
* @var \Magento\Customer\Model\Session
*/
protected $customerSession;
/**
* @var ProductRepositoryInterface
*/
protected $productRepository;
/**
* @param Context $context
* @param \Magento\Framework\Url\EncoderInterface $urlEncoder
* @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
* @param \Magento\Framework\Stdlib\StringUtils $string
* @param \Magento\Catalog\Helper\Product $productHelper
* @param \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig
* @param \Magento\Framework\Locale\FormatInterface $localeFormat
* @param \Magento\Customer\Model\Session $customerSession
* @param ProductRepositoryInterface|\Magento\Framework\Pricing\PriceCurrencyInterface $productRepository
* @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
* @param array $data
* @codingStandardsIgnoreStart
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
\Magento\Catalog\Block\Product\Context $context,
\Magento\Framework\Url\EncoderInterface $urlEncoder,
\Magento\Framework\Json\EncoderInterface $jsonEncoder,
\Magento\Framework\Stdlib\StringUtils $string,
\Magento\Catalog\Helper\Product $productHelper,
\Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig,
\Magento\Framework\Locale\FormatInterface $localeFormat,
\Magento\Customer\Model\Session $customerSession,
ProductRepositoryInterface $productRepository,
\Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
array $data = []
) {
$this->_productHelper = $productHelper;
$this->urlEncoder = $urlEncoder;
$this->_jsonEncoder = $jsonEncoder;
$this->productTypeConfig = $productTypeConfig;
$this->string = $string;
$this->_localeFormat = $localeFormat;
$this->customerSession = $customerSession;
$this->productRepository = $productRepository;
$this->priceCurrency = $priceCurrency;
parent::__construct(
$context,
$data
);
}
// @codingStandardsIgnoreEnd
/**
* Return wishlist widget options
*
* @return array
* @deprecated 101.0.1
*/
public function getWishlistOptions()
{
return ['productType' => $this->getProduct()->getTypeId()];
}
/**
* Retrieve current product model
*
* @return \Magento\Catalog\Model\Product
*/
public function getProduct()
{
if (!$this->_coreRegistry->registry('product') && $this->getProductId()) {
$product = $this->productRepository->getById($this->getProductId());
$this->_coreRegistry->register('product', $product);
}
return $this->_coreRegistry->registry('product');
}
/**
* Check if product can be emailed to friend
*
* @return bool
*/
public function canEmailToFriend()
{
return false;
}
/**
* Retrieve url for direct adding product to cart
*
* @param \Magento\Catalog\Model\Product $product
* @param array $additional
* @return string
*/
public function getAddToCartUrl($product, $additional = [])
{
if ($this->hasCustomAddToCartUrl()) {
return $this->getCustomAddToCartUrl();
}
if ($this->getRequest()->getParam('wishlist_next')) {
$additional['wishlist_next'] = 1;
}
$addUrlKey = \Magento\Framework\App\ActionInterface::PARAM_NAME_URL_ENCODED;
$addUrlValue = $this->_urlBuilder->getUrl('*/*/*', ['_use_rewrite' => true, '_current' => true]);
$additional[$addUrlKey] = $this->urlEncoder->encode($addUrlValue);
return $this->_cartHelper->getAddUrl($product, $additional);
}
/**
* Get JSON encoded configuration which can be used for JS dynamic price calculation depending on product options
*
* @return string
*/
public function getJsonConfig()
{
/* @var $product \Magento\Catalog\Model\Product */
$product = $this->getProduct();
$tierPrices = [];
$priceInfo = $product->getPriceInfo();
$tierPricesList = $priceInfo->getPrice('tier_price')->getTierPriceList();
foreach ($tierPricesList as $tierPrice) {
$tierPriceData = [
'qty' => $tierPrice['price_qty'],
'price' => $tierPrice['price']->getValue(),
'basePrice' => $tierPrice['price']->getBaseAmount()
];
$tierPrices[] = $tierPriceData;
}
if (!$this->hasOptions()) {
$config = [
'productId' => $product->getId(),
'priceFormat' => $this->_localeFormat->getPriceFormat(),
'tierPrices' => $tierPrices
];
return $this->_jsonEncoder->encode($config);
}
$config = [
'productId' => (int)$product->getId(),
'priceFormat' => $this->_localeFormat->getPriceFormat(),
'prices' => [
'baseOldPrice' => [
'amount' => $priceInfo->getPrice('regular_price')->getAmount()->getBaseAmount() * 1,
'adjustments' => []
],
'oldPrice' => [
'amount' => $priceInfo->getPrice('regular_price')->getAmount()->getValue() * 1,
'adjustments' => []
],
'basePrice' => [
'amount' => $priceInfo->getPrice('final_price')->getAmount()->getBaseAmount() * 1,
'adjustments' => []
],
'finalPrice' => [
'amount' => $priceInfo->getPrice('final_price')->getAmount()->getValue() * 1,
'adjustments' => []
]
],
'idSuffix' => '_clone',
'tierPrices' => $tierPrices
];
$responseObject = new \Magento\Framework\DataObject();
$this->_eventManager->dispatch('catalog_product_view_config', ['response_object' => $responseObject]);
if (is_array($responseObject->getAdditionalOptions())) {
foreach ($responseObject->getAdditionalOptions() as $option => $value) {
$config[$option] = $value;
}
}
return $this->_jsonEncoder->encode($config);
}
/**
* Return true if product has options
*
* @return bool
*/
public function hasOptions()
{
if ($this->getProduct()->getTypeInstance()->hasOptions($this->getProduct())) {
return true;
}
return false;
}
/**
* Check if product has required options
*
* @return bool
*/
public function hasRequiredOptions()
{
return $this->getProduct()->getTypeInstance()->hasRequiredOptions($this->getProduct());
}
/**
* Define if setting of product options must be shown instantly.
* Used in case when options are usually hidden and shown only when user
* presses some button or link. In editing mode we better show these options
* instantly.
*
* @return bool
*/
public function isStartCustomization()
{
return $this->getProduct()->getConfigureMode() || $this->_request->getParam('startcustomization');
}
/**
* Get default qty - either as preconfigured, or as 1.
*
* Also restricts it by minimal qty.
*
* @param null|\Magento\Catalog\Model\Product $product
* @return int|float
*/
public function getProductDefaultQty($product = null)
{
if (!$product) {
$product = $this->getProduct();
}
$qty = $this->getMinimalQty($product);
$config = $product->getPreconfiguredValues();
$configQty = $config->getQty();
if ($configQty > $qty) {
$qty = $configQty;
}
return $qty;
}
/**
* Get container name, where product options should be displayed
*
* @return string
*/
public function getOptionsContainer()
{
return $this->getProduct()->getOptionsContainer() == 'container1' ? 'container1' : 'container2';
}
/**
* Check whether quantity field should be rendered
*
* @return bool
*/
public function shouldRenderQuantity()
{
return !$this->productTypeConfig->isProductSet($this->getProduct()->getTypeId());
}
/**
* Get Validation Rules for Quantity field
*
* @return array
*/
public function getQuantityValidators()
{
$validators = [];
$validators['required-number'] = true;
return $validators;
}
/**
* Return identifiers for produced content
*
* @return array
*/
public function getIdentities()
{
$product = $this->getProduct();
return $product ? $product->getIdentities() : [];
}
/**
* Retrieve customer data object
*
* @return int
*/
protected function getCustomerId()
{
return $this->customerSession->getCustomerId();
}
}