PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.1.1
Jetpack – WP Security, Backup, Speed, & Growth v14.1.1
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 2 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 1 year ago blog-stats.php 2 years ago class-jetpack-eu-cookie-law-widget.php 1 year ago class-jetpack-instagram-widget.php 1 year 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 1 year ago gallery.php 2 years ago goodreads.php 1 year ago google-translate.php 2 years ago gravatar-profile.css 10 years ago gravatar-profile.php 2 years ago image-widget.php 1 year ago internet-defense-league.php 3 years ago mailchimp.php 3 years ago milestone.php 5 years ago my-community.php 1 year ago rsslinks-widget.php 3 years 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 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
344 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
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 */
221 public function form( $instance ) {
222 $instance = wp_parse_args( $instance, $this->defaults() );
223 if ( Jetpack::is_module_active( 'wordads' ) ) {
224 $instance['hide'] = 'button';
225 }
226
227 wp_enqueue_script(
228 'eu-cookie-law-widget-admin',
229 Assets::get_file_url_for_environment(
230 '_inc/build/widgets/eu-cookie-law/eu-cookie-law-admin.min.js',
231 'modules/widgets/eu-cookie-law/eu-cookie-law-admin.js'
232 ),
233 array( 'jquery' ),
234 20180417,
235 false
236 );
237
238 require __DIR__ . '/eu-cookie-law/form.php';
239 }
240
241 /**
242 * Sanitize widget form values as they are saved.
243 *
244 * @param array $new_instance Values just sent to be saved.
245 * @param array $old_instance Previously saved values from database.
246 * @return array Updated safe values to be saved.
247 */
248 public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
249 $instance = array();
250 $defaults = $this->defaults();
251
252 $instance['hide'] = $this->filter_value( isset( $new_instance['hide'] ) ? $new_instance['hide'] : '', $this->hide_options );
253 $instance['text'] = $this->filter_value( isset( $new_instance['text'] ) ? $new_instance['text'] : '', $this->text_options );
254 $instance['color-scheme'] = $this->filter_value( isset( $new_instance['color-scheme'] ) ? $new_instance['color-scheme'] : '', $this->color_scheme_options );
255 $instance['policy-url'] = $this->filter_value( isset( $new_instance['policy-url'] ) ? $new_instance['policy-url'] : '', $this->policy_url_options );
256 $instance['position'] = $this->filter_value( isset( $new_instance['position'] ) ? $new_instance['position'] : '', $this->position_options );
257
258 if ( isset( $new_instance['hide-timeout'] ) ) {
259 // Time can be a value between 3 and 1000 seconds.
260 $instance['hide-timeout'] = min( 1000, max( 3, (int) $new_instance['hide-timeout'] ) );
261 }
262
263 if ( isset( $new_instance['consent-expiration'] ) ) {
264 // Time can be a value between 1 and 365 days.
265 $instance['consent-expiration'] = min( 365, max( 1, (int) $new_instance['consent-expiration'] ) );
266 }
267
268 if ( isset( $new_instance['customtext'] ) ) {
269 $instance['customtext'] = mb_substr( wp_kses( $new_instance['customtext'], array() ), 0, 4096 );
270 } else {
271 $instance['text'] = $this->text_options[0];
272 }
273
274 if ( isset( $new_instance['policy-url'] ) ) {
275 $instance['policy-url'] = 'custom' === $new_instance['policy-url']
276 ? 'custom'
277 : 'default';
278 } else {
279 $instance['policy-url'] = $this->policy_url_options[0];
280 }
281
282 if ( 'custom' === $instance['policy-url'] && isset( $new_instance['custom-policy-url'] ) ) {
283 $instance['custom-policy-url'] = esc_url( $new_instance['custom-policy-url'], array( 'http', 'https' ) );
284
285 if ( strlen( $instance['custom-policy-url'] ) < 10 ) {
286 unset( $instance['custom-policy-url'] );
287 global $wp_customize;
288 if ( ! isset( $wp_customize ) ) {
289 $instance['policy-url'] = $this->policy_url_options[0];
290 }
291 }
292 }
293
294 if ( isset( $new_instance['policy-link-text'] ) ) {
295 $instance['policy-link-text'] = trim( mb_substr( wp_kses( $new_instance['policy-link-text'], array() ), 0, 100 ) );
296 }
297
298 if ( empty( $instance['policy-link-text'] ) || $instance['policy-link-text'] === $defaults['policy-link-text'] ) {
299 unset( $instance['policy-link-text'] );
300 }
301
302 if ( isset( $new_instance['button'] ) ) {
303 $instance['button'] = trim( mb_substr( wp_kses( $new_instance['button'], array() ), 0, 100 ) );
304 }
305
306 if ( empty( $instance['button'] ) || $instance['button'] === $defaults['button'] ) {
307 unset( $instance['button'] );
308 }
309
310 // Show the banner again if a setting has been changed.
311 setcookie( self::$cookie_name, '', time() - 86400, '/', COOKIE_DOMAIN, is_ssl(), false ); // phpcs:ignore Jetpack.Functions.SetCookie -- Fine to have accessible.
312
313 return $instance;
314 }
315
316 /**
317 * Check if the value is allowed and not empty.
318 *
319 * @param string $value Value to check.
320 * @param array $allowed Array of allowed values.
321 *
322 * @return string $value if pass the check or first value from allowed values.
323 */
324 public function filter_value( $value, $allowed = array() ) {
325 $allowed = (array) $allowed;
326 if ( empty( $value ) || ( ! empty( $allowed ) && ! in_array( $value, $allowed, true ) ) ) {
327 $value = $allowed[0];
328 }
329 return $value;
330 }
331 }
332
333 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move these functions to some other file.
334
335 /**
336 * Register Jetpack_EU_Cookie_Law_Widget widget.
337 */
338 function jetpack_register_eu_cookie_law_widget() {
339 register_widget( 'Jetpack_EU_Cookie_Law_Widget' );
340 }
341
342 add_action( 'widgets_init', 'jetpack_register_eu_cookie_law_widget' );
343 }
344