File "class-wc-admin-settings.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/includes/admin/class-wc-admin-settings.php
File size: 40.82 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

use Automattic\Jetpack\Constants;
if (!defined('ABSPATH')) {
    exit;
}
if (!class_exists('WC_Admin_Settings', false)) {
    class WC_Admin_Settings
    {
        private static $settings = array();
        private static $errors = array();
        private static $messages = array();
        public static function get_settings_pages()
        {
            if (empty(self::$settings)) {
                $settings = array();
                include_once dirname(__FILE__) . '/settings/class-wc-settings-page.php';
                $settings[] = (include __DIR__ . '/settings/class-wc-settings-general.php');
                $settings[] = (include __DIR__ . '/settings/class-wc-settings-products.php');
                $settings[] = (include __DIR__ . '/settings/class-wc-settings-tax.php');
                $settings[] = (include __DIR__ . '/settings/class-wc-settings-shipping.php');
                $settings[] = (include __DIR__ . '/settings/class-wc-settings-payment-gateways.php');
                $settings[] = (include __DIR__ . '/settings/class-wc-settings-accounts.php');
                $settings[] = (include __DIR__ . '/settings/class-wc-settings-emails.php');
                $settings[] = (include __DIR__ . '/settings/class-wc-settings-integrations.php');
                $settings[] = (include __DIR__ . '/settings/class-wc-settings-advanced.php');
                self::$settings = apply_filters('woocommerce_get_settings_pages', $settings);
            }
            return self::$settings;
        }
        public static function save()
        {
            global $current_tab;
            check_admin_referer('woocommerce-settings');
            do_action('woocommerce_settings_save_' . $current_tab);
            do_action('woocommerce_update_options_' . $current_tab);
            do_action('woocommerce_update_options');
            self::add_message(__('Your settings have been saved.', 'woocommerce'));
            self::check_download_folder_protection();
            update_option('woocommerce_queue_flush_rewrite_rules', 'yes');
            WC()->query->init_query_vars();
            WC()->query->add_endpoints();
            do_action('woocommerce_settings_saved');
        }
        public static function add_message($text)
        {
            self::$messages[] = $text;
        }
        public static function add_error($text)
        {
            self::$errors[] = $text;
        }
        public static function show_messages()
        {
            if (count(self::$errors) > 0) {
                foreach (self::$errors as $error) {
                    echo '<div id="message" class="error inline"><p><strong>' . esc_html($error) . '</strong></p></div>';
                }
            } elseif (count(self::$messages) > 0) {
                foreach (self::$messages as $message) {
                    echo '<div id="message" class="updated inline"><p><strong>' . esc_html($message) . '</strong></p></div>';
                }
            }
        }
        public static function output()
        {
            global $current_section, $current_tab;
            $suffix = Constants::is_true('SCRIPT_DEBUG') ? '' : '.min';
            do_action('woocommerce_settings_start');
            wp_enqueue_script('woocommerce_settings', WC()->plugin_url() . '/assets/js/admin/settings' . $suffix . '.js', array('jquery', 'wp-util', 'jquery-ui-datepicker', 'jquery-ui-sortable', 'iris', 'selectWoo'), WC()->version, true);
            wp_localize_script('woocommerce_settings', 'woocommerce_settings_params', array('i18n_nav_warning' => __('The changes you made will be lost if you navigate away from this page.', 'woocommerce'), 'i18n_moved_up' => __('Item moved up', 'woocommerce'), 'i18n_moved_down' => __('Item moved down', 'woocommerce'), 'i18n_no_specific_countries_selected' => __('Selecting no country / region to sell to prevents from completing the checkout. Continue anyway?', 'woocommerce')));
            $tabs = apply_filters('woocommerce_settings_tabs_array', array());
            include dirname(__FILE__) . '/views/html-admin-settings.php';
        }
        public static function get_option($option_name, $default = '')
        {
            if (!$option_name) {
                return $default;
            }
            if (strstr($option_name, '[')) {
                parse_str($option_name, $option_array);
                $option_name = current(array_keys($option_array));
                $option_values = get_option($option_name, '');
                $key = key($option_array[$option_name]);
                if (isset($option_values[$key])) {
                    $option_value = $option_values[$key];
                } else {
                    $option_value = null;
                }
            } else {
                $option_value = get_option($option_name, null);
            }
            if (is_array($option_value)) {
                $option_value = wp_unslash($option_value);
            } elseif (!is_null($option_value)) {
                $option_value = stripslashes($option_value);
            }
            return null === $option_value ? $default : $option_value;
        }
        public static function output_fields($options)
        {
            foreach ($options as $value) {
                if (!isset($value['type'])) {
                    continue;
                }
                if (!isset($value['id'])) {
                    $value['id'] = '';
                }
                if (!isset($value['title'])) {
                    $value['title'] = isset($value['name']) ? $value['name'] : '';
                }
                if (!isset($value['class'])) {
                    $value['class'] = '';
                }
                if (!isset($value['css'])) {
                    $value['css'] = '';
                }
                if (!isset($value['default'])) {
                    $value['default'] = '';
                }
                if (!isset($value['desc'])) {
                    $value['desc'] = '';
                }
                if (!isset($value['desc_tip'])) {
                    $value['desc_tip'] = false;
                }
                if (!isset($value['placeholder'])) {
                    $value['placeholder'] = '';
                }
                if (!isset($value['suffix'])) {
                    $value['suffix'] = '';
                }
                if (!isset($value['value'])) {
                    $value['value'] = self::get_option($value['id'], $value['default']);
                }
                $custom_attributes = array();
                if (!empty($value['custom_attributes']) && is_array($value['custom_attributes'])) {
                    foreach ($value['custom_attributes'] as $attribute => $attribute_value) {
                        $custom_attributes[] = esc_attr($attribute) . '="' . esc_attr($attribute_value) . '"';
                    }
                }
                $field_description = self::get_field_description($value);
                $description = $field_description['description'];
                $tooltip_html = $field_description['tooltip_html'];
                switch ($value['type']) {
                    case 'title':
                        if (!empty($value['title'])) {
                            echo '<h2>' . esc_html($value['title']) . '</h2>';
                        }
                        if (!empty($value['desc'])) {
                            echo '<div id="' . esc_attr(sanitize_title($value['id'])) . '-description">';
                            echo wp_kses_post(wpautop(wptexturize($value['desc'])));
                            echo '</div>';
                        }
                        echo '<table class="form-table">' . "\n\n";
                        if (!empty($value['id'])) {
                            do_action('woocommerce_settings_' . sanitize_title($value['id']));
                        }
                        break;
                    case 'sectionend':
                        if (!empty($value['id'])) {
                            do_action('woocommerce_settings_' . sanitize_title($value['id']) . '_end');
                        }
                        echo '</table>';
                        if (!empty($value['id'])) {
                            do_action('woocommerce_settings_' . sanitize_title($value['id']) . '_after');
                        }
                        break;
                    case 'text':
                    case 'password':
                    case 'datetime':
                    case 'datetime-local':
                    case 'date':
                    case 'month':
                    case 'time':
                    case 'week':
                    case 'number':
                    case 'email':
                    case 'url':
                    case 'tel':
                        $option_value = $value['value'];
                        ?><tr valign="top">
							<th scope="row" class="titledesc">
								<label for="<?php 
                        echo esc_attr($value['id']);
                        ?>"><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html;
                        ?></label>
							</th>
							<td class="forminp forminp-<?php 
                        echo esc_attr(sanitize_title($value['type']));
                        ?>">
								<input
									name="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									id="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									type="<?php 
                        echo esc_attr($value['type']);
                        ?>"
									style="<?php 
                        echo esc_attr($value['css']);
                        ?>"
									value="<?php 
                        echo esc_attr($option_value);
                        ?>"
									class="<?php 
                        echo esc_attr($value['class']);
                        ?>"
									placeholder="<?php 
                        echo esc_attr($value['placeholder']);
                        ?>"
									<?php 
                        echo implode(' ', $custom_attributes);
                        ?>
									/><?php 
                        echo esc_html($value['suffix']);
                        ?> <?php 
                        echo $description;
                        ?>
							</td>
						</tr>
						<?php 
                        break;
                    case 'color':
                        $option_value = $value['value'];
                        ?>
						<tr valign="top">
							<th scope="row" class="titledesc">
								<label for="<?php 
                        echo esc_attr($value['id']);
                        ?>"><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html;
                        ?></label>
							</th>
							<td class="forminp forminp-<?php 
                        echo esc_attr(sanitize_title($value['type']));
                        ?>">&lrm;
								<span class="colorpickpreview" style="background: <?php 
                        echo esc_attr($option_value);
                        ?>">&nbsp;</span>
								<input
									name="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									id="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									type="text"
									dir="ltr"
									style="<?php 
                        echo esc_attr($value['css']);
                        ?>"
									value="<?php 
                        echo esc_attr($option_value);
                        ?>"
									class="<?php 
                        echo esc_attr($value['class']);
                        ?>colorpick"
									placeholder="<?php 
                        echo esc_attr($value['placeholder']);
                        ?>"
									<?php 
                        echo implode(' ', $custom_attributes);
                        ?>
									/>&lrm; <?php 
                        echo $description;
                        ?>
									<div id="colorPickerDiv_<?php 
                        echo esc_attr($value['id']);
                        ?>" class="colorpickdiv" style="z-index: 100;background:#eee;border:1px solid #ccc;position:absolute;display:none;"></div>
							</td>
						</tr>
						<?php 
                        break;
                    case 'textarea':
                        $option_value = $value['value'];
                        ?>
						<tr valign="top">
							<th scope="row" class="titledesc">
								<label for="<?php 
                        echo esc_attr($value['id']);
                        ?>"><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html;
                        ?></label>
							</th>
							<td class="forminp forminp-<?php 
                        echo esc_attr(sanitize_title($value['type']));
                        ?>">
								<?php 
                        echo $description;
                        ?>

								<textarea
									name="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									id="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									style="<?php 
                        echo esc_attr($value['css']);
                        ?>"
									class="<?php 
                        echo esc_attr($value['class']);
                        ?>"
									placeholder="<?php 
                        echo esc_attr($value['placeholder']);
                        ?>"
									<?php 
                        echo implode(' ', $custom_attributes);
                        ?>
									><?php 
                        echo esc_textarea($option_value);
                        ?></textarea>
							</td>
						</tr>
						<?php 
                        break;
                    case 'select':
                    case 'multiselect':
                        $option_value = $value['value'];
                        ?>
						<tr valign="top">
							<th scope="row" class="titledesc">
								<label for="<?php 
                        echo esc_attr($value['id']);
                        ?>"><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html;
                        ?></label>
							</th>
							<td class="forminp forminp-<?php 
                        echo esc_attr(sanitize_title($value['type']));
                        ?>">
								<select
									name="<?php 
                        echo esc_attr($value['id']);
                        echo 'multiselect' === $value['type'] ? '[]' : '';
                        ?>"
									id="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									style="<?php 
                        echo esc_attr($value['css']);
                        ?>"
									class="<?php 
                        echo esc_attr($value['class']);
                        ?>"
									<?php 
                        echo implode(' ', $custom_attributes);
                        ?>
									<?php 
                        echo 'multiselect' === $value['type'] ? 'multiple="multiple"' : '';
                        ?>
									>
									<?php 
                        foreach ($value['options'] as $key => $val) {
                            ?>
										<option value="<?php 
                            echo esc_attr($key);
                            ?>"
											<?php 
                            if (is_array($option_value)) {
                                selected(in_array((string) $key, $option_value, true), true);
                            } else {
                                selected($option_value, (string) $key);
                            }
                            ?>
										><?php 
                            echo esc_html($val);
                            ?></option>
										<?php 
                        }
                        ?>
								</select> <?php 
                        echo $description;
                        ?>
							</td>
						</tr>
						<?php 
                        break;
                    case 'radio':
                        $option_value = $value['value'];
                        ?>
						<tr valign="top">
							<th scope="row" class="titledesc">
								<label for="<?php 
                        echo esc_attr($value['id']);
                        ?>"><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html;
                        ?></label>
							</th>
							<td class="forminp forminp-<?php 
                        echo esc_attr(sanitize_title($value['type']));
                        ?>">
								<fieldset>
									<?php 
                        echo $description;
                        ?>
									<ul>
									<?php 
                        foreach ($value['options'] as $key => $val) {
                            ?>
										<li>
											<label><input
												name="<?php 
                            echo esc_attr($value['id']);
                            ?>"
												value="<?php 
                            echo esc_attr($key);
                            ?>"
												type="radio"
												style="<?php 
                            echo esc_attr($value['css']);
                            ?>"
												class="<?php 
                            echo esc_attr($value['class']);
                            ?>"
												<?php 
                            echo implode(' ', $custom_attributes);
                            ?>
												<?php 
                            checked($key, $option_value);
                            ?>
												/> <?php 
                            echo esc_html($val);
                            ?></label>
										</li>
										<?php 
                        }
                        ?>
									</ul>
								</fieldset>
							</td>
						</tr>
						<?php 
                        break;
                    case 'checkbox':
                        $option_value = $value['value'];
                        $visibility_class = array();
                        if (!isset($value['hide_if_checked'])) {
                            $value['hide_if_checked'] = false;
                        }
                        if (!isset($value['show_if_checked'])) {
                            $value['show_if_checked'] = false;
                        }
                        if ('yes' === $value['hide_if_checked'] || 'yes' === $value['show_if_checked']) {
                            $visibility_class[] = 'hidden_option';
                        }
                        if ('option' === $value['hide_if_checked']) {
                            $visibility_class[] = 'hide_options_if_checked';
                        }
                        if ('option' === $value['show_if_checked']) {
                            $visibility_class[] = 'show_options_if_checked';
                        }
                        if (!isset($value['checkboxgroup']) || 'start' === $value['checkboxgroup']) {
                            ?>
								<tr valign="top" class="<?php 
                            echo esc_attr(implode(' ', $visibility_class));
                            ?>">
									<th scope="row" class="titledesc"><?php 
                            echo esc_html($value['title']);
                            ?></th>
									<td class="forminp forminp-checkbox">
										<fieldset>
							<?php 
                        } else {
                            ?>
								<fieldset class="<?php 
                            echo esc_attr(implode(' ', $visibility_class));
                            ?>">
							<?php 
                        }
                        if (!empty($value['title'])) {
                            ?>
								<legend class="screen-reader-text"><span><?php 
                            echo esc_html($value['title']);
                            ?></span></legend>
							<?php 
                        }
                        ?>
							<label for="<?php 
                        echo esc_attr($value['id']);
                        ?>">
								<input
									name="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									id="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									type="checkbox"
									class="<?php 
                        echo esc_attr(isset($value['class']) ? $value['class'] : '');
                        ?>"
									value="1"
									<?php 
                        checked($option_value, 'yes');
                        ?>
									<?php 
                        echo implode(' ', $custom_attributes);
                        ?>
								/> <?php 
                        echo $description;
                        ?>
							</label> <?php 
                        echo $tooltip_html;
                        ?>
						<?php 
                        if (!isset($value['checkboxgroup']) || 'end' === $value['checkboxgroup']) {
                            ?>
										</fieldset>
									</td>
								</tr>
							<?php 
                        } else {
                            ?>
								</fieldset>
							<?php 
                        }
                        break;
                    case 'image_width':
                        $image_size = str_replace('_image_size', '', $value['id']);
                        $size = wc_get_image_size($image_size);
                        $width = isset($size['width']) ? $size['width'] : $value['default']['width'];
                        $height = isset($size['height']) ? $size['height'] : $value['default']['height'];
                        $crop = isset($size['crop']) ? $size['crop'] : $value['default']['crop'];
                        $disabled_attr = '';
                        $disabled_message = '';
                        if (has_filter('woocommerce_get_image_size_' . $image_size)) {
                            $disabled_attr = 'disabled="disabled"';
                            $disabled_message = '<p><small>' . esc_html__('The settings of this image size have been disabled because its values are being overwritten by a filter.', 'woocommerce') . '</small></p>';
                        }
                        ?>
						<tr valign="top">
							<th scope="row" class="titledesc">
							<label><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html . $disabled_message;
                        ?></label>
						</th>
							<td class="forminp image_width_settings">

								<input name="<?php 
                        echo esc_attr($value['id']);
                        ?>[width]" <?php 
                        echo $disabled_attr;
                        ?> id="<?php 
                        echo esc_attr($value['id']);
                        ?>-width" type="text" size="3" value="<?php 
                        echo esc_attr($width);
                        ?>" /> &times; <input name="<?php 
                        echo esc_attr($value['id']);
                        ?>[height]" <?php 
                        echo $disabled_attr;
                        ?> id="<?php 
                        echo esc_attr($value['id']);
                        ?>-height" type="text" size="3" value="<?php 
                        echo esc_attr($height);
                        ?>" />px

								<label><input name="<?php 
                        echo esc_attr($value['id']);
                        ?>[crop]" <?php 
                        echo $disabled_attr;
                        ?> id="<?php 
                        echo esc_attr($value['id']);
                        ?>-crop" type="checkbox" value="1" <?php 
                        checked(1, $crop);
                        ?> /> <?php 
                        esc_html_e('Hard crop?', 'woocommerce');
                        ?></label>

								</td>
						</tr>
						<?php 
                        break;
                    case 'single_select_page':
                        $args = array('name' => $value['id'], 'id' => $value['id'], 'sort_column' => 'menu_order', 'sort_order' => 'ASC', 'show_option_none' => ' ', 'class' => $value['class'], 'echo' => false, 'selected' => absint($value['value']), 'post_status' => 'publish,private,draft');
                        if (isset($value['args'])) {
                            $args = wp_parse_args($value['args'], $args);
                        }
                        ?>
						<tr valign="top" class="single_select_page">
							<th scope="row" class="titledesc">
								<label><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html;
                        ?></label>
							</th>
							<td class="forminp">
								<?php 
                        echo str_replace(' id=', " data-placeholder='" . esc_attr__('Select a page&hellip;', 'woocommerce') . "' style='" . $value['css'] . "' class='" . $value['class'] . "' id=", wp_dropdown_pages($args));
                        ?> <?php 
                        echo $description;
                        ?>
							</td>
						</tr>
						<?php 
                        break;
                    case 'single_select_page_with_search':
                        $option_value = $value['value'];
                        $page = get_post($option_value);
                        if (!is_null($page)) {
                            $page = get_post($option_value);
                            $option_display_name = sprintf(__('%1$s (ID: %2$s)', 'woocommerce'), $page->post_title, $option_value);
                        }
                        ?>
						<tr valign="top" class="single_select_page">
							<th scope="row" class="titledesc">
								<label for="<?php 
                        echo esc_attr($value['id']);
                        ?>"><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html;
                        ?></label>
							</th>
							<td class="forminp forminp-<?php 
                        echo esc_attr(sanitize_title($value['type']));
                        ?>">
								<select
									name="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									id="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									style="<?php 
                        echo esc_attr($value['css']);
                        ?>"
									class="<?php 
                        echo esc_attr($value['class']);
                        ?>"
									<?php 
                        echo implode(' ', $custom_attributes);
                        ?>
									data-placeholder="<?php 
                        esc_attr_e('Search for a page&hellip;', 'woocommerce');
                        ?>"
									data-allow_clear="true"
									data-exclude="<?php 
                        echo wc_esc_json(wp_json_encode($value['args']['exclude']));
                        ?>"
									>
									<option value=""></option>
									<?php 
                        if (!is_null($page)) {
                            ?>
										<option value="<?php 
                            echo esc_attr($option_value);
                            ?>" selected="selected">
										<?php 
                            echo wp_strip_all_tags($option_display_name);
                            ?>
										</option>
									<?php 
                        }
                        ?>
								</select> <?php 
                        echo $description;
                        ?>
							</td>
						</tr>
						<?php 
                        break;
                    case 'single_select_country':
                        $country_setting = (string) $value['value'];
                        if (strstr($country_setting, ':')) {
                            $country_setting = explode(':', $country_setting);
                            $country = current($country_setting);
                            $state = end($country_setting);
                        } else {
                            $country = $country_setting;
                            $state = '*';
                        }
                        ?>
						<tr valign="top">
							<th scope="row" class="titledesc">
								<label for="<?php 
                        echo esc_attr($value['id']);
                        ?>"><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html;
                        ?></label>
							</th>
							<td class="forminp"><select name="<?php 
                        echo esc_attr($value['id']);
                        ?>" style="<?php 
                        echo esc_attr($value['css']);
                        ?>" data-placeholder="<?php 
                        esc_attr_e('Choose a country / region&hellip;', 'woocommerce');
                        ?>" aria-label="<?php 
                        esc_attr_e('Country / Region', 'woocommerce');
                        ?>" class="wc-enhanced-select">
								<?php 
                        WC()->countries->country_dropdown_options($country, $state);
                        ?>
							</select> <?php 
                        echo $description;
                        ?>
							</td>
						</tr>
						<?php 
                        break;
                    case 'multi_select_countries':
                        $selections = (array) $value['value'];
                        if (!empty($value['options'])) {
                            $countries = $value['options'];
                        } else {
                            $countries = WC()->countries->countries;
                        }
                        asort($countries);
                        ?>
						<tr valign="top">
							<th scope="row" class="titledesc">
								<label for="<?php 
                        echo esc_attr($value['id']);
                        ?>"><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html;
                        ?></label>
							</th>
							<td class="forminp">
								<select multiple="multiple" name="<?php 
                        echo esc_attr($value['id']);
                        ?>[]" style="width:350px" data-placeholder="<?php 
                        esc_attr_e('Choose countries / regions&hellip;', 'woocommerce');
                        ?>" aria-label="<?php 
                        esc_attr_e('Country / Region', 'woocommerce');
                        ?>" class="wc-enhanced-select">
									<?php 
                        if (!empty($countries)) {
                            foreach ($countries as $key => $val) {
                                echo '<option value="' . esc_attr($key) . '"' . wc_selected($key, $selections) . '>' . esc_html($val) . '</option>';
                            }
                        }
                        ?>
								</select> <?php 
                        echo $description ? $description : '';
                        ?> <br /><a class="select_all button" href="#"><?php 
                        esc_html_e('Select all', 'woocommerce');
                        ?></a> <a class="select_none button" href="#"><?php 
                        esc_html_e('Select none', 'woocommerce');
                        ?></a>
							</td>
						</tr>
						<?php 
                        break;
                    case 'relative_date_selector':
                        $periods = array('days' => __('Day(s)', 'woocommerce'), 'weeks' => __('Week(s)', 'woocommerce'), 'months' => __('Month(s)', 'woocommerce'), 'years' => __('Year(s)', 'woocommerce'));
                        $option_value = wc_parse_relative_date_option($value['value']);
                        ?>
						<tr valign="top">
							<th scope="row" class="titledesc">
								<label for="<?php 
                        echo esc_attr($value['id']);
                        ?>"><?php 
                        echo esc_html($value['title']);
                        ?> <?php 
                        echo $tooltip_html;
                        ?></label>
							</th>
							<td class="forminp">
							<input
									name="<?php 
                        echo esc_attr($value['id']);
                        ?>[number]"
									id="<?php 
                        echo esc_attr($value['id']);
                        ?>"
									type="number"
									style="width: 80px;"
									value="<?php 
                        echo esc_attr($option_value['number']);
                        ?>"
									class="<?php 
                        echo esc_attr($value['class']);
                        ?>"
									placeholder="<?php 
                        echo esc_attr($value['placeholder']);
                        ?>"
									step="1"
									min="1"
									<?php 
                        echo implode(' ', $custom_attributes);
                        ?>
								/>&nbsp;
								<select name="<?php 
                        echo esc_attr($value['id']);
                        ?>[unit]" style="width: auto;">
									<?php 
                        foreach ($periods as $value => $label) {
                            echo '<option value="' . esc_attr($value) . '"' . selected($option_value['unit'], $value, false) . '>' . esc_html($label) . '</option>';
                        }
                        ?>
								</select> <?php 
                        echo $description ? $description : '';
                        ?>
							</td>
						</tr>
						<?php 
                        break;
                    default:
                        do_action('woocommerce_admin_field_' . $value['type'], $value);
                        break;
                }
            }
        }
        public static function get_field_description($value)
        {
            $description = '';
            $tooltip_html = '';
            if (true === $value['desc_tip']) {
                $tooltip_html = $value['desc'];
            } elseif (!empty($value['desc_tip'])) {
                $description = $value['desc'];
                $tooltip_html = $value['desc_tip'];
            } elseif (!empty($value['desc'])) {
                $description = $value['desc'];
            }
            if ($description && in_array($value['type'], array('textarea', 'radio'), true)) {
                $description = '<p style="margin-top:0">' . wp_kses_post($description) . '</p>';
            } elseif ($description && in_array($value['type'], array('checkbox'), true)) {
                $description = wp_kses_post($description);
            } elseif ($description) {
                $description = '<p class="description">' . wp_kses_post($description) . '</p>';
            }
            if ($tooltip_html && in_array($value['type'], array('checkbox'), true)) {
                $tooltip_html = '<p class="description">' . $tooltip_html . '</p>';
            } elseif ($tooltip_html) {
                $tooltip_html = wc_help_tip($tooltip_html);
            }
            return array('description' => $description, 'tooltip_html' => $tooltip_html);
        }
        public static function save_fields($options, $data = null)
        {
            if (is_null($data)) {
                $data = $_POST;
            }
            if (empty($data)) {
                return false;
            }
            $update_options = array();
            $autoload_options = array();
            foreach ($options as $option) {
                if (!isset($option['id']) || !isset($option['type']) || isset($option['is_option']) && false === $option['is_option']) {
                    continue;
                }
                if (strstr($option['id'], '[')) {
                    parse_str($option['id'], $option_name_array);
                    $option_name = current(array_keys($option_name_array));
                    $setting_name = key($option_name_array[$option_name]);
                    $raw_value = isset($data[$option_name][$setting_name]) ? wp_unslash($data[$option_name][$setting_name]) : null;
                } else {
                    $option_name = $option['id'];
                    $setting_name = '';
                    $raw_value = isset($data[$option['id']]) ? wp_unslash($data[$option['id']]) : null;
                }
                switch ($option['type']) {
                    case 'checkbox':
                        $value = '1' === $raw_value || 'yes' === $raw_value ? 'yes' : 'no';
                        break;
                    case 'textarea':
                        $value = wp_kses_post(trim($raw_value));
                        break;
                    case 'multiselect':
                    case 'multi_select_countries':
                        $value = array_filter(array_map('wc_clean', (array) $raw_value));
                        break;
                    case 'image_width':
                        $value = array();
                        if (isset($raw_value['width'])) {
                            $value['width'] = wc_clean($raw_value['width']);
                            $value['height'] = wc_clean($raw_value['height']);
                            $value['crop'] = isset($raw_value['crop']) ? 1 : 0;
                        } else {
                            $value['width'] = $option['default']['width'];
                            $value['height'] = $option['default']['height'];
                            $value['crop'] = $option['default']['crop'];
                        }
                        break;
                    case 'select':
                        $allowed_values = empty($option['options']) ? array() : array_map('strval', array_keys($option['options']));
                        if (empty($option['default']) && empty($allowed_values)) {
                            $value = null;
                            break;
                        }
                        $default = empty($option['default']) ? $allowed_values[0] : $option['default'];
                        $value = in_array($raw_value, $allowed_values, true) ? $raw_value : $default;
                        break;
                    case 'relative_date_selector':
                        $value = wc_parse_relative_date_option($raw_value);
                        break;
                    default:
                        $value = wc_clean($raw_value);
                        break;
                }
                if (has_action('woocommerce_update_option_' . sanitize_title($option['type']))) {
                    wc_deprecated_function('The woocommerce_update_option_X action', '2.4.0', 'woocommerce_admin_settings_sanitize_option filter');
                    do_action('woocommerce_update_option_' . sanitize_title($option['type']), $option);
                    continue;
                }
                $value = apply_filters('woocommerce_admin_settings_sanitize_option', $value, $option, $raw_value);
                $value = apply_filters("woocommerce_admin_settings_sanitize_option_{$option_name}", $value, $option, $raw_value);
                if (is_null($value)) {
                    continue;
                }
                if ($option_name && $setting_name) {
                    if (!isset($update_options[$option_name])) {
                        $update_options[$option_name] = get_option($option_name, array());
                    }
                    if (!is_array($update_options[$option_name])) {
                        $update_options[$option_name] = array();
                    }
                    $update_options[$option_name][$setting_name] = $value;
                } else {
                    $update_options[$option_name] = $value;
                }
                $autoload_options[$option_name] = isset($option['autoload']) ? (bool) $option['autoload'] : true;
                do_action('woocommerce_update_option', $option);
            }
            foreach ($update_options as $name => $value) {
                update_option($name, $value, $autoload_options[$name] ? 'yes' : 'no');
            }
            return true;
        }
        public static function check_download_folder_protection()
        {
            $upload_dir = wp_get_upload_dir();
            $downloads_path = $upload_dir['basedir'] . '/woocommerce_uploads';
            $download_method = get_option('woocommerce_file_download_method');
            $file_path = $downloads_path . '/.htaccess';
            $file_content = 'redirect' === $download_method ? 'Options -Indexes' : 'deny from all';
            $create = false;
            if (wp_mkdir_p($downloads_path) && !file_exists($file_path)) {
                $create = true;
            } else {
                $current_content = @file_get_contents($file_path);
                if ($current_content !== $file_content) {
                    unlink($file_path);
                    $create = true;
                }
            }
            if ($create) {
                $file_handle = @fopen($file_path, 'wb');
                if ($file_handle) {
                    fwrite($file_handle, $file_content);
                    fclose($file_handle);
                }
            }
        }
    }
}