![]() 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. */ declare(strict_types=1); namespace Magento\Catalog\Block\Product; use Magento\Catalog\Block\Product\Image as ImageBlock; use Magento\Catalog\Model\View\Asset\ImageFactory as AssetImageFactory; use Magento\Catalog\Model\Product; use Magento\Catalog\Model\Product\Image\ParamsBuilder; use Magento\Catalog\Model\View\Asset\PlaceholderFactory; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\View\ConfigInterface; use Magento\Catalog\Helper\Image as ImageHelper; /** * Create imageBlock from product and view.xml * * @api */ class ImageFactory { /** * @var ConfigInterface */ private $presentationConfig; /** * @var AssetImageFactory */ private $viewAssetImageFactory; /** * @var ParamsBuilder */ private $imageParamsBuilder; /** * @var ObjectManagerInterface */ private $objectManager; /** * @var PlaceholderFactory */ private $viewAssetPlaceholderFactory; /** * @param ObjectManagerInterface $objectManager * @param ConfigInterface $presentationConfig * @param AssetImageFactory $viewAssetImageFactory * @param PlaceholderFactory $viewAssetPlaceholderFactory * @param ParamsBuilder $imageParamsBuilder */ public function __construct( ObjectManagerInterface $objectManager, ConfigInterface $presentationConfig, AssetImageFactory $viewAssetImageFactory, PlaceholderFactory $viewAssetPlaceholderFactory, ParamsBuilder $imageParamsBuilder ) { $this->objectManager = $objectManager; $this->presentationConfig = $presentationConfig; $this->viewAssetPlaceholderFactory = $viewAssetPlaceholderFactory; $this->viewAssetImageFactory = $viewAssetImageFactory; $this->imageParamsBuilder = $imageParamsBuilder; } /** * Remove class from custom attributes * * @param array $attributes * @return array */ private function filterCustomAttributes(array $attributes): array { if (isset($attributes['class'])) { unset($attributes['class']); } return $attributes; } /** * Retrieve image class for HTML element * * @param array $attributes * @return string */ private function getClass(array $attributes): string { return $attributes['class'] ?? 'product-image-photo'; } /** * Calculate image ratio * * @param int $width * @param int $height * @return float */ private function getRatio(int $width, int $height): float { if ($width && $height) { return $height / $width; } return 1.0; } /** * Get image label * * @param Product $product * @param string $imageType * @return string */ private function getLabel(Product $product, string $imageType): string { $label = $product->getData($imageType . '_' . 'label'); if (empty($label)) { $label = $product->getName(); } return (string)$label; } /** * Create image block from product * * @param Product $product * @param string $imageId * @param array|null $attributes * @return ImageBlock */ public function create(Product $product, string $imageId, array $attributes = null): ImageBlock { $viewImageConfig = $this->presentationConfig->getViewConfig()->getMediaAttributes( 'Magento_Catalog', ImageHelper::MEDIA_TYPE_CONFIG_NODE, $imageId ); $imageMiscParams = $this->imageParamsBuilder->build($viewImageConfig); $originalFilePath = $product->getData($imageMiscParams['image_type']); if ($originalFilePath === null || $originalFilePath === 'no_selection') { $imageAsset = $this->viewAssetPlaceholderFactory->create( [ 'type' => $imageMiscParams['image_type'] ] ); } else { $imageAsset = $this->viewAssetImageFactory->create( [ 'miscParams' => $imageMiscParams, 'filePath' => $originalFilePath, ] ); } $attributes = $attributes === null ? [] : $attributes; $data = [ 'data' => [ 'template' => 'Magento_Catalog::product/image_with_borders.phtml', 'image_url' => $imageAsset->getUrl(), 'width' => $imageMiscParams['image_width'], 'height' => $imageMiscParams['image_height'], 'label' => $this->getLabel($product, $imageMiscParams['image_type'] ?? ''), 'ratio' => $this->getRatio($imageMiscParams['image_width'] ?? 0, $imageMiscParams['image_height'] ?? 0), 'custom_attributes' => $this->filterCustomAttributes($attributes), 'class' => $this->getClass($attributes), 'product_id' => $product->getId() ], ]; return $this->objectManager->create(ImageBlock::class, $data); } }