Files
roi-theme/wp-content/plugins/advanced-ads/includes/class-options.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

224 lines
5.2 KiB
PHP
Executable File

<?php
/**
* Get and Set Options.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.50.0
*/
namespace AdvancedAds;
use AdvancedAds\Framework\Utilities\Arr;
defined( 'ABSPATH' ) || exit;
/**
* This class is used to get and set plugin options.
*/
class Options {
/**
* Hold plugin options.
*
* @var array
*/
private $options = [];
/**
* Original DB option values.
*
* @var array
*/
private $raw_options = [];
/**
* Map of key to their respective option name.
*
* @var array
*/
private $options_map = [
'advanced-ads' => ADVADS_SLUG,
'adsense' => ADVADS_SLUG . '-adsense',
'adblocker' => ADVADS_SLUG . '-adblocker',
'ads-txt' => 'advanced_ads_ads_txt',
'notices' => ADVADS_SLUG . '-notices',
'privacy' => ADVADS_SLUG . '-privacy',
'pro' => ADVADS_SLUG . '-pro',
'tracking' => ADVADS_SLUG . '-tracking',
];
/**
* Retrieves the instance of the Options class.
*
* @return Options
*/
public static function instance() {
static $instance;
if ( null === $instance ) {
$instance = new Options();
}
return $instance;
}
/**
* Gets the value of a specific option.
*
* @param string $key Option suffix (advanced-ads-XXX).
* @param mixed $default_val Default value to return if the option is not set.
*
* @return mixed Array of option values, or the default value.
*/
public function get( $key, $default_val = false ) {
$keys = $this->normalize_key( $key );
$option_name = array_shift( $keys );
$values = $this->get_option( $option_name );
foreach ( $keys as $key ) {
$values = Arr::get( $values, $key, null );
}
return null === $values ? $default_val : $values;
}
/**
* Sets the value of a specific option.
*
* It checks if the method to set the option exists in the instance of the class and calls it if it does.
*
* @param string $key Option suffix (advanced-ads-XXX).
* @param array $value The value to set.
*
* @return array The new value of the option.
*/
public function set( $key, $value ): array {
$keys = $this->normalize_key( $key );
$option_name = array_shift( $keys );
$this->get_option( $option_name ); // Make sure the option is loaded.
$values = $this->raw_options[ $option_name ] ?? [];
$current = &$values;
foreach ( $keys as $key ) {
if ( ! Arr::has( $current, $key ) ) {
Arr::set( $current, $key, [] );
}
$current = &$current[ $key ];
}
$current = $value;
return $this->set_option( $option_name, $values );
}
/**
* Retrieves the value of an option identified by the given key.
*
* @param string $key Option name.
*
* @return array
*/
private function get_option( $key ): array {
// Early bail!!
if ( isset( $this->options[ $key ] ) ) {
return $this->options[ $key ];
}
// Check for getter method.
$method = 'get_' . $key;
if ( method_exists( $this, $method ) ) {
$this->options[ $key ] = $this->$method();
}
// Check in key map.
if ( isset( $this->options_map[ $key ] ) ) {
$this->options[ $key ] = get_option( $this->options_map[ $key ], [] );
}
$this->raw_options[ $key ] = $this->options[ $key ];
$this->options[ $key ] = $this->normalize_option( $this->options[ $key ] );
return $this->options[ $key ];
}
/**
* Sets the value of an option and updates the corresponding database entry.
*
* @param string $key Option name.
* @param mixed $value Option value.
*
* @return array The normalized option value.
*/
private function set_option( $key, $value ): array {
// Check for setter method.
$method = 'set_' . $key;
if ( method_exists( $this, $method ) ) {
$this->$method( $value );
}
// Check in key map.
if ( isset( $this->options_map[ $key ] ) ) {
update_option( $this->options_map[ $key ], $value );
}
$this->raw_options[ $key ] = $value;
$this->options[ $key ] = $this->normalize_option( $value );
return $this->options[ $key ];
}
/**
* Normalizes the given options array recursively.
*
* @param array $options Options array to be normalized.
*
* @return array The normalized options array.
*/
private function normalize_option( $options ): array {
if ( ! is_array( $options ) || empty( $options ) ) {
return [];
}
foreach ( $options as $key => $value ) {
$option[ $key ] = is_array( $value )
? $this->normalize_option( $value )
: $this->normalize_value( $value );
}
return $option;
}
/**
* Normalizes a given value.
*
* @param mixed $value Value to be normalized.
*
* @return mixed The normalized value.
*/
private function normalize_value( $value ) {
if ( 'true' === $value || 'on' === $value ) {
$value = true;
} elseif ( 'false' === $value || 'off' === $value ) {
$value = false;
} elseif ( '0' === $value || '1' === $value ) {
$value = intval( $value );
}
return $value;
}
/**
* Normalizes a given key by removing leading and trailing dots and splitting it into an array.
*
* @param string $key Key to be normalized.
*
* @return array The normalized key as an array.
*/
private function normalize_key( $key ) {
$key = trim( $key, '.' );
return explode( '.', $key );
}
}