PluginProbe ʕ •ᴥ•ʔ
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode / 4.2.8
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode v4.2.8
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 / src / lib / Cookie_Consent.php
cookiebot / src / lib Last commit date
buffer 3 years ago script_loader_tag 3 years ago traits 3 years ago Consent_API_Helper.php 3 years ago Cookie_Consent.php 3 years ago Cookie_Consent_Interface.php 4 years ago Cookiebot_Activated.php 3 years ago Cookiebot_Automatic_Updates.php 3 years ago Cookiebot_Deactivated.php 4 years ago Cookiebot_Javascript_Helper.php 3 years ago Cookiebot_WP.php 3 years ago Dependency_Container.php 3 years ago Settings_Page_Tab.php 3 years ago Settings_Service.php 3 years ago Settings_Service_Interface.php 3 years ago Supported_Languages.php 4 years ago Supported_Regions.php 3 years ago WP_Rocket_Helper.php 3 years ago Widgets.php 3 years ago global-deprecations.php 3 years ago helper.php 3 years ago
Cookie_Consent.php
166 lines
1 <?php
2
3 namespace cybot\cookiebot\lib;
4
5 class Cookie_Consent implements Cookie_Consent_Interface {
6
7 /**
8 * Array of cookiebot consent states
9 *
10 * It can have 4 items:
11 * - necessary
12 * - preferences
13 * - statistics
14 * - marketing
15 *
16 * @var array consent state
17 *
18 * @since 1.2.0
19 */
20 private $states = array();
21
22 /**
23 * @var array|null
24 */
25 private $cookie;
26
27 /**
28 * Scan cookiebot cookie
29 *
30 * @param $default_cookie
31 *
32 * @since 1.2.0
33 * @version 2.4.1
34 */
35 public function __construct( $default_cookie = null ) {
36 $this->cookie = ( isset( $_COOKIE['CookieConsent'] ) ) ? $_COOKIE['CookieConsent'] : $default_cookie;
37
38 $this->scan_cookie();
39 }
40
41 /**
42 * Scans cookiebot consent cookie and fills in $states with accepted consents.
43 *
44 * @since 1.2.0
45 * @version 2.4.1
46 */
47 public function scan_cookie() {
48 // default - set strictly necessary cookies
49 $this->add_state( 'necessary' );
50
51 if ( ! empty( $this->cookie ) ) {
52 switch ( $this->cookie ) {
53 case '0':
54 // The user has not accepted cookies - set strictly necessary cookies only
55 break;
56
57 case '-1':
58 // The user is not within a region that requires consent - all cookies are accepted
59 $this->add_state( 'preferences' );
60 $this->add_state( 'statistics' );
61 $this->add_state( 'marketing' );
62 break;
63
64 default:
65 // Read current user consent in encoded JavaScript format
66 $valid_php_json = preg_replace(
67 '/\s*:\s*([a-zA-Z0-9_]+?)([}\[,])/',
68 ':"$1"$2',
69 preg_replace(
70 '/([{\[,])\s*([a-zA-Z0-9_]+?):/',
71 '$1"$2":',
72 str_replace( "'", '"', stripslashes( $this->cookie ) )
73 )
74 );
75 $cookie_consent = json_decode( $valid_php_json );
76
77 if (
78 isset( $cookie_consent->preferences ) &&
79 filter_var( $cookie_consent->preferences, FILTER_VALIDATE_BOOLEAN )
80 ) {
81 // Current user accepts preference cookies
82 $this->add_state( 'preferences' );
83 }
84
85 if (
86 isset( $cookie_consent->statistics ) &&
87 filter_var( $cookie_consent->statistics, FILTER_VALIDATE_BOOLEAN )
88 ) {
89 // Current user accepts statistics cookies
90 $this->add_state( 'statistics' );
91 }
92
93 if (
94 isset( $cookie_consent->marketing ) &&
95 filter_var( $cookie_consent->marketing, FILTER_VALIDATE_BOOLEAN )
96 ) {
97 // Current user accepts marketing cookies
98 $this->add_state( 'marketing' );
99 }
100 }
101 }
102 }
103
104 /**
105 * Adds state to $states variable
106 *
107 * @param $state string new state
108 *
109 * @since 1.2.0
110 */
111 public function add_state( $state ) {
112 if ( ! $this->is_cookie_state_accepted( $state ) ) {
113 $this->states[] = $state;
114 }
115 }
116
117 /**
118 * Returns cookiebot cookie consent state
119 *
120 * @return array array List of accepted cookiebot consents
121 *
122 * @since 1.2.0
123 */
124 public function get_cookie_states() {
125 if ( empty( $this->states ) ) {
126 $this->scan_cookie();
127 }
128
129 return $this->states;
130 }
131
132 /**
133 * Checks if the cookie states are accepted.
134 *
135 * @param $states array Cookie states to check if it is accepted.
136 *
137 * @return bool
138 *
139 * @since 1.3.0
140 */
141 public function are_cookie_states_accepted( array $states ) {
142 return array_reduce(
143 $states,
144 function ( $are_cookie_states_accepted, $state ) {
145 if ( ! $are_cookie_states_accepted ) {
146 return false;
147 }
148
149 return $this->is_cookie_state_accepted( $state );
150 },
151 true
152 );
153 }
154
155 /**
156 * Checks if the cookie state is accepted
157 *
158 * @param $state string Cookie state to check if it is accepted
159 *
160 * @return bool
161 */
162 public function is_cookie_state_accepted( $state ) {
163 return in_array( $state, $this->states, true );
164 }
165 }
166