PluginProbe ʕ •ᴥ•ʔ
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode / 4.3.6
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode v4.3.6
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 / Cookiebot_WP.php
cookiebot / src / lib Last commit date
buffer 3 years ago script_loader_tag 2 years ago traits 3 years ago Consent_API_Helper.php 2 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 2 years ago Cookiebot_Review.php 3 years ago Cookiebot_WP.php 2 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 2 years ago WP_Rocket_Helper.php 3 years ago Widgets.php 3 years ago global-deprecations.php 3 years ago helper.php 2 years ago
Cookiebot_WP.php
274 lines
1 <?php
2
3 namespace cybot\cookiebot\lib;
4
5 use cybot\cookiebot\addons\Cookiebot_Addons;
6 use cybot\cookiebot\admin_notices\Cookiebot_Recommendation_Notice;
7 use cybot\cookiebot\admin_notices\Cookiebot_Temp_Notice;
8 use cybot\cookiebot\gutenberg\Cookiebot_Gutenberg_Declaration_Block;
9 use cybot\cookiebot\settings\Menu_Settings;
10 use cybot\cookiebot\settings\Network_Menu_Settings;
11 use cybot\cookiebot\widgets\Dashboard_Widget_Cookiebot_Status;
12 use DomainException;
13 use RuntimeException;
14
15 class Cookiebot_WP {
16 const COOKIEBOT_PLUGIN_VERSION = '4.3.6';
17 const COOKIEBOT_MIN_PHP_VERSION = '5.6.0';
18
19 /**
20 * @var Cookiebot_WP The single instance of the class
21 * @since 1.0.0
22 */
23 private static $instance = null;
24
25 /**
26 * Main Cookiebot_WP Instance
27 *
28 * Ensures only one instance of Cookiebot_WP is loaded or can be loaded.
29 *
30 * @return Cookiebot_WP - Main instance
31 * @throws RuntimeException
32 * @version 1.0.0
33 * @since 1.0.0
34 * @static
35 */
36 public static function instance() {
37 if ( is_null( self::$instance ) ) {
38 self::$instance = new self();
39 }
40
41 return self::$instance;
42 }
43
44 /**
45 * Cookiebot_WP Constructor.
46 *
47 * @throws RuntimeException
48 * @since 1.0.0
49 * @access public
50 * @version 2.1.4
51 */
52 public function __construct() {
53 $this->throw_exception_if_php_version_is_incompatible();
54 $this->cookiebot_init();
55 register_activation_hook( __FILE__, array( new Cookiebot_Activated(), 'run' ) );
56 register_deactivation_hook( __FILE__, array( new Cookiebot_Deactivated(), 'run' ) );
57 }
58
59 /**
60 * @throws RuntimeException
61 */
62 private function throw_exception_if_php_version_is_incompatible() {
63 if ( version_compare( PHP_VERSION, self::COOKIEBOT_MIN_PHP_VERSION, '<' ) ) {
64 $message = sprintf(
65 // translators: The placeholder is for the COOKIEBOT_MIN_PHP_VERSION constant
66 __( 'The Cookiebot plugin requires PHP version %s or greater.', 'cookiebot' ),
67 self::COOKIEBOT_MIN_PHP_VERSION
68 );
69 throw new DomainException( $message );
70 }
71 }
72
73 public function cookiebot_init() {
74 Cookiebot_Addons::instance();
75 load_textdomain(
76 'cookiebot',
77 CYBOT_COOKIEBOT_PLUGIN_DIR . 'langs/cookiebot-' . get_locale() . '.mo'
78 );
79 load_plugin_textdomain( 'cookiebot', false, dirname( plugin_basename( __FILE__ ) ) . '/langs' );
80
81 if ( is_admin() ) {
82 ( new Menu_Settings() )->add_menu();
83 if ( is_multisite() && is_plugin_active_for_network( 'cookiebot/cookiebot.php' ) ) {
84 ( new Network_Menu_Settings() )->add_menu();
85 }
86 ( new Dashboard_Widget_Cookiebot_Status() )->register_hooks();
87 ( new Cookiebot_Recommendation_Notice() )->register_hooks();
88 ( new Cookiebot_Temp_Notice() )->register_hooks();
89 ( new Cookiebot_Review() )->register_hooks();
90 }
91
92 ( new Consent_API_Helper() )->register_hooks();
93 ( new Cookiebot_Javascript_Helper() )->register_hooks();
94 ( new Cookiebot_Automatic_Updates() )->register_hooks();
95 ( new Widgets() )->register_hooks();
96 ( new Cookiebot_Gutenberg_Declaration_Block() )->register_hooks();
97 ( new WP_Rocket_Helper() )->register_hooks();
98
99 $this->set_default_options();
100 $this->delay_notice_recommendation_on_first_activation();
101 add_filter( 'plugin_action_links_cookiebot/cookiebot.php', array( $this, 'set_settings_action_link' ) );
102 }
103
104 /**
105 * Returns true if an user is logged in and has an edit_themes capability
106 *
107 * @return bool
108 *
109 * @since 3.3.1
110 * @version 3.4.1
111 */
112 public static function can_current_user_edit_theme() {
113 if ( is_user_logged_in() &&
114 (
115 current_user_can( 'edit_themes' ) ||
116 current_user_can( 'edit_pages' ) ||
117 current_user_can( 'edit_posts' )
118 )
119 ) {
120 return true;
121 }
122
123 return false;
124 }
125
126 /**
127 * @return string
128 */
129 public static function get_cbid() {
130 $network_setting = (string) get_site_option( 'cookiebot-cbid', '' );
131 $setting = (string) get_option( 'cookiebot-cbid', $network_setting );
132
133 return empty( $setting ) ? $network_setting : $setting;
134 }
135
136 /**
137 * @return string
138 */
139 public static function get_cookie_blocking_mode() {
140 $allowed_modes = array( 'auto', 'manual' );
141 $network_setting = (string) get_site_option( 'cookiebot-cookie-blocking-mode', 'manual' );
142 $setting = (string) get_option( 'cookiebot-cookie-blocking-mode', $network_setting );
143
144 return in_array( $setting, $allowed_modes, true ) ? $setting : 'manual';
145 }
146
147 /**
148 * @return bool
149 */
150 public static function check_network_auto_blocking_mode() {
151 $network_setting = (string) get_site_option( 'cookiebot-cookie-blocking-mode' );
152
153 return $network_setting === 'auto' ? true : false;
154 }
155
156 /**
157 * @return string
158 */
159 public static function get_cookie_categories_status() {
160 return self::get_cookie_blocking_mode() === 'auto' ? 'disabled' : '';
161 }
162
163 /**
164 * @return bool
165 */
166 public static function is_cookie_category_selected( $option, $category ) {
167 $categories = get_option( $option );
168 if ( ! $categories || ! is_array( $categories ) ) {
169 return false;
170 }
171
172 return in_array( $category, $categories, true );
173 }
174
175 /**
176 * Cookiebot_WP Check if Cookiebot is active in admin
177 *
178 * @version 4.2.8
179 * @since 3.1.0
180 */
181 public static function cookiebot_disabled_in_admin() {
182 if ( ( is_network_admin() && get_site_option( 'cookiebot-nooutput-admin', false ) ) ||
183 ( ! is_network_admin() && get_site_option( 'cookiebot-nooutput-admin', false ) ) ||
184 ( ! is_network_admin() && get_option( 'cookiebot-nooutput-admin', false ) ) ) {
185 return true;
186 }
187
188 return false;
189 }
190
191 /**
192 * Cookiebot_WP Set default options
193 *
194 * @version 4.2.5
195 * @since 4.2.5
196 */
197 private function set_default_options() {
198 $options = array(
199 'cookiebot-nooutput-admin' => '1',
200 'cookiebot-gcm' => '1',
201 );
202 $temp_notice_option = get_option( Cookiebot_Temp_Notice::COOKIEBOT_TEMP_OPTION_KEY );
203
204 foreach ( $options as $option => $default ) {
205 if ( get_option( $option ) === false && ! get_option( $option . self::OPTION_FIRST_RUN_SUFFIX ) ) {
206 update_option( $option, $default );
207 }
208
209 if ( ( get_option( $option ) || get_option( $option ) !== false ) && ! get_option( $option . self::OPTION_FIRST_RUN_SUFFIX ) ) {
210 update_option( $option . self::OPTION_FIRST_RUN_SUFFIX, '1' );
211 }
212 }
213
214 if ( empty( $temp_notice_option ) ) {
215 if ( version_compare( phpversion(), '7.0.0' ) >= 0 ) {
216 update_option( Cookiebot_Temp_Notice::COOKIEBOT_TEMP_OPTION_KEY, 'hide' );
217 } else {
218 update_option( Cookiebot_Temp_Notice::COOKIEBOT_TEMP_OPTION_KEY, 'show' );
219 }
220 } elseif ( $temp_notice_option !== 'hide' && version_compare( phpversion(), '7.0.0' ) >= 0 ) {
221 update_option( Cookiebot_Temp_Notice::COOKIEBOT_TEMP_OPTION_KEY, 'hide' );
222 }
223
224 self::set_tcf_version();
225 }
226
227 private static function set_tcf_version() {
228 $iab_version = get_option( 'cookiebot-tcf-version' );
229 if ( ! empty( $iab_version ) && $iab_version === 'IAB' ) {
230 update_option( 'cookiebot-tcf-version', 'TCFv2.2' );
231 }
232 }
233
234 /**
235 * Cookiebot_WP Delay recommendation notice 1 day after first activation
236 *
237 * @version 4.2.5
238 * @since 4.2.5
239 */
240 private function delay_notice_recommendation_on_first_activation() {
241 // Check if recommendation notice delay option exists
242 if ( get_option( Cookiebot_Recommendation_Notice::COOKIEBOT_RECOMMENDATION_OPTION_KEY, false ) === false ) {
243 // Delay in 1 day
244 add_option( Cookiebot_Recommendation_Notice::COOKIEBOT_RECOMMENDATION_OPTION_KEY, strtotime( '+1 day' ) );
245 }
246 }
247
248 public function set_settings_action_link( $actions ) {
249 $cblinks = array(
250 '<a href="' . esc_url( add_query_arg( 'page', 'cookiebot', admin_url( 'admin.php' ) ) ) . '">' . esc_html__( 'Dashboard', 'cookiebot' ) . '</a>',
251 );
252 $actions = array_merge( $actions, $cblinks );
253 return $actions;
254 }
255
256 /**
257 * @return string
258 */
259 public static function get_manager_language() {
260 $locale = get_locale();
261 $supported_langs = array(
262 'de_DE' => 'de',
263 'da_DK' => 'da',
264 'fr_FR' => 'fr',
265 'it_IT' => 'it',
266 'es_ES' => 'es',
267 );
268
269 return array_key_exists( $locale, $supported_langs ) ? $supported_langs[ $locale ] : esc_html( 'en' );
270 }
271
272 const OPTION_FIRST_RUN_SUFFIX = '-first-run';
273 }
274