PluginProbe ʕ •ᴥ•ʔ
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode / 3.10.1
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode v3.10.1
4.7.2 4.7.1 trunk 2.3.0 2.4.0 2.4.1 2.4.2 2.5.0 3.0.0 3.0.1 3.1.0 3.10.0 3.10.1 3.11.1 3.11.2 3.11.3 3.2.0 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.5 3.6.6 3.7.0 3.7.1 3.8.0 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.2.0 4.2.1 4.2.10 4.2.11 4.2.12 4.2.13 4.2.14 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.3.10 4.3.11 4.3.12 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.3.7.1 4.3.8 4.3.9 4.3.9.1 4.4.0 4.4.1 4.4.2 4.5.0 4.5.1 4.5.10 4.5.11 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 4.5.7 4.5.8 4.5.9 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.7.0
cookiebot / addons / lib / settings-service.php
cookiebot / addons / lib Last commit date
buffer 5 years ago ioc 6 years ago script-loader-tag 7 years ago autoloader.php 7 years ago cookie-consent-interface.php 7 years ago cookie-consent.php 7 years ago helper.php 5 years ago settings-service-interface.php 5 years ago settings-service.php 5 years ago theme-settings-service.php 5 years ago
settings-service.php
545 lines
1 <?php
2
3 namespace cookiebot_addons\lib;
4
5 use cookiebot_addons\controller\addons\Cookiebot_Addons_Interface;
6 use Cybot\Dependencies\DI;
7
8 class Settings_Service implements Settings_Service_Interface {
9
10 /**
11 * @var DI\Container
12 */
13 public $container;
14
15 CONST OPTION_NAME = 'cookiebot_available_addons';
16
17 /**
18 * Settings_Service constructor.
19 *
20 * @param $container
21 *
22 * @since 1.3.0
23 */
24 public function __construct( $container ) {
25 $this->container = $container;
26 }
27
28 /**
29 * Returns true if the addon is enabled in the backend
30 *
31 * @param $addon
32 *
33 * @return mixed
34 *
35 * @since 1.3.0
36 */
37 public function is_addon_enabled( $addon ) {
38 $option = get_option( static::OPTION_NAME );
39
40 if ( isset( $option[ $addon ]['enabled'] ) ) {
41 return true;
42 }
43
44 return false;
45 }
46
47 /**
48 * Returns true if the addon is installed
49 *
50 * @param $addon
51 *
52 * @return int|\WP_Error
53 *
54 * @since 1.3.0
55 */
56 public function is_addon_installed( $addon ) {
57 return ( $addon !== false && is_wp_error( validate_plugin( $addon ) ) ) ? false : true;
58 }
59
60 /**
61 * Returns the addon version
62 *
63 * @param $addon
64 *
65 * @return bool
66 *
67 * @since 2.2.1
68 */
69 public function get_addon_version( $addon ) {
70 $plugin_data = get_file_data( WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $addon, array( 'Version' => 'version' ),
71 false );
72
73 return ( isset( $plugin_data['Version'] ) ) ? $plugin_data['Version'] : false;
74 }
75
76 /**
77 * Returns true if the addon plugin is activated
78 *
79 * @param $addon
80 *
81 * @return bool
82 *
83 * @since 1.3.0
84 */
85 public function is_addon_activated( $addon ) {
86 return ( $addon === false || is_plugin_active( $addon ) ) ? true : false;
87 }
88
89 /**
90 * Returns all cookie type for given addon
91 *
92 * @param $addon string option name
93 * @param $default array default cookie types
94 *
95 * @return array
96 *
97 * @since 1.3.0
98 */
99 public function get_cookie_types( $addon, $default = array() ) {
100 $option = get_option( static::OPTION_NAME );
101
102 if ( isset( $option[ $addon ]['cookie_type'] ) && is_array( $option[ $addon ]['cookie_type'] ) ) {
103 return $option[ $addon ]['cookie_type'];
104 }
105
106 return $default;
107 }
108
109 /**
110 * Returns regex for given addon
111 *
112 * @param $addon string option name
113 * @param $default string default regex
114 *
115 * @return string
116 *
117 * @since 2.4.5
118 */
119 public function get_addon_regex( $addon, $default = '' ) {
120 $option = get_option( static::OPTION_NAME );
121
122 if ( isset( $option[ $addon ]['regex'] ) ) {
123 return $option[ $addon ]['regex'];
124 }
125
126 return $default;
127 }
128
129 /**
130 * Returns addons one by one through a generator
131 *
132 * @return array
133 * @throws DI\DependencyException
134 * @throws DI\NotFoundException
135 *
136 * @since 1.3.0
137 */
138 public function get_addons() {
139 $addons = array();
140
141 foreach ( $this->container->get( 'plugins' ) as $addon ) {
142 $addons[] = $this->container->get( $addon->class );
143 }
144
145 return $addons;
146 }
147
148 /**
149 * Returns active addons
150 *
151 * @return array
152 * @throws DI\DependencyException
153 * @throws DI\NotFoundException
154 *
155 * @since 1.3.0
156 */
157 public function get_active_addons() {
158 $active_addons = array();
159
160 foreach ( $this->get_addons() as $addon ) {
161 /**
162 * @var $addon Cookiebot_Addons_Interface
163 * Load addon code if the plugin is active and addon is activated
164 */
165 if ( $addon->is_addon_enabled() && $addon->is_addon_installed() && $addon->is_addon_activated() ) {
166 $active_addons[] = $addon;
167 }
168 }
169
170 return $active_addons;
171 }
172
173 /**
174 * Returns widget cookie types
175 *
176 * @param $option_key
177 * @param $widget
178 * @param array $default
179 *
180 * @return array
181 *
182 * @since 1.3.0
183 */
184 public function get_widget_cookie_types( $option_key, $widget, $default = array() ) {
185 $option = get_option( $option_key );
186
187 if ( isset( $option[ $widget ]['cookie_type'] ) && is_array( $option[ $widget ]['cookie_type'] ) ) {
188 return $option[ $widget ]['cookie_type'];
189 }
190
191 return $default;
192 }
193
194 /**
195 * Is widget enabled
196 *
197 * @param $option_key
198 * @param $widget
199 *
200 * @return bool
201 */
202 public function is_widget_enabled( $option_key, $widget ) {
203 $option = get_option( $option_key );
204
205 if ( isset( $option[ $widget ] ) && ! isset( $option[ $widget ]['enabled'] ) ) {
206 return false;
207 }
208
209 return true;
210 }
211
212 /**
213 * Is placeholder enabled for a widget
214 *
215 * @param $option_key
216 * @param $widget
217 *
218 * @return bool
219 */
220 public function is_widget_placeholder_enabled( $option_key, $widget ) {
221 $option = get_option( $option_key );
222
223 if ( isset( $option[ $widget ] ) && ! isset( $option[ $widget ]['placeholder']['enabled'] ) ) {
224 return false;
225 }
226
227 return true;
228 }
229
230 /**
231 * Checks if addon has placeholders
232 *
233 * @param $option_key
234 *
235 * @return bool
236 *
237 * @since 1.8.0
238 */
239 public function widget_has_placeholder( $option_key, $widget_key ) {
240 $option = get_option( $option_key );
241
242 if ( isset( $option[ $widget_key ]['placeholder']['languages'] ) ) {
243 return true;
244 }
245
246 return false;
247 }
248
249 /**
250 * Returns widget placeholders
251 *
252 * @param $option_key
253 * @param $widget_key
254 *
255 * @return bool
256 *
257 * @since 1.8.0
258 */
259 public function get_widget_placeholders( $option_key, $widget_key ) {
260 $option = get_option( $option_key );
261
262 if ( isset( $option[ $widget_key ]['placeholder']['languages'] ) ) {
263 return $option[ $widget_key ]['placeholder']['languages'];
264 }
265
266 return false;
267 }
268
269 /**
270 * Returns all placeholders
271 *
272 * @param $option_key
273 *
274 * @return bool
275 *
276 * @since 1.8.0
277 */
278 public function get_placeholders( $option_key ) {
279 $option = get_option( static::OPTION_NAME );
280
281 if ( isset( $option[ $option_key ]['placeholder']['languages'] ) ) {
282 return $option[ $option_key ]['placeholder']['languages'];
283 }
284
285 return false;
286 }
287
288 /**
289 * Checks if addon has placeholders
290 *
291 * @param $option_key
292 *
293 * @return bool
294 *
295 * @since 1.8.0
296 */
297 public function has_placeholder( $option_key ) {
298 $option = get_option( static::OPTION_NAME );
299
300 if ( isset( $option[ $option_key ]['placeholder']['languages'] ) ) {
301 return true;
302 }
303
304 return false;
305 }
306
307 /**
308 * returns true if the addon placeholder is enabled
309 *
310 * @param $option_key
311 *
312 * @return bool
313 *
314 * @since 1.8.0
315 */
316 public function is_placeholder_enabled( $option_key ) {
317 $option = get_option( static::OPTION_NAME );
318
319 if ( isset( $option[ $option_key ]['placeholder']['enabled'] ) ) {
320 return true;
321 }
322
323 return false;
324 }
325
326 /**
327 * returns the placeholder if it does exist
328 *
329 * @param $option_key
330 * @param $default_placeholder
331 * @param $cookies
332 *
333 * @return bool|mixed
334 *
335 * @since 1.8.0
336 */
337 public function get_placeholder( $option_key, $default_placeholder, $cookies, $src = '' ) {
338 $option = get_option( static::OPTION_NAME );
339
340 if ( isset( $option[ $option_key ]['placeholder']['enabled'] ) ) {
341 return $this->get_translated_placeholder( $option, $option_key, $default_placeholder, $cookies, $src );
342 }
343
344 return false;
345 }
346
347 /**
348 * returns the placeholder if it does exist
349 *
350 * @param $option_key
351 * @param $default_placeholder
352 * @param $cookies
353 *
354 * @return bool|mixed
355 *
356 * @since 1.8.0
357 */
358 public function get_widget_placeholder( $option_key, $widget_key, $default_placeholder, $cookies = '' ) {
359 $option = get_option( $option_key );
360
361 if ( isset( $option[ $widget_key ]['placeholder']['enabled'] ) ) {
362 return $this->get_translated_placeholder( $option, $widget_key, $default_placeholder, $cookies );
363 }
364
365 return false;
366 }
367
368 /**
369 * Translates the placeholder text in the current page language
370 *
371 * @param $option
372 * @param $option_key
373 * @param $default_placeholder
374 * @param $cookies
375 * @param string $src
376 *
377 * @return mixed
378 *
379 * @since 1.9.0
380 */
381 private function get_translated_placeholder( $option, $option_key, $default_placeholder, $cookies, $src = '' ) {
382 $current_lang = cookiebot_addons_get_language();
383
384 if ( $current_lang == false || $current_lang == '' ) {
385 $current_lang = 'site-default';
386 }
387
388 /**
389 * Loop every language and match current language
390 */
391 if ( isset( $option[ $option_key ]['placeholder']['languages'] ) && is_array( $option[ $option_key ]['placeholder']['languages'] ) ) {
392 foreach ( $option[ $option_key ]['placeholder']['languages'] as $key => $value ) {
393
394 /**
395 * if current lang match with the prefix language in the database then get the text
396 */
397 if ( $key == $current_lang ) {
398 $cookies_array = explode(', ',$cookies);
399 $translated_cookie_names = cookiebot_translate_cookie_names($cookies_array);
400 $translated_cookie_names = implode(', ', $translated_cookie_names);
401 return $this->placeholder_merge_tag( $option[ $option_key ]['placeholder']['languages'][ $key ],
402 $translated_cookie_names, $src );
403 }
404 }
405 }
406
407 /**
408 * Returns site-default text if no match found.
409 */
410 if ( isset( $option[ $option_key ]['placeholder']['languages']['site-default'] ) ) {
411 return $this->placeholder_merge_tag( $option[ $option_key ]['placeholder']['languages']['site-default'],
412 $cookies, $src );
413 }
414
415 /**
416 * Returns addon default placeholder (code)
417 */
418 return $this->placeholder_merge_tag( $default_placeholder, $cookies, $src );
419 }
420
421 /**
422 * Merges placeholder tags with values
423 *
424 * @param $placeholder
425 * @param $cookies
426 *
427 * @return mixed
428 *
429 * @since 1.8.0
430 */
431 private function placeholder_merge_tag( $placeholder, $cookies, $src ) {
432 if ( strpos( $placeholder, '%cookie_types' ) !== false ) {
433 $placeholder = str_replace( '%cookie_types', $cookies, $placeholder );
434 }
435
436 if ( strpos( $placeholder, '%src' ) !== false ) {
437 $placeholder = str_replace( '%src', $src, $placeholder );
438 }
439
440 if ( strpos( $placeholder, '[renew_consent]' ) !== false ) {
441 $placeholder = str_replace( '[renew_consent]', '<a href="javascript:Cookiebot.renew()">', $placeholder );
442 }
443
444 if ( strpos( $placeholder, '[/renew_consent]' ) !== false ) {
445 $placeholder = str_replace( '[/renew_consent]', '</a>', $placeholder );
446 }
447
448 return $placeholder;
449 }
450
451 /**
452 * Check if the previous version is active
453 *
454 * @param $addons array List of addons
455 * @param $addon_class string The name of the class
456 *
457 * @return bool
458 *
459 * @since 2.1.3
460 */
461 public function is_previous_version_active( $addons, $addon_class ) {
462 foreach ( $addons as $addon ) {
463 $parent_class = $addon->get_parent_class();
464
465 if ( $parent_class !== false ) {
466 if ( $parent_class == $addon_class ) {
467 if ( $addon->is_addon_activated() ) {
468 return true;
469 }
470 }
471 }
472 }
473
474 return false;
475 }
476
477 /**
478 * Checks if the addon is the latest plugin version.
479 * Latest plugin version doesn't have extended class.
480 *
481 * @param $addon
482 *
483 * @return bool
484 *
485 * @since 2.1.3
486 */
487 public function is_latest_plugin_version( $addon ) {
488 return ( get_parent_class( $addon ) === false ) ? true : false;
489 }
490
491 /**
492 * Check if the addon option name matchs with the parameter
493 * then run the post_hook_after_enabling function in the addon class.
494 *
495 * @param $addon_option_name string Addon option name
496 *
497 * @throws DI\DependencyException
498 * @throws DI\NotFoundException
499 *
500 * @since 2.2.0
501 */
502 public function post_hook_after_enabling_addon_on_settings_page( $addon_option_name ) {
503 $addons = $this->get_addons();
504
505 foreach ( $addons as $addon ) {
506 if ( $addon->get_option_name() == $addon_option_name ) {
507 $addon->post_hook_after_enabling();
508 }
509 }
510 }
511
512 /**
513 * The cookiebot plugin is deactivated
514 * so run this function to cleanup the addons.
515 *
516 * @since 2.2.0
517 */
518 public function cookiebot_deactivated() {
519 foreach ( $this->get_active_addons() as $addon ) {
520 $addon->plugin_deactivated();
521 }
522 }
523
524 /**
525 * The cookiebot plugin is activated and the addon settings is activated
526 *
527 * @since 3.6.3
528 */
529 public function cookiebot_activated() {
530 $option = get_option( static::OPTION_NAME );
531
532 if( $option == false ) {
533 $option = array();
534
535 foreach ( $this->get_addons() as $addon ) {
536 if ( $addon->enable_by_default() ) {
537 $option[ $addon->get_option_name() ] = $addon->get_default_enable_setting();
538 }
539 }
540
541 update_option( static::OPTION_NAME, $option );
542 }
543 }
544 }
545