update multicurrencies functionality on global level
This commit is contained in:
@@ -1,4 +1,89 @@
|
||||
jQuery(function($){
|
||||
|
||||
console.log(window);
|
||||
// helper: element -> vue component
|
||||
function getVueByFieldId(fieldId) {
|
||||
// Prefer registry if present
|
||||
if (window.wpcftoSelectRegistry && window.wpcftoSelectRegistry[fieldId]) {
|
||||
return window.wpcftoSelectRegistry[fieldId];
|
||||
}
|
||||
// fallback: find by id and read __vue__
|
||||
var el = document.getElementById(fieldId);
|
||||
return el && el.__vue__ ? el.__vue__ : null;
|
||||
}
|
||||
|
||||
function convertLabelValueArray(arr) {
|
||||
const result = {};
|
||||
$.each(arr || [], function(_, obj) {
|
||||
if (obj && obj.value != null) result[obj.value] = obj.label || obj.value;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
let defaultCurrencyDetected = false;
|
||||
let multicurrencyActive = Boolean(formipay_admin_setting.multicurrency);
|
||||
let all_currencies_array = formipay_admin_setting.all_currencies;
|
||||
let global_currencies_array = formipay_admin_setting.global_selected_currencies;
|
||||
let all_currencies_obj = formipay_admin_setting.all_currencies; // {value:label}
|
||||
let global_currencies_obj = formipay_admin_setting.global_selected_currencies;
|
||||
let saved_default_currency = formipay_admin_setting.default_currency;
|
||||
// let defaultCurrencyVM = null;
|
||||
// Default Currency Options
|
||||
console.log(formipay_admin_setting);
|
||||
|
||||
function set_default_currency_options(fieldId, currenciesObj, multicurrenciesArray) {
|
||||
const vm = getVueByFieldId(fieldId);
|
||||
if (!vm || typeof vm.updateCurrencyScope !== 'function') {
|
||||
console.error('wpcfto_select Vue instance not found or API missing for', fieldId);
|
||||
return;
|
||||
}
|
||||
// vm accepts both shapes and an optional saved default
|
||||
vm.updateCurrencyScope(currenciesObj, multicurrenciesArray || [], saved_default_currency);
|
||||
}
|
||||
|
||||
// bootstrap once field exists in DOM
|
||||
const FIELD_ID = 'General-default_currency'; // your actual field_id
|
||||
const detectTimer = setInterval(() => {
|
||||
const vm = getVueByFieldId(FIELD_ID);
|
||||
if (vm) {
|
||||
const base = multicurrencyActive ? global_currencies_obj : all_currencies_obj;
|
||||
set_default_currency_options(FIELD_ID, base, []); // initial
|
||||
clearInterval(detectTimer);
|
||||
}
|
||||
}, 250);
|
||||
|
||||
// reacting to multicurrency toggle
|
||||
$(document).on('change', '[name=enable_multicurrency]', function() {
|
||||
if ($(this).is(':checked')) {
|
||||
set_default_currency_options(FIELD_ID, global_currencies_obj, collectRepeaterSelectedCurrencies());
|
||||
} else {
|
||||
set_default_currency_options(FIELD_ID, all_currencies_obj, []);
|
||||
}
|
||||
});
|
||||
|
||||
// gather repeater currencies into [{value,label}]
|
||||
function collectRepeaterSelectedCurrencies() {
|
||||
var items = [];
|
||||
var repeaterItems = $('.multicurrencies.repeater').find('.wpcfto-repeater-single');
|
||||
$.each(repeaterItems, function(_, obj) {
|
||||
var label = $(obj).find('.wpcfto_group_title').text();
|
||||
var value = $(obj).find('[field_native_name_inner=currency]').find('input').val();
|
||||
if (value) items.push({ label: label || value, value: value });
|
||||
});
|
||||
return items;
|
||||
}
|
||||
|
||||
$(document).on('change', '[field_native_name_inner=currency] input', function() {
|
||||
set_default_currency_options(FIELD_ID, global_currencies_obj, collectRepeaterSelectedCurrencies());
|
||||
});
|
||||
|
||||
$(document).on('repeater-item-removed repeater-item-added', function(event, repeater) {
|
||||
if (repeater && repeater.field_name == 'multicurrencies') {
|
||||
set_default_currency_options(FIELD_ID, global_currencies_obj, collectRepeaterSelectedCurrencies());
|
||||
}
|
||||
});
|
||||
|
||||
// Paypal
|
||||
$(document).on('click', '.show-instruction', function(){
|
||||
$('.global-paypal-instruction').slideToggle();
|
||||
$(this).text(function(i, text){
|
||||
|
||||
@@ -33,6 +33,71 @@ function formipay_currency_array() {
|
||||
|
||||
}
|
||||
|
||||
function formipay_is_multi_currency_active() {
|
||||
|
||||
$formipay_settings = get_option('formipay_settings');
|
||||
$is_active = $formipay_settings['enable_multicurrency'];
|
||||
|
||||
return (bool) $is_active;
|
||||
|
||||
}
|
||||
|
||||
function formipay_default_currency($return='raw') {
|
||||
|
||||
$formipay_settings = get_option('formipay_settings');
|
||||
$default_currency = $formipay_settings['default_currency'];
|
||||
|
||||
switch ($return) {
|
||||
|
||||
case 'symbol':
|
||||
$output = formipay_get_currency_data_by_value($default_currency, 'symbol');
|
||||
break;
|
||||
|
||||
case 'title':
|
||||
$output = formipay_get_currency_data_by_value($default_currency, 'title');
|
||||
break;
|
||||
|
||||
case 'decimal_digits':
|
||||
$output = $formipay_settings['default_currency_decimal_digits'];
|
||||
break;
|
||||
|
||||
case 'decimal_symbol':
|
||||
$output = $formipay_settings['default_currency_decimal_symbol'];
|
||||
break;
|
||||
|
||||
case 'thousand_separator':
|
||||
$output = $formipay_settings['default_currency_thousand_separator'];
|
||||
break;
|
||||
|
||||
default:
|
||||
$output = $formipay_settings['default_currency'];
|
||||
break;
|
||||
}
|
||||
|
||||
return $output;
|
||||
|
||||
}
|
||||
|
||||
function formipay_global_currency_options() {
|
||||
|
||||
$formipay_settings = get_option('formipay_settings');
|
||||
// $currencies = (false !== boolval($formipay_settings['enable_multicurrency'])) ? formipay_default_currency() : [];
|
||||
$currencies = [];
|
||||
if(false !== boolval($formipay_settings['enable_multicurrency']) && !empty($formipay_settings['multicurrencies'])) {
|
||||
foreach($formipay_settings['multicurrencies'] as $currency){
|
||||
$currency_value = $currency['currency'];
|
||||
$currency_label = formipay_get_currency_data_by_value($currency_value, 'title');
|
||||
$currencies[$currency_value] = $currency_label;
|
||||
}
|
||||
}
|
||||
// if(empty($currencies)){
|
||||
// $currencies[formipay_default_currency()] = formipay_default_currency('title');
|
||||
// }
|
||||
|
||||
return $currencies;
|
||||
|
||||
}
|
||||
|
||||
function formipay_country_array() {
|
||||
|
||||
$json = file_get_contents(FORMIPAY_PATH . 'admin/assets/json/country.json');
|
||||
@@ -137,42 +202,6 @@ function formipay_get_currency_data_by_value($value, $data='') {
|
||||
|
||||
}
|
||||
|
||||
function formipay_default_currency($return='raw') {
|
||||
|
||||
$formipay_settings = get_option('formipay_settings');
|
||||
$default_currency = $formipay_settings['payment_default_currency'];
|
||||
|
||||
switch ($return) {
|
||||
|
||||
case 'symbol':
|
||||
$output = formipay_get_currency_data_by_value($default_currency, 'symbol');
|
||||
break;
|
||||
|
||||
case 'title':
|
||||
$output = formipay_get_currency_data_by_value($default_currency, 'title');
|
||||
break;
|
||||
|
||||
case 'decimal_digits':
|
||||
$output = $formipay_settings['payment_default_currency_decimal_digits'];
|
||||
break;
|
||||
|
||||
case 'decimal_symbol':
|
||||
$output = $formipay_settings['payment_default_currency_decimal_symbol'];
|
||||
break;
|
||||
|
||||
case 'thousand_separator':
|
||||
$output = $formipay_settings['payment_default_currency_thousand_separator'];
|
||||
break;
|
||||
|
||||
default:
|
||||
$output = $formipay_settings['payment_default_currency'];
|
||||
break;
|
||||
}
|
||||
|
||||
return $output;
|
||||
|
||||
}
|
||||
|
||||
function formipay_get_post_meta($post_id, $metakey) {
|
||||
|
||||
$value = get_post_meta($post_id, $metakey, true);
|
||||
@@ -875,11 +904,4 @@ function formipay_thankyoupage_allowed_html() {
|
||||
'td' => [],
|
||||
'br' => []
|
||||
];
|
||||
}
|
||||
|
||||
// add_action('admin_notices', function() {
|
||||
// global $current_screen;
|
||||
// echo '<pre>';
|
||||
// print_r($current_screen);
|
||||
// echo '</pre>';
|
||||
// });
|
||||
}
|
||||
Reference in New Issue
Block a user