| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949 |
- <?php
- /**
- * Abstract Settings API Class
- *
- * Admin Settings API used by Integrations, Shipping Methods, and Payment Gateways.
- *
- * @package WooCommerce/Abstracts
- */
- defined( 'ABSPATH' ) || exit;
- /**
- * WC_Settings_API class.
- */
- abstract class WC_Settings_API {
- /**
- * The plugin ID. Used for option names.
- *
- * @var string
- */
- public $plugin_id = 'woocommerce_';
- /**
- * ID of the class extending the settings API. Used in option names.
- *
- * @var string
- */
- public $id = '';
- /**
- * Validation errors.
- *
- * @var array of strings
- */
- public $errors = array();
- /**
- * Setting values.
- *
- * @var array
- */
- public $settings = array();
- /**
- * Form option fields.
- *
- * @var array
- */
- public $form_fields = array();
- /**
- * The posted settings data. When empty, $_POST data will be used.
- *
- * @var array
- */
- protected $data = array();
- /**
- * Get the form fields after they are initialized.
- *
- * @return array of options
- */
- public function get_form_fields() {
- return apply_filters( 'woocommerce_settings_api_form_fields_' . $this->id, array_map( array( $this, 'set_defaults' ), $this->form_fields ) );
- }
- /**
- * Set default required properties for each field.
- *
- * @param array $field Setting field array.
- * @return array
- */
- protected function set_defaults( $field ) {
- if ( ! isset( $field['default'] ) ) {
- $field['default'] = '';
- }
- return $field;
- }
- /**
- * Output the admin options table.
- */
- public function admin_options() {
- echo '<table class="form-table">' . $this->generate_settings_html( $this->get_form_fields(), false ) . '</table>'; // WPCS: XSS ok.
- }
- /**
- * Initialise settings form fields.
- *
- * Add an array of fields to be displayed on the gateway's settings screen.
- *
- * @since 1.0.0
- */
- public function init_form_fields() {}
- /**
- * Return the name of the option in the WP DB.
- *
- * @since 2.6.0
- * @return string
- */
- public function get_option_key() {
- return $this->plugin_id . $this->id . '_settings';
- }
- /**
- * Get a fields type. Defaults to "text" if not set.
- *
- * @param array $field Field key.
- * @return string
- */
- public function get_field_type( $field ) {
- return empty( $field['type'] ) ? 'text' : $field['type'];
- }
- /**
- * Get a fields default value. Defaults to "" if not set.
- *
- * @param array $field Field key.
- * @return string
- */
- public function get_field_default( $field ) {
- return empty( $field['default'] ) ? '' : $field['default'];
- }
- /**
- * Get a field's posted and validated value.
- *
- * @param string $key Field key.
- * @param array $field Field array.
- * @param array $post_data Posted data.
- * @return string
- */
- public function get_field_value( $key, $field, $post_data = array() ) {
- $type = $this->get_field_type( $field );
- $field_key = $this->get_field_key( $key );
- $post_data = empty( $post_data ) ? $_POST : $post_data; // WPCS: CSRF ok, input var ok.
- $value = isset( $post_data[ $field_key ] ) ? $post_data[ $field_key ] : null;
- if ( isset( $field['sanitize_callback'] ) && is_callable( $field['sanitize_callback'] ) ) {
- return call_user_func( $field['sanitize_callback'], $value );
- }
- // Look for a validate_FIELDID_field method for special handling.
- if ( is_callable( array( $this, 'validate_' . $key . '_field' ) ) ) {
- return $this->{'validate_' . $key . '_field'}( $key, $value );
- }
- // Look for a validate_FIELDTYPE_field method.
- if ( is_callable( array( $this, 'validate_' . $type . '_field' ) ) ) {
- return $this->{'validate_' . $type . '_field'}( $key, $value );
- }
- // Fallback to text.
- return $this->validate_text_field( $key, $value );
- }
- /**
- * Sets the POSTed data. This method can be used to set specific data, instead of taking it from the $_POST array.
- *
- * @param array $data Posted data.
- */
- public function set_post_data( $data = array() ) {
- $this->data = $data;
- }
- /**
- * Returns the POSTed data, to be used to save the settings.
- *
- * @return array
- */
- public function get_post_data() {
- if ( ! empty( $this->data ) && is_array( $this->data ) ) {
- return $this->data;
- }
- return $_POST; // WPCS: CSRF ok, input var ok.
- }
- /**
- * Update a single option.
- *
- * @since 3.4.0
- * @param string $key Option key.
- * @param mixed $value Value to set.
- * @return bool was anything saved?
- */
- public function update_option( $key, $value = '' ) {
- if ( empty( $this->settings ) ) {
- $this->init_settings();
- }
- $this->settings[ $key ] = $value;
- return update_option( $this->get_option_key(), apply_filters( 'woocommerce_settings_api_sanitized_fields_' . $this->id, $this->settings ), 'yes' );
- }
- /**
- * Processes and saves options.
- * If there is an error thrown, will continue to save and validate fields, but will leave the erroring field out.
- *
- * @return bool was anything saved?
- */
- public function process_admin_options() {
- $this->init_settings();
- $post_data = $this->get_post_data();
- foreach ( $this->get_form_fields() as $key => $field ) {
- if ( 'title' !== $this->get_field_type( $field ) ) {
- try {
- $this->settings[ $key ] = $this->get_field_value( $key, $field, $post_data );
- } catch ( Exception $e ) {
- $this->add_error( $e->getMessage() );
- }
- }
- }
- return update_option( $this->get_option_key(), apply_filters( 'woocommerce_settings_api_sanitized_fields_' . $this->id, $this->settings ), 'yes' );
- }
- /**
- * Add an error message for display in admin on save.
- *
- * @param string $error Error message.
- */
- public function add_error( $error ) {
- $this->errors[] = $error;
- }
- /**
- * Get admin error messages.
- */
- public function get_errors() {
- return $this->errors;
- }
- /**
- * Display admin error messages.
- */
- public function display_errors() {
- if ( $this->get_errors() ) {
- echo '<div id="woocommerce_errors" class="error notice is-dismissible">';
- foreach ( $this->get_errors() as $error ) {
- echo '<p>' . wp_kses_post( $error ) . '</p>';
- }
- echo '</div>';
- }
- }
- /**
- * Initialise Settings.
- *
- * Store all settings in a single database entry
- * and make sure the $settings array is either the default
- * or the settings stored in the database.
- *
- * @since 1.0.0
- * @uses get_option(), add_option()
- */
- public function init_settings() {
- $this->settings = get_option( $this->get_option_key(), null );
- // If there are no settings defined, use defaults.
- if ( ! is_array( $this->settings ) ) {
- $form_fields = $this->get_form_fields();
- $this->settings = array_merge( array_fill_keys( array_keys( $form_fields ), '' ), wp_list_pluck( $form_fields, 'default' ) );
- }
- }
- /**
- * Get option from DB.
- *
- * Gets an option from the settings API, using defaults if necessary to prevent undefined notices.
- *
- * @param string $key Option key.
- * @param mixed $empty_value Value when empty.
- * @return string The value specified for the option or a default value for the option.
- */
- public function get_option( $key, $empty_value = null ) {
- if ( empty( $this->settings ) ) {
- $this->init_settings();
- }
- // Get option default if unset.
- if ( ! isset( $this->settings[ $key ] ) ) {
- $form_fields = $this->get_form_fields();
- $this->settings[ $key ] = isset( $form_fields[ $key ] ) ? $this->get_field_default( $form_fields[ $key ] ) : '';
- }
- if ( ! is_null( $empty_value ) && '' === $this->settings[ $key ] ) {
- $this->settings[ $key ] = $empty_value;
- }
- return $this->settings[ $key ];
- }
- /**
- * Prefix key for settings.
- *
- * @param string $key Field key.
- * @return string
- */
- public function get_field_key( $key ) {
- return $this->plugin_id . $this->id . '_' . $key;
- }
- /**
- * Generate Settings HTML.
- *
- * Generate the HTML for the fields on the "settings" screen.
- *
- * @param array $form_fields (default: array()) Array of form fields.
- * @param bool $echo Echo or return.
- * @return string the html for the settings
- * @since 1.0.0
- * @uses method_exists()
- */
- public function generate_settings_html( $form_fields = array(), $echo = true ) {
- if ( empty( $form_fields ) ) {
- $form_fields = $this->get_form_fields();
- }
- $html = '';
- foreach ( $form_fields as $k => $v ) {
- $type = $this->get_field_type( $v );
- if ( method_exists( $this, 'generate_' . $type . '_html' ) ) {
- $html .= $this->{'generate_' . $type . '_html'}( $k, $v );
- } else {
- $html .= $this->generate_text_html( $k, $v );
- }
- }
- if ( $echo ) {
- echo $html; // WPCS: XSS ok.
- } else {
- return $html;
- }
- }
- /**
- * Get HTML for tooltips.
- *
- * @param array $data Data for the tooltip.
- * @return string
- */
- public function get_tooltip_html( $data ) {
- if ( true === $data['desc_tip'] ) {
- $tip = $data['description'];
- } elseif ( ! empty( $data['desc_tip'] ) ) {
- $tip = $data['desc_tip'];
- } else {
- $tip = '';
- }
- return $tip ? wc_help_tip( $tip, true ) : '';
- }
- /**
- * Get HTML for descriptions.
- *
- * @param array $data Data for the description.
- * @return string
- */
- public function get_description_html( $data ) {
- if ( true === $data['desc_tip'] ) {
- $description = '';
- } elseif ( ! empty( $data['desc_tip'] ) ) {
- $description = $data['description'];
- } elseif ( ! empty( $data['description'] ) ) {
- $description = $data['description'];
- } else {
- $description = '';
- }
- return $description ? '<p class="description">' . wp_kses_post( $description ) . '</p>' . "\n" : '';
- }
- /**
- * Get custom attributes.
- *
- * @param array $data Field data.
- * @return string
- */
- public function get_custom_attribute_html( $data ) {
- $custom_attributes = array();
- if ( ! empty( $data['custom_attributes'] ) && is_array( $data['custom_attributes'] ) ) {
- foreach ( $data['custom_attributes'] as $attribute => $attribute_value ) {
- $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"';
- }
- }
- return implode( ' ', $custom_attributes );
- }
- /**
- * Generate Text Input HTML.
- *
- * @param string $key Field key.
- * @param array $data Field data.
- * @since 1.0.0
- * @return string
- */
- public function generate_text_html( $key, $data ) {
- $field_key = $this->get_field_key( $key );
- $defaults = array(
- 'title' => '',
- 'disabled' => false,
- 'class' => '',
- 'css' => '',
- 'placeholder' => '',
- 'type' => 'text',
- 'desc_tip' => false,
- 'description' => '',
- 'custom_attributes' => array(),
- );
- $data = wp_parse_args( $data, $defaults );
- ob_start();
- ?>
- <tr valign="top">
- <th scope="row" class="titledesc">
- <label for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?> <?php echo $this->get_tooltip_html( $data ); // WPCS: XSS ok. ?></label>
- </th>
- <td class="forminp">
- <fieldset>
- <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
- <input class="input-text regular-input <?php echo esc_attr( $data['class'] ); ?>" type="<?php echo esc_attr( $data['type'] ); ?>" name="<?php echo esc_attr( $field_key ); ?>" id="<?php echo esc_attr( $field_key ); ?>" style="<?php echo esc_attr( $data['css'] ); ?>" value="<?php echo esc_attr( $this->get_option( $key ) ); ?>" placeholder="<?php echo esc_attr( $data['placeholder'] ); ?>" <?php disabled( $data['disabled'], true ); ?> <?php echo $this->get_custom_attribute_html( $data ); // WPCS: XSS ok. ?> />
- <?php echo $this->get_description_html( $data ); // WPCS: XSS ok. ?>
- </fieldset>
- </td>
- </tr>
- <?php
- return ob_get_clean();
- }
- /**
- * Generate Price Input HTML.
- *
- * @param string $key Field key.
- * @param array $data Field data.
- * @since 1.0.0
- * @return string
- */
- public function generate_price_html( $key, $data ) {
- $field_key = $this->get_field_key( $key );
- $defaults = array(
- 'title' => '',
- 'disabled' => false,
- 'class' => '',
- 'css' => '',
- 'placeholder' => '',
- 'type' => 'text',
- 'desc_tip' => false,
- 'description' => '',
- 'custom_attributes' => array(),
- );
- $data = wp_parse_args( $data, $defaults );
- ob_start();
- ?>
- <tr valign="top">
- <th scope="row" class="titledesc">
- <label for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?> <?php echo $this->get_tooltip_html( $data ); // WPCS: XSS ok. ?></label>
- </th>
- <td class="forminp">
- <fieldset>
- <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
- <input class="wc_input_price input-text regular-input <?php echo esc_attr( $data['class'] ); ?>" type="text" name="<?php echo esc_attr( $field_key ); ?>" id="<?php echo esc_attr( $field_key ); ?>" style="<?php echo esc_attr( $data['css'] ); ?>" value="<?php echo esc_attr( wc_format_localized_price( $this->get_option( $key ) ) ); ?>" placeholder="<?php echo esc_attr( $data['placeholder'] ); ?>" <?php disabled( $data['disabled'], true ); ?> <?php echo $this->get_custom_attribute_html( $data ); // WPCS: XSS ok. ?> />
- <?php echo $this->get_description_html( $data ); // WPCS: XSS ok. ?>
- </fieldset>
- </td>
- </tr>
- <?php
- return ob_get_clean();
- }
- /**
- * Generate Decimal Input HTML.
- *
- * @param string $key Field key.
- * @param array $data Field data.
- * @since 1.0.0
- * @return string
- */
- public function generate_decimal_html( $key, $data ) {
- $field_key = $this->get_field_key( $key );
- $defaults = array(
- 'title' => '',
- 'disabled' => false,
- 'class' => '',
- 'css' => '',
- 'placeholder' => '',
- 'type' => 'text',
- 'desc_tip' => false,
- 'description' => '',
- 'custom_attributes' => array(),
- );
- $data = wp_parse_args( $data, $defaults );
- ob_start();
- ?>
- <tr valign="top">
- <th scope="row" class="titledesc">
- <label for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?> <?php echo $this->get_tooltip_html( $data ); // WPCS: XSS ok. ?></label>
- </th>
- <td class="forminp">
- <fieldset>
- <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
- <input class="wc_input_decimal input-text regular-input <?php echo esc_attr( $data['class'] ); ?>" type="text" name="<?php echo esc_attr( $field_key ); ?>" id="<?php echo esc_attr( $field_key ); ?>" style="<?php echo esc_attr( $data['css'] ); ?>" value="<?php echo esc_attr( wc_format_localized_decimal( $this->get_option( $key ) ) ); ?>" placeholder="<?php echo esc_attr( $data['placeholder'] ); ?>" <?php disabled( $data['disabled'], true ); ?> <?php echo $this->get_custom_attribute_html( $data ); // WPCS: XSS ok. ?> />
- <?php echo $this->get_description_html( $data ); // WPCS: XSS ok. ?>
- </fieldset>
- </td>
- </tr>
- <?php
- return ob_get_clean();
- }
- /**
- * Generate Password Input HTML.
- *
- * @param string $key Field key.
- * @param array $data Field data.
- * @since 1.0.0
- * @return string
- */
- public function generate_password_html( $key, $data ) {
- $data['type'] = 'password';
- return $this->generate_text_html( $key, $data );
- }
- /**
- * Generate Color Picker Input HTML.
- *
- * @param string $key Field key.
- * @param array $data Field data.
- * @since 1.0.0
- * @return string
- */
- public function generate_color_html( $key, $data ) {
- $field_key = $this->get_field_key( $key );
- $defaults = array(
- 'title' => '',
- 'disabled' => false,
- 'class' => '',
- 'css' => '',
- 'placeholder' => '',
- 'desc_tip' => false,
- 'description' => '',
- 'custom_attributes' => array(),
- );
- $data = wp_parse_args( $data, $defaults );
- ob_start();
- ?>
- <tr valign="top">
- <th scope="row" class="titledesc">
- <label for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?> <?php echo $this->get_tooltip_html( $data ); // WPCS: XSS ok. ?></label>
- </th>
- <td class="forminp">
- <fieldset>
- <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
- <span class="colorpickpreview" style="background:<?php echo esc_attr( $this->get_option( $key ) ); ?>;"> </span>
- <input class="colorpick <?php echo esc_attr( $data['class'] ); ?>" type="text" name="<?php echo esc_attr( $field_key ); ?>" id="<?php echo esc_attr( $field_key ); ?>" style="<?php echo esc_attr( $data['css'] ); ?>" value="<?php echo esc_attr( $this->get_option( $key ) ); ?>" placeholder="<?php echo esc_attr( $data['placeholder'] ); ?>" <?php disabled( $data['disabled'], true ); ?> <?php echo $this->get_custom_attribute_html( $data ); // WPCS: XSS ok. ?> />
- <div id="colorPickerDiv_<?php echo esc_attr( $field_key ); ?>" class="colorpickdiv" style="z-index: 100; background: #eee; border: 1px solid #ccc; position: absolute; display: none;"></div>
- <?php echo $this->get_description_html( $data ); // WPCS: XSS ok. ?>
- </fieldset>
- </td>
- </tr>
- <?php
- return ob_get_clean();
- }
- /**
- * Generate Textarea HTML.
- *
- * @param string $key Field key.
- * @param array $data Field data.
- * @since 1.0.0
- * @return string
- */
- public function generate_textarea_html( $key, $data ) {
- $field_key = $this->get_field_key( $key );
- $defaults = array(
- 'title' => '',
- 'disabled' => false,
- 'class' => '',
- 'css' => '',
- 'placeholder' => '',
- 'type' => 'text',
- 'desc_tip' => false,
- 'description' => '',
- 'custom_attributes' => array(),
- );
- $data = wp_parse_args( $data, $defaults );
- ob_start();
- ?>
- <tr valign="top">
- <th scope="row" class="titledesc">
- <label for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?> <?php echo $this->get_tooltip_html( $data ); // WPCS: XSS ok. ?></label>
- </th>
- <td class="forminp">
- <fieldset>
- <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
- <textarea rows="3" cols="20" class="input-text wide-input <?php echo esc_attr( $data['class'] ); ?>" type="<?php echo esc_attr( $data['type'] ); ?>" name="<?php echo esc_attr( $field_key ); ?>" id="<?php echo esc_attr( $field_key ); ?>" style="<?php echo esc_attr( $data['css'] ); ?>" placeholder="<?php echo esc_attr( $data['placeholder'] ); ?>" <?php disabled( $data['disabled'], true ); ?> <?php echo $this->get_custom_attribute_html( $data ); // WPCS: XSS ok. ?>><?php echo esc_textarea( $this->get_option( $key ) ); ?></textarea>
- <?php echo $this->get_description_html( $data ); // WPCS: XSS ok. ?>
- </fieldset>
- </td>
- </tr>
- <?php
- return ob_get_clean();
- }
- /**
- * Generate Checkbox HTML.
- *
- * @param string $key Field key.
- * @param array $data Field data.
- * @since 1.0.0
- * @return string
- */
- public function generate_checkbox_html( $key, $data ) {
- $field_key = $this->get_field_key( $key );
- $defaults = array(
- 'title' => '',
- 'label' => '',
- 'disabled' => false,
- 'class' => '',
- 'css' => '',
- 'type' => 'text',
- 'desc_tip' => false,
- 'description' => '',
- 'custom_attributes' => array(),
- );
- $data = wp_parse_args( $data, $defaults );
- if ( ! $data['label'] ) {
- $data['label'] = $data['title'];
- }
- ob_start();
- ?>
- <tr valign="top">
- <th scope="row" class="titledesc">
- <label for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?> <?php echo $this->get_tooltip_html( $data ); // WPCS: XSS ok. ?></label>
- </th>
- <td class="forminp">
- <fieldset>
- <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
- <label for="<?php echo esc_attr( $field_key ); ?>">
- <input <?php disabled( $data['disabled'], true ); ?> class="<?php echo esc_attr( $data['class'] ); ?>" type="checkbox" name="<?php echo esc_attr( $field_key ); ?>" id="<?php echo esc_attr( $field_key ); ?>" style="<?php echo esc_attr( $data['css'] ); ?>" value="1" <?php checked( $this->get_option( $key ), 'yes' ); ?> <?php echo $this->get_custom_attribute_html( $data ); // WPCS: XSS ok. ?> /> <?php echo wp_kses_post( $data['label'] ); ?></label><br/>
- <?php echo $this->get_description_html( $data ); // WPCS: XSS ok. ?>
- </fieldset>
- </td>
- </tr>
- <?php
- return ob_get_clean();
- }
- /**
- * Generate Select HTML.
- *
- * @param string $key Field key.
- * @param array $data Field data.
- * @since 1.0.0
- * @return string
- */
- public function generate_select_html( $key, $data ) {
- $field_key = $this->get_field_key( $key );
- $defaults = array(
- 'title' => '',
- 'disabled' => false,
- 'class' => '',
- 'css' => '',
- 'placeholder' => '',
- 'type' => 'text',
- 'desc_tip' => false,
- 'description' => '',
- 'custom_attributes' => array(),
- 'options' => array(),
- );
- $data = wp_parse_args( $data, $defaults );
- ob_start();
- ?>
- <tr valign="top">
- <th scope="row" class="titledesc">
- <label for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?> <?php echo $this->get_tooltip_html( $data ); // WPCS: XSS ok. ?></label>
- </th>
- <td class="forminp">
- <fieldset>
- <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
- <select class="select <?php echo esc_attr( $data['class'] ); ?>" name="<?php echo esc_attr( $field_key ); ?>" id="<?php echo esc_attr( $field_key ); ?>" style="<?php echo esc_attr( $data['css'] ); ?>" <?php disabled( $data['disabled'], true ); ?> <?php echo $this->get_custom_attribute_html( $data ); // WPCS: XSS ok. ?>>
- <?php foreach ( (array) $data['options'] as $option_key => $option_value ) : ?>
- <option value="<?php echo esc_attr( $option_key ); ?>" <?php selected( (string) $option_key, esc_attr( $this->get_option( $key ) ) ); ?>><?php echo esc_attr( $option_value ); ?></option>
- <?php endforeach; ?>
- </select>
- <?php echo $this->get_description_html( $data ); // WPCS: XSS ok. ?>
- </fieldset>
- </td>
- </tr>
- <?php
- return ob_get_clean();
- }
- /**
- * Generate Multiselect HTML.
- *
- * @param string $key Field key.
- * @param array $data Field data.
- * @since 1.0.0
- * @return string
- */
- public function generate_multiselect_html( $key, $data ) {
- $field_key = $this->get_field_key( $key );
- $defaults = array(
- 'title' => '',
- 'disabled' => false,
- 'class' => '',
- 'css' => '',
- 'placeholder' => '',
- 'type' => 'text',
- 'desc_tip' => false,
- 'description' => '',
- 'custom_attributes' => array(),
- 'select_buttons' => false,
- 'options' => array(),
- );
- $data = wp_parse_args( $data, $defaults );
- $value = (array) $this->get_option( $key, array() );
- ob_start();
- ?>
- <tr valign="top">
- <th scope="row" class="titledesc">
- <label for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?> <?php echo $this->get_tooltip_html( $data ); // WPCS: XSS ok. ?></label>
- </th>
- <td class="forminp">
- <fieldset>
- <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
- <select multiple="multiple" class="multiselect <?php echo esc_attr( $data['class'] ); ?>" name="<?php echo esc_attr( $field_key ); ?>[]" id="<?php echo esc_attr( $field_key ); ?>" style="<?php echo esc_attr( $data['css'] ); ?>" <?php disabled( $data['disabled'], true ); ?> <?php echo $this->get_custom_attribute_html( $data ); // WPCS: XSS ok. ?>>
- <?php foreach ( (array) $data['options'] as $option_key => $option_value ) : ?>
- <?php if ( is_array( $option_value ) ) : ?>
- <optgroup label="<?php echo esc_attr( $option_key ); ?>">
- <?php foreach ( $option_value as $option_key_inner => $option_value_inner ) : ?>
- <option value="<?php echo esc_attr( $option_key_inner ); ?>" <?php selected( in_array( (string) $option_key_inner, $value, true ), true ); ?>><?php echo esc_attr( $option_value_inner ); ?></option>
- <?php endforeach; ?>
- </optgroup>
- <?php else : ?>
- <option value="<?php echo esc_attr( $option_key ); ?>" <?php selected( in_array( (string) $option_key, $value, true ), true ); ?>><?php echo esc_attr( $option_value ); ?></option>
- <?php endif; ?>
- <?php endforeach; ?>
- </select>
- <?php echo $this->get_description_html( $data ); // WPCS: XSS ok. ?>
- <?php if ( $data['select_buttons'] ) : ?>
- <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>
- <?php endif; ?>
- </fieldset>
- </td>
- </tr>
- <?php
- return ob_get_clean();
- }
- /**
- * Generate Title HTML.
- *
- * @param string $key Field key.
- * @param array $data Field data.
- * @since 1.0.0
- * @return string
- */
- public function generate_title_html( $key, $data ) {
- $field_key = $this->get_field_key( $key );
- $defaults = array(
- 'title' => '',
- 'class' => '',
- );
- $data = wp_parse_args( $data, $defaults );
- ob_start();
- ?>
- </table>
- <h3 class="wc-settings-sub-title <?php echo esc_attr( $data['class'] ); ?>" id="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?></h3>
- <?php if ( ! empty( $data['description'] ) ) : ?>
- <p><?php echo wp_kses_post( $data['description'] ); ?></p>
- <?php endif; ?>
- <table class="form-table">
- <?php
- return ob_get_clean();
- }
- /**
- * Validate Text Field.
- *
- * Make sure the data is escaped correctly, etc.
- *
- * @param string $key Field key.
- * @param string $value Posted Value.
- * @return string
- */
- public function validate_text_field( $key, $value ) {
- $value = is_null( $value ) ? '' : $value;
- return wp_kses_post( trim( stripslashes( $value ) ) );
- }
- /**
- * Validate Price Field.
- *
- * Make sure the data is escaped correctly, etc.
- *
- * @param string $key Field key.
- * @param string $value Posted Value.
- * @return string
- */
- public function validate_price_field( $key, $value ) {
- $value = is_null( $value ) ? '' : $value;
- return ( '' === $value ) ? '' : wc_format_decimal( trim( stripslashes( $value ) ) );
- }
- /**
- * Validate Decimal Field.
- *
- * Make sure the data is escaped correctly, etc.
- *
- * @param string $key Field key.
- * @param string $value Posted Value.
- * @return string
- */
- public function validate_decimal_field( $key, $value ) {
- $value = is_null( $value ) ? '' : $value;
- return ( '' === $value ) ? '' : wc_format_decimal( trim( stripslashes( $value ) ) );
- }
- /**
- * Validate Password Field. No input sanitization is used to avoid corrupting passwords.
- *
- * @param string $key Field key.
- * @param string $value Posted Value.
- * @return string
- */
- public function validate_password_field( $key, $value ) {
- $value = is_null( $value ) ? '' : $value;
- return trim( stripslashes( $value ) );
- }
- /**
- * Validate Textarea Field.
- *
- * @param string $key Field key.
- * @param string $value Posted Value.
- * @return string
- */
- public function validate_textarea_field( $key, $value ) {
- $value = is_null( $value ) ? '' : $value;
- return wp_kses( trim( stripslashes( $value ) ),
- array_merge(
- array(
- 'iframe' => array(
- 'src' => true,
- 'style' => true,
- 'id' => true,
- 'class' => true,
- ),
- ),
- wp_kses_allowed_html( 'post' )
- )
- );
- }
- /**
- * Validate Checkbox Field.
- *
- * If not set, return "no", otherwise return "yes".
- *
- * @param string $key Field key.
- * @param string $value Posted Value.
- * @return string
- */
- public function validate_checkbox_field( $key, $value ) {
- return ! is_null( $value ) ? 'yes' : 'no';
- }
- /**
- * Validate Select Field.
- *
- * @param string $key Field key.
- * @param string $value Posted Value.
- * @return string
- */
- public function validate_select_field( $key, $value ) {
- $value = is_null( $value ) ? '' : $value;
- return wc_clean( stripslashes( $value ) );
- }
- /**
- * Validate Multiselect Field.
- *
- * @param string $key Field key.
- * @param string $value Posted Value.
- * @return string|array
- */
- public function validate_multiselect_field( $key, $value ) {
- return is_array( $value ) ? array_map( 'wc_clean', array_map( 'stripslashes', $value ) ) : '';
- }
- /**
- * Validate the data on the "Settings" form.
- *
- * @deprecated 2.6.0 No longer used.
- * @param array $form_fields Array of fields.
- */
- public function validate_settings_fields( $form_fields = array() ) {
- wc_deprecated_function( 'validate_settings_fields', '2.6' );
- }
- /**
- * Format settings if needed.
- *
- * @deprecated 2.6.0 Unused.
- * @param array $value Value to format.
- * @return array
- */
- public function format_settings( $value ) {
- wc_deprecated_function( 'format_settings', '2.6' );
- return $value;
- }
- }
|