%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/itworks/wp-content/plugins/woocommerce-multilingual/inc/
Upload File :
Create Path :
Current File : /var/www/html/itworks/wp-content/plugins/woocommerce-multilingual/inc/class-wcml-emails.php

<?php
class WCML_Emails{

    private $order_id = false;
    private $locale = false;
	private $admin_language = false;
    /** @var woocommerce_wpml */
    private $woocommerce_wpml;
    /** @var Sitepress */
    private $sitepress;
    /** @var WooCommerce */
    private $woocommerce;
	/** @var wpdb */
	private $wpdb;

	/**
	 * WCML_Emails constructor.
	 *
	 * @param woocommerce_wpml $woocommerce_wpml
	 * @param SitePress $sitepress
	 * @param WooCommerce $woocommerce
	 * @param wpdb $wpdb
	 */
    function __construct( woocommerce_wpml $woocommerce_wpml, SitePress $sitepress, WooCommerce $woocommerce, wpdb $wpdb ) {
        $this->woocommerce_wpml = $woocommerce_wpml;
        $this->sitepress        = $sitepress;
        $this->woocommerce      = $woocommerce;
	    $this->wpdb             = $wpdb;
    }

    function add_hooks(){
        global $pagenow;
        //wrappers for email's header
        if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
            add_action( 'woocommerce_order_status_completed_notification', array(
                $this,
                'email_heading_completed'
            ), 9 );
	        add_action( 'woocommerce_order_status_changed', array( $this, 'comments_language' ), 10 );
        }

        add_action( 'woocommerce_new_customer_note_notification', array( $this, 'email_heading_note' ), 9 );

        add_action( 'wp_ajax_woocommerce_mark_order_status', array( $this, 'email_refresh_in_ajax' ), 9 );

	    foreach( array( 'pending', 'failed', 'cancelled', 'on-hold' ) as $state ) {
		    add_action( 'woocommerce_order_status_' . $state . '_to_processing_notification', array(
			    $this,
			    'email_heading_processing'
		    ), 9 );

		    add_action( 'woocommerce_order_status_' . $state . '_to_processing_notification', array(
			    $this,
			    'refresh_email_lang'
		    ), 9 );
	    }

	    foreach( array( 'pending', 'failed', 'cancelled' ) as $state ) {
		    add_action( 'woocommerce_order_status_' . $state . '_to_on-hold_notification', array(
			    $this,
			    'email_heading_on_hold'
		    ), 9 );
	    }

        //wrappers for email's body
        add_action( 'woocommerce_before_resend_order_emails', array( $this, 'email_header' ) );
        add_action( 'woocommerce_after_resend_order_email', array( $this, 'email_footer' ) );

        //filter string language before for emails
        add_filter( 'icl_current_string_language', array( $this, 'icl_current_string_language' ), 10, 2 );

        //change order status
        add_action( 'woocommerce_order_status_completed', array( $this, 'refresh_email_lang_complete' ), 9 );

        add_action( 'woocommerce_order_status_pending_to_on-hold_notification', array(
            $this,
            'refresh_email_lang'
        ), 9 );
        add_action( 'woocommerce_new_customer_note', array( $this, 'refresh_email_lang' ), 9 );

        foreach( array( 'pending', 'failed' ) as $from_state ) {
	        foreach ( array( 'processing', 'completed', 'on-hold' ) as $to_state ) {
		        add_action( 'woocommerce_order_status_'.$from_state.'_to_'.$to_state.'_notification', array(
			        $this,
			        'new_order_admin_email'
		        ), 9 );
	        }
        }

        add_action( 'woocommerce_before_resend_order_emails', array( $this, 'backend_new_order_admin_email' ), 9 );

        add_filter( 'icl_st_admin_string_return_cached', array( $this, 'admin_string_return_cached' ), 10, 2 );

        add_filter( 'plugin_locale', array( $this, 'set_locale_for_emails' ), 10, 2 );
        add_filter( 'woocommerce_countries', array( $this, 'translate_woocommerce_countries' ) );

        if ( is_admin() && $pagenow == 'admin.php' && isset( $_GET['page'] ) && $_GET['page'] == 'wc-settings' && isset( $_GET['tab'] ) && $_GET['tab'] == 'email' ) {
            add_action( 'admin_footer', array( $this, 'show_language_links_for_wc_emails' ) );
            $this->set_emails_string_language();
        }

        if (
            (
                ! isset( $_GET['post_type'] ) ||
                $_GET['post_type'] != 'shop_order'
            ) &&
            (
                ! isset( $_GET['action'] ) ||
                ! in_array( $_GET['action'], array(
                    'woocommerce_mark_order_status'
                ) )
            )
        ) {
            add_filter( 'woocommerce_order_items_meta_get_formatted', array( $this, 'filter_formatted_items' ), 10, 2 );
        }

        add_filter( 'woocommerce_allow_send_queued_transactional_email', array(
            $this,
            'send_queued_transactional_email'
        ), 10, 3 );

	    add_action( 'woocommerce_order_partially_refunded_notification', array( $this, 'refresh_email_lang' ), 9 );
	    add_action( 'woocommerce_order_fully_refunded_notification', array( $this, 'refresh_email_lang' ), 9 );
	    add_filter( 'woocommerce_email_get_option', array( $this, 'filter_refund_emails_strings' ), 10, 4 );

	    add_filter( 'woocommerce_email_setup_locale', '__return_false' );
	    add_filter( 'woocommerce_email_restore_locale', '__return_false' );


	    add_filter( 'woocommerce_email_heading_new_order',  array( $this, 'new_order_email_heading' ) );
	    add_filter( 'woocommerce_email_subject_new_order',  array( $this, 'new_order_email_subject' ) );

	    add_filter( 'woocommerce_email_heading_customer_on_hold_order',  array( $this, 'customer_on_hold_order_heading' ) );
	    add_filter( 'woocommerce_email_subject_customer_on_hold_order',  array( $this, 'customer_on_hold_order_subject' ) );

	    add_filter( 'woocommerce_email_heading_customer_processing_order',  array( $this, 'customer_processing_order_heading' ) );
	    add_filter( 'woocommerce_email_subject_customer_processing_order',  array( $this, 'customer_processing_order_subject' ) );
    }

    function email_refresh_in_ajax() {
        if ( isset( $_GET['order_id'] ) ) {
            $this->refresh_email_lang( $_GET['order_id'] );

            if ( isset( $_GET['status'] ) && 'completed' === $_GET['status'] ) {
                $this->email_heading_completed( $_GET['order_id'], true );
            }

            return true;
        }
    }

    function refresh_email_lang_complete( $order_id ){

        $this->order_id = $order_id;
        $this->refresh_email_lang( $order_id );
        $this->email_heading_completed( $order_id, true );
    }

    /**
     * Translate WooCommerce emails.
     *
     * @global type $sitepress
     * @global type $order_id
     * @return type
     */
    function email_header( $order ) {

        if( is_array( $order ) ) {
            $order = $order[ 'order_id' ];
        } elseif( is_object( $order ) ) {
	        $order = method_exists( 'WC_Order', 'get_id' ) ? $order->get_id() : $order->id;
        }

        $this->refresh_email_lang( $order );
    }


    function refresh_email_lang( $order_id ){

        if ( is_array( $order_id ) ) {
            if ( isset( $order_id[ 'order_id' ] ) ) {
                $order_id = $order_id[ 'order_id' ];
            } else {
                return;
            }
        }

        $lang = get_post_meta( $order_id, 'wpml_language', true );
        if( !empty( $lang ) ){
            $this->change_email_language( $lang );
        }
    }

    /**
     * After email translation switch language to default.
     */
    function email_footer() {
        $this->sitepress->switch_lang( $this->sitepress->get_default_language() );
    }

	public function comments_language(){

		if ( is_admin() && false !== $this->admin_language ) {
			$this->change_email_language( $this->admin_language );
		}else{
			$this->change_email_language( $this->woocommerce_wpml->strings->get_domain_language( 'woocommerce' ) );
        }
	}


	function email_heading_completed( $order_id, $no_checking = false ){

        if( ( class_exists( 'WC_Email_Customer_Completed_Order' ) || $no_checking ) && isset( $this->woocommerce->mailer()->emails[ 'WC_Email_Customer_Completed_Order' ] ) ){

            $this->woocommerce->mailer()->emails['WC_Email_Customer_Completed_Order']->heading = $this->wcml_get_translated_email_string( 'admin_texts_woocommerce_customer_completed_order_settings', '[woocommerce_customer_completed_order_settings]heading' );

            $this->woocommerce->mailer()->emails['WC_Email_Customer_Completed_Order']->subject = $this->wcml_get_translated_email_string( 'admin_texts_woocommerce_customer_completed_order_settings', '[woocommerce_customer_completed_order_settings]subject' );

            $this->woocommerce->mailer()->emails['WC_Email_Customer_Completed_Order']->heading_downloadable = $this->wcml_get_translated_email_string( 'admin_texts_woocommerce_customer_completed_order_settings', '[woocommerce_customer_completed_order_settings]heading_downloadable' );

            $this->woocommerce->mailer()->emails['WC_Email_Customer_Completed_Order']->subject_downloadable = $this->wcml_get_translated_email_string( 'admin_texts_woocommerce_customer_completed_order_settings', '[woocommerce_customer_completed_order_settings]subject_downloadable' );

            $enabled = $this->woocommerce->mailer()->emails['WC_Email_Customer_Completed_Order']->enabled;
            $this->woocommerce->mailer()->emails['WC_Email_Customer_Completed_Order']->enabled = false;
            $this->woocommerce->mailer()->emails['WC_Email_Customer_Completed_Order']->trigger($order_id);
            $this->woocommerce->mailer()->emails['WC_Email_Customer_Completed_Order']->enabled = $enabled;
        }
    }

    function email_heading_processing($order_id){
	    $this->translate_email_headings( $order_id, 'WC_Email_Customer_Processing_Order', 'woocommerce_customer_processing_order_settings' );
    }

	public function customer_processing_order_heading( $heading ){
		return $this->get_translated_order_strings( 'heading', $heading, 'WC_Email_Customer_Processing_Order' );
	}

	public function customer_processing_order_subject( $subject ){
		return $this->get_translated_order_strings( 'subject', $subject, 'WC_Email_Customer_Processing_Order' );
	}


    public function email_heading_on_hold( $order_id ){
        $this->translate_email_headings( $order_id, 'WC_Email_Customer_On_Hold_Order', 'woocommerce_customer_on_hold_order_settings' );
    }

	/**
	 * @param int|string $order_id
	 * @param string $class_name
	 * @param string $string_name
	 */
    private function translate_email_headings( $order_id, $class_name, $string_name ){
	    if( class_exists( $class_name ) && isset( $this->woocommerce->mailer()->emails[ $class_name ] ) ){
		    $this->woocommerce->mailer()->emails[ $class_name ]->heading = $this->wcml_get_translated_email_string( 'admin_texts_'.$string_name, '['.$string_name.']heading', $order_id );
		    $this->woocommerce->mailer()->emails[ $class_name ]->subject = $this->wcml_get_translated_email_string( 'admin_texts_'.$string_name, '['.$string_name.']subject', $order_id );
		    $enabled = $this->woocommerce->mailer()->emails[ $class_name ]->enabled;
		    $this->woocommerce->mailer()->emails[ $class_name ]->enabled = false;
		    $this->woocommerce->mailer()->emails[ $class_name ]->trigger($order_id);
		    $this->woocommerce->mailer()->emails[ $class_name ]->enabled = $enabled;
	    }
    }

	public function customer_on_hold_order_heading( $heading ){
		return $this->get_translated_order_strings( 'heading', $heading, 'WC_Email_Customer_On_Hold_Order' );
	}

	public function customer_on_hold_order_subject( $subject ){
		return $this->get_translated_order_strings( 'subject', $subject, 'WC_Email_Customer_On_Hold_Order' );
	}

    function email_heading_note($args){

        if( class_exists( 'WC_Email_Customer_Note' ) && isset( $this->woocommerce->mailer()->emails[ 'WC_Email_Customer_Note' ] ) ){

            $this->woocommerce->mailer()->emails['WC_Email_Customer_Note']->heading = $this->wcml_get_translated_email_string( 'admin_texts_woocommerce_customer_note_settings', '[woocommerce_customer_note_settings]heading' );

            $this->woocommerce->mailer()->emails['WC_Email_Customer_Note']->subject = $this->wcml_get_translated_email_string( 'admin_texts_woocommerce_customer_note_settings', '[woocommerce_customer_note_settings]subject' );

            $enabled = $this->woocommerce->mailer()->emails['WC_Email_Customer_Note']->enabled;
            $this->woocommerce->mailer()->emails['WC_Email_Customer_Note']->enabled = false;
            $this->woocommerce->mailer()->emails['WC_Email_Customer_Note']->trigger($args);
            $this->woocommerce->mailer()->emails['WC_Email_Customer_Note']->enabled = $enabled;
        }
    }

    public function filter_refund_emails_strings( $value, $object , $old_value, $key ){

        if( in_array( $key, array( 'subject_partial', 'subject_full', 'heading_partial', 'heading_full' ) ) && $object->object ){
	        $translated_value = $this->get_refund_email_translated_string( $key, $object );
        }

        return !empty( $translated_value ) ? $translated_value : $value;
    }

	public function get_refund_email_translated_string( $key, $object){

		return	$this->wcml_get_translated_email_string( 'admin_texts_woocommerce_customer_refunded_order_settings',
					'[woocommerce_customer_refunded_order_settings]'.$key, $object->object->get_id() );

	}

    function new_order_admin_email($order_id){

        if( isset( $this->woocommerce->mailer()->emails[ 'WC_Email_New_Order' ] ) ){
            $recipients = explode(',',$this->woocommerce->mailer()->emails['WC_Email_New_Order']->get_recipient());
            foreach($recipients as $recipient){
                $user = get_user_by('email',$recipient);
                if($user){
                    $user_lang = $this->sitepress->get_user_admin_language($user->ID, true );
                }else{
                    $user_lang = get_post_meta($order_id, 'wpml_language', true );
                }

                $this->change_email_language( $user_lang );

                $this->woocommerce->mailer()->emails['WC_Email_New_Order']->heading = $this->wcml_get_translated_email_string( 'admin_texts_woocommerce_new_order_settings', '[woocommerce_new_order_settings]heading', $order_id, $user_lang );

                $this->woocommerce->mailer()->emails['WC_Email_New_Order']->subject = $this->wcml_get_translated_email_string( 'admin_texts_woocommerce_new_order_settings', '[woocommerce_new_order_settings]subject', $order_id, $user_lang );

                $this->woocommerce->mailer()->emails['WC_Email_New_Order']->recipient = $recipient;

                $this->woocommerce->mailer()->emails['WC_Email_New_Order']->trigger($order_id);
            }
            $this->woocommerce->mailer()->emails['WC_Email_New_Order']->enabled = false;
            $this->refresh_email_lang($order_id);
        }
    }

    public function new_order_email_heading( $heading ){
	    return $this->get_translated_order_strings( 'heading', $heading, 'WC_Email_New_Order' );
    }

    public function new_order_email_subject( $subject ){
        return $this->get_translated_order_strings( 'subject', $subject, 'WC_Email_New_Order' );
    }

	/**
	 * @param string $type
	 * @param string $string
	 * @param string $class_name
	 *
	 * @return string
	 */
    private function get_translated_order_strings( $type, $string, $class_name ){
        if( 'heading' === $type ){
	        $translated_string = $this->woocommerce->mailer()->emails[ $class_name ]->heading;
        }elseif( 'subject' ===  $type ){
	        $translated_string = $this->woocommerce->mailer()->emails[ $class_name ]->subject;
        }else{
            return $string;
        }

	    return $translated_string ? $this->woocommerce->mailer()->emails[ $class_name ]->format_string( $translated_string ): $string;
    }

    public function backend_new_order_admin_email( $order_id ){
        if( isset( $_POST[ 'wc_order_action' ] ) && in_array( $_POST[ 'wc_order_action' ], array( 'send_email_new_order', 'send_order_details_admin' ) ) ){
            $this->new_order_admin_email( $order_id );
        }
    }

    function filter_formatted_items( $formatted_meta, $object ){

        if( isset( $object->product->variation_id ) ){

            $current_prod_variation_id = apply_filters( 'translate_object_id', $object->product->variation_id, 'product_variation', false );

            if( !is_null( $current_prod_variation_id ) ) {

                foreach( $formatted_meta as $key => $formatted_var ){

                    if( substr( $formatted_var[ 'key' ], 0, 3 ) ){

                        $attribute = wc_sanitize_taxonomy_name( $formatted_var[ 'key' ] );

                        if( taxonomy_exists( $attribute ) ){
                            $attr_term = get_term_by( 'name', $formatted_meta[ $key ][ 'value' ], $attribute );
                            $tr_id = apply_filters( 'translate_object_id', $attr_term->term_id, $attribute, false, $this->sitepress->get_current_language() );

                            if( $tr_id ){
                                $translated_term = $this->woocommerce_wpml->terms->wcml_get_term_by_id( $tr_id, $attribute );
                                $formatted_meta[ $key ][ 'value' ] = $translated_term->name;
                            }

                        }else{

                            $custom_attr_trnsl = $this->woocommerce_wpml->attributes->get_custom_attribute_translation( $object->product->id, $formatted_var[ 'key' ], array('is_taxonomy' => false), $this->sitepress->get_current_language() );

                            if ( false !== $custom_attr_trnsl ) {
                                $formatted_meta[ $key ][ 'label' ] = $custom_attr_trnsl['name'];
                            }
                        }
                    }
                }
            }
        }

        return $formatted_meta;

    }

	function change_email_language( $lang ) {
		global $wp_locale;

		if ( ! $this->admin_language ) {
			$this->admin_language = $this->sitepress->get_user_admin_language( get_current_user_id(), true );
		}

		$this->sitepress->switch_lang( $lang, true );
		$this->locale = $this->sitepress->get_locale( $lang );
		unload_textdomain( 'woocommerce' );
		unload_textdomain( 'default' );

		$wp_locale = new WP_Locale();
		$this->woocommerce->load_plugin_textdomain();
		load_default_textdomain( $this->locale );
	}

    function admin_string_return_cached( $value, $option ){
        if( in_array( $option, array ( 'woocommerce_email_from_address', 'woocommerce_email_from_name' ) ) )
            return false;

        return $value;
    }

    function wcml_get_translated_email_string( $context, $name, $order_id = false, $language_code = null ){

        if( $order_id && !$language_code ){
            $order_language = get_post_meta( $order_id, 'wpml_language', true );
            if( $order_language ){
                $language_code = $order_language;
            }
        }
        $result = $this->wpdb->get_var( $this->wpdb->prepare( "SELECT value FROM {$this->wpdb->prefix}icl_strings WHERE context = %s AND name = %s ", $context, $name ) );

        return apply_filters( 'wpml_translate_single_string', $result, $context, $name, $language_code );
    }

    function icl_current_string_language(  $current_language, $name ){
        $order_id = false;

        if( isset($_POST['action']) && $_POST['action'] == 'editpost' && isset($_POST['post_type']) && $_POST['post_type'] == 'shop_order' && isset( $_POST[ 'wc_order_action' ] ) && $_POST[ 'wc_order_action' ] != 'send_email_new_order' ){
            $order_id = filter_input( INPUT_POST, 'post_ID', FILTER_SANITIZE_NUMBER_INT );
        }elseif( isset($_POST['action']) && $_POST['action'] == 'woocommerce_add_order_note' && isset($_POST['note_type']) && $_POST['note_type'] == 'customer' ) {
            $order_id = filter_input( INPUT_POST, 'post_id', FILTER_SANITIZE_NUMBER_INT );
        }elseif( isset($_GET['action']) && isset($_GET['order_id']) && ( $_GET['action'] == 'woocommerce_mark_order_complete' || $_GET['action'] == 'woocommerce_mark_order_status') ){
            $order_id = filter_input( INPUT_GET, 'order_id', FILTER_SANITIZE_NUMBER_INT );
        }elseif(isset($_GET['action']) && $_GET['action'] == 'mark_completed' && $this->order_id){
            $order_id = $this->order_id;
        }elseif(isset($_POST['action']) && $_POST['action'] == 'woocommerce_refund_line_items'){
            $order_id = filter_input( INPUT_POST, 'order_id', FILTER_SANITIZE_NUMBER_INT );
        }elseif( empty( $_POST ) && isset( $_GET[ 'page' ] ) && $_GET[ 'page' ] == 'wc-settings' && isset( $_GET[ 'tab' ] ) && $_GET[ 'tab' ] == 'email' && substr( $name, 0, 12 ) == '[woocommerce' ){
            $email_string = explode( ']', str_replace( '[', '', $name ) );
            $email_option = get_option( $email_string[ 0 ], true );
            $context = 'admin_texts_'.$email_string[ 0 ];

            $current_language = $this->woocommerce_wpml->strings->get_string_language( $email_option[ $email_string[ 1 ] ], $context, $name );
        }elseif( $this->order_id ){
            $order_id = $this->order_id;
        }

        $order_id = apply_filters( 'wcml_send_email_order_id', $order_id );

        if( $order_id ){
            $order_language = get_post_meta( $order_id, 'wpml_language', true );
            if( $order_language ){
                $current_language = $order_language;
            }else{
                $current_language = $this->sitepress->get_current_language();
            }
        }

        return apply_filters( 'wcml_email_language', $current_language, $order_id );
    }

    // set correct locale code for emails
    function set_locale_for_emails(  $locale, $domain ){

        if( $domain == 'woocommerce' && $this->locale ){
            $locale = $this->locale;
        }

        return $locale;
    }

    function show_language_links_for_wc_emails(){

        $emails_options = array(
            'woocommerce_new_order_settings',
            'woocommerce_cancelled_order_settings',
            'woocommerce_failed_order_settings',
            'woocommerce_customer_on_hold_order_settings',
            'woocommerce_customer_processing_order_settings',
            'woocommerce_customer_completed_order_settings',
            'woocommerce_customer_refunded_order_settings',
            'woocommerce_customer_invoice_settings',
            'woocommerce_customer_note_settings',
            'woocommerce_customer_reset_password_settings',
            'woocommerce_customer_new_account_settings'
        );

	    $emails_options = apply_filters( 'wcml_emails_options_to_translate', $emails_options );

	    $text_keys = array(
		    'subject',
		    'heading',
		    'subject_downloadable',
		    'heading_downloadable',
		    'subject_full',
		    'subject_partial',
		    'heading_full',
		    'heading_partial',
		    'subject_paid',
		    'heading_paid'
	    );

	    $text_keys = apply_filters( 'wcml_emails_text_keys_to_translate', $text_keys );


        foreach( $emails_options as $emails_option ) {

            $section_name = str_replace( 'woocommerce_', 'wc_email_', $emails_option );
            $section_name = str_replace( '_settings', '', $section_name );
            if( isset( $_GET['section'] ) && $_GET['section'] == $section_name ){

                $option_settings = get_option( $emails_option );
                if( $option_settings ){
	                foreach ($option_settings as $setting_key => $setting_value) {
		                if ( in_array( $setting_key, $text_keys ) ) {
			                $input_name = str_replace( '_settings', '', $emails_option ).'_'.$setting_key;

			                $lang_selector = new WPML_Simple_Language_Selector($this->sitepress);
			                $language = $this->woocommerce_wpml->strings->get_string_language( $setting_value, 'admin_texts_'.$emails_option, '['.$emails_option.']'.$setting_key );
			                if( is_null( $language ) ) {
				                $language = $this->sitepress->get_default_language();
			                }

			                $lang_selector->render( array(
					                'id' => $emails_option.'_'.$setting_key.'_language_selector',
					                'name' => 'wcml_lang-'.$emails_option.'-'.$setting_key,
					                'selected' => $language,
					                'show_please_select' => false,
					                'echo' => true,
					                'style' => 'width: 18%;float: left'
				                )
			                );

			                $st_page = admin_url( 'admin.php?page=' . WPML_ST_FOLDER . '/menu/string-translation.php&context=admin_texts_'.$emails_option.'&search='.$setting_value );
			                ?>
                            <script>
                                var input = jQuery('input[name="<?php echo $input_name  ?>"]');
                                if (input.length) {
                                    input.parent().append('<div class="translation_controls"></div>');
                                    input.parent().find('.translation_controls').append('<a href="<?php echo $st_page ?>" style="margin-left: 10px"><?php _e('translations', 'woocommerce-multilingual') ?></a>');
                                    jQuery('#<?php echo $emails_option.'_'.$setting_key.'_language_selector' ?>').prependTo(input.parent().find('.translation_controls'));
                                }
                            </script>
		                <?php }
	                }
                }
            }
        }
    }

    function set_emails_string_language(){

        foreach( $_POST as $key => $language ){

            if( substr( $key, 0, 9 ) == 'wcml_lang' ){

                $email_string = explode( '-', $key );

                if( isset( $email_string[2] ) ){

                    $email_key = str_replace( '_settings', '',  $email_string[1] );
                    $email_key .= '_'.$email_string[2];

                    $email_settings = get_option( $email_string[1], true );
                    $opt_string_value =  $email_settings[ $email_string[2] ];

                    $string_value = isset( $_POST[ $email_key ] ) ? $_POST[ $email_key ] : $opt_string_value;

                    $context = 'admin_texts_'.$email_string[1];
                    $name =  '['.$email_string[1].']'.$email_string[2];

                    do_action('wpml_register_single_string', $context, $name, $string_value, false, $this->woocommerce_wpml->strings->get_string_language( $opt_string_value, $context ) );

                    $this->woocommerce_wpml->strings->set_string_language( $string_value, $context, $name, $language );
                }
            }
        }
    }

    function translate_woocommerce_countries( $countries ){

        if( isset( $_POST[ 'wc_order_action' ] ) && $_POST[ 'wc_order_action' ] !== 'send_email_new_order' && isset( $_POST[ 'post_ID' ] ) ){
            $current_language = $this->sitepress->get_current_language();
            $this->refresh_email_lang( $_POST[ 'post_ID' ] );
            $countries = include( WC()->plugin_path() . '/i18n/countries.php' );
            $this->change_email_language( $current_language );
        }

        return $countries;
    }


    function send_queued_transactional_email( $allow, $filter, $args ){
        $this->order_id = $args[0];
        return $allow;
    }

}

Zerion Mini Shell 1.0