PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-a.5
Jetpack – WP Security, Backup, Speed, & Growth v16.1-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 / jetpack_vendor / automattic / jetpack-assets / src / class-script-data.php
jetpack / jetpack_vendor / automattic / jetpack-assets / src Last commit date
js 2 months ago class-assets.php 8 months ago class-script-data.php 1 month ago class-semver.php 2 years ago class-shared-stores-assets.php 2 months ago
class-script-data.php
240 lines
1 <?php
2 /**
3 * Jetpack script data.
4 *
5 * @package automattic/jetpack-assets
6 */
7
8 namespace Automattic\Jetpack\Assets;
9
10 use Automattic\Jetpack\Assets;
11 use Automattic\Jetpack\Status;
12 use Automattic\Jetpack\Status\Host;
13
14 /**
15 * Class script data
16 */
17 class Script_Data {
18
19 const SCRIPT_HANDLE = 'jetpack-script-data';
20
21 /**
22 * Whether the script data has been rendered.
23 *
24 * @var bool
25 */
26 private static $did_render_script_data = false;
27
28 /**
29 * Configure.
30 */
31 public static function configure() {
32 /**
33 * Ensure that assets are registered on wp_loaded,
34 * which is fired before *_enqueue_scripts actions.
35 * It means that when the dependent scripts are registered,
36 * the scripts here are already registered.
37 */
38 add_action( 'wp_loaded', array( self::class, 'register_assets' ) );
39
40 /**
41 * Notes:
42 * 1. wp_print_scripts action is fired on both admin and public pages.
43 * On admin pages, it's fired before admin_enqueue_scripts action,
44 * which can be a problem if the consumer package uses admin_enqueue_scripts
45 * to hook into the script data. Thus, we prefer to use admin_print_scripts on admin pages.
46 * 2. We want to render the script data on print, instead of init or enqueue actions,
47 * so that the hook callbacks have enough time and information
48 * to decide whether to update the script data or not.
49 */
50 $hook = is_admin() ? 'admin_print_scripts' : 'wp_print_scripts';
51 add_action( $hook, array( self::class, 'render_script_data' ), 1 );
52 add_action( 'enqueue_block_editor_assets', array( self::class, 'render_script_data' ), 1 );
53 }
54
55 /**
56 * Register assets.
57 *
58 * @access private
59 */
60 public static function register_assets() {
61
62 Assets::register_script(
63 self::SCRIPT_HANDLE,
64 '../build/jetpack-script-data.js',
65 __FILE__,
66 array(
67 'in_footer' => true,
68 'textdomain' => 'jetpack-assets',
69 )
70 );
71 }
72
73 /**
74 * Render the script data using an inline script.
75 *
76 * @access private
77 *
78 * @return void
79 */
80 public static function render_script_data() {
81 // In case of 'enqueue_block_editor_assets' action, this can be called multiple times.
82 if ( self::$did_render_script_data ) {
83 return;
84 }
85
86 self::$did_render_script_data = true;
87
88 $script_data = is_admin() || self::is_authenticated_rest_request()
89 ? self::get_admin_script_data()
90 : self::get_public_script_data();
91
92 if ( ! empty( $script_data ) ) {
93 $script_data = wp_json_encode(
94 $script_data,
95 JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE
96 );
97
98 wp_add_inline_script(
99 self::SCRIPT_HANDLE,
100 sprintf( 'window.JetpackScriptData = %s;', $script_data ),
101 'before'
102 );
103 Assets::enqueue_script( self::SCRIPT_HANDLE );
104 }
105 }
106
107 /**
108 * Whether the current request is an authenticated REST API request.
109 *
110 * @return bool
111 */
112 protected static function is_authenticated_rest_request() {
113 return wp_is_serving_rest_request() && current_user_can( 'read' );
114 }
115
116 /**
117 * Get the admin script data.
118 *
119 * @return array
120 */
121 protected static function get_admin_script_data() {
122
123 global $wp_version;
124
125 $data = array(
126 'site' => array(
127 'admin_url' => esc_url_raw( admin_url() ),
128 'date_format' => get_option( 'date_format' ),
129 'icon' => self::get_site_icon(),
130 'is_multisite' => is_multisite(),
131 'host' => ( new Host() )->get_known_host_guess(),
132 'is_wpcom_platform' => ( new Host() )->is_wpcom_platform(),
133 'plan' => array(
134 // The properties here should be updated by the consumer package/plugin.
135 // It includes properties like 'product_slug', 'features', etc.
136 'product_slug' => '',
137 ),
138 'rest_nonce' => wp_create_nonce( 'wp_rest' ),
139 'rest_root' => esc_url_raw( rest_url() ),
140 'suffix' => ( new Status() )->get_site_suffix(),
141 'title' => self::get_site_title(),
142 'wp_version' => $wp_version,
143 'wpcom' => array(
144 // This should contain the connected site details like blog_id, is_atomic etc.
145 'blog_id' => 0,
146 ),
147 ),
148 'user' => array(
149 'current_user' => self::get_current_user_data(),
150 ),
151 );
152
153 /**
154 * Filter the admin script data.
155 *
156 * When using this filter, ensure that the data is added only if it is used by some script.
157 * This filter may be called on almost every admin page load. So, one should check if the data is needed/used on that page.
158 * For example, the social (publicize) data is used only on Social admin page, Jetpack settings page and the post editor.
159 * So, the social data should be added only on those pages.
160 *
161 * @since 2.3.0
162 *
163 * @param array $data The script data.
164 */
165 return apply_filters( 'jetpack_admin_js_script_data', $data );
166 }
167
168 /**
169 * Get the public script data.
170 *
171 * @return array
172 */
173 protected static function get_public_script_data() {
174
175 $data = array();
176
177 /**
178 * Filter the public script data.
179 *
180 * See the docs for `jetpack_admin_js_script_data` filter for more information.
181 *
182 * @since 2.3.0
183 *
184 * @param array $data The script data.
185 */
186 return apply_filters( 'jetpack_public_js_script_data', $data );
187 }
188
189 /**
190 * Get the site title.
191 *
192 * @return string
193 */
194 protected static function get_site_title() {
195 $title = get_bloginfo( 'name' );
196
197 return $title ? $title : esc_url_raw( ( get_site_url() ) );
198 }
199
200 /**
201 * Get the site icon.
202 *
203 * @return string
204 */
205 protected static function get_site_icon() {
206 if ( ! has_site_icon() ) {
207 return '';
208 }
209
210 /**
211 * Filters the site icon using Photon.
212 *
213 * @see https://developer.wordpress.com/docs/photon/
214 *
215 * @param string $url The URL of the site icon.
216 * @param array|string $args An array of arguments, e.g. array( 'w' => '300', 'resize' => array( 123, 456 ) ), or in string form (w=123&h=456).
217 */
218 return apply_filters( 'jetpack_photon_url', get_site_icon_url(), array( 'w' => 64 ) );
219 }
220
221 /**
222 * Get the current user data.
223 *
224 * @return array
225 */
226 protected static function get_current_user_data() {
227 $current_user = wp_get_current_user();
228
229 return array(
230 'display_name' => $current_user->display_name,
231 'id' => $current_user->ID,
232 'capabilities' => array(
233 'edit_others_posts' => current_user_can( 'edit_others_posts' ),
234 'manage_options' => current_user_can( 'manage_options' ),
235 'manage_modules' => current_user_can( 'jetpack_manage_modules' ),
236 ),
237 );
238 }
239 }
240