viewData = $viewData; $this->variants = $this->viewData['variants']; $this->storeSettings = new StoreSettings(); $signName = $this->storeSettings->get('currency'); $this->sign = CurrenciesHelper::getCurrencySign($signName); $this->showCartButton = Arr::get($this->viewData, 'show_cart_button', 1); } public function render() { ?>
renderVariant(); ?>
variants as $index => $variant) { $this->repeatInterval = Arr::get($variant, 'other_info.repeat_interval', null); $this->itemPrice = esc_html(Helper::toDecimal(Arr::get($variant, 'item_price', 0), false, false, false)); $this->comparePrice = esc_html(Helper::toDecimal(Arr::get($variant, 'compare_price', 0), false, false, false, false)); $otherInfo = Arr::get($variant, 'other_info', null); $this->paymentInfo = Helper::generateSubscriptionInfo($otherInfo, $this->itemPrice); $this->setupFeeInfo = Helper::generateSetupFeeInfo($otherInfo); $featureDescription = Arr::get($variant, 'other_info.description', ''); $this->featureItems = explode("\n", $featureDescription); $this->paymentType = Arr::get($variant, 'payment_type'); $licenseMeta = Arr::get($variant, 'product.licenses_meta.meta_value', null); $this->licenseEnable = Arr::get($licenseMeta, 'enabled', 'no'); ?>
sign) ?> itemPrice) ?> repeatInterval)): ?> /repeatInterval) ?>
sign) ?> sign, $this->comparePrice ); ?> comparePrice); ?>
paymentInfo); ?> setupFeeInfo); ?>
renderFeatureItems(); ?>
showCartButton == 1 && $this->paymentType !== 'subscription' && $this->licenseEnable !== 'yes' ) { $this->renderCartButton($variant); } if (Arr::get($this->viewData, 'show_checkout_button', 1) == 1) { $this->renderDirectCheckoutButton($variant); } ?>
viewData, 'button_options', ''); $buttonValues = self::stringToAssocArray($buttonOptions); $buttonText = !empty($buttonValues['cartButtonText']) ? $buttonValues['cartButtonText'] : __('Add To Cart', 'fluent-cart'); if ($variant['stock_status'] === Helper::IN_STOCK) { $data = [ 'add_to_cart_button_text' => $buttonText, 'product_id' => Arr::get($variant, 'id', ''), 'quantity' => 1, 'variation_type' => Arr::get($variant, 'variation_type', ''), 'payment_type' => Arr::get($variant, 'payment_type', ''), ]; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaped in view template echo AddToCartShortcode::make()->enqueueAssets()->render($data); } else { $this->renderOutOfStockButton(); } } public function renderOutOfStockButton() { ?> storeSettings->get('direct_checkout_button_text', __('Buy Now', 'fluent-cart')); $buttonOptions = Arr::get($this->viewData, 'button_options', ''); $buttonValues = self::stringToAssocArray($buttonOptions); $buttonText = !empty($buttonValues['text']) ? $buttonValues['text'] : $directCheckoutButtonText; $checkoutUrl = add_query_arg([ 'fluent-cart' => 'instant_checkout' ], site_url()); if ($variant['stock_status'] === Helper::IN_STOCK) { // Handle product parameters $productId = Arr::get($variant, 'id'); $quantity = Arr::get($this->viewData, 'quantity', 1); // Build base parameters $params = [ 'item_id' => $productId, 'quantity' => $quantity, ]; // Merge in any additional params $extraParams = Arr::get($this->viewData, 'url_params', ''); if (!empty($extraParams)) { // If it's a query string like "foo=bar&baz=qux" parse_str($extraParams, $extraArray); $params = array_merge($params, $extraArray); } $checkoutUrl = add_query_arg($params, $checkoutUrl); $data = [ 'direct_checkout_button_text' => $buttonText, 'checkout_url' => $checkoutUrl, 'product_id' => Arr::get($variant, 'id'), 'is_pricing_table' => true, 'quantity' => 1, 'variation_type' => Arr::get($variant, 'variation_type', ''), 'stock_availability' => Arr::get($variant, 'stock_status', ''), ]; } } private static function stringToAssocArray($string): array { $result = []; if (!empty($string)) { $pairs = explode(', ', $string); foreach ($pairs as $pair) { // Check if $pair contains '=' using Str::contains() before splitting if (Str::contains($pair, '=')) { list($key, $value) = explode('=', $pair); $result[trim($key)] = trim($value); } } } return $result; } }