PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.4
Advanced Ads – Ad Manager & AdSense v2.0.4
2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / includes / class-options.php
advanced-ads / includes Last commit date
abstracts 1 year ago admin 1 year ago ads 1 year ago compatibility 1 year ago crons 1 year ago frontend 1 year ago groups 1 year ago importers 1 year ago installation 1 year ago interfaces 1 year ago placements 1 year ago rest 1 year ago traits 1 year ago utilities 1 year ago array_ad_conditions.php 1 year ago cap_map.php 3 years ago class-assets-registry.php 1 year ago class-autoloader.php 1 year ago class-constants.php 1 year ago class-entities.php 1 year ago class-modal.php 1 year ago class-modules.php 1 year ago class-options.php 1 year ago class-plugin.php 1 year ago class-post-data.php 1 year ago class-shortcodes.php 1 year ago class-upgrades.php 1 year ago class-widget.php 1 year ago default-hooks.php 1 year ago functions-ad.php 1 year ago functions-conditional.php 1 year ago functions-core.php 1 year ago functions-group.php 1 year ago functions-placement.php 1 year ago functions.php 1 year ago index.php 2 years ago load_modules.php 2 years ago
class-options.php
224 lines
1 <?php
2 /**
3 * Get and Set Options.
4 *
5 * @package AdvancedAds
6 * @author Advanced Ads <info@wpadvancedads.com>
7 * @since 1.50.0
8 */
9
10 namespace AdvancedAds;
11
12 use AdvancedAds\Framework\Utilities\Arr;
13
14 defined( 'ABSPATH' ) || exit;
15
16 /**
17 * This class is used to get and set plugin options.
18 */
19 class Options {
20
21 /**
22 * Hold plugin options.
23 *
24 * @var array
25 */
26 private $options = [];
27
28 /**
29 * Original DB option values.
30 *
31 * @var array
32 */
33 private $raw_options = [];
34
35 /**
36 * Map of key to their respective option name.
37 *
38 * @var array
39 */
40 private $options_map = [
41 'advanced-ads' => ADVADS_SLUG,
42 'adsense' => ADVADS_SLUG . '-adsense',
43 'adblocker' => ADVADS_SLUG . '-adblocker',
44 'ads-txt' => 'advanced_ads_ads_txt',
45 'notices' => ADVADS_SLUG . '-notices',
46 'privacy' => ADVADS_SLUG . '-privacy',
47 'pro' => ADVADS_SLUG . '-pro',
48 'tracking' => ADVADS_SLUG . '-tracking',
49 ];
50
51 /**
52 * Retrieves the instance of the Options class.
53 *
54 * @return Options
55 */
56 public static function instance() {
57 static $instance;
58
59 if ( null === $instance ) {
60 $instance = new Options();
61 }
62
63 return $instance;
64 }
65
66 /**
67 * Gets the value of a specific option.
68 *
69 * @param string $key Option suffix (advanced-ads-XXX).
70 * @param mixed $default_val Default value to return if the option is not set.
71 *
72 * @return mixed Array of option values, or the default value.
73 */
74 public function get( $key, $default_val = false ) {
75 $keys = $this->normalize_key( $key );
76 $option_name = array_shift( $keys );
77 $values = $this->get_option( $option_name );
78
79 foreach ( $keys as $key ) {
80 $values = Arr::get( $values, $key, null );
81 }
82
83 return null === $values ? $default_val : $values;
84 }
85
86 /**
87 * Sets the value of a specific option.
88 *
89 * It checks if the method to set the option exists in the instance of the class and calls it if it does.
90 *
91 * @param string $key Option suffix (advanced-ads-XXX).
92 * @param array $value The value to set.
93 *
94 * @return array The new value of the option.
95 */
96 public function set( $key, $value ): array {
97 $keys = $this->normalize_key( $key );
98 $option_name = array_shift( $keys );
99
100 $this->get_option( $option_name ); // Make sure the option is loaded.
101
102 $values = $this->raw_options[ $option_name ] ?? [];
103 $current = &$values;
104
105 foreach ( $keys as $key ) {
106 if ( ! Arr::has( $current, $key ) ) {
107 Arr::set( $current, $key, [] );
108 }
109 $current = &$current[ $key ];
110 }
111 $current = $value;
112
113 return $this->set_option( $option_name, $values );
114 }
115
116 /**
117 * Retrieves the value of an option identified by the given key.
118 *
119 * @param string $key Option name.
120 *
121 * @return array
122 */
123 private function get_option( $key ): array {
124 // Early bail!!
125 if ( isset( $this->options[ $key ] ) ) {
126 return $this->options[ $key ];
127 }
128
129 // Check for getter method.
130 $method = 'get_' . $key;
131 if ( method_exists( $this, $method ) ) {
132 $this->options[ $key ] = $this->$method();
133 }
134
135 // Check in key map.
136 if ( isset( $this->options_map[ $key ] ) ) {
137 $this->options[ $key ] = get_option( $this->options_map[ $key ], [] );
138 }
139
140 $this->raw_options[ $key ] = $this->options[ $key ];
141 $this->options[ $key ] = $this->normalize_option( $this->options[ $key ] );
142
143 return $this->options[ $key ];
144 }
145
146 /**
147 * Sets the value of an option and updates the corresponding database entry.
148 *
149 * @param string $key Option name.
150 * @param mixed $value Option value.
151 *
152 * @return array The normalized option value.
153 */
154 private function set_option( $key, $value ): array {
155 // Check for setter method.
156 $method = 'set_' . $key;
157 if ( method_exists( $this, $method ) ) {
158 $this->$method( $value );
159 }
160
161 // Check in key map.
162 if ( isset( $this->options_map[ $key ] ) ) {
163 update_option( $this->options_map[ $key ], $value );
164 }
165
166 $this->raw_options[ $key ] = $value;
167 $this->options[ $key ] = $this->normalize_option( $value );
168
169 return $this->options[ $key ];
170 }
171
172 /**
173 * Normalizes the given options array recursively.
174 *
175 * @param array $options Options array to be normalized.
176 *
177 * @return array The normalized options array.
178 */
179 private function normalize_option( $options ): array {
180 if ( ! is_array( $options ) || empty( $options ) ) {
181 return [];
182 }
183
184 foreach ( $options as $key => $value ) {
185 $option[ $key ] = is_array( $value )
186 ? $this->normalize_option( $value )
187 : $this->normalize_value( $value );
188 }
189
190 return $option;
191 }
192
193 /**
194 * Normalizes a given value.
195 *
196 * @param mixed $value Value to be normalized.
197 *
198 * @return mixed The normalized value.
199 */
200 private function normalize_value( $value ) {
201 if ( 'true' === $value || 'on' === $value ) {
202 $value = true;
203 } elseif ( 'false' === $value || 'off' === $value ) {
204 $value = false;
205 } elseif ( '0' === $value || '1' === $value ) {
206 $value = intval( $value );
207 }
208
209 return $value;
210 }
211
212 /**
213 * Normalizes a given key by removing leading and trailing dots and splitting it into an array.
214 *
215 * @param string $key Key to be normalized.
216 *
217 * @return array The normalized key as an array.
218 */
219 private function normalize_key( $key ) {
220 $key = trim( $key, '.' );
221 return explode( '.', $key );
222 }
223 }
224