/** * 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); }
/** * 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">×</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§ion=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§ion=' . 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> – 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">×</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(); } } }