PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.2.3
Jetpack – WP Security, Backup, Speed, & Growth v12.2.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 8 years ago contact-info 5 years ago eu-cookie-law 4 years ago facebook-likebox 11 years ago flickr 4 years ago gallery 4 years ago goodreads 5 years ago google-translate 4 years ago image-widget 8 years ago instagram 6 years ago migrate-to-core 3 years ago milestone 3 years ago my-community 8 years ago simple-payments 4 years ago social-icons 4 years ago social-media-icons 5 years ago top-posts 8 years ago wordpress-post-widget 3 years ago authors.php 3 years ago blog-stats.php 3 years ago class-jetpack-eu-cookie-law-widget.php 3 years ago class-jetpack-instagram-widget.php 3 years ago contact-info.php 3 years ago customizer-controls.css 9 years ago customizer-utils.js 6 years ago facebook-likebox.php 3 years ago flickr.php 3 years ago gallery.php 3 years ago goodreads.php 3 years ago google-translate.php 3 years ago gravatar-profile.css 10 years ago gravatar-profile.php 3 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 3 years ago rsslinks-widget.php 3 years ago simple-payments.php 3 years ago social-icons.php 3 years ago social-media-icons.php 3 years ago top-posts.php 3 years ago twitter-timeline-admin.js 6 years ago twitter-timeline.php 3 years ago upcoming-events.php 3 years ago wordpress-post-widget.php 4 years ago
class-jetpack-eu-cookie-law-widget.php
340 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 * @param array $args Widget arguments.
151 * @param array $instance Saved values from database.
152 */
153 public function widget( $args, $instance ) {
154 /**
155 * Filters the display of the EU Cookie Law widget.
156 *
157 * @since 6.1.1
158 *
159 * @param bool true Should the EU Cookie Law widget be disabled. Default to false.
160 */
161 if ( apply_filters( 'jetpack_disable_eu_cookie_law_widget', false ) ) {
162 return;
163 }
164
165 $instance = wp_parse_args( $instance, $this->defaults() );
166
167 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
168 require __DIR__ . '/eu-cookie-law/widget-amp.php';
169 return;
170 }
171
172 $classes = array();
173 $classes['hide'] = 'hide-on-' . esc_attr( $instance['hide'] );
174 if ( 'negative' === $instance['color-scheme'] ) {
175 $classes['negative'] = 'negative';
176 }
177
178 if ( 'top' === $instance['position'] ) {
179 $classes['top'] = 'top';
180 }
181
182 if ( Jetpack::is_module_active( 'wordads' ) ) {
183 $classes['ads'] = 'ads-active';
184 $classes['hide'] = 'hide-on-button';
185 }
186
187 /**
188 * Check if widget is loaded in widgets.php.
189 *
190 * @return string widget Static version of the widget for better preview.
191 */
192 global $pagenow;
193 if ( 'widgets.php' === $pagenow ) {
194 // To prevent the widget from being added as a pop-up
195 // we do not echo the before and after $args. Instead we wrap
196 // it in a dummy `div` and return before the `widget_view` is
197 // added to stats.
198 echo '<div id="eu-cookie-law" style="padding: 0;margin: 5px">';
199 require_once __DIR__ . '/eu-cookie-law/widget.php';
200 echo '</div>';
201 return;
202 }
203
204 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
205 require_once __DIR__ . '/eu-cookie-law/widget.php';
206 echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
207
208 /** This action is already documented in modules/widgets/gravatar-profile.php */
209 do_action( 'jetpack_stats_extra', 'widget_view', 'eu_cookie_law' );
210 }
211
212 /**
213 * Back-end widget form.
214 *
215 * @param array $instance Previously saved values from database.
216 */
217 public function form( $instance ) {
218 $instance = wp_parse_args( $instance, $this->defaults() );
219 if ( Jetpack::is_module_active( 'wordads' ) ) {
220 $instance['hide'] = 'button';
221 }
222
223 wp_enqueue_script(
224 'eu-cookie-law-widget-admin',
225 Assets::get_file_url_for_environment(
226 '_inc/build/widgets/eu-cookie-law/eu-cookie-law-admin.min.js',
227 'modules/widgets/eu-cookie-law/eu-cookie-law-admin.js'
228 ),
229 array( 'jquery' ),
230 20180417,
231 false
232 );
233
234 require __DIR__ . '/eu-cookie-law/form.php';
235 }
236
237 /**
238 * Sanitize widget form values as they are saved.
239 *
240 * @param array $new_instance Values just sent to be saved.
241 * @param array $old_instance Previously saved values from database.
242 * @return array Updated safe values to be saved.
243 */
244 public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
245 $instance = array();
246 $defaults = $this->defaults();
247
248 $instance['hide'] = $this->filter_value( isset( $new_instance['hide'] ) ? $new_instance['hide'] : '', $this->hide_options );
249 $instance['text'] = $this->filter_value( isset( $new_instance['text'] ) ? $new_instance['text'] : '', $this->text_options );
250 $instance['color-scheme'] = $this->filter_value( isset( $new_instance['color-scheme'] ) ? $new_instance['color-scheme'] : '', $this->color_scheme_options );
251 $instance['policy-url'] = $this->filter_value( isset( $new_instance['policy-url'] ) ? $new_instance['policy-url'] : '', $this->policy_url_options );
252 $instance['position'] = $this->filter_value( isset( $new_instance['position'] ) ? $new_instance['position'] : '', $this->position_options );
253
254 if ( isset( $new_instance['hide-timeout'] ) ) {
255 // Time can be a value between 3 and 1000 seconds.
256 $instance['hide-timeout'] = min( 1000, max( 3, (int) $new_instance['hide-timeout'] ) );
257 }
258
259 if ( isset( $new_instance['consent-expiration'] ) ) {
260 // Time can be a value between 1 and 365 days.
261 $instance['consent-expiration'] = min( 365, max( 1, (int) $new_instance['consent-expiration'] ) );
262 }
263
264 if ( isset( $new_instance['customtext'] ) ) {
265 $instance['customtext'] = mb_substr( wp_kses( $new_instance['customtext'], array() ), 0, 4096 );
266 } else {
267 $instance['text'] = $this->text_options[0];
268 }
269
270 if ( isset( $new_instance['policy-url'] ) ) {
271 $instance['policy-url'] = 'custom' === $new_instance['policy-url']
272 ? 'custom'
273 : 'default';
274 } else {
275 $instance['policy-url'] = $this->policy_url_options[0];
276 }
277
278 if ( 'custom' === $instance['policy-url'] && isset( $new_instance['custom-policy-url'] ) ) {
279 $instance['custom-policy-url'] = esc_url( $new_instance['custom-policy-url'], array( 'http', 'https' ) );
280
281 if ( strlen( $instance['custom-policy-url'] ) < 10 ) {
282 unset( $instance['custom-policy-url'] );
283 global $wp_customize;
284 if ( ! isset( $wp_customize ) ) {
285 $instance['policy-url'] = $this->policy_url_options[0];
286 }
287 }
288 }
289
290 if ( isset( $new_instance['policy-link-text'] ) ) {
291 $instance['policy-link-text'] = trim( mb_substr( wp_kses( $new_instance['policy-link-text'], array() ), 0, 100 ) );
292 }
293
294 if ( empty( $instance['policy-link-text'] ) || $instance['policy-link-text'] === $defaults['policy-link-text'] ) {
295 unset( $instance['policy-link-text'] );
296 }
297
298 if ( isset( $new_instance['button'] ) ) {
299 $instance['button'] = trim( mb_substr( wp_kses( $new_instance['button'], array() ), 0, 100 ) );
300 }
301
302 if ( empty( $instance['button'] ) || $instance['button'] === $defaults['button'] ) {
303 unset( $instance['button'] );
304 }
305
306 // Show the banner again if a setting has been changed.
307 setcookie( self::$cookie_name, '', time() - 86400, '/', COOKIE_DOMAIN, is_ssl(), false ); // phpcs:ignore Jetpack.Functions.SetCookie -- Fine to have accessible.
308
309 return $instance;
310 }
311
312 /**
313 * Check if the value is allowed and not empty.
314 *
315 * @param string $value Value to check.
316 * @param array $allowed Array of allowed values.
317 *
318 * @return string $value if pass the check or first value from allowed values.
319 */
320 public function filter_value( $value, $allowed = array() ) {
321 $allowed = (array) $allowed;
322 if ( empty( $value ) || ( ! empty( $allowed ) && ! in_array( $value, $allowed, true ) ) ) {
323 $value = $allowed[0];
324 }
325 return $value;
326 }
327 }
328
329 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move these functions to some other file.
330
331 /**
332 * Register Jetpack_EU_Cookie_Law_Widget widget.
333 */
334 function jetpack_register_eu_cookie_law_widget() {
335 register_widget( 'Jetpack_EU_Cookie_Law_Widget' );
336 }
337
338 add_action( 'widgets_init', 'jetpack_register_eu_cookie_law_widget' );
339 }
340