HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: /var/www/html/insiders/wp-load/wp-content/plugins/affiliatex/includes/blocks/SingleProductBlock.php
<?php

namespace AffiliateX\Blocks;

defined( 'ABSPATH' ) || exit;

use AffiliateX\Helpers\AffiliateX_Helpers;

/**
 * AffiliateX Single Product Block
 *
 * @package AffiliateX
 */
class SingleProductBlock extends BaseBlock
{
	protected function get_slug(): string
	{
		return 'single-product';
	}

    private function render_pb_stars($ratings, $productRatingColor, $ratingInactiveColor, $ratingStarSize) {
        $stars = '';
        for ($i = 1; $i <= 5; $i++) {
            $color = ($i <= $ratings) ? $productRatingColor : $ratingInactiveColor;
            $stars .= sprintf(
                '<span style="color:%s;width:%dpx;height:%dpx;display:inline-flex;">
                    <svg fill="currentColor" width="%d" height="%d" viewBox="0 0 24 24">
                        <path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"></path>
                    </svg>
                </span>',
                esc_attr($color),
                esc_attr($ratingStarSize),
                esc_attr($ratingStarSize),
                esc_attr($ratingStarSize),
                esc_attr($ratingStarSize)
            );
        }
        return $stars;
    }

	protected function get_fields(): array
	{
		return [
			'block_id' => '',
			'productLayout' => 'layoutOne',
			'productTitle' => 'Title',
			'productTitleTag' => 'h2',
			'productContent' => 'You can have short product description here. It can be added as and enable/disable toggle option from which user can have control on it.',
			'productSubTitle' => 'Subtitle',
			'productSubTitleTag' => 'h3',
			'productContentType' => 'paragraph',
			'ContentListType' => 'unordered',
			'productContentList' => [],
			'productImageAlign' => 'left',
			'productSalePrice' => '$49',
			'productPrice' => '$59',
			'productIconList' => [
				'name' => 'check-circle-outline',
				'value' => 'far fa-check-circle'
			],
			'ratings' => 5,
			'edRatings' => false,
			'edTitle' => true,
			'edSubTitle' => false,
			'edContent' => true,
			'edPricing' => false,
			'PricingType' => 'picture',
			'productRatingColor' => '#FFB800',
			'ratingInactiveColor' => '#808080',
			'ratingContent' => 'Our Score',
			'ratingStarSize' => 25,
			'edButton' => false,
			'edProductImage' => false,
			'edRibbon' => false,
			'productRibbonLayout' => 'one',
			'ribbonText' => 'Sale',
			'ribbonAlign' => 'left',
			'ImgUrl' => '',
			'numberRatings' => '8.5',
			'productRatingAlign' => 'right',
			'productStarRatingAlign' => 'left',
			'productImageType' => 'default',
			'productImageExternal' => '',
			'productImageSiteStripe' => '',
			'productPricingAlign' => 'left',
		];
	}

	public function render(array $attributes, string $content) : string
	{
		$attributes = $this->parse_attributes($attributes);
		extract($attributes);

		if(is_array($productContentList) && count($productContentList) > 0 && isset($productContentList[0]['list']) && is_string($productContentList[0]['list']) && has_shortcode($productContentList[0]['list'], 'affiliatex-product')){
			$productContentList = do_shortcode($productContentList[0]['list']);
			$productContentList = json_decode($productContentList, true);
		}

		$wrapper_attributes = get_block_wrapper_attributes(array(
			'id' => "affiliatex-single-product-style-$block_id",
		));

		$productTitleTag = AffiliateX_Helpers::validate_tag($productTitleTag, 'h2');
		$productSubTitleTag = AffiliateX_Helpers::validate_tag($productSubTitleTag, 'h3');

		$layoutClass = '';
		if ($productLayout === 'layoutOne') {
			$layoutClass = ' product-layout-1';
		} elseif ($productLayout === 'layoutTwo') {
			$layoutClass = ' product-layout-2';
		} elseif ($productLayout === 'layoutThree') {
			$layoutClass = ' product-layout-3';
		}
		if (str_contains($content, $layoutClass)) {
			return str_replace('app/src/images/fallback', 'src/images/fallback', $content);
		}

		$ratingClass = '';
		if ($PricingType === 'picture') {
			$ratingClass = 'star-rating';
		} elseif ($PricingType === 'number') {
			$ratingClass = 'number-rating';
		}

		$imageAlign = $edProductImage ? 'image-' . $productImageAlign : '';
		$ribbonLayout = '';
		if ($productRibbonLayout === 'one') {
			$ribbonLayout = ' ribbon-layout-one';
		} elseif ($productRibbonLayout === 'two') {
			$ribbonLayout = ' ribbon-layout-two';
		}

		$imageClass = !$edProductImage ? 'no-image' : '';
		$productRatingNumberClass = $PricingType === 'number' ? 'rating-align-' . $productRatingAlign : '';
		$ImageURL = $productImageType === 'default' ? $ImgUrl : $productImageExternal;
		$isSiteStripe = 'sitestripe' === $productImageType && '' !== $productImageSiteStripe ? true : false;
		$productImage = AffiliateX_Helpers::affiliatex_get_media_image_html($ImgID, $ImageURL, $ImgAlt, $isSiteStripe, $productImageSiteStripe);

		$list = AffiliateX_Helpers::render_list(
			array(
				'listType' => $ContentListType,
				'unorderedType' => 'icon',
				'listItems' => $productContentList,
				'iconName' => $productIconList['value'],
			)
		);
		ob_start();
		include $this->get_template_path();
		return ob_get_clean();
	}
}