![]() 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/Block/Product/ |
<?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(); } }