| @@ -150,9 +150,8 @@ | ||
| 150 | 150 | <?php |
| 151 | 151 | $hookData = [ |
| 152 | 152 | 'cart' => $this->cart |
| 153 | 153 | ]; |
| 154 | - do_action_deprecated('fluent_cart/afrer_checkout_page_start', [$hookData], '1.3.16', 'fluent_cart/after_checkout_page_start', 'Use fluent_cart/after_checkout_page_start instead of fluent_cart/afrer_checkout_page_start. It will be removed in v1.4.3.'); | |
| 155 | 154 | do_action('fluent_cart/after_checkout_page_start', $hookData); |
| 156 | 155 | } |
| 157 | 156 | |
| 158 | 157 | public function renderNotices() |
| @@ -776,8 +775,9 @@ | ||
| 776 | 775 | } |
| 777 | 776 | |
| 778 | 777 | $selectedPaymentMethod = Arr::get($this->cart->checkout_data, 'form_data._fct_pay_method', ''); |
| 779 | 778 | $activePaymentMethods = PaymentMethods::getActiveMethodInstance($this->cart); |
| 779 | + $hadActiveMethods = !empty($activePaymentMethods); | |
| 780 | 780 | |
| 781 | 781 | $activePaymentMethods = apply_filters('fluent_cart/checkout_active_payment_methods', $activePaymentMethods, [ |
| 782 | 782 | 'cart' => $this->cart |
| 783 | 783 | ]); |
| @@ -782,11 +782,28 @@ | ||
| 782 | 782 | 'cart' => $this->cart |
| 783 | 783 | ]); |
| 784 | 784 | |
| 785 | 785 | if (!$selectedPaymentMethod && !empty($activePaymentMethods)) { |
| 786 | - $selectedPaymentMethod = $activePaymentMethods[0] ? $activePaymentMethods[0]->getMeta('route') : ''; | |
| 786 | + // reset() not [0] — the filter above may return a non-zero-indexed array. | |
| 787 | + $firstMethod = reset($activePaymentMethods); | |
| 788 | + $selectedPaymentMethod = $firstMethod ? $firstMethod->getMeta('route') : ''; | |
| 787 | 789 | } |
| 788 | 790 | |
| 791 | + /** | |
| 792 | + * The payment method rendered as checked. An add-on that renders its own | |
| 793 | + * selector outside this list (e.g. saved payment methods) returns a route | |
| 794 | + * that is not in the list, so no gateway here is checked — the page then | |
| 795 | + * arrives with the add-on's choice already selected instead of a gateway | |
| 796 | + * being checked first and switched over by JS after load. | |
| 797 | + * | |
| 798 | + * @param string $selectedPaymentMethod | |
| 799 | + * @param array $context ['cart' => Cart, 'payment_methods' => array] | |
| 800 | + */ | |
| 801 | + $selectedPaymentMethod = (string) apply_filters('fluent_cart/checkout/selected_payment_method', $selectedPaymentMethod, [ | |
| 802 | + 'cart' => $this->cart, | |
| 803 | + 'payment_methods' => $activePaymentMethods | |
| 804 | + ]); | |
| 805 | + | |
| 789 | 806 | $checkoutMethodStyle = $this->storeSettings->get('checkout_method_style', 'logo'); |
| 790 | 807 | |
| 791 | 808 | ?> |
| 792 | 809 | <div id="fluent_payment_methods" class="fluent_payment_methods"> |
| @@ -813,9 +830,13 @@ | ||
| 813 | 830 | ?> |
| 814 | 831 | <?php endforeach; ?> |
| 815 | 832 | <?php else: ?> |
| 816 | 833 | <?php |
| 817 | - $emptyText = esc_html__('No Payment method is activated for this site yet.', 'fluent-cart'); | |
| 834 | + if ($hadActiveMethods) { | |
| 835 | + $emptyText = esc_html__('None of the available payment methods can process this order. Please contact the store.', 'fluent-cart'); | |
| 836 | + } else { | |
| 837 | + $emptyText = esc_html__('No Payment method is activated for this site yet.', 'fluent-cart'); | |
| 838 | + } | |
| 818 | 839 | if (current_user_can('manage_options')) { |
| 819 | 840 | $emptyText .= '<a href="' . esc_url(URL::getDashboardUrl('settings/payments')) . '" target="_blank">' . esc_html__('Activate from settings.', 'fluent-cart') . '</a>'; |
| 820 | 841 | } |
| 821 | 842 | echo '<div class="fct-empty-state">' . wp_kses_post($emptyText) . '</div>'; |
| @@ -927,9 +948,9 @@ | ||
| 927 | 948 | 'route' => $route, |
| 928 | 949 | 'method_title' => $methodTitle, |
| 929 | 950 | 'method_style' => $methodStyle, |
| 930 | 951 | ]; |
| 931 | - $paymentMethodClass = apply_filters_deprecated('fluent_cart_payment_method_list_class', ['', $pmContext], '1.3.16', 'fluent_cart/payment_method_list_class', 'Use fluent_cart/payment_method_list_class instead of fluent_cart_payment_method_list_class.'); | |
| 952 | + $paymentMethodClass = ''; | |
| 932 | 953 | $paymentMethodClass = apply_filters('fluent_cart/payment_method_list_class', $paymentMethodClass, $pmContext); |
| 933 | 954 | |
| 934 | 955 | ?> |
| 935 | 956 | <div class="<?php echo "fluent-cart-checkout_embed_payment_container fluent-cart-checkout_embed_payment_container_" . esc_attr($route . ' ' . $paymentMethodClass); ?>" |