You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
4.4 KiB
166 lines
4.4 KiB
9 months ago
|
<?php
|
||
|
/**
|
||
|
* TablePress WP Option Wrapper class for WordPress Options
|
||
|
*
|
||
|
* Wraps the WordPress Options API, so that (especially) arrays are stored as JSON, instead of being serialized by PHP.
|
||
|
*
|
||
|
* @package TablePress
|
||
|
* @subpackage Classes
|
||
|
* @author Tobias Bäthge
|
||
|
* @since 1.0.0
|
||
|
*/
|
||
|
|
||
|
// Prohibit direct script loading.
|
||
|
defined( 'ABSPATH' ) || die( 'No direct script access allowed!' );
|
||
|
|
||
|
/**
|
||
|
* TablePress WP Option Wrapper class
|
||
|
*
|
||
|
* @package TablePress
|
||
|
* @subpackage Classes
|
||
|
* @author Tobias Bäthge
|
||
|
* @since 1.0.0
|
||
|
*/
|
||
|
class TablePress_WP_Option {
|
||
|
|
||
|
/**
|
||
|
* Name/Key of the Option (in its location in the database).
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $option_name;
|
||
|
|
||
|
/**
|
||
|
* Current value of the option.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @var mixed[]
|
||
|
*/
|
||
|
protected $option_value;
|
||
|
|
||
|
/**
|
||
|
* Initialize with Option Name.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param array{option_name: string, default_value: mixed[]} $params {
|
||
|
* An array of Option parameters.
|
||
|
*
|
||
|
* @type string $option_name Name of the Option.
|
||
|
* @type array $default_value Default values for the Option, as an array.
|
||
|
* }
|
||
|
*/
|
||
|
public function __construct( array $params ) {
|
||
|
$this->option_name = $params['option_name'];
|
||
|
|
||
|
$option_value = $this->_get_option( $this->option_name, null );
|
||
|
if ( ! is_null( $option_value ) ) {
|
||
|
$this->option_value = (array) json_decode( $option_value, true );
|
||
|
} else {
|
||
|
$this->option_value = $params['default_value'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check if Option is set.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param string $name Name of the option to check.
|
||
|
* @return bool Whether the option is set.
|
||
|
*/
|
||
|
public function is_set( string $name ): bool {
|
||
|
return isset( $this->option_value[ $name ] );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get a single Option, or get all Options.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param string|false $name Optional. Name of a single option to get, or false for all options.
|
||
|
* @param mixed $default_value Optional. Default value to return, if a single option $name does not exist.
|
||
|
* @return mixed Value of the retrieved option $name or $default_value if it does not exist, or all options.
|
||
|
*/
|
||
|
public function get( /* string|false */ $name = false, /* string|int|float|bool|array|null */ $default_value = null ) /* : string|int|float|bool|array|null */ {
|
||
|
if ( false === $name ) {
|
||
|
return $this->option_value;
|
||
|
}
|
||
|
|
||
|
// Single Option wanted.
|
||
|
if ( isset( $this->option_value[ $name ] ) ) {
|
||
|
return $this->option_value[ $name ];
|
||
|
} else {
|
||
|
return $default_value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Update Option.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param array<string, mixed> $new_options New options (name => value).
|
||
|
* @return bool True on success, false on failure.
|
||
|
*/
|
||
|
public function update( array $new_options ): bool {
|
||
|
$this->option_value = $new_options;
|
||
|
return $this->_update_option( $this->option_name, wp_json_encode( $this->option_value, TABLEPRESS_JSON_OPTIONS ) ); // @phpstan-ignore-line
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Delete Option.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @return bool True on success, false on failure.
|
||
|
*/
|
||
|
public function delete(): bool {
|
||
|
return $this->_delete_option( $this->option_name );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Internal functions mapping - This needs to be re-defined by child classes.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Get the value of a WP Option with the WP Options API.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param string $option_name Name of the WP Option.
|
||
|
* @param mixed $default_value Default value of the WP Option.
|
||
|
* @return mixed Current value of the WP Option, or $default_value if it does not exist.
|
||
|
*/
|
||
|
protected function _get_option( string $option_name, /* string|int|float|bool|array|null */ $default_value ) /* : string|int|float|bool|array|null */ {
|
||
|
return get_option( $option_name, $default_value );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Update the value of a WP Option with the WP Options API.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param string $option_name Name of the WP Option.
|
||
|
* @param string $new_value New value of the WP Option.
|
||
|
* @return bool True on success, false on failure.
|
||
|
*/
|
||
|
protected function _update_option( string $option_name, string $new_value ): bool {
|
||
|
return update_option( $option_name, $new_value );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Delete a WP Option with the WP Options API.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param string $option_name Name of the WP Option.
|
||
|
* @return bool True on success, false on failure.
|
||
|
*/
|
||
|
protected function _delete_option( string $option_name ): bool {
|
||
|
return delete_option( $option_name );
|
||
|
}
|
||
|
|
||
|
} // class TablePress_WP_Option
|