<?php
/**
* WooCommerce Plugin Framework
*
* This source file is subject to the GNU General Public License v3.0
* that is bundled with this package in the file license.txt.
* It is also available through the world-wide-web at this URL:
* http://www.gnu.org/licenses/gpl-3.0.html
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@skyverge.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade the plugin to newer
* versions in the future. If you wish to customize the plugin for your
* needs please refer to http://www.skyverge.com
*
* @package SkyVerge/WooCommerce/Plugin/Classes
* @author SkyVerge
* @copyright Copyright (c) 2013-2020, SkyVerge, Inc.
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0
*/
namespace SkyVerge\WooCommerce\PluginFramework\v5_10_0\Settings_API;
use SkyVerge\WooCommerce\PluginFramework\v5_10_0 as Framework;
defined( 'ABSPATH' ) or exit;
if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v5_10_0\\Settings_API\\Setting' ) ) :
/**
* The base setting object.
*
* @since 5.7.0
*/
class Setting {
/** @var string the string setting type */
const TYPE_STRING = 'string';
/** @var string the URL setting type */
const TYPE_URL = 'url';
/** @var string the email setting type */
const TYPE_EMAIL = 'email';
/** @var string the integer setting type */
const TYPE_INTEGER = 'integer';
/** @var string the float setting type */
const TYPE_FLOAT = 'float';
/** @var string the boolean setting type */
const TYPE_BOOLEAN = 'boolean';
/** @var string unique setting ID */
protected $id;
/** @var string setting type */
protected $type;
/** @var string setting name */
protected $name;
/** @var string setting description */
protected $description;
/** @var bool whether the setting holds an array of multiple values */
protected $is_multi = false;
/** @var array valid setting options */
protected $options = [];
/** @var int|float|string|bool|array setting default value */
protected $default;
/** @var int|float|string|bool|array setting current value */
protected $value;
/** @var Control control object */
protected $control;
/** Getter Methods ************************************************************************************************/
/**
* Gets the setting ID.
*
* @since 5.7.0
*
* @return string
*/
public function get_id() {
return $this->id;
}
/**
* Gets the setting type.
*
* @since 5.7.0
*
* @return string
*/
public function get_type() {
return $this->type;
}
/**
* Gets the setting name.
*
* @since 5.7.0
*
* @return string
*/
public function get_name() {
return $this->name;
}
/**
* Gets the setting description.
*
* @since 5.7.0
*
* @return string
*/
public function get_description() {
return $this->description;
}
/**
* Returns whether the setting holds an array of multiple values.
*
* @since 5.7.0
*
* @return bool
*/
public function is_is_multi() {
return $this->is_multi;
}
/**
* Gets the setting options.
*
* @since 5.7.0
*
* @return array
*/
public function get_options() {
return $this->options;
}
/**
* Gets the setting default value.
*
* @since 5.7.0
*
* @return array|bool|float|int|string|null
*/
public function get_default() {
return $this->default;
}
/**
* Gets the setting current value.
*
* @since 5.7.0
*
* @return array|bool|float|int|string
*/
public function get_value() {
return $this->value;
}
/**
* Gets the setting control.
*
* @since 5.7.0
*
* @return Control
*/
public function get_control() {
return $this->control;
}
/** Setter Methods ************************************************************************************************/
/**
* Sets the setting ID.
*
* @since 5.7.0
*
* @param string $id
*/
public function set_id( $id ) {
$this->id = $id;
}
/**
* Sets the setting type.
*
* @since 5.7.0
*
* @param string $type
*/
public function set_type( $type ) {
$this->type = $type;
}
/**
* Sets the setting name.
*
* @since 5.7.0
*
* @param string $name
*/
public function set_name( $name ) {
$this->name = $name;
}
/**
* Sets the setting description.
*
* @since 5.7.0
*
* @param string $description
*/
public function set_description( $description ) {
$this->description = $description;
}
/**
* Sets whether the setting holds an array of multiple values.
*
* @since 5.7.0
*
* @param bool $is_multi
*/
public function set_is_multi( $is_multi ) {
$this->is_multi = $is_multi;
}
/**
* Sets the setting options.
*
* @since 5.7.0
*
* @param array $options
*/
public function set_options( $options ) {
foreach ( $options as $key => $option ) {
if ( ! $this->validate_value( $option ) ) {
unset( $options[ $key ] );
}
}
$this->options = $options;
}
/**
* Sets the setting default value.
*
* @since 5.7.0
*
* @param array|bool|float|int|string|null $value default value to set
*/
public function set_default( $value ) {
if ( $this->is_is_multi() ) {
$_value = array_filter( (array) $value, [ $this, 'validate_value' ] );
// clear the default if all values were invalid
$value = ! empty( $_value ) ? $_value : null;
} elseif ( ! $this->validate_value( $value ) ) {
$value = null;
}
$this->default = $value;
}
/**
* Sets the setting current value.
*
* @since 5.7.0
*
* @param array|bool|float|int|string $value
*/
public function set_value( $value ) {
$this->value = $value;
}
/**
* Sets the setting control.
*
* @since 5.7.0
*
* @param Control $control
*/
public function set_control( $control ) {
$this->control = $control;
}
/**
* Sets the setting current value, after validating it against the type and, if set, options.
*
* @since 5.7.0
*
* @param array|bool|float|int|string $value
* @throws Framework\SV_WC_Plugin_Exception
*/
public function update_value( $value ) {
if ( ! $this->validate_value( $value ) ) {
throw new Framework\SV_WC_Plugin_Exception( "Setting value for setting {$this->id} is not valid for the setting type {$this->type}", 400 );
} elseif ( ! empty( $this->options ) && ! in_array( $value, $this->options ) ) {
throw new Framework\SV_WC_Plugin_Exception( sprintf(
'Setting value for setting %s must be one of %s',
$this->id,
Framework\SV_WC_Helper::list_array_items( $this->options, 'or' )
), 400 );
} else {
$this->set_value( $value );
}
}
/**
* Validates the setting value.
*
* @since 5.7.0
*
* @param array|bool|float|int|string $value
* @return bool
*/
public function validate_value( $value ) {
$validate_method = "validate_{$this->get_type()}_value";
return is_callable( [ $this, $validate_method ] ) ? $this->$validate_method( $value ) : true;
}
/**
* Validates a string value.
*
* @since 5.7.0
*
* @param array|bool|float|int|string $value value to validate
* @return bool
*/
protected function validate_string_value( $value ) {
return is_string( $value );
}
/**
* Validates a URL value.
*
* @since 5.7.0
*
* @param array|bool|float|int|string $value value to validate
* @return bool
*/
protected function validate_url_value( $value ) {
return wc_is_valid_url( $value );
}
/**
* Validates an email value.
*
* @since 5.7.0
*
* @param mixed $value value to validate
* @return bool
*/
protected function validate_email_value( $value ) {
return (bool) is_email( $value );
}
/**
* Validates an integer value.
*
* @since 5.7.0
*
* @param mixed $value value to validate
* @return bool
*/
public function validate_integer_value( $value ) {
return is_int( $value );
}
/**
* Validates a float value.
*
* @since 5.7.0
*
* @param mixed $value value to validate
* @return bool
*/
protected function validate_float_value( $value ) {
return is_int( $value ) || is_float( $value );
}
/**
* Validates a boolean value.
*
* @since 5.7.0
*
* @param mixed $value value to validate
* @return bool
*/
protected function validate_boolean_value( $value ) {
return is_bool( $value );
}
}
endif;