638 lines
41 KiB
PHP
638 lines
41 KiB
PHP
<?php
|
|
namespace Formipay;
|
|
use Formipay\Traits\SingletonTrait;
|
|
use Formipay\Field;
|
|
// Exit if accessed directly
|
|
if ( ! defined( 'ABSPATH' ) ) exit;
|
|
|
|
class Render {
|
|
|
|
use SingletonTrait;
|
|
|
|
private $display_label;
|
|
private $show_label;
|
|
private $asterisk;
|
|
|
|
private static $form_ids = [];
|
|
|
|
/**
|
|
* Register hooks.
|
|
*/
|
|
private function __construct() {
|
|
add_shortcode('formipay', [$this, 'shortcode']);
|
|
add_action('wp_enqueue_scripts', [$this, 'public_enqueue_style'] );
|
|
}
|
|
|
|
/**
|
|
* Shortcode handler.
|
|
*
|
|
* @param array $atts
|
|
* @param string|null $content
|
|
* @return string|false
|
|
*/
|
|
public function shortcode($atts, $content = null) {
|
|
$atts = shortcode_atts(['form' => 0], $atts, 'formipay');
|
|
|
|
if ($atts['form'] == 0) {
|
|
return false;
|
|
}
|
|
|
|
$post_id = intval($atts['form']);
|
|
$currency = 'Rp. ';
|
|
|
|
if ($post_id > 0) {
|
|
$currency = formipay_post_currency($post_id);
|
|
self::$form_ids[] = $post_id;
|
|
}
|
|
|
|
$form_settings = get_post_meta($post_id, 'formipay_settings', true);
|
|
$point_symbol = formipay_get_post_meta($post_id, 'multistep_point_symbol');
|
|
$point_icons = formipay_get_post_meta($post_id, 'multistep_point_icons');
|
|
$page_breaks = [];
|
|
if(!empty($form_settings['fields'])){
|
|
foreach($form_settings['fields'] as $field){
|
|
if($field['field_type'] == 'page_break'){
|
|
if($point_symbol == 'icon'){
|
|
$icons = json_decode($point_icons, true);
|
|
foreach($icons as $icon){
|
|
if($icon['field_id'] == $field['field_id']){
|
|
$field['icon'] = $icon['script'];
|
|
}
|
|
}
|
|
}
|
|
$page_breaks[] = $field;
|
|
}
|
|
}
|
|
}
|
|
ob_start();
|
|
|
|
$timezone = get_option('timezone_string', 'Asia/Jakarta');
|
|
|
|
$require_login = formipay_get_post_meta($post_id, 'require_login') === 'on';
|
|
$scheduled = formipay_get_post_meta($post_id, 'schedule_toggle') === 'on';
|
|
$render = true;
|
|
|
|
if ($require_login && !is_user_logged_in()) {
|
|
$render = false;
|
|
echo '<div class="formipay-message">' . wp_kses_post(formipay_get_post_meta($post_id, 'require_login_message')) . '</div>';
|
|
} elseif ($scheduled) {
|
|
$date_range = explode(',', formipay_get_post_meta($post_id, 'daterange'));
|
|
$date_from = new DateTime($date_range[0], new DateTimeZone($timezone));
|
|
$date_to = new DateTime($date_range[1], new DateTimeZone($timezone));
|
|
$now = new DateTime('now', new DateTimeZone($timezone));
|
|
|
|
if ($date_from > $now) {
|
|
$render = false;
|
|
?>
|
|
<div class="formipay-message">
|
|
<?php echo wp_kses_post(formipay_get_post_meta($post_id, 'waiting_message')); ?>
|
|
</div>
|
|
<?php
|
|
} elseif ($now > $date_to) {
|
|
$render = false;
|
|
?>
|
|
<div class="formipay-message">
|
|
<?php echo wp_kses_post(formipay_get_post_meta($post_id, 'expired_message')); ?>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
if ($render && $form_settings && is_array($form_settings['fields']) && count($form_settings['fields']) > 0) {
|
|
$this->public_enqueue_scripts();
|
|
$button_background_color = json_decode(formipay_get_post_meta($post_id, 'button_bg_color'), true );
|
|
$button_text_color = json_decode(formipay_get_post_meta($post_id, 'button_text_color'), true );
|
|
$button_border_color = json_decode( formipay_get_post_meta($post_id, 'button_border_color'), true );
|
|
|
|
?>
|
|
<div class="formipay-form-wrapper">
|
|
<style>
|
|
body {
|
|
--formipay-button-submit-bg-color: <?php echo esc_html($button_background_color['regular'] ?? '#000000'); ?>;
|
|
--formipay-button-submit-bg-color-hover: <?php echo esc_html($button_background_color['hover'] ?? '#ffffff'); ?>;
|
|
--formipay-button-submit-bg-color-active: <?php echo esc_html($button_background_color['active'] ?? '#ffffff'); ?>;
|
|
--formipay-button-submit-text-color: <?php echo esc_html($button_text_color['regular'] ?? '#ffffff'); ?>;
|
|
--formipay-button-submit-text-color-hover: <?php echo esc_html($button_text_color['hover'] ?? '#000000') ?>;
|
|
--formipay-button-submit-text-color-active: <?php echo esc_html($button_text_color['active'] ?? '#000000'); ?>;
|
|
--formipay-button-submit-border-color: <?php echo esc_html($button_border_color['regular'] ?? '#000000'); ?>;
|
|
--formipay-button-submit-border-color-hover: <?php echo esc_html($button_border_color['hover'] ?? '#ffffff'); ?>;
|
|
--formipay-button-submit-border-color-active: <?php echo esc_html($button_border_color['active'] ?? '#ffffff'); ?>;
|
|
--formipay-required-field-sign-color: <?php echo esc_html(formipay_get_post_meta($post_id, 'required_field_color')); ?>;
|
|
--formipay-payment-desktop-columns: <?php echo intval(formipay_get_post_meta($post_id, 'payment_desktop_columns') ?? 4); ?>;
|
|
--formipay-payment-tablet-columns: <?php echo intval(formipay_get_post_meta($post_id, 'payment_tablet_columns') ?? 3) ?>;
|
|
--formipay-payment-mobile-columns: <?php echo intval(formipay_get_post_meta($post_id, 'payment_mobile_columns') ?? 2) ?>;
|
|
<?php
|
|
if(formipay_isPopup($post_id)){
|
|
$popup_button_background_color = json_decode(formipay_get_post_meta($post_id, 'popup_button_bg_color'), true );
|
|
$popup_button_text_color = json_decode(formipay_get_post_meta($post_id, 'popup_button_text_color'), true );
|
|
$popup_button_border_color = json_decode( formipay_get_post_meta($post_id, 'popup_button_border_color'), true );
|
|
?>
|
|
--formipay-popup-button-bg-color: <?php echo esc_html($popup_button_background_color['regular'] ?? '#000000'); ?>;
|
|
--formipay-popup-button-bg-color-hover: <?php echo esc_html($popup_button_background_color['hover'] ?? '#ffffff'); ?>;
|
|
--formipay-popup-button-bg-color-active: <?php echo esc_html($popup_button_background_color['active'] ?? '#ffffff'); ?>;
|
|
--formipay-popup-button-text-color: <?php echo esc_html($popup_button_text_color['regular'] ?? '#ffffff'); ?>;
|
|
--formipay-popup-button-text-color-hover: <?php echo esc_html($popup_button_text_color['hover'] ?? '#000000'); ?>;
|
|
--formipay-popup-button-text-color-active: <?php echo esc_html($popup_button_text_color['active'] ?? '#000000'); ?>;
|
|
--formipay-popup-button-border-color: <?php echo esc_html($popup_button_border_color['regular'] ?? '#000000'); ?>;
|
|
--formipay-popup-button-border-color-hover: <?php echo esc_html($popup_button_border_color['hover'] ?? '#ffffff'); ?>;
|
|
--formipay-popup-button-border-color-active: <?php echo esc_html($popup_button_border_color['active'] ?? '#ffffff'); ?>;
|
|
--formipay-popup-backdrop-color: <?php echo esc_html(formipay_get_post_meta($post_id, 'popup_content_wrapper_backdrop_color') ?? 'rgba(0,0,0,0.75)'); ?>;
|
|
--formipay-popup-wrapper-width: <?php echo esc_html(formipay_get_post_meta($post_id, 'popup_content_wrapper_width')); ?>px;
|
|
--formipay-popup-button-width: <?php echo esc_html(formipay_get_post_meta($post_id, 'popup_button_width') == 'fullwidth' ? '100%' : 'fit-content'); ?>;
|
|
<?php
|
|
}
|
|
if(count($page_breaks) > 0 && !is_admin()){
|
|
?>
|
|
--formipay-page-break-count: <?php echo count($page_breaks) + 1 ?>;
|
|
<?php
|
|
}
|
|
switch (formipay_get_post_meta($post_id, 'multistep_point_shape')) {
|
|
case 'rectangle':
|
|
?>
|
|
--formipay-step-shape-radius: 0%;
|
|
<?php
|
|
break;
|
|
case 'rounded':
|
|
?>
|
|
--formipay-step-shape-radius: 25%;
|
|
<?php
|
|
break;
|
|
|
|
default:
|
|
?>
|
|
--formipay-step-shape-radius: 50%;
|
|
<?php
|
|
break;
|
|
}
|
|
switch (formipay_get_post_meta($post_id, 'multistep_btn_size')) {
|
|
case 'smaller_than_submit':
|
|
?>
|
|
--formipay-step-button-size: .5em 1em;
|
|
--formipay-step-button-text-size: smaller;
|
|
--formipay-step-button-height: 32px;
|
|
<?php
|
|
break;
|
|
case 'larger_than_submit':
|
|
?>
|
|
--formipay-step-button-size: 1em 2em;
|
|
--formipay-step-button-text-size: larger;
|
|
--formipay-step-button-height: 48px;
|
|
<?php
|
|
break;
|
|
|
|
default:
|
|
?>
|
|
--formipay-step-button-size: .75em 1.5em;
|
|
--formipay-step-button-text-size: inherit;
|
|
--formipay-step-button-height: 40px;
|
|
<?php
|
|
break;
|
|
}
|
|
?>
|
|
}
|
|
</style>
|
|
|
|
<?php if(formipay_isPopup($post_id)) { ?>
|
|
<div class="formipay-popup modal" id="formipay-popup-<?php echo intval($post_id); ?>">
|
|
<?php } ?>
|
|
|
|
<form class="formipay-form" data-form-id="<?php echo intval($post_id); ?>" id="formipay-form-<?php echo intval($post_id); ?>">
|
|
<input type="hidden" id="product_name" value="<?php echo esc_attr(get_the_title($post_id)); ?>">
|
|
<input type="hidden" id="product_price" value="<?php echo esc_attr(formipay_get_post_meta($post_id, 'product_price')); ?>">
|
|
|
|
<?php if(formipay_isPopup($post_id) && !empty(formipay_get_post_meta($post_id, 'popup_content_wrapper_title'))) { ?>
|
|
<h4 class="formipay-popup-title"><?php echo esc_html(formipay_get_post_meta($post_id, 'popup_content_wrapper_title')); ?></h4>
|
|
<?php } ?>
|
|
|
|
<div class="formipay-form-body formipay-<?php echo (count($page_breaks) > 0 && !is_admin()) ? '1' : esc_attr(formipay_get_post_meta($post_id, 'form_layout_columns')); ?>-cols">
|
|
<div class="form-fields-wrapper">
|
|
<?php if(!empty(formipay_get_post_meta($post_id, 'product_description'))) { ?>
|
|
<div class="formipay-description">
|
|
<?php echo wp_kses_post(formipay_get_post_meta($post_id, 'product_description')); ?>
|
|
</div>
|
|
<?php } ?>
|
|
<?php
|
|
$label_show = formipay_get_post_meta($post_id, 'label_visibility') !== 'hide';
|
|
$this->display_label = !$label_show ? ' formipay-hidden-element' : '';
|
|
$this->asterisk = formipay_get_post_meta($post_id, 'required_field_sign') === 'text' ? formipay_get_post_meta($post_id, 'required_text') : '(*)';
|
|
|
|
if(count($page_breaks) > 0 && !is_admin()){
|
|
$this->render_top_pagination_process($page_breaks, $point_symbol);
|
|
}
|
|
|
|
foreach ($form_settings['fields'] as $field_id => $field) {
|
|
|
|
$field_id = str_replace('_config', '', $field_id);
|
|
$field['field_id'] = $field_id;
|
|
|
|
$field['placeholder'] = formipay_get_post_meta($post_id, 'field_placeholder') === 'label'
|
|
? ($field['label'] ?? '')
|
|
: ($field['placeholder'] ?? '');
|
|
|
|
$field['calculable'] = in_array($field['field_type'], ['hidden', 'select', 'checkbox', 'radio']) ? ' formipay-input-calculable' : '';
|
|
$field['calc_value'] = $field['calc_value'] ?? 0;
|
|
$field['calc'] = in_array($field['field_type'], ['hidden']) ? 'data-calc-value="' . $field['calc_value'] . '"' : '';
|
|
|
|
$this->render_field($post_id, $field_id, $field);
|
|
|
|
}
|
|
|
|
?>
|
|
<?php
|
|
if(count($page_breaks) > 0 && !is_admin()){
|
|
?>
|
|
<div class="formipay-field-group formipay-page-break formipay-page-break-payment">
|
|
<div class="formipay-page-break-information">
|
|
<label for="<?php echo esc_attr($field_id); ?>" class="formipay-label divider-label <?php echo esc_attr($display_label); ?>">
|
|
<?php echo esc_html__('Payment', 'formipay'); ?>
|
|
</label>
|
|
<span class="divider-line"></span>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
$this->render_bottom_pagination_process($post_id, $page_breaks);
|
|
?>
|
|
|
|
</div>
|
|
|
|
<div class="formipay-static-elements">
|
|
<div class="result-wrapper">
|
|
|
|
<input class="formipay-meta-input" type="hidden" name="user_id" value="<?php echo is_user_logged_in() ? esc_attr( absint( get_current_user_id() ) ) : ''; ?>">
|
|
<input class="formipay-meta-input" type="hidden" name="session_id" value="<?php echo esc_attr( sanitize_text_field( uniqid('', true) ) ); ?>">
|
|
<input class="formipay-meta-input" type="hidden" name="referrer" value="<?php echo isset($_SERVER['HTTP_REFERER']) ? esc_attr( esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) ) : ''; ?>">
|
|
<input class="formipay-meta-input" type="hidden" name="page_url" value="<?php echo isset($_SERVER['REQUEST_URI']) ? esc_attr( esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) : ''; ?>">
|
|
<input class="formipay-meta-input" type="hidden" name="timestamp" value="<?php echo esc_attr( absint( time() ) ); ?>">
|
|
<input class="formipay-meta-input" type="hidden" name="utm_source" value="<?php echo
|
|
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
isset($_GET['utm_source']) ? esc_attr( sanitize_text_field( wp_unslash( $_GET['utm_source'] ) ) ) : '';
|
|
?>">
|
|
<input class="formipay-meta-input" type="hidden" name="utm_medium" value="<?php echo
|
|
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
isset($_GET['utm_medium']) ? esc_attr( sanitize_text_field( wp_unslash( $_GET['utm_medium'] ) ) ) : '';
|
|
?>">
|
|
<input class="formipay-meta-input" type="hidden" name="utm_campaign" value="<?php echo
|
|
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
isset($_GET['utm_campaign']) ? esc_attr( sanitize_text_field( wp_unslash( $_GET['utm_campaign'] ) ) ) : '';
|
|
?>">
|
|
<input class="formipay-meta-input" type="hidden" name="ip_address" value="<?php echo
|
|
isset($_SERVER['REMOTE_ADDR']) ? esc_attr( sanitize_text_field( wp_unslash($_SERVER['REMOTE_ADDR']) ) ) : '';
|
|
?>">
|
|
<input class="formipay-meta-input" type="hidden" name="user_agent" value="<?php echo
|
|
isset($_SERVER['HTTP_USER_AGENT']) ? esc_attr( sanitize_text_field( wp_unslash($_SERVER['HTTP_USER_AGENT']) ) ) : '';
|
|
?>">
|
|
<input class="formipay-meta-input" type="hidden" name="device_type" value="<?php echo esc_attr( ( strpos( sanitize_text_field( wp_unslash($_SERVER['HTTP_USER_AGENT']) ), 'Mobile' ) !== false ) ? 'Mobile' : 'Desktop' ); ?>">
|
|
|
|
<?php
|
|
$static_element_sort = json_decode(formipay_get_post_meta($post_id, 'form_static_elements_sort'), true);
|
|
$static_element_active = $static_element_sort[1]['options'];
|
|
if(!empty($static_element_active)){
|
|
foreach($static_element_active as $element){
|
|
switch ($element['id']) {
|
|
case 'payment_methods':
|
|
$this->render_payment_options($post_id);
|
|
break;
|
|
case 'coupon_fields':
|
|
?>
|
|
<div class="formipay-field-group">
|
|
<div class="formipay-coupon-field-group">
|
|
<input type="text" name="coupon_code"
|
|
class="formipay-input formipay-code-input"
|
|
value="<?php echo
|
|
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
isset($_GET['coupon']) ? esc_attr( sanitize_text_field( wp_unslash($_GET['coupon'] ) ) ) : ''
|
|
?>" placeholder="Your coupon code"
|
|
data-label="Coupon Code">
|
|
<button type="button" data-text="<?php echo esc_html__( 'Apply', 'formipay' ); ?>" data-checking="<?php echo esc_html__( 'Checking...', 'formipay' ); ?>" id="apply_coupon_code"><?php echo esc_html__( 'Apply', 'formipay' ); ?></button>
|
|
</div>
|
|
<div class="formipay-coupon-alert-message"></div>
|
|
</div>
|
|
<?php
|
|
break;
|
|
case 'order_review':
|
|
?>
|
|
<div class="form-calculation form-calculate-<?php echo esc_attr($post_id); ?>">
|
|
<h4><?php echo esc_html(formipay_get_post_meta($post_id, 'order_review_title')); ?></h4>
|
|
<table id="formipay-review-order">
|
|
<tbody>
|
|
<tr class="formipay-product-row formipay-item-row main">
|
|
<?php
|
|
$price = formipay_get_post_meta($post_id, 'product_price');
|
|
if(formipay_get_post_meta($post_id, 'product_quantity_toggle') == 'on') {
|
|
$stock = formipay_get_post_meta($post_id, 'product_stock');
|
|
$stock_html = '';
|
|
if($stock > -1){
|
|
$stock = ' max="'.$stock.'"';
|
|
}
|
|
?>
|
|
<th>
|
|
<?php echo esc_html(get_the_title($post_id)); ?> <br>
|
|
<span class="product-qty-wrapper">
|
|
<button type="button" class="product-qty qty-min">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24">
|
|
<path fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14" />
|
|
</svg>
|
|
</button>
|
|
<input type="number" class="product-qty formipay-qty-input" value="<?php echo intval(formipay_get_post_meta($post_id, 'product_quantity_range')); ?>" step="<?php echo intval(formipay_get_post_meta($post_id, 'product_quantity_range')); ?>" min="<?php echo intval(formipay_get_post_meta($post_id, 'product_minimum_purchase')); ?>"<?php echo esc_html($stock) ?>>
|
|
<button type="button" class="product-qty qty-plus">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24">
|
|
<path fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 5v14m-7-7h14" />
|
|
</svg>
|
|
</button>
|
|
</span>
|
|
</th>
|
|
<td class="product_price"><?php echo esc_html(formipay_price_format(floatval($price) * intval(formipay_get_post_meta($post_id, 'product_quantity_range')), $post_id)); ?></td>
|
|
<?php
|
|
} else {
|
|
?>
|
|
<th>
|
|
<?php echo esc_html(get_the_title($post_id)); ?> <input type="hidden" class="formipay-qty-input" value="1">
|
|
</th>
|
|
<td><?php echo esc_html(formipay_price_format(floatval($price), $post_id)); ?></td>
|
|
<?php
|
|
}
|
|
?>
|
|
</tr>
|
|
<tr class="formipay-total-row">
|
|
<td colspan="2"></td>
|
|
</tr>
|
|
<tr class="formipay-grand-total-row">
|
|
<th><?php echo esc_html__( 'Total', 'formipay' ); ?></th>
|
|
<td class="grand_total"><?php echo esc_html(formipay_price_format(floatval($price), $post_id)); ?></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php
|
|
break;
|
|
case 'submit_button':
|
|
|
|
?>
|
|
|
|
<button type="submit" class="formipay-submit-button"
|
|
data-button-text="<?php echo esc_attr(formipay_get_post_meta($post_id, 'button_text')); ?>"
|
|
style="width: <?php echo formipay_get_post_meta($post_id, 'button_width') == 'fit-content' ? 'fit-content' : '100%' ?>;
|
|
margin-left: <?php echo formipay_get_post_meta($post_id, 'button_position') !== 'left' ? 'auto' : 'unset' ?>;
|
|
margin-right: <?php echo formipay_get_post_meta($post_id, 'button_position') !== 'right' ? 'auto' : 'unset' ?>;">
|
|
<?php echo esc_html(formipay_get_post_meta($post_id, 'button_text')); ?> - <?php echo esc_html(formipay_price_format(floatval($price), $post_id)); ?>
|
|
</button>
|
|
|
|
<?php
|
|
break;
|
|
case 'submit_response_notice':
|
|
?>
|
|
<div class="submit-response formipay-message" style="display: none;"></div>
|
|
<?php
|
|
break;
|
|
|
|
default:
|
|
do_action('formipay/render/static-element', $element['id']);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
?>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
<?php if(formipay_isPopup($post_id) && false == boolval(formipay_get_post_meta($post_id, 'popup_click_selector'))) { ?>
|
|
</div>
|
|
<div class="formipay-popup-trigger">
|
|
<a data-modal="#formipay-popup-<?php echo intval($post_id); ?>"
|
|
class="formipay-open-popup-button"
|
|
style="width: <?php echo formipay_get_post_meta($post_id, 'popup_button_width') == 'fit-content' ? 'fit-content' : '100%' ?>;
|
|
margin-left: <?php echo formipay_get_post_meta($post_id, 'popup_button_alignment') !== 'left' ? 'auto' : 'unset' ?>;
|
|
margin-right: <?php echo formipay_get_post_meta($post_id, 'popup_button_alignment') !== 'right' ? 'auto' : 'unset' ?>;">
|
|
<?php echo esc_html(formipay_get_post_meta($post_id, 'popup_button_text')); ?>
|
|
</a>
|
|
</div>
|
|
<?php } ?>
|
|
|
|
</div>
|
|
<?php
|
|
}
|
|
return ob_get_clean();
|
|
}
|
|
|
|
private function render_field($post_id, $field_id, $field) {
|
|
$type = $field['field_type'];
|
|
// Normalize method name for Field class
|
|
$method = "render_{$type}_field";
|
|
if (method_exists(Field::get_instance(), $method)) {
|
|
echo Field::get_instance()->$method($field);
|
|
} else {
|
|
// Optionally handle unknown field types
|
|
do_action('formipay/render/custom-field-type', $type, $field);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Render payment options
|
|
*/
|
|
private function render_payment_options($post_id) {
|
|
|
|
$payments = apply_filters( 'formipay/frontend/payment-list', [], $post_id );
|
|
|
|
?>
|
|
<div class="formipay-field-group">
|
|
<label class="formipay-label"><?php echo esc_html(formipay_get_post_meta($post_id, 'payment_section_title')); ?></label>
|
|
<div class="formipay-payments">
|
|
<?php
|
|
$unique_code = wp_rand(1, 999);
|
|
if(!empty($payments)){
|
|
foreach ($payments as $value => $payment) {
|
|
$channel = explode(':::', $value);
|
|
$gateway = $channel[0];
|
|
$payment_non_label_class = formipay_get_post_meta($post_id, 'payment_label') == 'on' ? '' : 'payment-logo-only';
|
|
$logo = '';
|
|
|
|
// Check if payment logo is an attachment ID or URL
|
|
if (!empty($payment[$gateway.'_logo'])) {
|
|
if (is_numeric($payment[$gateway.'_logo'])) {
|
|
// Media library image
|
|
$logo = wp_get_attachment_image(
|
|
intval($payment[$gateway.'_logo']),
|
|
['100', '40'],
|
|
false,
|
|
[
|
|
'class' => 'formipay-payment-logo formipay-'.$gateway.'-logo '.$payment_non_label_class,
|
|
'loading' => 'lazy'
|
|
]
|
|
);
|
|
} else {
|
|
// Static plugin image (add PHPCS ignore)
|
|
$logo_url = $payment[$gateway.'_logo'];
|
|
// phpcs:ignore PluginCheck.CodeAnalysis.ImageFunctions.NonEnqueuedImage
|
|
$logo = '<img src="' . esc_url($logo_url) . '"
|
|
width="100"
|
|
height="40"
|
|
class="formipay-payment-logo formipay-'.$gateway.'-logo '.$payment_non_label_class.'"
|
|
alt="' . esc_attr($payment[$gateway.'_name']) . '"
|
|
loading="lazy">';
|
|
}
|
|
}
|
|
?>
|
|
<div class="formipay-payment-option-group">
|
|
<label for="<?php echo esc_attr($value) ?>" class="formipay-label">
|
|
<input type="radio"
|
|
name="payment"
|
|
class="formipay-input formipay-input-calculable formipay-payment-channel"
|
|
id="<?php echo esc_attr($value); ?>"
|
|
value="<?php echo esc_attr($value); ?>"
|
|
required>
|
|
<?php echo $logo; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
|
|
<?php if(formipay_get_post_meta($post_id, 'payment_label') == 'on') { ?>
|
|
<span class="formipay-payment-name formipay-<?php echo esc_attr($gateway) ?>-name">
|
|
<?php echo esc_html($payment[$gateway.'_name']); ?>
|
|
</span>
|
|
<?php } ?>
|
|
</label>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
?>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Render progess pages (on top)
|
|
*/
|
|
private function render_top_pagination_process($page_breaks, $point_symbol){
|
|
|
|
$payment_symbol = count($page_breaks) + 1;
|
|
if($point_symbol == 'icon'){
|
|
$payment_symbol = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
<path fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 19H6a3 3 0 0 1-3-3V8a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v4.5M3 10h18m-5 9h6m-3-3l3 3l-3 3M7.005 15h.005M11 15h2" />
|
|
</svg>';
|
|
}
|
|
|
|
if(!empty($page_breaks)){
|
|
?>
|
|
<div class="formipay-top-pagination">
|
|
<?php
|
|
foreach($page_breaks as $index => $page){
|
|
$index = $index + 1;
|
|
$symbol = $index;
|
|
if($point_symbol == 'icon'){
|
|
$symbol = '<span class="pagination-icon">'.$page['icon'].'</span>';
|
|
}
|
|
?>
|
|
<div class="formipay-progress" data-page-number="<?php echo intval($index) ?>">
|
|
<div class="formipay-index-wrapper">
|
|
<span class="formipay-page-index"><?php echo wp_kses_post($symbol) ?></span>
|
|
<span class="formipay-page-label"><?php echo esc_html($page['label']) ?></span>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
?>
|
|
<div class="formipay-progress" data-page-number="<?php echo count($page_breaks) + 1 ?>">
|
|
<div class="formipay-index-wrapper">
|
|
<span class="formipay-page-index"><?php echo wp_kses_post($payment_symbol); ?></span>
|
|
<span class="formipay-page-label"><?php echo esc_html__( 'Payment', 'formipay' ); ?></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
}
|
|
|
|
private function render_bottom_pagination_process($post_id, $page_breaks) {
|
|
|
|
if(!empty($page_breaks)){
|
|
?>
|
|
<div class="formipay-bottom-pagination">
|
|
<button type="button" class="formipay-page-break-prev-button" disabled>
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
<path fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h6m3 0h1.5m3 0h.5M5 12l4 4m-4-4l4-4" />
|
|
</svg>
|
|
<?php echo esc_html(formipay_get_post_meta($post_id, 'multistep_btn_prev_text')); ?>
|
|
</button>
|
|
<button type="button" class="formipay-page-break-next-button">
|
|
<?php echo esc_html(formipay_get_post_meta($post_id, 'multistep_btn_next_text')); ?>
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
<path fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h.5m3 0H10m3 0h6m-4 4l4-4m-4-4l4 4" />
|
|
</svg>
|
|
</button>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Enqueue public scripts and styles.
|
|
*/
|
|
|
|
public function public_enqueue_style() {
|
|
wp_enqueue_style( 'sweetalert2', FORMIPAY_URL . 'vendor/SweetAlert2/sweetalert2.min.css', [], '11.14.5', 'all');
|
|
wp_enqueue_style( 'jquery-modal', FORMIPAY_URL . 'vendor/jQueryModal/jquery.modal.min.css', [], '0.9.1', 'all');
|
|
wp_enqueue_style( 'choices', FORMIPAY_URL . 'vendor/ChoicesJS/choices.min.css', [], FORMIPAY_VERSION, 'all' );
|
|
wp_enqueue_style( 'formipay-form', FORMIPAY_URL . 'public/assets/css/form-style.css', [], FORMIPAY_VERSION, 'all');
|
|
wp_enqueue_style( 'formipay-popup', FORMIPAY_URL . 'public/assets/css/popup-style.css', [], FORMIPAY_VERSION, 'all');
|
|
}
|
|
|
|
public function public_enqueue_scripts() {
|
|
|
|
wp_enqueue_script( 'jquery-blockui', FORMIPAY_URL . 'vendor/jQuery-UI/jquery.blockUI.min.js', ['jquery'], FORMIPAY_VERSION, true);
|
|
wp_enqueue_script( 'jquery-clipboard', FORMIPAY_URL . 'vendor/ClipboardJS/clipboard.min.js', ['jquery'], '2.0.11', true);
|
|
wp_enqueue_script( 'sweetalert2', FORMIPAY_URL . 'vendor/SweetAlert2/sweetalert2.min.js', ['jquery'], '11.14.5', true);
|
|
wp_enqueue_script( 'jquery-modal', FORMIPAY_URL . 'vendor/jQueryModal/jquery.modal.min.js', ['jquery'], '0.9.1', true);
|
|
wp_enqueue_script( 'choices', FORMIPAY_URL . 'vendor/ChoicesJS/choices.min.js', [], FORMIPAY_VERSION, true );
|
|
wp_enqueue_script( 'formipay-popup', FORMIPAY_URL . 'public/assets/js/popup-action.js', ['jquery', 'choices'], FORMIPAY_VERSION, true);
|
|
wp_enqueue_script( 'formipay-form', FORMIPAY_URL . 'public/assets/js/form-action.js', ['jquery', 'choices'], FORMIPAY_VERSION, true);
|
|
// Localize data for all forms
|
|
$form_data = [
|
|
'ajax_url' => admin_url('admin-ajax.php'),
|
|
'frontend_nonce' => wp_create_nonce('formipay-frontend-nonce'),
|
|
'nonce' => wp_create_nonce('formipay_order_submit'),
|
|
'forms' => $this->get_form_data()
|
|
];
|
|
wp_localize_script('formipay-form', 'formipay_form', $form_data);
|
|
|
|
}
|
|
|
|
private function get_form_data(){
|
|
$form_data = [];
|
|
foreach (array_unique(self::$form_ids) as $post_id) {
|
|
$form_data[$post_id] = [
|
|
'form_id' => $post_id,
|
|
'currency' => formipay_post_currency($post_id),
|
|
'buyer_phone_field' => formipay_get_post_meta($post_id, 'buyer_phone'),
|
|
'buyer_country_field' => formipay_get_post_meta($post_id, 'buyer_country'),
|
|
'buyer_phone_allow' => (bool) formipay_get_post_meta($post_id, 'buyer_allow_choose_country_code'),
|
|
'buyer_phone_country_code' => formipay_get_post_meta($post_id, 'buyer_phone_country_code'),
|
|
'decimal_digits' => formipay_get_post_meta($post_id, 'product_currency_decimal_digits'),
|
|
'decimal_symbol' => formipay_get_post_meta($post_id, 'product_currency_decimal_symbol'),
|
|
'thousand_separator' => formipay_get_post_meta($post_id, 'product_currency_thousand_separator'),
|
|
'notice_empty_text_message' => formipay_get_post_meta($post_id, 'empty_required_text_field'),
|
|
'notice_empty_select_message' => formipay_get_post_meta($post_id, 'empty_required_select_field'),
|
|
'notice_empty_agreement_message' => formipay_get_post_meta($post_id, 'empty_required_agreement_field'),
|
|
'quantity_toggle' => formipay_get_post_meta($post_id, 'product_quantity_toggle'),
|
|
'quantity_step' => formipay_get_post_meta($post_id, 'product_quantity_range'),
|
|
'quantity_min' => formipay_get_post_meta($post_id, 'product_minimum_purchase'),
|
|
'quantity_stock' => formipay_get_post_meta($post_id, 'product_stock'),
|
|
'button_text' => formipay_get_post_meta($post_id, 'button_text'),
|
|
'button_processing_text' => formipay_get_post_meta($post_id, 'button_processing_text'),
|
|
'isPopup' => formipay_isPopup($post_id),
|
|
'trigger_selector' => formipay_get_post_meta($post_id, 'popup_click_selector') ?
|
|
formipay_get_post_meta($post_id, 'popup_trigger_selector') :
|
|
'.formipay-open-popup-button',
|
|
'modal_selector' => '#formipay-popup-' . $post_id
|
|
];
|
|
}
|
|
|
|
return $form_data;
|
|
}
|
|
|
|
}
|
|
|
|
?>
|