/**
 * Runs the installer.
 *
 * @access public
 * @return void
 */
function do_install_woocommerce()
{
    global $woocommerce_settings, $woocommerce;
    // Do install
    woocommerce_default_options();
    woocommerce_tables_install();
    woocommerce_init_roles();
    // Register post types
    $woocommerce->init_taxonomy();
    // Add default taxonomies
    woocommerce_default_taxonomies();
    // Cron jobs
    wp_clear_scheduled_hook('woocommerce_scheduled_sales');
    wp_clear_scheduled_hook('woocommerce_cancel_unpaid_orders');
    wp_clear_scheduled_hook('woocommerce_cleanup_sessions');
    $ve = get_option('gmt_offset') > 0 ? '+' : '-';
    wp_schedule_event(strtotime('tomorrow ' . $ve . get_option('gmt_offset') . ' HOURS'), 'daily', 'woocommerce_scheduled_sales');
    $held_duration = get_option('woocommerce_hold_stock_minutes', null);
    if (is_null($held_duration)) {
        $held_duration = '60';
    }
    if ($held_duration != '') {
        wp_schedule_single_event(time() + absint($held_duration) * 60, 'woocommerce_cancel_unpaid_orders');
    }
    wp_schedule_event(time(), 'twicedaily', 'woocommerce_cleanup_sessions');
    // Install files and folders for uploading files and prevent hotlinking
    $upload_dir = wp_upload_dir();
    $files = array(array('base' => $upload_dir['basedir'] . '/woocommerce_uploads', 'file' => '.htaccess', 'content' => 'deny from all'), array('base' => $upload_dir['basedir'] . '/woocommerce_uploads', 'file' => 'index.html', 'content' => ''), array('base' => WP_PLUGIN_DIR . "/" . plugin_basename(dirname(dirname(__FILE__))) . '/logs', 'file' => '.htaccess', 'content' => 'deny from all'), array('base' => WP_PLUGIN_DIR . "/" . plugin_basename(dirname(dirname(__FILE__))) . '/logs', 'file' => 'index.html', 'content' => ''));
    foreach ($files as $file) {
        if (wp_mkdir_p($file['base']) && !file_exists(trailingslashit($file['base']) . $file['file'])) {
            if ($file_handle = @fopen(trailingslashit($file['base']) . $file['file'], 'w')) {
                fwrite($file_handle, $file['content']);
                fclose($file_handle);
            }
        }
    }
    // Clear transient cache
    $woocommerce->clear_product_transients();
    // Recompile LESS styles if they are custom
    if (get_option('woocommerce_frontend_css') == 'yes') {
        $colors = get_option('woocommerce_frontend_css_colors');
        if (!empty($colors['primary']) && !empty($colors['secondary']) && !empty($colors['highlight']) && !empty($colors['content_bg']) && !empty($colors['subtext']) && ($colors['primary'] != '#ad74a2' || $colors['secondary'] != '#f7f6f7' || $colors['highlight'] != '#85ad74' || $colors['content_bg'] != '#ffffff' || $colors['subtext'] != '#777777')) {
            woocommerce_compile_less_styles();
        }
    }
    // Queue upgrades
    $current_version = get_option('woocommerce_version', null);
    $current_db_version = get_option('woocommerce_db_version', null);
    if (version_compare($current_db_version, '2.0.9', '<') && null !== $current_db_version) {
        update_option('_wc_needs_update', 1);
    } else {
        update_option('woocommerce_db_version', $woocommerce->version);
    }
    // Update version
    update_option('woocommerce_version', $woocommerce->version);
    // Flush rewrite rules
    flush_rewrite_rules();
}
/**
 * Runs the installer.
 *
 * @access public
 * @return void
 */
function do_install_woocommerce()
{
    global $woocommerce_settings, $woocommerce;
    // Do install
    woocommerce_default_options();
    woocommerce_tables_install();
    // Register post types
    $woocommerce->init_taxonomy();
    // Add default taxonomies
    woocommerce_default_taxonomies();
    // Install folder for uploading files and prevent hotlinking
    $upload_dir = wp_upload_dir();
    $downloads_url = $upload_dir['basedir'] . '/woocommerce_uploads';
    if (wp_mkdir_p($downloads_url) && !file_exists($downloads_url . '/.htaccess')) {
        if ($file_handle = @fopen($downloads_url . '/.htaccess', 'w')) {
            fwrite($file_handle, 'deny from all');
            fclose($file_handle);
        }
    }
    // Install folder for logs
    $logs_url = WP_PLUGIN_DIR . "/" . plugin_basename(dirname(dirname(__FILE__))) . '/logs';
    if (wp_mkdir_p($logs_url) && !file_exists($logs_url . '/.htaccess')) {
        if ($file_handle = @fopen($logs_url . '/.htaccess', 'w')) {
            fwrite($file_handle, 'deny from all');
            fclose($file_handle);
        }
    }
    // Clear transient cache
    $woocommerce->clear_product_transients();
    // Recompile LESS styles if they are custom
    if (get_option('woocommerce_frontend_css') == 'yes') {
        // Handle Colour Settings
        $colors = get_option('woocommerce_frontend_css_colors');
        if (!empty($colors['primary']) && !empty($colors['secondary']) && !empty($colors['highlight']) && !empty($colors['content_bg']) && !empty($colors['subtext']) && ($colors['primary'] != '#ad74a2' || $colors['secondary'] != '#f7f6f7' || $colors['highlight'] != '#85ad74' || $colors['content_bg'] != '#ffffff' || $colors['subtext'] != '#777777')) {
            // Write less file
            woocommerce_compile_less_styles();
        }
    }
    // Update version
    update_option("woocommerce_db_version", $woocommerce->version);
}
示例#3
0
 /**
  * Create CSS from LESS file
  */
 private function create_css_from_less()
 {
     // Recompile LESS styles if they are custom
     $colors = get_option('woocommerce_frontend_css_colors');
     if (!empty($colors['primary']) && !empty($colors['secondary']) && !empty($colors['highlight']) && !empty($colors['content_bg']) && !empty($colors['subtext']) && ($colors['primary'] != '#ad74a2' || $colors['secondary'] != '#f7f6f7' || $colors['highlight'] != '#85ad74' || $colors['content_bg'] != '#ffffff' || $colors['subtext'] != '#777777')) {
         if (!function_exists('woocommerce_compile_less_styles')) {
             include_once 'admin/wc-admin-functions.php';
         }
         woocommerce_compile_less_styles();
     }
 }
 /**
  * Save settings
  */
 public function save()
 {
     $settings = $this->get_settings();
     WC_Admin_Settings::save_fields($settings);
     if (isset($_POST['woocommerce_frontend_css_primary'])) {
         // Save settings
         $primary = !empty($_POST['woocommerce_frontend_css_primary']) ? wc_format_hex($_POST['woocommerce_frontend_css_primary']) : '';
         $secondary = !empty($_POST['woocommerce_frontend_css_secondary']) ? wc_format_hex($_POST['woocommerce_frontend_css_secondary']) : '';
         $highlight = !empty($_POST['woocommerce_frontend_css_highlight']) ? wc_format_hex($_POST['woocommerce_frontend_css_highlight']) : '';
         $content_bg = !empty($_POST['woocommerce_frontend_css_content_bg']) ? wc_format_hex($_POST['woocommerce_frontend_css_content_bg']) : '';
         $subtext = !empty($_POST['woocommerce_frontend_css_subtext']) ? wc_format_hex($_POST['woocommerce_frontend_css_subtext']) : '';
         $colors = array('primary' => $primary, 'secondary' => $secondary, 'highlight' => $highlight, 'content_bg' => $content_bg, 'subtext' => $subtext);
         // Check the colors.
         $valid_colors = true;
         foreach ($colors as $color) {
             if (!preg_match('/^#[a-f0-9]{6}$/i', $color)) {
                 $valid_colors = false;
                 WC_Admin_Settings::add_error(sprintf(__('Error saving the Frontend Styles, %s is not a valid color, please use only valid colors code.', 'woocommerce'), $color));
                 break;
             }
         }
         if ($valid_colors) {
             $old_colors = get_option('woocommerce_frontend_css_colors');
             update_option('woocommerce_frontend_css_colors', $colors);
             if ($old_colors != $colors) {
                 woocommerce_compile_less_styles();
             }
         }
     }
 }
    /**
     * Settings page.
     *
     * Handles the display of the main woocommerce settings page in admin.
     *
     * @access public
     * @return void
     */
    function woocommerce_settings()
    {
        global $woocommerce, $woocommerce_settings, $current_section, $current_tab;
        do_action('woocommerce_settings_start');
        // Get current tab/section
        $current_tab = empty($_GET['tab']) ? 'general' : sanitize_text_field(urldecode($_GET['tab']));
        $current_section = empty($_REQUEST['section']) ? '' : sanitize_text_field(urldecode($_REQUEST['section']));
        // Save settings
        if (!empty($_POST)) {
            if (empty($_REQUEST['_wpnonce']) || !wp_verify_nonce($_REQUEST['_wpnonce'], 'woocommerce-settings')) {
                die(__('Action failed. Please refresh the page and retry.', 'woocommerce'));
            }
            if (!$current_section) {
                $old_base_color = get_option('woocommerce_frontend_css_base_color');
                $old_base_color = get_option('woocommerce_frontend_css_base_color');
                include_once 'settings/settings-save.php';
                switch ($current_tab) {
                    case "payment_gateways":
                        woocommerce_update_options($woocommerce_settings[$current_tab]);
                        $woocommerce->payment_gateways->process_admin_options();
                        break;
                    case "shipping":
                        woocommerce_update_options($woocommerce_settings[$current_tab]);
                        $woocommerce->shipping->process_admin_options();
                        break;
                    default:
                        if (isset($woocommerce_settings[$current_tab])) {
                            woocommerce_update_options($woocommerce_settings[$current_tab]);
                        }
                        // Trigger action for tab
                        do_action('woocommerce_update_options_' . $current_tab);
                        break;
                }
                do_action('woocommerce_update_options');
                // Handle Colour Settings
                if ($current_tab == 'general' && get_option('woocommerce_frontend_css') == 'yes') {
                    // Save settings
                    $primary = !empty($_POST['woocommerce_frontend_css_primary']) ? woocommerce_format_hex($_POST['woocommerce_frontend_css_primary']) : '';
                    $secondary = !empty($_POST['woocommerce_frontend_css_secondary']) ? woocommerce_format_hex($_POST['woocommerce_frontend_css_secondary']) : '';
                    $highlight = !empty($_POST['woocommerce_frontend_css_highlight']) ? woocommerce_format_hex($_POST['woocommerce_frontend_css_highlight']) : '';
                    $content_bg = !empty($_POST['woocommerce_frontend_css_content_bg']) ? woocommerce_format_hex($_POST['woocommerce_frontend_css_content_bg']) : '';
                    $subtext = !empty($_POST['woocommerce_frontend_css_subtext']) ? woocommerce_format_hex($_POST['woocommerce_frontend_css_subtext']) : '';
                    $colors = array('primary' => $primary, 'secondary' => $secondary, 'highlight' => $highlight, 'content_bg' => $content_bg, 'subtext' => $subtext);
                    $old_colors = get_option('woocommerce_frontend_css_colors');
                    update_option('woocommerce_frontend_css_colors', $colors);
                    if ($old_colors != $colors) {
                        woocommerce_compile_less_styles();
                    }
                }
            } else {
                // If saving a shipping methods options, load 'er up
                if ($current_tab == 'shipping' || $current_tab == 'payment_gateways' && class_exists($current_section)) {
                    $current_section_class = new $current_section();
                    do_action('woocommerce_update_options_' . $current_tab . '_' . $current_section_class->id);
                    // If saving an email's options, load theme
                } elseif ($current_tab == 'email') {
                    // Load mailer
                    $mailer = $woocommerce->mailer();
                    if (class_exists($current_section)) {
                        $current_section_class = new $current_section();
                        do_action('woocommerce_update_options_' . $current_tab . '_' . $current_section_class->id);
                    } else {
                        do_action('woocommerce_update_options_' . $current_tab . '_' . $current_section);
                    }
                    // Save tax
                } elseif ($current_tab == 'tax') {
                    include_once 'settings/settings-tax-rates.php';
                    woocommerce_tax_rates_setting_save();
                } else {
                    // Save section only
                    do_action('woocommerce_update_options_' . $current_tab . '_' . $current_section);
                }
            }
            // Clear any unwanted data
            $woocommerce->clear_product_transients();
            delete_transient('woocommerce_cache_excluded_uris');
            // Redirect back to the settings page
            $redirect = add_query_arg('saved', 'true');
            if (!empty($_POST['subtab'])) {
                $redirect = add_query_arg('subtab', esc_attr(str_replace('#', '', $_POST['subtab'])), $redirect);
            }
            wp_safe_redirect($redirect);
            exit;
        }
        // Get any returned messages
        $error = empty($_GET['wc_error']) ? '' : urldecode(stripslashes($_GET['wc_error']));
        $message = empty($_GET['wc_message']) ? '' : urldecode(stripslashes($_GET['wc_message']));
        if ($error || $message) {
            if ($error) {
                echo '<div id="message" class="error fade"><p><strong>' . esc_html($error) . '</strong></p></div>';
            } else {
                echo '<div id="message" class="updated fade"><p><strong>' . esc_html($message) . '</strong></p></div>';
            }
        } elseif (!empty($_GET['saved'])) {
            echo '<div id="message" class="updated fade"><p><strong>' . __('Your settings have been saved.', 'woocommerce') . '</strong></p></div>';
        }
        // Were the settings saved?
        if (!empty($_GET['saved'])) {
            do_action('woocommerce_settings_saved');
        }
        // Hide WC Link
        if (!empty($_GET['hide-wc-extensions-message'])) {
            update_option('hide-wc-extensions-message', 1);
        }
        ?>
		<div class="wrap woocommerce">
			<form method="post" id="mainform" action="" enctype="multipart/form-data">
				<div class="icon32 icon32-woocommerce-settings" id="icon-woocommerce"><br /></div><h2 class="nav-tab-wrapper woo-nav-tab-wrapper">
					<?php 
        $tabs = array('general' => __('General', 'woocommerce'), 'catalog' => __('Catalog', 'woocommerce'), 'pages' => __('Pages', 'woocommerce'), 'inventory' => __('Inventory', 'woocommerce'), 'tax' => __('Tax', 'woocommerce'), 'shipping' => __('Shipping', 'woocommerce'), 'payment_gateways' => __('Payment Gateways', 'woocommerce'), 'email' => __('Emails', 'woocommerce'), 'integration' => __('Integration', 'woocommerce'));
        if (!$woocommerce->integrations->get_integrations()) {
            unset($tabs['integration']);
        }
        $tabs = apply_filters('woocommerce_settings_tabs_array', $tabs);
        foreach ($tabs as $name => $label) {
            echo '<a href="' . admin_url('admin.php?page=woocommerce_settings&tab=' . $name) . '" class="nav-tab ';
            if ($current_tab == $name) {
                echo 'nav-tab-active';
            }
            echo '">' . $label . '</a>';
        }
        do_action('woocommerce_settings_tabs');
        ?>
				</h2>
				<?php 
        wp_nonce_field('woocommerce-settings', '_wpnonce', true, true);
        ?>

				<?php 
        if (!get_option('hide-wc-extensions-message')) {
            ?>
					<div id="woocommerce_extensions"><a href="<?php 
            echo add_query_arg('hide-wc-extensions-message', 'true');
            ?>
" class="hide">&times;</a><?php 
            printf(__('More functionality and gateway options available via <a href="%s" target="_blank">WC official extensions</a>.', 'woocommerce'), 'http://www.woothemes.com/extensions/woocommerce-extensions/');
            ?>
</div>
				<?php 
        }
        ?>

				<?php 
        switch ($current_tab) {
            case "general":
                include_once 'settings/settings-frontend-styles.php';
                woocommerce_admin_fields($woocommerce_settings[$current_tab]);
                break;
            case "tax":
                $links = array('<a href="' . admin_url('admin.php?page=woocommerce_settings&tab=tax') . '" class="' . ($current_section == '' ? 'current' : '') . '">' . __('Tax Options', 'woocommerce') . '</a>');
                // Get tax classes and display as links
                $tax_classes = array_filter(array_map('trim', explode("\n", get_option('woocommerce_tax_classes'))));
                $links[] = __('Tax Rates', 'woocommerce') . ': <a href="' . admin_url('admin.php?page=woocommerce_settings&tab=tax&section=standard') . '" class="' . ($current_section == 'standard' ? 'current' : '') . '">' . __('Standard', 'woocommerce') . '</a>';
                if ($tax_classes) {
                    foreach ($tax_classes as $class) {
                        $links[] = '<a href="' . admin_url('admin.php?page=woocommerce_settings&tab=tax&section=' . sanitize_title($class)) . '" class="' . ($current_section == sanitize_title($class) ? 'current' : '') . '">' . $class . '</a>';
                    }
                }
                echo '<ul class="subsubsub"><li>' . implode(' | </li><li>', $links) . '</li></ul><br class="clear" />';
                if ($current_section == 'standard' || in_array($current_section, array_map('sanitize_title', $tax_classes))) {
                    include_once 'settings/settings-tax-rates.php';
                    woocommerce_tax_rates_setting();
                } else {
                    woocommerce_admin_fields($woocommerce_settings[$current_tab]);
                }
                break;
            case "pages":
            case "catalog":
            case "inventory":
                woocommerce_admin_fields($woocommerce_settings[$current_tab]);
                break;
            case "email":
                $current = $current_section ? '' : 'class="current"';
                $links = array('<a href="' . admin_url('admin.php?page=woocommerce_settings&tab=email') . '" ' . $current . '>' . __('Email Options', 'woocommerce') . '</a>');
                // Define emails that can be customised here
                $mailer = $woocommerce->mailer();
                $email_templates = $mailer->get_emails();
                foreach ($email_templates as $email) {
                    $title = empty($email->title) ? ucwords($email->id) : ucwords($email->title);
                    $current = get_class($email) == $current_section ? 'class="current"' : '';
                    $links[] = '<a href="' . add_query_arg('section', get_class($email), admin_url('admin.php?page=woocommerce_settings&tab=email')) . '"' . $current . '>' . esc_html($title) . '</a>';
                }
                echo '<ul class="subsubsub"><li>' . implode(' | </li><li>', $links) . '</li></ul><br class="clear" />';
                // Specific email options
                if ($current_section) {
                    foreach ($email_templates as $email) {
                        if (get_class($email) == $current_section) {
                            $email->admin_options();
                            break;
                        }
                    }
                } else {
                    woocommerce_admin_fields($woocommerce_settings[$current_tab]);
                }
                break;
            case "shipping":
                include 'settings/settings-shipping-methods.php';
                $current = $current_section ? '' : 'class="current"';
                $links = array('<a href="' . admin_url('admin.php?page=woocommerce_settings&tab=shipping') . '" ' . $current . '>' . __('Shipping Options', 'woocommerce') . '</a>');
                // Load shipping methods so we can show any global options they may have
                $shipping_methods = $woocommerce->shipping->load_shipping_methods();
                foreach ($shipping_methods as $method) {
                    if (!$method->has_settings()) {
                        continue;
                    }
                    $title = empty($method->method_title) ? ucwords($method->id) : ucwords($method->method_title);
                    $current = get_class($method) == $current_section ? 'class="current"' : '';
                    $links[] = '<a href="' . add_query_arg('section', get_class($method), admin_url('admin.php?page=woocommerce_settings&tab=shipping')) . '"' . $current . '>' . esc_html($title) . '</a>';
                }
                echo '<ul class="subsubsub"><li>' . implode(' | </li><li>', $links) . '</li></ul><br class="clear" />';
                // Specific method options
                if ($current_section) {
                    foreach ($shipping_methods as $method) {
                        if (get_class($method) == $current_section && $method->has_settings()) {
                            $method->admin_options();
                            break;
                        }
                    }
                } else {
                    woocommerce_admin_fields($woocommerce_settings[$current_tab]);
                }
                break;
            case "payment_gateways":
                include 'settings/settings-payment-gateways.php';
                $current = $current_section ? '' : 'class="current"';
                $links = array('<a href="' . admin_url('admin.php?page=woocommerce_settings&tab=payment_gateways') . '" ' . $current . '>' . __('Payment Gateways', 'woocommerce') . '</a>');
                // Load shipping methods so we can show any global options they may have
                $payment_gateways = $woocommerce->payment_gateways->payment_gateways();
                foreach ($payment_gateways as $gateway) {
                    $title = empty($gateway->method_title) ? ucwords($gateway->id) : ucwords($gateway->method_title);
                    $current = get_class($gateway) == $current_section ? 'class="current"' : '';
                    $links[] = '<a href="' . add_query_arg('section', get_class($gateway), admin_url('admin.php?page=woocommerce_settings&tab=payment_gateways')) . '"' . $current . '>' . esc_html($title) . '</a>';
                }
                echo '<ul class="subsubsub"><li>' . implode(' | </li><li>', $links) . '</li></ul><br class="clear" />';
                // Specific method options
                if ($current_section) {
                    foreach ($payment_gateways as $gateway) {
                        if (get_class($gateway) == $current_section) {
                            $gateway->admin_options();
                            break;
                        }
                    }
                } else {
                    woocommerce_admin_fields($woocommerce_settings[$current_tab]);
                }
                break;
            case "integration":
                $integrations = $woocommerce->integrations->get_integrations();
                $current_section = empty($current_section) ? key($integrations) : $current_section;
                $links = array();
                foreach ($integrations as $integration) {
                    $title = empty($integration->method_title) ? ucwords($integration->id) : ucwords($integration->method_title);
                    $current = $integration->id == $current_section ? 'class="current"' : '';
                    $links[] = '<a href="' . add_query_arg('section', $integration->id, admin_url('admin.php?page=woocommerce_settings&tab=integration')) . '"' . $current . '>' . esc_html($title) . '</a>';
                }
                echo '<ul class="subsubsub"><li>' . implode(' | </li><li>', $links) . '</li></ul><br class="clear" />';
                if (isset($integrations[$current_section])) {
                    $integrations[$current_section]->admin_options();
                }
                break;
            default:
                do_action('woocommerce_settings_tabs_' . $current_tab);
                break;
        }
        ?>
		        <p class="submit">
		        	<?php 
        if (!isset($GLOBALS['hide_save_button'])) {
            ?>
		        		<input name="save" class="button-primary" type="submit" value="<?php 
            _e('Save changes', 'woocommerce');
            ?>
" />
		        	<?php 
        }
        ?>
		        	<input type="hidden" name="subtab" id="last_tab" />
		        </p>
			</form>

			<script type="text/javascript">
				jQuery(window).load(function(){

					// Countries
					jQuery('select#woocommerce_allowed_countries').change(function(){
						if (jQuery(this).val()=="specific") {
							jQuery(this).parent().parent().next('tr').show();
						} else {
							jQuery(this).parent().parent().next('tr').hide();
						}
					}).change();

					// Color picker
					jQuery('.colorpick').each(function(){
						jQuery('.colorpickdiv', jQuery(this).parent()).farbtastic(this);
						jQuery(this).click(function() {
							if ( jQuery(this).val() == "" ) jQuery(this).val('#');
							jQuery('.colorpickdiv', jQuery(this).parent() ).show();
						});
					});
					jQuery(document).mousedown(function(){
						jQuery('.colorpickdiv').hide();
					});

					// Edit prompt
					jQuery(function(){
						var changed = false;

						jQuery('input, textarea, select, checkbox').change(function(){
							changed = true;
						});

						jQuery('.woo-nav-tab-wrapper a').click(function(){
							if (changed) {
								window.onbeforeunload = function() {
								    return '<?php 
        echo __('The changes you made will be lost if you navigate away from this page.', 'woocommerce');
        ?>
';
								}
							} else {
								window.onbeforeunload = '';
							}
						});

						jQuery('.submit input').click(function(){
							window.onbeforeunload = '';
						});
					});

					// Sorting
					jQuery('table.wc_gateways tbody, table.wc_shipping tbody').sortable({
						items:'tr',
						cursor:'move',
						axis:'y',
						handle: 'td',
						scrollSensitivity:40,
						helper:function(e,ui){
							ui.children().each(function(){
								jQuery(this).width(jQuery(this).width());
							});
							ui.css('left', '0');
							return ui;
						},
						start:function(event,ui){
							ui.item.css('background-color','#f6f6f6');
						},
						stop:function(event,ui){
							ui.item.removeAttr('style');
						}
					});

					// Chosen selects
					jQuery("select.chosen_select").chosen();

					jQuery("select.chosen_select_nostd").chosen({
						allow_single_deselect: 'true'
					});
				});
			</script>
		</div>
		<?php 
    }
    function woocommerce_settings()
    {
        global $woocommerce, $woocommerce_settings;
        // Get current tab/section
        $current_tab = empty($_GET['tab']) ? 'general' : urldecode($_GET['tab']);
        $current_section = empty($_REQUEST['section']) ? '' : urldecode($_REQUEST['section']);
        // Save settings
        if (!empty($_POST)) {
            if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'woocommerce-settings')) {
                die(__('Action failed. Please refresh the page and retry.', 'woocommerce'));
            }
            if (!$current_section) {
                $old_base_color = get_option('woocommerce_frontend_css_base_color');
                $old_base_color = get_option('woocommerce_frontend_css_base_color');
                switch ($current_tab) {
                    case "general":
                    case "pages":
                    case "catalog":
                    case "inventory":
                    case "shipping":
                    case "tax":
                    case "email":
                        woocommerce_update_options($woocommerce_settings[$current_tab]);
                        break;
                }
                do_action('woocommerce_update_options');
                do_action('woocommerce_update_options_' . $current_tab);
                // Handle Colour Settings
                if ($current_tab == 'general' && get_option('woocommerce_frontend_css') == 'yes') {
                    // Save settings
                    $primary = !empty($_POST['woocommerce_frontend_css_primary']) ? woocommerce_format_hex($_POST['woocommerce_frontend_css_primary']) : '';
                    $secondary = !empty($_POST['woocommerce_frontend_css_secondary']) ? woocommerce_format_hex($_POST['woocommerce_frontend_css_secondary']) : '';
                    $highlight = !empty($_POST['woocommerce_frontend_css_highlight']) ? woocommerce_format_hex($_POST['woocommerce_frontend_css_highlight']) : '';
                    $content_bg = !empty($_POST['woocommerce_frontend_css_content_bg']) ? woocommerce_format_hex($_POST['woocommerce_frontend_css_content_bg']) : '';
                    $subtext = !empty($_POST['woocommerce_frontend_css_subtext']) ? woocommerce_format_hex($_POST['woocommerce_frontend_css_subtext']) : '';
                    $colors = array('primary' => $primary, 'secondary' => $secondary, 'highlight' => $highlight, 'content_bg' => $content_bg, 'subtext' => $subtext);
                    $old_colors = get_option('woocommerce_frontend_css_colors');
                    update_option('woocommerce_frontend_css_colors', $colors);
                    if ($old_colors != $colors) {
                        woocommerce_compile_less_styles();
                    }
                }
            } else {
                // Save section only
                do_action('woocommerce_update_options_' . $current_tab . '_' . $current_section);
            }
            // Flush rules and clear any unwanted data
            flush_rewrite_rules(false);
            unset($_SESSION['orderby']);
            $woocommerce->clear_product_transients();
            // Redirect back to the settings page
            $redirect = add_query_arg('saved', 'true');
            if (!empty($_POST['subtab'])) {
                $redirect = add_query_arg('subtab', esc_attr(str_replace('#', '', $_POST['subtab'])), $redirect);
            }
            wp_redirect($redirect);
            exit;
        }
        // Get any returned messages
        $error = empty($_GET['wc_error']) ? '' : urldecode(stripslashes($_GET['wc_error']));
        $message = empty($_GET['wc_message']) ? '' : urldecode(stripslashes($_GET['wc_message']));
        if ($error || $message) {
            if ($error) {
                echo '<div id="message" class="error fade"><p><strong>' . wptexturize($error) . '</strong></p></div>';
            } else {
                echo '<div id="message" class="updated fade"><p><strong>' . wptexturize($message) . '</strong></p></div>';
            }
        } elseif (!empty($_GET['saved'])) {
            echo '<div id="message" class="updated fade"><p><strong>' . __('Your settings have been saved.', 'woocommerce') . '</strong></p></div>';
        }
        // Were the settings saved?
        if (!empty($_GET['saved'])) {
            flush_rewrite_rules(false);
            do_action('woocommerce_settings_saved');
        }
        // Hide WC Link
        if (isset($_GET['hide-wc-extensions-message'])) {
            update_option('hide-wc-extensions-message', 1);
        }
        // Install/page installer
        $install_complete = false;
        // Add pages button
        if (isset($_GET['install_woocommerce_pages']) && $_GET['install_woocommerce_pages']) {
            require_once 'woocommerce-admin-install.php';
            woocommerce_create_pages();
            update_option('skip_install_woocommerce_pages', 1);
            $install_complete = true;
            // Skip button
        } elseif (isset($_GET['skip_install_woocommerce_pages']) && $_GET['skip_install_woocommerce_pages']) {
            update_option('skip_install_woocommerce_pages', 1);
            $install_complete = true;
        }
        if ($install_complete) {
            ?>
    	<div id="message" class="updated woocommerce-message wc-connect">
			<div class="squeezer">
				<h4><?php 
            _e('<strong>Congratulations!</strong> &#8211; WooCommerce has been installed and setup. Enjoy :)', 'woocommerce');
            ?>
</h4>
				<p><a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.woothemes.com/woocommerce/" data-text="A open-source (free) #ecommerce plugin for #WordPress that helps you sell anything. Beautifully." data-via="WooThemes" data-size="large" data-hashtags="WooCommerce">Tweet</a>
	<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script></p>
			</div>
		</div>
		<?php 
            // Flush rules after install
            flush_rewrite_rules(false);
            // Set installed option
            update_option('woocommerce_installed', 0);
        }
        ?>
	<div class="wrap woocommerce">
		<form method="post" id="mainform" action="">
			<div class="icon32 icon32-woocommerce-settings" id="icon-woocommerce"><br /></div><h2 class="nav-tab-wrapper woo-nav-tab-wrapper">
				<?php 
        $tabs = array('general' => __('General', 'woocommerce'), 'catalog' => __('Catalog', 'woocommerce'), 'pages' => __('Pages', 'woocommerce'), 'inventory' => __('Inventory', 'woocommerce'), 'tax' => __('Tax', 'woocommerce'), 'shipping' => __('Shipping', 'woocommerce'), 'payment_gateways' => __('Payment Gateways', 'woocommerce'), 'email' => __('Emails', 'woocommerce'), 'integration' => __('Integration', 'woocommerce'));
        $tabs = apply_filters('woocommerce_settings_tabs_array', $tabs);
        foreach ($tabs as $name => $label) {
            echo '<a href="' . admin_url('admin.php?page=woocommerce&tab=' . $name) . '" class="nav-tab ';
            if ($current_tab == $name) {
                echo 'nav-tab-active';
            }
            echo '">' . $label . '</a>';
        }
        do_action('woocommerce_settings_tabs');
        ?>
			</h2>
			<?php 
        wp_nonce_field('woocommerce-settings', '_wpnonce', true, true);
        ?>
			
			<?php 
        if (!get_option('hide-wc-extensions-message')) {
            ?>
			<div id="woocommerce_extensions"><a href="<?php 
            echo add_query_arg('hide-wc-extensions-message', 'true');
            ?>
" class="hide">&times;</a><?php 
            printf(__('More functionality and gateway options available via <a href="%s" target="_blank">WC official extensions</a>.', 'woocommerce'), 'http://www.woothemes.com/extensions/woocommerce-extensions/');
            ?>
</div>
			<?php 
        }
        ?>

			<?php 
        switch ($current_tab) {
            case "general":
            case "pages":
            case "catalog":
            case "inventory":
            case "tax":
            case "email":
                woocommerce_admin_fields($woocommerce_settings[$current_tab]);
                break;
            case "shipping":
                $current = empty($_GET['section']) ? 'class="current"' : '';
                $links = array('<a href="' . admin_url('admin.php?page=woocommerce&tab=shipping') . '" ' . $current . '>' . __('Shipping Options', 'woocommerce') . '</a>');
                foreach ($woocommerce->shipping->shipping_methods as $method) {
                    $title = isset($method->method_title) && $method->method_title ? ucwords($method->method_title) : ucwords($method->id);
                    $current = !empty($_GET['section']) && $method->id == urldecode($_GET['section']) ? 'class="current"' : '';
                    $links[] = '<a href="' . add_query_arg('section', $method->id, admin_url('admin.php?page=woocommerce&tab=shipping')) . '"' . $current . '>' . $title . '</a>';
                }
                echo '<ul class="subsubsub"><li>' . implode(' | </li><li>', $links) . '</li></ul><br class="clear" />';
                // Gateway ordering
                if (empty($_GET['section'])) {
                    woocommerce_admin_fields($woocommerce_settings[$current_tab]);
                    ?>
							<h3><?php 
                    _e('Shipping Methods', 'woocommerce');
                    ?>
</h3>
							<p><?php 
                    _e('Your activated shipping methods are listed below. Drag and drop rows to re-order them for display on the frontend.', 'woocommerce');
                    ?>
</p>
							<table class="wc_shipping widefat" cellspacing="0">
								<thead>
									<tr>
										<th><?php 
                    _e('Default', 'woocommerce');
                    ?>
</th>
										<th><?php 
                    _e('Shipping Method', 'woocommerce');
                    ?>
</th>
										<th><?php 
                    _e('Status', 'woocommerce');
                    ?>
</th>
									</tr>
								</thead>
								<tbody>
							    	<?php 
                    foreach ($woocommerce->shipping->shipping_methods as $method) {
                        $default_shipping_method = get_option('woocommerce_default_shipping_method');
                        echo '<tr>
								    		<td width="1%" class="radio">
								    			<input type="radio" name="default_shipping_method" value="' . $method->id . '" ' . checked($default_shipping_method, $method->id, false) . ' />
								    			<input type="hidden" name="method_order[]" value="' . $method->id . '" />
								    			<td>
								    				<p><strong>' . $method->title . '</strong><br/>
								    				<small>' . __('Method ID', 'woocommerce') . ': ' . $method->id . '</small></p>
								    			</td>
								    			<td>';
                        if ($method->enabled == 'yes') {
                            echo '<img src="' . $woocommerce->plugin_url() . '/assets/images/success.png" alt="yes" />';
                        } else {
                            echo '<img src="' . $woocommerce->plugin_url() . '/assets/images/success-off.png" alt="no" />';
                        }
                        echo '</td>
							    		</tr>';
                    }
                    ?>
								</tbody>
							</table>
							<?php 
                } else {
                    // Specific method options
                    foreach ($woocommerce->shipping->shipping_methods as $method) {
                        if ($method->id == urldecode($_GET['section'])) {
                            $method->admin_options();
                            break;
                        }
                    }
                }
                break;
            case "payment_gateways":
                $links = array('<a href="#gateway-order">' . __('Payment Gateways', 'woocommerce') . '</a>');
                foreach ($woocommerce->payment_gateways->payment_gateways() as $gateway) {
                    $title = isset($gateway->method_title) && $gateway->method_title ? ucwords($gateway->method_title) : ucwords($gateway->id);
                    $links[] = '<a href="#gateway-' . $gateway->id . '">' . $title . '</a>';
                }
                echo '<div class="subsubsub_section"><ul class="subsubsub"><li>' . implode(' | </li><li>', $links) . '</li></ul><br class="clear" />';
                // Gateway ordering
                echo '<div class="section" id="gateway-order">';
                ?>
		            	<h3><?php 
                _e('Payment Gateways', 'woocommerce');
                ?>
</h3>
		            	<p><?php 
                _e('Your activated payment gateways are listed below. Drag and drop rows to re-order them for display on the checkout.', 'woocommerce');
                ?>
</p>
		            	<table class="wc_gateways widefat" cellspacing="0">
		            		<thead>
		            			<tr>
		            				<th width="1%"><?php 
                _e('Default', 'woocommerce');
                ?>
</th>
		            				<th><?php 
                _e('Gateway', 'woocommerce');
                ?>
</th>
		            				<th><?php 
                _e('Status', 'woocommerce');
                ?>
</th>
		            			</tr>
		            		</thead>
		            		<tbody>
				            	<?php 
                foreach ($woocommerce->payment_gateways->payment_gateways() as $gateway) {
                    $default_gateway = get_option('woocommerce_default_gateway');
                    echo '<tr>
				            			<td width="1%" class="radio">
				            				<input type="radio" name="default_gateway" value="' . $gateway->id . '" ' . checked($default_gateway, $gateway->id, false) . ' />
				            				<input type="hidden" name="gateway_order[]" value="' . $gateway->id . '" />
				            			</td>
				            			<td>
				            				<p><strong>' . $gateway->title . '</strong><br/>
				            				<small>' . __('Gateway ID', 'woocommerce') . ': ' . $gateway->id . '</small></p>
				            			</td>
				            			<td>';
                    if ($gateway->enabled == 'yes') {
                        echo '<img src="' . $woocommerce->plugin_url() . '/assets/images/success.png" alt="yes" />';
                    } else {
                        echo '<img src="' . $woocommerce->plugin_url() . '/assets/images/success-off.png" alt="no" />';
                    }
                    echo '</td>
				            		</tr>';
                }
                ?>
		            		</tbody>
		            	</table>
		            	<?php 
                echo '</div>';
                // Specific gateway options
                foreach ($woocommerce->payment_gateways->payment_gateways() as $gateway) {
                    echo '<div class="section" id="gateway-' . $gateway->id . '">';
                    $gateway->admin_options();
                    echo '</div>';
                }
                echo '</div>';
                break;
            case "integration":
                $integrations = $woocommerce->integrations->get_integrations();
                $section = empty($_GET['section']) ? key($integrations) : urldecode($_GET['section']);
                foreach ($integrations as $integration) {
                    $title = isset($integration->method_title) && $integration->method_title ? ucwords($integration->method_title) : ucwords($method->id);
                    $current = $integration->id == $section ? 'class="current"' : '';
                    $links[] = '<a href="' . add_query_arg('section', $integration->id, admin_url('admin.php?page=woocommerce&tab=integration')) . '"' . $current . '>' . $title . '</a>';
                }
                echo '<ul class="subsubsub"><li>' . implode(' | </li><li>', $links) . '</li></ul><br class="clear" />';
                if (isset($integrations[$section])) {
                    $integrations[$section]->admin_options();
                }
                break;
            default:
                do_action('woocommerce_settings_tabs_' . $current_tab);
                break;
        }
        ?>
	        <p class="submit">
	        	<input name="save" class="button-primary" type="submit" value="<?php 
        _e('Save changes', 'woocommerce');
        ?>
" />
	        	<input type="hidden" name="subtab" id="last_tab" />
	        </p>
		</form>
		
		<script type="text/javascript">
			jQuery(window).load(function(){
			
				// Subsubsub tabs
				jQuery('div.subsubsub_section ul.subsubsub li a:eq(0)').addClass('current');
				jQuery('div.subsubsub_section .section:gt(0)').hide();
				
				jQuery('div.subsubsub_section ul.subsubsub li a').click(function(){
					jQuery('a', jQuery(this).closest('ul.subsubsub')).removeClass('current');
					jQuery(this).addClass('current');
					jQuery('.section', jQuery(this).closest('.subsubsub_section')).hide();
					jQuery( jQuery(this).attr('href') ).show();
					jQuery('#last_tab').val( jQuery(this).attr('href') );
					return false;
				});
				
				<?php 
        if (isset($_GET['subtab']) && $_GET['subtab']) {
            echo 'jQuery("div.subsubsub_section ul.subsubsub li a[href=#' . $_GET['subtab'] . ']").click();';
        }
        ?>
				
				// Countries
				jQuery('select#woocommerce_allowed_countries').change(function(){
					if (jQuery(this).val()=="specific") {
						jQuery(this).parent().parent().next('tr').show();
					} else {
						jQuery(this).parent().parent().next('tr').hide();
					}
				}).change();
				
				// Color picker
				jQuery('.colorpick').each(function(){
					jQuery('.colorpickdiv', jQuery(this).parent()).farbtastic(this);
					jQuery(this).click(function() {
						if ( jQuery(this).val() == "" ) jQuery(this).val('#');
						jQuery('.colorpickdiv', jQuery(this).parent() ).show();
					});	
				});
				jQuery(document).mousedown(function(){
					jQuery('.colorpickdiv').hide();
				});
				
				// Edit prompt
				jQuery(function(){
					var changed = false;
					
					jQuery('input, textarea, select, checkbox').change(function(){
						changed = true;
					});
					
					jQuery('.woo-nav-tab-wrapper a').click(function(){
						if (changed) {
							window.onbeforeunload = function() {
							    return '<?php 
        echo __('The changes you made will be lost if you navigate away from this page.', 'woocommerce');
        ?>
';
							}
						} else {
							window.onbeforeunload = '';
						}
					});
					
					jQuery('.submit input').click(function(){
						window.onbeforeunload = '';
					});
				});
				
				// Sorting
				jQuery('table.wc_gateways tbody, table.wc_shipping tbody').sortable({
					items:'tr',
					cursor:'move',
					axis:'y',
					handle: 'td',
					scrollSensitivity:40,
					helper:function(e,ui){
						ui.children().each(function(){
							jQuery(this).width(jQuery(this).width());
						});
						ui.css('left', '0');
						return ui;
					},
					start:function(event,ui){
						ui.item.css('background-color','#f6f6f6');
					},
					stop:function(event,ui){
						ui.item.removeAttr('style');
					}
				});
				
				// Chosen selects
				jQuery("select.chosen_select").chosen();
				
				jQuery("select.chosen_select_nostd").chosen({
					allow_single_deselect: 'true'
				});
				
			});
		</script>
	</div>
	<?php 
    }
 /**
  * Save settings
  */
 public function save()
 {
     $settings = $this->get_settings();
     WC_Admin_Settings::save_fields($settings);
     if (isset($_POST['woocommerce_frontend_css_primary'])) {
         // Save settings
         $primary = !empty($_POST['woocommerce_frontend_css_primary']) ? wc_format_hex($_POST['woocommerce_frontend_css_primary']) : '';
         $secondary = !empty($_POST['woocommerce_frontend_css_secondary']) ? wc_format_hex($_POST['woocommerce_frontend_css_secondary']) : '';
         $highlight = !empty($_POST['woocommerce_frontend_css_highlight']) ? wc_format_hex($_POST['woocommerce_frontend_css_highlight']) : '';
         $content_bg = !empty($_POST['woocommerce_frontend_css_content_bg']) ? wc_format_hex($_POST['woocommerce_frontend_css_content_bg']) : '';
         $subtext = !empty($_POST['woocommerce_frontend_css_subtext']) ? wc_format_hex($_POST['woocommerce_frontend_css_subtext']) : '';
         $colors = array('primary' => $primary, 'secondary' => $secondary, 'highlight' => $highlight, 'content_bg' => $content_bg, 'subtext' => $subtext);
         $old_colors = get_option('woocommerce_frontend_css_colors');
         update_option('woocommerce_frontend_css_colors', $colors);
         if ($old_colors != $colors) {
             woocommerce_compile_less_styles();
         }
     }
 }