/**
  * Handles output of tools
  */
 public static function status_tools()
 {
     global $wpdb;
     $tools = self::get_tools();
     if (!empty($_GET['action']) && !empty($_REQUEST['_wpnonce']) && wp_verify_nonce($_REQUEST['_wpnonce'], 'debug_action')) {
         switch ($_GET['action']) {
             case 'clear_transients':
                 wc_delete_product_transients();
                 wc_delete_shop_order_transients();
                 WC_Cache_Helper::get_transient_version('shipping', true);
                 echo '<div class="updated"><p>' . __('Product Transients Cleared', 'woocommerce') . '</p></div>';
                 break;
             case 'clear_expired_transients':
                 /*
                  * Deletes all expired transients. The multi-table delete syntax is used
                  * to delete the transient record from table a, and the corresponding
                  * transient_timeout record from table b.
                  *
                  * Based on code inside core's upgrade_network() function.
                  */
                 $sql = "DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\r\n\t\t\t\t\t\tWHERE a.option_name LIKE %s\r\n\t\t\t\t\t\tAND a.option_name NOT LIKE %s\r\n\t\t\t\t\t\tAND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )\r\n\t\t\t\t\t\tAND b.option_value < %d";
                 $rows = $wpdb->query($wpdb->prepare($sql, $wpdb->esc_like('_transient_') . '%', $wpdb->esc_like('_transient_timeout_') . '%', time()));
                 $sql = "DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\r\n\t\t\t\t\t\tWHERE a.option_name LIKE %s\r\n\t\t\t\t\t\tAND a.option_name NOT LIKE %s\r\n\t\t\t\t\t\tAND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )\r\n\t\t\t\t\t\tAND b.option_value < %d";
                 $rows2 = $wpdb->query($wpdb->prepare($sql, $wpdb->esc_like('_site_transient_') . '%', $wpdb->esc_like('_site_transient_timeout_') . '%', time()));
                 echo '<div class="updated"><p>' . sprintf(__('%d Transients Rows Cleared', 'woocommerce'), $rows + $rows2) . '</p></div>';
                 break;
             case 'reset_roles':
                 // Remove then re-add caps and roles
                 WC_Install::remove_roles();
                 WC_Install::create_roles();
                 echo '<div class="updated"><p>' . __('Roles successfully reset', 'woocommerce') . '</p></div>';
                 break;
             case 'recount_terms':
                 $product_cats = get_terms('product_cat', array('hide_empty' => false, 'fields' => 'id=>parent'));
                 _wc_term_recount($product_cats, get_taxonomy('product_cat'), true, false);
                 $product_tags = get_terms('product_tag', array('hide_empty' => false, 'fields' => 'id=>parent'));
                 _wc_term_recount($product_tags, get_taxonomy('product_tag'), true, false);
                 echo '<div class="updated"><p>' . __('Terms successfully recounted', 'woocommerce') . '</p></div>';
                 break;
             case 'clear_sessions':
                 $wpdb->query("\r\n\t\t\t\t\t\tDELETE FROM {$wpdb->options}\r\n\t\t\t\t\t\tWHERE option_name LIKE '_wc_session_%' OR option_name LIKE '_wc_session_expires_%'\r\n\t\t\t\t\t");
                 wp_cache_flush();
                 echo '<div class="updated"><p>' . __('Sessions successfully cleared', 'woocommerce') . '</p></div>';
                 break;
             case 'install_pages':
                 WC_Install::create_pages();
                 echo '<div class="updated"><p>' . __('All missing WooCommerce pages was installed successfully.', 'woocommerce') . '</p></div>';
                 break;
             case 'delete_taxes':
                 $wpdb->query("TRUNCATE " . $wpdb->prefix . "woocommerce_tax_rates");
                 $wpdb->query("TRUNCATE " . $wpdb->prefix . "woocommerce_tax_rate_locations");
                 echo '<div class="updated"><p>' . __('Tax rates successfully deleted', 'woocommerce') . '</p></div>';
                 break;
             case 'reset_tracking':
                 delete_option('woocommerce_allow_tracking');
                 WC_Admin_Notices::add_notice('tracking');
                 echo '<div class="updated"><p>' . __('Usage tracking settings successfully reset.', 'woocommerce') . '</p></div>';
                 break;
             default:
                 $action = esc_attr($_GET['action']);
                 if (isset($tools[$action]['callback'])) {
                     $callback = $tools[$action]['callback'];
                     $return = call_user_func($callback);
                     if ($return === false) {
                         if (is_array($callback)) {
                             echo '<div class="error"><p>' . sprintf(__('There was an error calling %s::%s', 'woocommerce'), get_class($callback[0]), $callback[1]) . '</p></div>';
                         } else {
                             echo '<div class="error"><p>' . sprintf(__('There was an error calling %s', 'woocommerce'), $callback) . '</p></div>';
                         }
                     }
                 }
                 break;
         }
     }
     // Manual translation update messages
     if (isset($_GET['translation_updated'])) {
         WC_Language_Pack_Upgrader::language_update_messages();
     }
     // Display message if settings settings have been saved
     if (isset($_REQUEST['settings-updated'])) {
         echo '<div class="updated"><p>' . __('Your changes have been saved.', 'woocommerce') . '</p></div>';
     }
     include_once 'views/html-admin-page-status-tools.php';
 }
    /**
     * Introduction step
     */
    public function wc_setup_introduction()
    {
        $locale = get_locale();
        if (isset($_GET['translation_updated'])) {
            WC_Language_Pack_Upgrader::language_update_messages();
        } elseif ('en_US' !== $locale && WC_Language_Pack_Upgrader::has_available_update($locale)) {
            ?>
			<div class="woocommerce-message woocommerce-language-pack">
				<p><?php 
            printf(esc_html__('WooCommerce is available in %s. Would you like to use this translation?', 'woocommerce'), $locale);
            ?>
</p>
				<p class="submit">
					<a href="<?php 
            echo esc_url(wp_nonce_url(admin_url('index.php?page=wc-setup&action=translation_upgrade'), 'setup_language'));
            ?>
" class="button-primary"><?php 
            _e('Install Translation', 'woocommerce');
            ?>
</a>
				</p>
			</div>
			<?php 
        }
        ?>
		<h1><?php 
        _e('Welcome to the world of WooCommerce!', 'woocommerce');
        ?>
</h1>
		<p><?php 
        _e('Thank you for choosing WooCommerce to power your online store! This quick setup wizard will help you configure the basic settings. <strong>It’s completely optional and shouldn’t take longer than five minutes.</strong>', 'woocommerce');
        ?>
</p>
		<p><?php 
        _e('No time right now? If you don’t want to go through the wizard, you can skip and return to the WordPress dashboard. Come back anytime if you change your mind!', 'woocommerce');
        ?>
</p>
		<p class="wc-setup-actions step">
			<a href="<?php 
        echo esc_url($this->get_next_step_link());
        ?>
" class="button-primary button button-large"><?php 
        _e('Let\'s Go!', 'woocommerce');
        ?>
</a>
			<a href="<?php 
        echo esc_url(admin_url('plugins.php'));
        ?>
" class="button button-large"><?php 
        _e('Not right now', 'woocommerce');
        ?>
</a>
		</p>
		<?php 
    }
 /**
  * Automatically download translations for WC ( when user install WCML ( from 3.3.3) / add new language in WPML )
  *
  * @param  string $lang_code Language code
  *
  */
 function download_woocommerce_translations($lang_code)
 {
     global $sitepress;
     $locale = $sitepress->get_locale($lang_code);
     if ($locale != 'en_US' && class_exists('WC_Language_Pack_Upgrader')) {
         $sitepress->switch_lang($lang_code);
         include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
         require_once ABSPATH . 'wp-admin/includes/file.php';
         require_once ABSPATH . 'wp-admin/includes/plugin.php';
         require_once ABSPATH . 'wp-admin/includes/template.php';
         $url = 'update-core.php?action=do-translation-upgrade';
         $nonce = 'upgrade-translations';
         $title = '';
         $context = WP_LANG_DIR;
         $wc_upgrader_class = new WC_Language_Pack_Upgrader();
         $upgrader = new Language_Pack_Upgrader(new Automatic_Upgrader_Skin(compact('url', 'nonce', 'title', 'context')));
         // use Language_Pack_Upgrader_Skin instead of Automatic_Upgrader_Skin to display upgrade process
         $upgr_object = array();
         $upgr_object[0] = new stdClass();
         $upgr_object[0]->type = 'plugin';
         $upgr_object[0]->slug = 'woocommerce';
         $upgr_object[0]->language = $locale;
         $upgr_object[0]->version = WC_VERSION;
         $upgr_object[0]->updated = date('Y-m-d H:i:s');
         $upgr_object[0]->package = $wc_upgrader_class->get_language_package_uri();
         $upgr_object[0]->autoupdate = 1;
         $upgrader->bulk_upgrade($upgr_object);
         $this->save_translation_version($locale);
     }
 }