/**
  * Init WooCommerceGermanized when WordPress initializes.
  */
 public function init()
 {
     // Before init action
     do_action('before_woocommerce_germanized_init');
     add_filter('woocommerce_locate_template', array($this, 'filter_templates'), PHP_INT_MAX, 3);
     if (version_compare(WC()->version, '2.3', '<')) {
         add_filter('woocommerce_gzd_default_plugin_template', array($this, 'filter_templates_old_version'), 0, 2);
     } else {
         add_filter('woocommerce_gzd_important_templates', array($this, 'set_critical_templates_2_3'));
         if (get_option('woocommerce_gzd_display_checkout_fallback') == 'yes') {
             add_filter('woocommerce_gzd_template_name', array($this, 'set_review_order_fallback'));
         }
     }
     add_filter('woocommerce_get_settings_pages', array($this, 'add_settings'));
     add_filter('woocommerce_enqueue_styles', array($this, 'add_styles'));
     add_action('wp_enqueue_scripts', array($this, 'add_scripts'));
     add_action('wp_enqueue_scripts', array($this, 'add_inline_styles'));
     add_action('wp_print_scripts', array($this, 'localize_scripts'), 5);
     add_filter('woocommerce_email_classes', array($this, 'add_emails'));
     add_filter('woocommerce_locate_core_template', array($this, 'email_templates'), 0, 3);
     add_action('woocommerce_email_order_meta', array($this, 'email_small_business_notice'), 1);
     // Add better tax display to order totals
     add_filter('woocommerce_get_order_item_totals', array($this, 'order_item_totals'), 0, 2);
     // Unsure wether this could lead to future problems - tax classes with same name wont be merged anylonger
     //add_filter( 'woocommerce_rate_code', array( $this, 'prevent_tax_name_merge' ), PHP_INT_MAX, 2 );
     // Adjust virtual Product Price and tax class
     add_filter('woocommerce_get_price_including_tax', array($this, 'set_virtual_product_price'), PHP_INT_MAX, 3);
     // Fallback gzd_product injection if not using wc_get_product
     add_filter('get_post_metadata', array($this, 'inject_gzd_product'), 0, 4);
     // Hide cart estimated text if chosen
     add_action('woocommerce_cart_totals_after_order_total', array($this, 'hide_cart_estimated_text'));
     add_action('woocommerce_after_cart_totals', array($this, 'remove_cart_tax_zero_filter'));
     // Add better WooCommerce shipping taxation
     add_filter('woocommerce_package_rates', array($this, 'replace_shipping_rate_class'), 0, 2);
     // Send order notice directly after new order is being added - use these filters because order status has to be updated already
     add_filter('woocommerce_payment_successful_result', array($this, 'send_order_confirmation_mails'), 0, 2);
     add_filter('woocommerce_checkout_no_payment_needed_redirect', array($this, 'send_order_confirmation_mails'), 0, 2);
     // Check for customer activation
     add_action('template_redirect', array($this, 'customer_account_activation_check'));
     add_action('woocommerce_gzd_customer_cleanup', array(WC_GZD_Admin_Customer::instance(), 'account_cleanup'));
     // Remove cart subtotal filter
     add_action('template_redirect', array($this, 'remove_cart_unit_price_filter'));
     add_action('woocommerce_email', array($this, 'remove_order_hooks'), 0, 1);
     $this->units = new WC_GZD_Units();
     $this->trusted_shops = new WC_GZD_Trusted_Shops();
     $this->ekomi = new WC_GZD_Ekomi();
     $this->emails = new WC_GZD_Emails();
     // Init action
     do_action('woocommerce_germanized_init');
 }
        if (current_user_can('edit_user', $user_id)) {
            $user = get_userdata($user_id);
            if (isset($_POST['_woocommerce_activation'])) {
                delete_user_meta($user_id, '_woocommerce_activation');
            }
        }
    }
    /**
     * Check for customer that didn't activate their accounts within a couple of time and delete them
     */
    public function account_cleanup()
    {
        if (!get_option('woocommerce_gzd_customer_cleanup_interval') || get_option('woocommerce_gzd_customer_cleanup_interval') == 0) {
            return;
        }
        $user_query = new WP_User_Query(array('role' => 'Customer', 'meta_query' => array(array('key' => '_woocommerce_activation', 'compare' => 'EXISTS'))));
        if (!empty($user_query->results)) {
            foreach ($user_query->results as $user) {
                // Check date interval
                $registered = $user->data->user_registered;
                $date_diff = WC_germanized()->get_date_diff($registered, date('Y-m-d'));
                if ($date_diff['d'] >= (int) get_option('woocommerce_gzd_customer_cleanup_interval')) {
                    require_once ABSPATH . 'wp-admin/includes/user.php';
                    wp_delete_user($user->ID);
                }
            }
        }
    }
}
WC_GZD_Admin_Customer::instance();
 /**
  * Init WooCommerceGermanized when WordPress initializes.
  */
 public function init()
 {
     // Before init action
     do_action('before_woocommerce_germanized_init');
     add_filter('woocommerce_locate_template', array($this, 'filter_templates'), PHP_INT_MAX, 3);
     if (version_compare(get_option('woocommerce_version'), '2.3', '<')) {
         add_filter('woocommerce_gzd_default_plugin_template', array($this, 'filter_templates_old_version'), 0, 2);
     } else {
         add_filter('woocommerce_gzd_important_templates', array($this, 'set_critical_templates_2_3'));
         if (get_option('woocommerce_gzd_display_checkout_fallback') == 'yes') {
             add_filter('woocommerce_germanized_filter_template', array($this, 'set_checkout_fallback'), 10, 3);
         }
     }
     add_filter('woocommerce_get_settings_pages', array($this, 'add_settings'));
     add_filter('woocommerce_enqueue_styles', array($this, 'add_styles'));
     // Load after WooCommerce Frontend scripts
     add_action('wp_enqueue_scripts', array($this, 'add_scripts'), 15);
     add_action('wp_enqueue_scripts', array($this, 'add_inline_styles'));
     add_action('wp_print_scripts', array($this, 'localize_scripts'), 5);
     add_filter('woocommerce_email_classes', array($this, 'add_emails'));
     add_filter('woocommerce_locate_core_template', array($this, 'email_templates'), 0, 3);
     add_action('woocommerce_email_order_meta', array($this, 'email_small_business_notice'), 1);
     // Add better tax display to order totals
     add_filter('woocommerce_get_order_item_totals', array($this, 'order_item_totals'), 0, 2);
     // Unsure wether this could lead to future problems - tax classes with same name wont be merged anylonger
     //add_filter( 'woocommerce_rate_code', array( $this, 'prevent_tax_name_merge' ), PHP_INT_MAX, 2 );
     // Hide cart estimated text if chosen
     add_action('woocommerce_cart_totals_after_order_total', array($this, 'hide_cart_estimated_text'));
     add_action('woocommerce_after_cart_totals', array($this, 'remove_cart_tax_zero_filter'));
     // Add better WooCommerce shipping taxation
     add_filter('woocommerce_package_rates', array($this, 'replace_shipping_rate_class'), 0, 2);
     // Payment gateways
     add_filter('woocommerce_payment_gateways', array($this, 'register_gateways'));
     // Check for customer activation
     add_action('template_redirect', array($this, 'customer_account_activation_check'));
     add_action('woocommerce_gzd_customer_cleanup', array(WC_GZD_Admin_Customer::instance(), 'account_cleanup'));
     // Remove cart subtotal filter
     add_action('template_redirect', array($this, 'remove_cart_unit_price_filter'));
     // Let third party apps disable instant order confirmation
     if (apply_filters('woocommerce_gzd_instant_order_confirmation', true) && 'yes' !== get_option('woocommerce_gzd_disable_instant_order_confirmation')) {
         // Unregister WooCommerce default order confirmation mails
         $this->unregister_order_confirmation_hooks();
         // Send order notice directly after new order is being added - use these filters because order status has to be updated already
         add_filter('woocommerce_payment_successful_result', array($this, 'send_order_confirmation_mails'), 0, 2);
         add_filter('woocommerce_checkout_no_payment_needed_redirect', array($this, 'send_order_confirmation_mails'), 0, 2);
     }
     $this->units = new WC_GZD_Units();
     $this->emails = new WC_GZD_Emails();
     // Init action
     do_action('woocommerce_germanized_init');
 }