PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.2.2
Jetpack – WP Security, Backup, Speed, & Growth v14.2.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 / extensions / blocks / cookie-consent / cookie-consent.php
jetpack / extensions / blocks / cookie-consent Last commit date
cookie-consent.php 2 years ago
cookie-consent.php
171 lines
1 <?php
2 /**
3 * Cookie-consent Block.
4 *
5 * @since 12.0
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\CookieConsent;
11
12 use Automattic\Jetpack\Blocks;
13 use Jetpack_Gutenberg;
14
15 const COOKIE_NAME = 'eucookielaw';
16
17 /**
18 * Should the block be registered?
19 * In wp-admin, we only want to show the block in the site editor.
20 *
21 * @since 12.0
22 *
23 * @return bool
24 */
25 function should_register_block() {
26 global $pagenow;
27
28 // Always register the widget if we're on the front end
29 if ( ! is_admin() ) {
30 return true;
31 }
32
33 if ( is_admin() && $pagenow === 'site-editor.php' ) {
34 return true;
35 }
36 }
37
38 /**
39 * Registers the block for use in Gutenberg
40 * This is done via an action so that we can disable
41 * registration if we need to.
42 */
43 function register_block() {
44 if ( ! should_register_block() ) {
45 return;
46 }
47
48 Blocks::jetpack_register_block(
49 __DIR__,
50 array( 'render_callback' => __NAMESPACE__ . '\load_assets' ),
51 array(
52 'attributes' => array(
53 'render_from_template' => array(
54 'default' => false,
55 'type' => 'boolean',
56 ),
57 ),
58 )
59 );
60 }
61 add_action( 'init', __NAMESPACE__ . '\register_block' );
62
63 /**
64 * Cookie-consent block registration/dependency declaration.
65 *
66 * @param array $attr Array containing the Cookie-consent block attributes.
67 * @param string $content String containing the Cookie-consent block content.
68 *
69 * @return string
70 */
71 function load_assets( $attr, $content ) {
72 // We want to bust the cache even if the cookie isn't set.
73 // This is needed for when the cookie expires,
74 // and we should send fresh HTML with the cookie block in it.
75 notify_batcache_that_content_changed();
76
77 if (
78 /**
79 * Filters the display of the Cookie-consent Block e.g by GDPR CMP banner on WordAds sites.
80 *
81 * @since 13.2
82 *
83 * @param bool $disable_cookie_consent_block Whether to disable the Cookie-consent Block.
84 */
85 apply_filters( 'jetpack_disable_cookie_consent_block', false )
86 ) {
87 return '';
88 }
89
90 // If the user has already accepted the cookie consent, don't show the block.
91 if ( isset( $_COOKIE[ COOKIE_NAME ] ) ) {
92 return '';
93 }
94
95 $option = get_option( 'cookie_consent_template' );
96 if ( ! empty( $option ) && empty( $attr['render_from_template'] ) ) {
97 return '';
98 }
99
100 /*
101 * Enqueue necessary scripts and styles.
102 */
103 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
104
105 return sprintf(
106 '<div class="%1$s">%2$s</div>',
107 esc_attr( Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attr ) ),
108 $content
109 );
110 }
111
112 /**
113 * Batcache busting: since the cookie consent is part of the cached response HTML, it can still render even when the cookie is set (when it shouldn't).
114 * Because, by default, the cache doesn't vary around the cookie's value. This makes the cookie value part of the cache key.
115 *
116 * See: https://github.com/Automattic/batcache/blob/d4f617b335e9772a61b6d03ad3498b55c8137592/advanced-cache.php#L29
117 */
118 function notify_batcache_that_content_changed() {
119 if ( function_exists( 'vary_cache_on_function' ) ) {
120 vary_cache_on_function( 'return isset( $_COOKIE[ "' . COOKIE_NAME . '" ] );' );
121 }
122 }
123
124 /**
125 * Render the cookie consent template.
126 *
127 * @since 12.4
128 */
129 function render_cookie_consent_template() {
130
131 if ( is_admin() ) {
132 return;
133 }
134
135 // Check whether block theme functions exist.
136 if ( ! function_exists( 'parse_blocks' ) ) {
137 return;
138 }
139
140 $template = get_option( 'cookie_consent_template' );
141
142 if ( empty( $template ) ) {
143 return;
144 }
145
146 $parsed = parse_blocks( $template );
147 if ( ! empty( $parsed[0] ) ) {
148 $parsed[0]['attrs']['render_from_template'] = true;
149 echo render_block( $parsed[0] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
150 }
151 }
152 add_action( 'wp_footer', __NAMESPACE__ . '\render_cookie_consent_template' );
153
154 /**
155 * Register cookie_consent_template setting
156 *
157 * @since 12.4
158 */
159 function cookie_consent_register_settings() {
160 register_setting(
161 'general',
162 'cookie_consent_template',
163 array(
164 'type' => 'string',
165 'show_in_rest' => true,
166 )
167 );
168 }
169
170 add_action( 'rest_api_init', __NAMESPACE__ . '\cookie_consent_register_settings' );
171