![]() 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/cartforge.co/vendor/magento/framework/Pricing/Render/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\Pricing\Render; use Magento\Framework\Pricing\Amount\AmountInterface; use Magento\Framework\Pricing\SaleableInterface; use Magento\Framework\Pricing\Price\PriceInterface; use Magento\Framework\View\Element\AbstractBlock; /** * @api * @since 100.0.2 */ class RendererPool extends AbstractBlock { /** * Default price group type */ const DEFAULT_PRICE_GROUP_TYPE = 'default'; /** * Default price renderer */ const PRICE_RENDERER_DEFAULT = \Magento\Framework\Pricing\Render\PriceBox::class; /** * Default amount renderer */ const AMOUNT_RENDERER_DEFAULT = \Magento\Framework\Pricing\Render\Amount::class; /** * Create amount renderer * * @param string $priceCode * @param SaleableInterface $saleableItem * @param array $data * @throws \InvalidArgumentException * @return PriceBoxRenderInterface */ public function createPriceRender( $priceCode, SaleableInterface $saleableItem, array $data = [] ) { $type = $saleableItem->getTypeId(); // implement class resolving fallback $pattern = [ $type . '/prices/' . $priceCode . '/render_class', $type . '/default_render_class', 'default/prices/' . $priceCode . '/render_class', 'default/default_render_class', ]; $renderClassName = $this->findDataByPattern($pattern); if (!$renderClassName) { throw new \InvalidArgumentException( 'Class name for price code "' . $priceCode . '" not registered' ); } $price = $saleableItem->getPriceInfo()->getPrice($priceCode); if (!$price) { throw new \InvalidArgumentException( 'Price model for price code "' . $priceCode . '" not registered' ); } $arguments['data'] = $data; $arguments['rendererPool'] = $this; $arguments['price'] = $price; $arguments['saleableItem'] = $saleableItem; /** @var \Magento\Framework\View\Element\Template $renderBlock */ $renderBlock = $this->getLayout()->createBlock($renderClassName, '', $arguments); if (!$renderBlock instanceof PriceBoxRenderInterface) { throw new \InvalidArgumentException( 'Block "' . $renderClassName . '" must implement \Magento\Framework\Pricing\Render\PriceBoxRenderInterface' ); } $renderBlock->setTemplate($this->getRenderBlockTemplate($type, $priceCode)); return $renderBlock; } /** * Create amount renderer * * @param AmountInterface $amount * @param SaleableInterface $saleableItem * @param PriceInterface $price * @param array $data * @return AmountRenderInterface * @throws \InvalidArgumentException */ public function createAmountRender( AmountInterface $amount, SaleableInterface $saleableItem = null, PriceInterface $price = null, array $data = [] ) { $type = self::DEFAULT_PRICE_GROUP_TYPE; if ($saleableItem) { $type = $saleableItem->getTypeId(); } $priceCode = null; $renderClassName = self::AMOUNT_RENDERER_DEFAULT; if ($price) { $priceCode = $price->getPriceCode(); // implement class resolving fallback $pattern = [ $type . '/prices/' . $priceCode . '/amount_render_class', $type . '/default_amount_render_class', 'default/prices/' . $priceCode . '/amount_render_class', 'default/default_amount_render_class', ]; $renderClassName = $this->findDataByPattern($pattern); if (!$renderClassName) { throw new \InvalidArgumentException( 'There is no amount render class for price code "' . $priceCode . '"' ); } } $arguments['data'] = $data; $arguments['rendererPool'] = $this; $arguments['amount'] = $amount; if ($saleableItem) { $arguments['saleableItem'] = $saleableItem; if ($price) { $arguments['price'] = $price; } } /** @var \Magento\Framework\View\Element\Template $amountBlock */ $amountBlock = $this->getLayout()->createBlock($renderClassName, '', $arguments); if (!$amountBlock instanceof AmountRenderInterface) { throw new \InvalidArgumentException( 'Block "' . $renderClassName . '" must implement \Magento\Framework\Pricing\Render\AmountRenderInterface' ); } $amountBlock->setTemplate($this->getAmountRenderBlockTemplate($type, $priceCode)); return $amountBlock; } /** * @param SaleableInterface $saleableItem * @param PriceInterface $price * @return array */ public function getAdjustmentRenders(SaleableInterface $saleableItem = null, PriceInterface $price = null) { $itemType = null === $saleableItem ? 'default' : $saleableItem->getTypeId(); $priceType = null === $price ? 'default' : $price->getPriceCode(); $fallbackPattern = [ "{$itemType}/adjustments/{$priceType}", "{$itemType}/adjustments/default", "default/adjustments/{$priceType}", "default/adjustments/default", ]; $renders = $this->findDataByPattern($fallbackPattern); if ($renders) { foreach ($renders as $code => $configuration) { /** @var \Magento\Framework\View\Element\Template $render */ $render = $this->getLayout()->createBlock($configuration['adjustment_render_class']); $render->setTemplate($configuration['adjustment_render_template']); $renders[$code] = $render; } } return $renders; } /** * @param string $type * @param string $priceCode * @return string * @throws \InvalidArgumentException */ protected function getAmountRenderBlockTemplate($type, $priceCode) { $pattern = [ $type . '/prices/' . $priceCode . '/amount_render_template', $type . '/default_amount_render_template', 'default/prices/' . $priceCode . '/amount_render_template', 'default/default_amount_render_template', ]; $template = $this->findDataByPattern($pattern); if (!$template) { throw new \InvalidArgumentException( 'For type "' . $type . '" amount render block not configured' ); } return $template; } /** * @param string $type * @param string $priceCode * @return string * @throws \InvalidArgumentException */ protected function getRenderBlockTemplate($type, $priceCode) { $pattern = [ $type . '/prices/' . $priceCode . '/render_template', $type . '/default_render_template', 'default/prices/' . $priceCode . '/render_template', 'default/default_render_template', ]; $template = $this->findDataByPattern($pattern); if (!$template) { throw new \InvalidArgumentException( 'Price code "' . $priceCode . '" render block not configured' ); } return $template; } /** * @param array $pattern * @return null|string */ protected function findDataByPattern(array $pattern) { $data = null; foreach ($pattern as $key) { $data = $this->getData($key); if ($data) { break; } } return $data; } }