PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.0.3
Jetpack – WP Security, Backup, Speed, & Growth v15.0.3
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / widgets / class-jetpack-eu-cookie-law-widget.php
jetpack / modules / widgets Last commit date
authors 1 year ago contact-info 1 year ago eu-cookie-law 1 year ago facebook-likebox 11 years ago flickr 1 year ago gallery 1 year ago goodreads 1 year ago google-translate 1 year ago image-widget 1 year ago instagram 1 year ago internet-defense-league 2 years ago milestone 1 year ago my-community 1 year ago social-icons 1 year ago social-media-icons 1 year ago top-posts 1 year ago wordpress-post-widget 11 months ago authors.php 1 year ago blog-stats.php 1 year ago class-jetpack-eu-cookie-law-widget.php 1 year ago class-jetpack-instagram-widget.php 1 year ago contact-info.php 1 year ago customizer-controls.css 1 year ago customizer-utils.js 1 year ago facebook-likebox.php 1 year ago flickr.php 1 year ago gallery.php 1 year ago goodreads.php 11 months ago google-translate.php 1 year ago gravatar-profile.css 1 year ago gravatar-profile.php 1 year ago image-widget.php 1 year ago internet-defense-league.php 1 year ago mailchimp.php 1 year ago milestone.php 1 year ago my-community.php 1 year ago rsslinks-widget.php 1 year ago simple-payments.php 1 year ago social-icons.php 1 year ago social-media-icons.php 1 year ago top-posts.php 1 year ago twitter-timeline-admin.js 1 year ago twitter-timeline.php 1 year ago upcoming-events.php 1 year ago wordpress-post-widget.php 1 year ago
class-jetpack-eu-cookie-law-widget.php
348 lines
1 <?php
2 /**
3 * Main class file for EU Cookie Law Widget.
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Assets;
9
10 /**
11 * Disable direct access/execution to/of the widget code.
12 */
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit( 0 );
15 }
16
17 if ( ! class_exists( 'Jetpack_EU_Cookie_Law_Widget' ) ) {
18 /**
19 * EU Cookie Law Widget
20 *
21 * Display the EU Cookie Law banner in the bottom part of the screen.
22 */
23 class Jetpack_EU_Cookie_Law_Widget extends WP_Widget {
24 /**
25 * EU Cookie Law cookie name.
26 *
27 * @var string
28 */
29 public static $cookie_name = 'eucookielaw';
30
31 /**
32 * Default hide options.
33 *
34 * @var array
35 */
36 private $hide_options = array(
37 'button',
38 'scroll',
39 'time',
40 );
41
42 /**
43 * Default text options.
44 *
45 * @var array
46 */
47 private $text_options = array(
48 'default',
49 'custom',
50 );
51
52 /**
53 * Default color scheme options.
54 *
55 * @var array
56 */
57 private $color_scheme_options = array(
58 'default',
59 'negative',
60 );
61
62 /**
63 * Default policy URL options.
64 *
65 * @var array
66 */
67 private $policy_url_options = array(
68 'default',
69 'custom',
70 );
71
72 /**
73 * Widget position options.
74 *
75 * @var array
76 */
77 private $position_options = array(
78 'bottom',
79 'top',
80 );
81
82 /**
83 * Constructor.
84 */
85 public function __construct() {
86 parent::__construct(
87 'eu_cookie_law_widget',
88 /** This filter is documented in modules/widgets/facebook-likebox.php */
89 apply_filters( 'jetpack_widget_name', esc_html__( 'Cookies & Consents Banner', 'jetpack' ) ),
90 array(
91 'description' => esc_html__( 'Display a banner for EU Cookie Law and GDPR compliance.', 'jetpack' ),
92 'customize_selective_refresh' => true,
93 ),
94 array()
95 );
96 }
97
98 /**
99 * Enqueue scripts and styles.
100 */
101 public function enqueue_frontend_scripts() {
102 wp_enqueue_style( 'eu-cookie-law-style', plugins_url( 'eu-cookie-law/style.css', __FILE__ ), array(), JETPACK__VERSION );
103
104 if ( ! class_exists( 'Jetpack_AMP_Support' ) || ! Jetpack_AMP_Support::is_amp_request() ) {
105 wp_enqueue_script(
106 'eu-cookie-law-script',
107 Assets::get_file_url_for_environment(
108 '_inc/build/widgets/eu-cookie-law/eu-cookie-law.min.js',
109 'modules/widgets/eu-cookie-law/eu-cookie-law.js'
110 ),
111 array(),
112 '20180522',
113 true
114 );
115 }
116 }
117
118 /**
119 * Return an associative array of default values.
120 *
121 * These values are used in new widgets.
122 *
123 * @return array Default values for the widget options.
124 */
125 public function defaults() {
126 return array(
127 'hide' => $this->hide_options[0],
128 'hide-timeout' => 30,
129 'consent-expiration' => 180,
130 'text' => $this->text_options[0],
131 'customtext' => '',
132 'color-scheme' => $this->color_scheme_options[0],
133 'policy-url' => get_option( 'wp_page_for_privacy_policy' ) ? $this->policy_url_options[1] : $this->policy_url_options[0],
134 'default-policy-url' => 'https://automattic.com/cookies/',
135 'custom-policy-url' => get_option( 'wp_page_for_privacy_policy' ) ? get_permalink( (int) get_option( 'wp_page_for_privacy_policy' ) ) : '',
136 'position' => $this->position_options[0],
137 'policy-link-text' => esc_html__( 'Cookie Policy', 'jetpack' ),
138 'button' => esc_html__( 'Close and accept', 'jetpack' ),
139 'default-text' => esc_html__( "Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use. \r\nTo find out more, including how to control cookies, see here:", 'jetpack' ),
140 );
141 }
142
143 /**
144 * Front-end display of the widget.
145 *
146 * @html-template-var array $instance
147 * @html-template-var array<string,string> $classes
148 *
149 * @param array $args Widget arguments.
150 * @param array $instance Saved values from database.
151 */
152 public function widget( $args, $instance ) {
153 /**
154 * Filters the display of the EU Cookie Law widget.
155 *
156 * @since 6.1.1
157 *
158 * @param bool true Should the EU Cookie Law widget be disabled. Default to false.
159 */
160 if ( apply_filters( 'jetpack_disable_eu_cookie_law_widget', false ) ) {
161 return;
162 }
163
164 // Enqueue front end assets.
165 $this->enqueue_frontend_scripts();
166
167 $instance = wp_parse_args( $instance, $this->defaults() );
168
169 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
170 require __DIR__ . '/eu-cookie-law/widget-amp.php';
171 return;
172 }
173
174 $classes = array();
175 $classes['hide'] = 'hide-on-' . esc_attr( $instance['hide'] );
176 if ( 'negative' === $instance['color-scheme'] ) {
177 $classes['negative'] = 'negative';
178 }
179
180 if ( 'top' === $instance['position'] ) {
181 $classes['top'] = 'top';
182 }
183
184 if ( Jetpack::is_module_active( 'wordads' ) ) {
185 $classes['ads'] = 'ads-active';
186 $classes['hide'] = 'hide-on-button';
187 }
188
189 /**
190 * Check if widget is loaded in widgets.php.
191 *
192 * @return string widget Static version of the widget for better preview.
193 */
194 global $pagenow;
195 if ( 'widgets.php' === $pagenow ) {
196 // To prevent the widget from being added as a pop-up
197 // we do not echo the before and after $args. Instead we wrap
198 // it in a dummy `div` and return before the `widget_view` is
199 // added to stats.
200 echo '<div id="eu-cookie-law" style="padding: 0;margin: 5px">';
201 require_once __DIR__ . '/eu-cookie-law/widget.php';
202 echo '</div>';
203 return;
204 }
205
206 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
207 require_once __DIR__ . '/eu-cookie-law/widget.php';
208 echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
209
210 /** This action is already documented in modules/widgets/gravatar-profile.php */
211 do_action( 'jetpack_stats_extra', 'widget_view', 'eu_cookie_law' );
212 }
213
214 /**
215 * Back-end widget form.
216 *
217 * @html-template-var array $instance
218 *
219 * @param array $instance Previously saved values from database.
220 * @return string|void
221 */
222 public function form( $instance ) {
223 $instance = wp_parse_args( $instance, $this->defaults() );
224 if ( Jetpack::is_module_active( 'wordads' ) ) {
225 $instance['hide'] = 'button';
226 }
227
228 wp_enqueue_script(
229 'eu-cookie-law-widget-admin',
230 Assets::get_file_url_for_environment(
231 '_inc/build/widgets/eu-cookie-law/eu-cookie-law-admin.min.js',
232 'modules/widgets/eu-cookie-law/eu-cookie-law-admin.js'
233 ),
234 array( 'jquery' ),
235 20180417,
236 false
237 );
238
239 require __DIR__ . '/eu-cookie-law/form.php';
240 }
241
242 /**
243 * Sanitize widget form values as they are saved.
244 *
245 * @param array $new_instance Values just sent to be saved.
246 * @param array $old_instance Previously saved values from database.
247 * @return array Updated safe values to be saved.
248 */
249 public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
250 $instance = array();
251 $defaults = $this->defaults();
252
253 $instance['hide'] = $this->filter_value( isset( $new_instance['hide'] ) ? $new_instance['hide'] : '', $this->hide_options );
254 $instance['text'] = $this->filter_value( isset( $new_instance['text'] ) ? $new_instance['text'] : '', $this->text_options );
255 $instance['color-scheme'] = $this->filter_value( isset( $new_instance['color-scheme'] ) ? $new_instance['color-scheme'] : '', $this->color_scheme_options );
256 $instance['policy-url'] = $this->filter_value( isset( $new_instance['policy-url'] ) ? $new_instance['policy-url'] : '', $this->policy_url_options );
257 $instance['position'] = $this->filter_value( isset( $new_instance['position'] ) ? $new_instance['position'] : '', $this->position_options );
258
259 if ( isset( $new_instance['hide-timeout'] ) ) {
260 // Time can be a value between 3 and 1000 seconds.
261 $instance['hide-timeout'] = min( 1000, max( 3, (int) $new_instance['hide-timeout'] ) );
262 }
263
264 if ( isset( $new_instance['consent-expiration'] ) ) {
265 // Time can be a value between 1 and 365 days.
266 $instance['consent-expiration'] = min( 365, max( 1, (int) $new_instance['consent-expiration'] ) );
267 }
268
269 if ( isset( $new_instance['customtext'] ) ) {
270 $instance['customtext'] = mb_substr( wp_kses( $new_instance['customtext'], array() ), 0, 4096 );
271 } else {
272 $instance['text'] = $this->text_options[0];
273 }
274
275 if ( isset( $new_instance['policy-url'] ) ) {
276 $instance['policy-url'] = 'custom' === $new_instance['policy-url']
277 ? 'custom'
278 : 'default';
279 } else {
280 $instance['policy-url'] = $this->policy_url_options[0];
281 }
282
283 if ( 'custom' === $instance['policy-url'] && isset( $new_instance['custom-policy-url'] ) ) {
284 $instance['custom-policy-url'] = esc_url( $new_instance['custom-policy-url'], array( 'http', 'https' ) );
285
286 if ( strlen( $instance['custom-policy-url'] ) < 10 ) {
287 unset( $instance['custom-policy-url'] );
288 global $wp_customize;
289 if ( ! isset( $wp_customize ) ) {
290 $instance['policy-url'] = $this->policy_url_options[0];
291 }
292 }
293 }
294
295 if ( isset( $new_instance['policy-link-text'] ) ) {
296 $instance['policy-link-text'] = trim( mb_substr( wp_kses( $new_instance['policy-link-text'], array() ), 0, 100 ) );
297 }
298
299 if ( empty( $instance['policy-link-text'] ) || $instance['policy-link-text'] === $defaults['policy-link-text'] ) {
300 unset( $instance['policy-link-text'] );
301 }
302
303 if ( isset( $new_instance['button'] ) ) {
304 $instance['button'] = trim( mb_substr( wp_kses( $new_instance['button'], array() ), 0, 100 ) );
305 }
306
307 if ( empty( $instance['button'] ) || $instance['button'] === $defaults['button'] ) {
308 unset( $instance['button'] );
309 }
310
311 // Show the banner again if a setting has been changed.
312 // Sometimes plugins send headers already, so we can't set a cookie and any attempt will throw a warning.
313 if ( ! headers_sent() ) {
314 setcookie( self::$cookie_name, '', time() - 86400, '/', COOKIE_DOMAIN, is_ssl(), false ); // phpcs:ignore Jetpack.Functions.SetCookie -- Fine to have accessible.
315 }
316
317 return $instance;
318 }
319
320 /**
321 * Check if the value is allowed and not empty.
322 *
323 * @param string $value Value to check.
324 * @param array $allowed Array of allowed values.
325 *
326 * @return string $value if pass the check or first value from allowed values.
327 */
328 public function filter_value( $value, $allowed = array() ) {
329 $allowed = (array) $allowed;
330 if ( empty( $value ) || ( ! empty( $allowed ) && ! in_array( $value, $allowed, true ) ) ) {
331 $value = $allowed[0];
332 }
333 return $value;
334 }
335 }
336
337 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move these functions to some other file.
338
339 /**
340 * Register Jetpack_EU_Cookie_Law_Widget widget.
341 */
342 function jetpack_register_eu_cookie_law_widget() {
343 register_widget( 'Jetpack_EU_Cookie_Law_Widget' );
344 }
345
346 add_action( 'widgets_init', 'jetpack_register_eu_cookie_law_widget' );
347 }
348