woocommerce_wpml = $woocommerce_wpml;
$this->sitepress = $sitepress;
$this->currencies = $this->woocommerce_wpml->multi_currency->get_currencies( true );
$this->wc_currencies = get_woocommerce_currencies();
$this->wc_currency = wcml_get_woocommerce_currency_option();
$this->load_curency_switcher_option_boxes();
$this->tracking_link = new WCML_Tracking_Link();
}
public function get_model() {
$exchange_rates_ui = new WCML_Exchange_Rates_UI( $this->woocommerce_wpml );
$model = [
'strings' => [
'headers' => [
'enable_disable' => __( 'Enable/disable', 'woocommerce-multilingual' ),
'currencies' => __( 'Currencies', 'woocommerce-multilingual' ),
],
'settings' => __( 'Settings', 'woocommerce-multilingual' ),
],
'currencies' => $this->currencies,
'wc_currency' => $this->wc_currency,
'wc_currencies' => $this->wc_currencies,
'active_languages' => $this->sitepress->get_active_languages(),
'multi_currency_on' => WCML_MULTI_CURRENCIES_INDEPENDENT === (int) $this->woocommerce_wpml->settings['enable_multi_currency'],
'wc_currency_empty_warn' => sprintf(
/* translators: %1$s and %2$s are opening and closing HTML link tags */
__(
'The multi-currency mode cannot be enabled as a specific currency was not set. Go to the %1$sWooCommerce settings%2$s page and select the default currency for your store.',
'woocommerce-multilingual'
),
'',
''
),
'wcml_settings' => $this->woocommerce_wpml->settings,
'form' => [
'action' => $_SERVER['REQUEST_URI'],
'nonce' => wp_nonce_field( 'wcml_mc_options', 'wcml_nonce', true, false ),
'multi_currency_option' => WCML_MULTI_CURRENCIES_INDEPENDENT,
'mco_disabled' => empty( $wc_currency ),
'label_mco' => __( 'Enable the multicurrency mode', 'woocommerce-multilingual' ),
'label_mco_learn_url' => $this->tracking_link->getWcmlMultiCurrencyDoc(),
'label_mco_learn_txt' => __( 'Multicurrency documentation', 'woocommerce-multilingual' ),
'custom_prices_select' => [
'checked' => 1 === (int) $this->woocommerce_wpml->settings['display_custom_prices'],
'label' => sprintf(
/* translators: %1$s and %2$s are opening and closing HTML link tags */
__( 'Show only products with %1$scustom prices%2$s in secondary currencies', 'woocommerce-multilingual' ),
'',
''
),
'tip' => __( 'When enabled, products with prices based on the exchange rate are hidden', 'woocommerce-multilingual' ),
],
'submit' => __( 'Save changes', 'woocommerce-multilingual' ),
'navigate_warn' => __( 'The changes you made will be lost if you navigate away from this page.', 'woocommerce-multilingual' ),
'cur_lang_warn' => __( 'At least one currency must be enabled for this language!', 'woocommerce-multilingual' ),
],
'currency_switcher' => [
'headers' => [
'main' => __( 'Currency switcher options', 'woocommerce-multilingual' ),
'main_desc' => __( 'All currency switchers in your site are affected by the settings in this section.', 'woocommerce-multilingual' ),
'order' => __( 'Order of currencies', 'woocommerce-multilingual' ),
'additional_css' => __( 'Additional CSS', 'woocommerce-multilingual' ),
'widget' => __( 'Widget Currency Switcher', 'woocommerce-multilingual' ),
'product_page' => __( 'Product page Currency Switcher', 'woocommerce-multilingual' ),
'preview' => __( 'Preview', 'woocommerce-multilingual' ),
'position' => __( 'Position', 'woocommerce-multilingual' ),
'actions' => __( 'Actions', 'woocommerce-multilingual' ),
'action' => __( 'Action', 'woocommerce-multilingual' ),
'delete' => __( 'Delete', 'woocommerce-multilingual' ),
'edit' => __( 'Edit currency switcher', 'woocommerce-multilingual' ),
'add_widget' => __( 'Add a new currency switcher to a widget area', 'woocommerce-multilingual' ),
'no_sidebar' => sprintf(
/* translators: %1$s and %2$s are opening and closing HTML link tags */
esc_html__( 'Your theme does not support a currency switcher widget. Please %1$sadd your currency switcher%2$s using a shortcode or PHP.', 'woocommerce-multilingual' ),
'',
''
),
],
'preview' => $this->get_currency_switchers_preview(),
'widget_currency_switchers' => $this->widget_currency_switchers(),
'available_sidebars' => $this->woocommerce_wpml->multi_currency->currency_switcher->get_available_sidebars(),
'preview_text' => __( 'Currency switcher preview', 'woocommerce-multilingual' ),
'order' => ! isset( $this->woocommerce_wpml->settings['currencies_order'] ) ?
$this->woocommerce_wpml->multi_currency->get_currency_codes() :
$this->woocommerce_wpml->settings['currencies_order'],
'order_nonce' => wp_create_nonce( 'set_currencies_order_nonce' ),
'delete_nonce' => wp_create_nonce( 'delete_currency_switcher' ),
'order_tip' => __( 'Drag and drop the currencies to change their order', 'woocommerce-multilingual' ),
'visibility_label' => __( 'Show a currency switcher on the product page template', 'woocommerce-multilingual' ),
'visibility_on' => isset( $this->woocommerce_wpml->settings['currency_switcher_product_visibility'] ) ?
$this->woocommerce_wpml->settings['currency_switcher_product_visibility'] : 1,
'additional_css' => isset( $this->woocommerce_wpml->settings['currency_switcher_additional_css'] ) ?
$this->woocommerce_wpml->settings['currency_switcher_additional_css'] : '',
],
'exchange_rates' => $exchange_rates_ui->get_model(),
];
return $model;
}
protected function init_template_base_dir() {
$this->template_paths = [
WCML_PLUGIN_PATH . '/templates/multi-currency/',
];
}
public function get_template() {
return 'multi-currency.twig';
}
public function get_flag_url( $code ) {
return $this->sitepress->get_flag_url( $code );
}
public function get_currency_symbol( $code ) {
return get_woocommerce_currency_symbol( $code );
}
public function load_curency_switcher_option_boxes() {
$wcml_settings = $this->woocommerce_wpml->get_settings();
$currency_switchers = isset( $wcml_settings['currency_switchers'] ) ? $wcml_settings['currency_switchers'] : [];
// Add empty dialog for new sidebar currency switcher.
$currency_switchers['new_widget'] = [
'switcher_style' => 'wcml-dropdown',
'widget_title' => '',
'switcher_templates' => $this->woocommerce_wpml->cs_templates->get_templates(),
'template' => '%name% (%symbol%) - %code%',
'color_scheme' => [
'font_current_normal' => '',
'font_current_hover' => '',
'background_current_normal' => '',
'background_current_hover' => '',
'font_other_normal' => '',
'font_other_hover' => '',
'background_other_normal' => '',
'background_other_hover' => '',
'border_normal' => '',
],
];
if ( ! isset( $currency_switchers['product'] ) ) {
$currency_switchers['product'] = $currency_switchers['new_widget'];
}
$widget_currency_switchers = $this->widget_currency_switchers();
foreach ( $currency_switchers as $switcher_id => $currency_switcher ) {
if ( 'new_widget' !== $switcher_id && ! $this->woocommerce_wpml->cs_properties->is_currency_switcher_active( $switcher_id, $wcml_settings ) ) {
continue;
}
if ( 'product' === $switcher_id ) {
$dialog_title = __( 'Edit Product Currency Switcher', 'woocommerce-multilingual' );
} elseif ( 'new_widget' === $switcher_id ) {
$dialog_title = __( 'New Widget Area Currency Switcher', 'woocommerce-multilingual' );
} else {
/* translators: %s is sidebar name */
$dialog_title = sprintf( __( 'Edit %s Currency Switcher', 'woocommerce-multilingual' ), $widget_currency_switchers[ $switcher_id ]['name'] );
}
$args = [
'title' => $dialog_title,
'currency_switcher' => $switcher_id,
'switcher_style' => $currency_switcher['switcher_style'],
'widget_title' => $currency_switcher['widget_title'],
'switcher_templates' => $this->woocommerce_wpml->cs_templates->get_templates(),
'template' => $currency_switcher['template'],
'template_default' => '%name% (%symbol%) - %code%',
'options' => $currency_switcher['color_scheme'],
];
new WCML_Currency_Switcher_Options_Dialog( $args, $this->woocommerce_wpml );
}
}
public function get_currency_switchers_preview() {
$preview = [
'product' => $this->woocommerce_wpml->multi_currency->currency_switcher->wcml_currency_switcher(
[
'switcher_id' => 'product',
'echo' => false,
]
),
];
foreach ( $this->widget_currency_switchers() as $switcher ) {
$preview[ $switcher['id'] ] = $this->woocommerce_wpml->multi_currency->currency_switcher->wcml_currency_switcher(
[
'switcher_id' => $switcher['id'],
'echo' => false,
]
);
}
return $preview;
}
public function wp_do_action( $hook ) {
do_action( $hook );
}
public function get_weekday( $day_index ) {
global $wp_locale;
return $wp_locale->get_weekday( $day_index );
}
public function widget_currency_switchers() {
$wcml_settings = $this->woocommerce_wpml->get_settings();
$currency_switchers = isset( $wcml_settings['currency_switchers'] ) ? $wcml_settings['currency_switchers'] : [];
$sidebars = $this->woocommerce_wpml->multi_currency->currency_switcher->get_registered_sidebars();
foreach ( $sidebars as $key => $sidebar ) {
if ( ! isset( $currency_switchers[ $key ] ) ) {
unset( $sidebars[ $key ] );
}
}
return $sidebars;
}
}