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