woocommerce_wpml = $woocommerce_wpml; add_action( 'wp_ajax_wcml_currencies_order', array($this, 'wcml_currencies_order') ); add_action( 'wp_ajax_wcml_currencies_switcher_preview', array($this, 'wcml_currencies_switcher_preview') ); add_action( 'wp_ajax_wcml_currencies_switcher_save_settings', array($this, 'wcml_currencies_switcher_save_settings') ); add_action( 'wp_ajax_wcml_delete_currency_switcher', array($this, 'wcml_delete_currency_switcher') ); } public function wcml_currencies_order() { $nonce = array_key_exists( 'wcml_nonce', $_POST ) ? sanitize_text_field( $_POST['wcml_nonce'] ) : false; if ( !$nonce || !wp_verify_nonce( $nonce, 'set_currencies_order_nonce' ) ) { wp_send_json_error('Invalid nonce'); } $this->woocommerce_wpml->settings['currencies_order'] = explode( ';', $_POST['order'] ); $this->woocommerce_wpml->update_settings( $this->woocommerce_wpml->settings ); wp_send_json_success( array( 'message' => esc_html__( 'Currencies order updated', 'woocommerce-multilingual' ) ) ); } public function wcml_currencies_switcher_save_settings() { $nonce = array_key_exists( 'wcml_nonce', $_POST ) ? sanitize_text_field( $_POST['wcml_nonce'] ) : false; if ( !$nonce || !wp_verify_nonce( $nonce, 'wcml_currencies_switcher_save_settings' ) ) { wp_send_json_error('Invalid nonce'); } $wcml_settings =& $this->woocommerce_wpml->settings; $switcher_settings = array(); // Allow some HTML in the currency switcher $currency_switcher_format = strip_tags( stripslashes_deep( $_POST[ 'template' ] ), ''); $currency_switcher_format = htmlentities( $currency_switcher_format ); $currency_switcher_format = sanitize_text_field( $currency_switcher_format ); $currency_switcher_format = html_entity_decode( $currency_switcher_format ); $switcher_id = sanitize_text_field( $_POST[ 'switcher_id' ] ); if( $switcher_id == 'new_widget' ){ $switcher_id = sanitize_text_field( $_POST[ 'widget_id' ] ); } $switcher_settings[ 'widget_title' ] = isset( $_POST[ 'widget_title' ] ) ? sanitize_text_field( $_POST[ 'widget_title' ] ) : ''; $switcher_settings[ 'switcher_style' ] = sanitize_text_field( $_POST[ 'switcher_style' ] ); $switcher_settings[ 'template' ] = $currency_switcher_format; do_action('wpml_register_single_string', 'woocommerce-multilingual', $switcher_id .'_switcher_format' , $currency_switcher_format ); foreach( $_POST[ 'color_scheme' ] as $color_id => $color ){ $switcher_settings[ 'color_scheme' ][ sanitize_text_field( $color_id ) ] = sanitize_hex_color( $color ); } $wcml_settings[ 'currency_switchers' ][ $switcher_id ] = $switcher_settings; //update widget settings if( $switcher_id != 'product' ){ $widget_settings = get_option('widget_currency_sel_widget'); $setting_match = false; foreach( $widget_settings as $key => $widget_setting ){ if( isset( $widget_setting['id'] ) && $switcher_id == $widget_setting['id'] ){ $setting_match = true; $widget_settings[ $key ][ 'settings' ] = $switcher_settings; } } if( !$setting_match ){ $widget_settings[] = array( 'id' => $switcher_id, 'settings' => $switcher_settings ); } update_option( 'widget_currency_sel_widget', $widget_settings ); $this->synchronize_widget_instances( $widget_settings ); } $this->woocommerce_wpml->update_settings( $wcml_settings ); wp_send_json_success(); } private function synchronize_widget_instances( $widget_settings ) { $sidebars_widgets = $this->get_sidebars_widgets(); foreach ( $sidebars_widgets as $sidebar => $widgets ) { if ( 'wp_inactive_widgets' === $sidebar ) { continue; } $found = false; if ( is_array( $widgets ) ) { foreach ( $widgets as $key => $widget_id ) { if ( strpos( $widget_id, WCML_Currency_Switcher_Widget::SLUG ) === 0 ) { if ( $found ) { // Only synchronize the first CS widget instance per sidebar unset( $sidebars_widgets[ $sidebar ][ $key ] ); continue; } $found = true; } } } if ( ! $found ) { foreach( $widget_settings as $key => $widget_setting ){ if( $widget_setting['id'] == $sidebar ){ array_unshift( $sidebars_widgets[ $sidebar ], WCML_Currency_Switcher_Widget::SLUG.'-'.$key ); } } } } $this->update_sidebars_widgets( $sidebars_widgets ); } public function wcml_delete_currency_switcher(){ $nonce = array_key_exists( 'wcml_nonce', $_POST ) ? sanitize_text_field( $_POST['wcml_nonce'] ) : false; if ( !$nonce || !wp_verify_nonce( $nonce, 'delete_currency_switcher' ) ) { wp_send_json_error(); } $switcher_id = sanitize_text_field( $_POST[ 'switcher_id' ] ); $wcml_settings = $this->woocommerce_wpml->get_settings(); unset( $wcml_settings[ 'currency_switchers' ][ $switcher_id ] ); $this->woocommerce_wpml->update_settings( $wcml_settings ); $sidebars_widgets = $this->get_sidebars_widgets(); foreach ($sidebars_widgets as $sidebar => $widgets) { if ($sidebar != $switcher_id) { continue; } if (is_array($widgets)) { foreach ($widgets as $key => $widget_id) { if (strpos($widget_id, WCML_Currency_Switcher_Widget::SLUG) === 0) { unset($sidebars_widgets[$sidebar][$key]); } } } } $this->update_sidebars_widgets( $sidebars_widgets ); wp_send_json_success(); } public function wcml_currencies_switcher_preview() { $nonce = array_key_exists( 'wcml_nonce', $_POST ) ? sanitize_text_field( $_POST['wcml_nonce'] ) : false; if ( !$nonce || !wp_verify_nonce( $nonce, 'wcml_currencies_switcher_preview' ) ) { wp_send_json_error( 'Invalid nonce' ); } $return= array(); $inline_css = $this->woocommerce_wpml->cs_templates->get_color_picket_css( $_POST['switcher_id'], array( 'switcher_style' => $_POST['switcher_style'], 'color_scheme' => $_POST['color_scheme'] ) ); $template = $this->woocommerce_wpml->cs_templates->get_template( $_POST['switcher_style'] ); if ( $template->has_styles() ) { $return['inline_styles_id'] = $template->get_inline_style_handler().'-inline-css'; }else{ $return['inline_styles_id'] = 'wcml-cs-inline-styles-' . $_POST['switcher_id'].'-'.$_POST['switcher_style']; } $return['inline_css'] = $inline_css; ob_start(); $this->woocommerce_wpml->multi_currency->currency_switcher->wcml_currency_switcher( array( 'switcher_id' => $_POST['switcher_id'], 'format' => isset( $_POST['template'] ) ? stripslashes_deep( $_POST['template'] ) : '%name% (%symbol%) - %code%', 'switcher_style' => $_POST['switcher_style'], 'color_scheme' => $_POST['color_scheme'], 'preview' => true ) ); $switcher_preview = ob_get_contents(); ob_end_clean(); $return['preview'] = $switcher_preview; wp_send_json_success( $return ); } public function get_sidebars_widgets() { if ( ! function_exists( 'wp_get_sidebars_widgets' ) ) { require_once( ABSPATH . '/wp-admin/includes/widgets.php' ); } $sidebars_widgets = wp_get_sidebars_widgets(); return is_array( $sidebars_widgets ) ? $sidebars_widgets : array(); } public function update_sidebars_widgets( $sidebars_widgets ){ remove_action( 'pre_update_option_sidebars_widgets', array( $this->woocommerce_wpml->multi_currency->currency_switcher, 'update_option_sidebars_widgets' ), 10, 2 ); wp_set_sidebars_widgets( $sidebars_widgets ); add_action( 'pre_update_option_sidebars_widgets', array( $this->woocommerce_wpml->multi_currency->currency_switcher, 'update_option_sidebars_widgets' ), 10, 2 ); } }