PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.6.2
Jetpack – WP Security, Backup, Speed, & Growth v13.6.2
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 8 years ago contact-info 5 years ago eu-cookie-law 2 years ago facebook-likebox 11 years ago flickr 2 years ago gallery 2 years ago goodreads 2 years ago google-translate 4 years ago image-widget 8 years ago instagram 6 years ago internet-defense-league 3 years ago migrate-to-core 3 years ago milestone 2 years ago my-community 8 years ago simple-payments 2 years ago social-icons 4 years ago social-media-icons 5 years ago top-posts 8 years ago wordpress-post-widget 2 years ago authors.php 3 years ago blog-stats.php 2 years ago class-jetpack-eu-cookie-law-widget.php 2 years ago class-jetpack-instagram-widget.php 2 years ago contact-info.php 2 years ago customizer-controls.css 9 years ago customizer-utils.js 6 years ago facebook-likebox.php 2 years ago flickr.php 2 years ago gallery.php 2 years ago goodreads.php 2 years ago google-translate.php 2 years ago gravatar-profile.css 10 years ago gravatar-profile.php 2 years ago image-widget.php 3 years ago internet-defense-league.php 3 years ago mailchimp.php 3 years ago milestone.php 5 years ago my-community.php 2 years ago rsslinks-widget.php 3 years ago simple-payments.php 2 years ago social-icons.php 2 years ago social-media-icons.php 2 years ago top-posts.php 2 years ago twitter-timeline-admin.js 6 years ago twitter-timeline.php 3 years ago upcoming-events.php 2 years ago wordpress-post-widget.php 4 years ago
class-jetpack-eu-cookie-law-widget.php
345 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;
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 if ( is_active_widget( false, false, $this->id_base ) || is_customize_preview() ) {
98 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_frontend_scripts' ) );
99 }
100 }
101
102 /**
103 * Enqueue scripts and styles.
104 */
105 public function enqueue_frontend_scripts() {
106 wp_enqueue_style( 'eu-cookie-law-style', plugins_url( 'eu-cookie-law/style.css', __FILE__ ), array(), JETPACK__VERSION );
107
108 if ( ! class_exists( 'Jetpack_AMP_Support' ) || ! Jetpack_AMP_Support::is_amp_request() ) {
109 wp_enqueue_script(
110 'eu-cookie-law-script',
111 Assets::get_file_url_for_environment(
112 '_inc/build/widgets/eu-cookie-law/eu-cookie-law.min.js',
113 'modules/widgets/eu-cookie-law/eu-cookie-law.js'
114 ),
115 array(),
116 '20180522',
117 true
118 );
119 }
120 }
121
122 /**
123 * Return an associative array of default values.
124 *
125 * These values are used in new widgets.
126 *
127 * @return array Default values for the widget options.
128 */
129 public function defaults() {
130 return array(
131 'hide' => $this->hide_options[0],
132 'hide-timeout' => 30,
133 'consent-expiration' => 180,
134 'text' => $this->text_options[0],
135 'customtext' => '',
136 'color-scheme' => $this->color_scheme_options[0],
137 'policy-url' => get_option( 'wp_page_for_privacy_policy' ) ? $this->policy_url_options[1] : $this->policy_url_options[0],
138 'default-policy-url' => 'https://automattic.com/cookies/',
139 'custom-policy-url' => get_option( 'wp_page_for_privacy_policy' ) ? get_permalink( (int) get_option( 'wp_page_for_privacy_policy' ) ) : '',
140 'position' => $this->position_options[0],
141 'policy-link-text' => esc_html__( 'Cookie Policy', 'jetpack' ),
142 'button' => esc_html__( 'Close and accept', 'jetpack' ),
143 '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' ),
144 );
145 }
146
147 /**
148 * Front-end display of the widget.
149 *
150 * @html-template-var array $instance
151 * @html-template-var array<string,string> $classes
152 *
153 * @param array $args Widget arguments.
154 * @param array $instance Saved values from database.
155 */
156 public function widget( $args, $instance ) {
157 /**
158 * Filters the display of the EU Cookie Law widget.
159 *
160 * @since 6.1.1
161 *
162 * @param bool true Should the EU Cookie Law widget be disabled. Default to false.
163 */
164 if ( apply_filters( 'jetpack_disable_eu_cookie_law_widget', false ) ) {
165 return;
166 }
167
168 $instance = wp_parse_args( $instance, $this->defaults() );
169
170 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
171 require __DIR__ . '/eu-cookie-law/widget-amp.php';
172 return;
173 }
174
175 $classes = array();
176 $classes['hide'] = 'hide-on-' . esc_attr( $instance['hide'] );
177 if ( 'negative' === $instance['color-scheme'] ) {
178 $classes['negative'] = 'negative';
179 }
180
181 if ( 'top' === $instance['position'] ) {
182 $classes['top'] = 'top';
183 }
184
185 if ( Jetpack::is_module_active( 'wordads' ) ) {
186 $classes['ads'] = 'ads-active';
187 $classes['hide'] = 'hide-on-button';
188 }
189
190 /**
191 * Check if widget is loaded in widgets.php.
192 *
193 * @return string widget Static version of the widget for better preview.
194 */
195 global $pagenow;
196 if ( 'widgets.php' === $pagenow ) {
197 // To prevent the widget from being added as a pop-up
198 // we do not echo the before and after $args. Instead we wrap
199 // it in a dummy `div` and return before the `widget_view` is
200 // added to stats.
201 echo '<div id="eu-cookie-law" style="padding: 0;margin: 5px">';
202 require_once __DIR__ . '/eu-cookie-law/widget.php';
203 echo '</div>';
204 return;
205 }
206
207 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
208 require_once __DIR__ . '/eu-cookie-law/widget.php';
209 echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
210
211 /** This action is already documented in modules/widgets/gravatar-profile.php */
212 do_action( 'jetpack_stats_extra', 'widget_view', 'eu_cookie_law' );
213 }
214
215 /**
216 * Back-end widget form.
217 *
218 * @html-template-var array $instance
219 *
220 * @param array $instance Previously saved values from database.
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 setcookie( self::$cookie_name, '', time() - 86400, '/', COOKIE_DOMAIN, is_ssl(), false ); // phpcs:ignore Jetpack.Functions.SetCookie -- Fine to have accessible.
313
314 return $instance;
315 }
316
317 /**
318 * Check if the value is allowed and not empty.
319 *
320 * @param string $value Value to check.
321 * @param array $allowed Array of allowed values.
322 *
323 * @return string $value if pass the check or first value from allowed values.
324 */
325 public function filter_value( $value, $allowed = array() ) {
326 $allowed = (array) $allowed;
327 if ( empty( $value ) || ( ! empty( $allowed ) && ! in_array( $value, $allowed, true ) ) ) {
328 $value = $allowed[0];
329 }
330 return $value;
331 }
332 }
333
334 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move these functions to some other file.
335
336 /**
337 * Register Jetpack_EU_Cookie_Law_Widget widget.
338 */
339 function jetpack_register_eu_cookie_law_widget() {
340 register_widget( 'Jetpack_EU_Cookie_Law_Widget' );
341 }
342
343 add_action( 'widgets_init', 'jetpack_register_eu_cookie_law_widget' );
344 }
345