PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.0.3
Jetpack – WP Security, Backup, Speed, & Growth v12.0.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 / masterbar / admin-menu / class-atomic-admin-menu.php
jetpack / modules / masterbar / admin-menu Last commit date
admin-menu-rtl.css 3 years ago admin-menu-rtl.min.css 3 years ago admin-menu.css 3 years ago admin-menu.js 3 years ago admin-menu.min.css 3 years ago class-admin-menu.php 3 years ago class-atomic-admin-menu.php 3 years ago class-base-admin-menu.php 3 years ago class-dashboard-switcher-tracking.php 3 years ago class-domain-only-admin-menu.php 3 years ago class-jetpack-admin-menu.php 3 years ago class-p2-admin-menu.php 4 years ago class-wpcom-admin-menu.php 3 years ago class-wpcom-email-subscription-checker.php 3 years ago dashicon-set.php 4 years ago globe-icon.svg 3 years ago load.php 3 years ago menu-mappings.php 3 years ago
class-atomic-admin-menu.php
450 lines
1 <?php
2 /**
3 * Atomic Admin Menu file.
4 *
5 * @package automattic/jetpack
6 */
7
8 namespace Automattic\Jetpack\Dashboard_Customizations;
9
10 use Automattic\Jetpack\Blaze;
11 use Automattic\Jetpack\Connection\Client;
12 use Automattic\Jetpack\Status;
13 use Jetpack_Plan;
14
15 require_once __DIR__ . '/class-admin-menu.php';
16
17 /**
18 * Class Atomic_Admin_Menu.
19 */
20 class Atomic_Admin_Menu extends Admin_Menu {
21
22 /**
23 * Atomic_Admin_Menu constructor.
24 */
25 protected function __construct() {
26 parent::__construct();
27
28 add_action( 'wp_enqueue_scripts', array( $this, 'dequeue_scripts' ), 20 );
29 add_action( 'admin_enqueue_scripts', array( $this, 'dequeue_scripts' ), 20 );
30 add_action( 'wp_ajax_sidebar_state', array( $this, 'ajax_sidebar_state' ) );
31 add_action( 'wp_ajax_jitm_dismiss', array( $this, 'wp_ajax_jitm_dismiss' ) );
32 add_action( 'wp_ajax_upsell_nudge_jitm', array( $this, 'wp_ajax_upsell_nudge_jitm' ) );
33 add_filter( 'block_editor_settings_all', array( $this, 'site_editor_dashboard_link' ) );
34
35 if ( ! $this->is_api_request ) {
36 add_filter( 'submenu_file', array( $this, 'override_the_theme_installer' ), 10, 2 );
37 }
38
39 add_action(
40 'admin_menu',
41 function () {
42 remove_action( 'admin_menu', 'gutenberg_menu', 9 );
43 },
44 0
45 );
46 }
47
48 /**
49 * Dequeues unnecessary scripts.
50 */
51 public function dequeue_scripts() {
52 wp_dequeue_script( 'a8c_wpcom_masterbar_overrides' ); // Initially loaded in modules/masterbar/masterbar/class-masterbar.php.
53 }
54
55 /**
56 * Determines whether the current locale is right-to-left (RTL).
57 *
58 * Performs the check against the current locale set on the WordPress.com's account settings.
59 * See `Masterbar::__construct` in `modules/masterbar/masterbar/class-masterbar.php`.
60 */
61 public function is_rtl() {
62 return get_user_option( 'jetpack_wpcom_is_rtl' );
63 }
64
65 /**
66 * Create the desired menu output.
67 */
68 public function reregister_menu_items() {
69 parent::reregister_menu_items();
70
71 $this->add_my_home_menu();
72
73 if ( ! get_option( 'wpcom_is_staging_site' ) ) {
74 $this->add_inbox_menu();
75 }
76
77 // Not needed outside of wp-admin.
78 if ( ! $this->is_api_request ) {
79 $this->add_browse_sites_link();
80 $this->add_site_card_menu();
81 $this->add_new_site_link();
82 }
83
84 $this->add_woocommerce_installation_menu();
85
86 ksort( $GLOBALS['menu'] );
87 }
88
89 /**
90 * Get the preferred view for the given screen.
91 *
92 * @param string $screen Screen identifier.
93 * @param bool $fallback_global_preference (Optional) Whether the global preference for all screens should be used
94 * as fallback if there is no specific preference for the given screen.
95 * Default: true.
96 * @return string
97 */
98 public function get_preferred_view( $screen, $fallback_global_preference = true ) {
99 // Export on Atomic sites are always managed on WP Admin.
100 if ( in_array( $screen, array( 'export.php' ), true ) ) {
101 return self::CLASSIC_VIEW;
102 }
103
104 /**
105 * When Jetpack SSO is disabled, we need to force Calypso because it might create confusion to be redirected to WP-Admin.
106 * Furthermore, because we don't display the quick switcher, users having an WP-Admin interface by default won't be able to go back to the Calyso version.
107 */
108 if ( ! \Jetpack::is_module_active( 'sso' ) ) {
109 return self::DEFAULT_VIEW;
110 }
111
112 return parent::get_preferred_view( $screen, $fallback_global_preference );
113 }
114
115 /**
116 * Adds Plugins menu.
117 */
118 public function add_plugins_menu() {
119 global $submenu;
120
121 // Calypso plugins screens link.
122 $plugins_slug = 'https://wordpress.com/plugins/' . $this->domain;
123
124 // Link to the Marketplace on sites that can't manage plugins.
125 if (
126 function_exists( 'wpcom_site_has_feature' ) &&
127 ! wpcom_site_has_feature( \WPCOM_Features::MANAGE_PLUGINS )
128 ) {
129 add_menu_page( __( 'Plugins', 'jetpack' ), __( 'Plugins', 'jetpack' ), 'manage_options', $plugins_slug, null, 'dashicons-admin-plugins', '65' );
130 return;
131 }
132
133 if ( ! isset( $submenu['plugins.php'] ) ) {
134 return;
135 }
136
137 $plugins_submenu = $submenu['plugins.php'];
138
139 // Move "Add New" plugin submenu to the top position.
140 foreach ( $plugins_submenu as $submenu_key => $submenu_keys ) {
141 if ( 'plugin-install.php' === $submenu_keys[2] ) {
142 // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
143 $submenu['plugins.php'] = array( $submenu_key => $plugins_submenu[ $submenu_key ] ) + $plugins_submenu;
144 }
145 }
146
147 $submenus_to_update = array( 'plugin-install.php' => $plugins_slug );
148
149 $this->update_submenus( 'plugins.php', $submenus_to_update );
150 }
151
152 /**
153 * Adds the site switcher link if user has more than one site.
154 */
155 public function add_browse_sites_link() {
156 $site_count = get_user_option( 'wpcom_site_count' );
157 if ( ! $site_count || $site_count < 2 ) {
158 return;
159 }
160
161 // Add the menu item.
162 add_menu_page( __( 'site-switcher', 'jetpack' ), __( 'Browse sites', 'jetpack' ), 'read', 'https://wordpress.com/sites', null, 'dashicons-arrow-left-alt2', 0 );
163 add_filter( 'add_menu_classes', array( $this, 'set_browse_sites_link_class' ) );
164 }
165
166 /**
167 * Adds a custom element class for Site Switcher menu item.
168 *
169 * @param array $menu Associative array of administration menu items.
170 *
171 * @return array
172 */
173 public function set_browse_sites_link_class( array $menu ) {
174 foreach ( $menu as $key => $menu_item ) {
175 if ( 'site-switcher' !== $menu_item[3] ) {
176 continue;
177 }
178
179 $menu[ $key ][4] = add_cssclass( 'site-switcher', $menu_item[4] );
180 break;
181 }
182
183 return $menu;
184 }
185
186 /**
187 * Adds a link to the menu to create a new site.
188 */
189 public function add_new_site_link() {
190 $site_count = get_user_option( 'wpcom_site_count' );
191 if ( $site_count && $site_count > 1 ) {
192 return;
193 }
194
195 add_menu_page( __( 'Add New Site', 'jetpack' ), __( 'Add New Site', 'jetpack' ), 'read', 'https://wordpress.com/start?ref=calypso-sidebar', null, 'dashicons-plus-alt' );
196 }
197
198 /**
199 * Adds site card component.
200 */
201 public function add_site_card_menu() {
202 $default = plugins_url( 'globe-icon.svg', __FILE__ );
203 $icon = get_site_icon_url( 32, $default );
204 $blog_name = get_option( 'blogname' ) !== '' ? get_option( 'blogname' ) : $this->domain;
205 $is_coming_soon = ( new Status() )->is_coming_soon();
206
207 $badge = '';
208 if ( ( function_exists( 'site_is_private' ) && site_is_private() ) || $is_coming_soon ) {
209 $badge .= sprintf(
210 '<span class="site__badge site__badge-private">%s</span>',
211 $is_coming_soon ? esc_html__( 'Coming Soon', 'jetpack' ) : esc_html__( 'Private', 'jetpack' )
212 );
213 }
214
215 $site_card = '
216 <div class="site__info">
217 <div class="site__title">%1$s</div>
218 <div class="site__domain">%2$s</div>
219 %3$s
220 </div>';
221
222 $site_card = sprintf(
223 $site_card,
224 $blog_name,
225 $this->domain,
226 $badge
227 );
228
229 add_menu_page( 'site-card', $site_card, 'read', get_home_url(), null, $icon, 1 );
230 add_filter( 'add_menu_classes', array( $this, 'set_site_card_menu_class' ) );
231 }
232
233 /**
234 * Adds a custom element class and id for Site Card's menu item.
235 *
236 * @param array $menu Associative array of administration menu items.
237 *
238 * @return array
239 */
240 public function set_site_card_menu_class( array $menu ) {
241 foreach ( $menu as $key => $menu_item ) {
242 if ( 'site-card' !== $menu_item[3] ) {
243 continue;
244 }
245
246 $classes = ' toplevel_page_site-card';
247
248 // webclip.png is the default on WoA sites. Anything other than that means we have a custom site icon.
249 if ( has_site_icon() && 'https://s0.wp.com/i/webclip.png' !== get_site_icon_url( 512 ) ) {
250 $classes .= ' has-site-icon';
251 }
252
253 $menu[ $key ][4] = $menu_item[4] . $classes;
254 $menu[ $key ][5] = 'toplevel_page_site_card';
255 break;
256 }
257
258 return $menu;
259 }
260
261 /**
262 * Returns the first available upsell nudge.
263 *
264 * @return array
265 */
266 public function get_upsell_nudge() {
267 $jitm = \Automattic\Jetpack\JITMS\JITM::get_instance();
268 $message_path = 'calypso:sites:sidebar_notice';
269 $message = $jitm->get_messages( $message_path, wp_json_encode( array( 'message_path' => $message_path ) ), false );
270
271 if ( isset( $message[0] ) ) {
272 $message = $message[0];
273 return array(
274 'content' => $message->content->message,
275 'cta' => $message->CTA->message, // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
276 'link' => $message->CTA->link, // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
277 'tracks_impression_event_name' => $message->tracks->display->name,
278 'tracks_impression_cta_name' => $message->tracks->display->props->cta_name,
279 'tracks_click_event_name' => $message->tracks->click->name,
280 'tracks_click_cta_name' => $message->tracks->click->props->cta_name,
281 'dismissible' => $message->is_dismissible,
282 'feature_class' => $message->feature_class,
283 'id' => $message->id,
284 );
285 }
286 }
287
288 /**
289 * Adds Stats menu.
290 */
291 public function add_stats_menu() {
292 $menu_title = __( 'Stats', 'jetpack' );
293
294 if (
295 ! $this->is_api_request &&
296 \Jetpack::is_module_active( 'stats' ) &&
297 function_exists( 'stats_get_image_chart_src' )
298 ) {
299 $img_src = esc_attr(
300 stats_get_image_chart_src( 'admin-bar-hours-scale-2x', array( 'masterbar' => '' ) )
301 );
302 $alt = esc_attr__( 'Hourly views', 'jetpack' );
303
304 $menu_title .= "<img class='sidebar-unified__sparkline' src='$img_src' width='80' height='20' alt='$alt'>";
305 }
306
307 add_menu_page( __( 'Stats', 'jetpack' ), $menu_title, 'edit_posts', 'https://wordpress.com/stats/day/' . $this->domain, null, 'dashicons-chart-bar', 3 );
308 }
309
310 /**
311 * Adds Upgrades menu.
312 *
313 * @param string $plan The current WPCOM plan of the blog.
314 */
315 public function add_upgrades_menu( $plan = null ) {
316
317 if ( get_option( 'wpcom_is_staging_site' ) ) {
318 return;
319 }
320 $products = Jetpack_Plan::get();
321 if ( array_key_exists( 'product_name_short', $products ) ) {
322 $plan = $products['product_name_short'];
323 }
324 parent::add_upgrades_menu( $plan );
325
326 $last_upgrade_submenu_position = $this->get_submenu_item_count( 'paid-upgrades.php' );
327
328 add_submenu_page( 'paid-upgrades.php', __( 'Domains', 'jetpack' ), __( 'Domains', 'jetpack' ), 'manage_options', 'https://wordpress.com/domains/manage/' . $this->domain, null, $last_upgrade_submenu_position - 1 );
329
330 /**
331 * Whether to show the WordPress.com Emails submenu under the main Upgrades menu.
332 *
333 * @use add_filter( 'jetpack_show_wpcom_upgrades_email_menu', '__return_true' );
334 * @module masterbar
335 *
336 * @since 9.7.0
337 *
338 * @param bool $show_wpcom_upgrades_email_menu Load the WordPress.com Emails submenu item. Default to false.
339 */
340 if ( apply_filters( 'jetpack_show_wpcom_upgrades_email_menu', false ) ) {
341 add_submenu_page( 'paid-upgrades.php', __( 'Emails', 'jetpack' ), __( 'Emails', 'jetpack' ), 'manage_options', 'https://wordpress.com/email/' . $this->domain, null, $last_upgrade_submenu_position );
342 }
343 }
344
345 /**
346 * Adds Settings menu.
347 */
348 public function add_options_menu() {
349 parent::add_options_menu();
350
351 if ( Jetpack_Plan::supports( 'security-settings' ) ) {
352 add_submenu_page(
353 'options-general.php',
354 esc_attr__( 'Security', 'jetpack' ),
355 __( 'Security', 'jetpack' ),
356 'manage_options',
357 'https://wordpress.com/settings/security/' . $this->domain,
358 null,
359 2
360 );
361 }
362
363 add_submenu_page( 'options-general.php', esc_attr__( 'Hosting Configuration', 'jetpack' ), __( 'Hosting Configuration', 'jetpack' ), 'manage_options', 'https://wordpress.com/hosting-config/' . $this->domain, null, 11 );
364
365 // Page Optimize is active by default on all Atomic sites and registers a Settings > Performance submenu which
366 // would conflict with our own Settings > Performance that links to Calypso, so we hide it it since the Calypso
367 // performance settings already have a link to Page Optimize settings page.
368 $this->hide_submenu_page( 'options-general.php', 'page-optimize' );
369
370 if ( Blaze::should_initialize() ) {
371 add_submenu_page( 'tools.php', esc_attr__( 'Advertising', 'jetpack' ), __( 'Advertising', 'jetpack' ), 'manage_options', 'https://wordpress.com/advertising/' . $this->domain, null, 1 );
372 }
373 }
374
375 /**
376 * Adds Tools menu entries.
377 */
378 public function add_tools_menu() {
379 parent::add_tools_menu();
380
381 /**
382 * Whether to show the WordPress.com Site Logs submenu under the main Tools menu.
383 *
384 * @use add_filter( 'jetpack_show_wpcom_site_logs_menu', '__return_true' );
385 * @module masterbar
386 *
387 * @since 12.0
388 *
389 * @param bool $show_wpcom_site_logs_menu Load the WordPress.com Site Logs submenu item. Default to false.
390 */
391 if ( apply_filters( 'jetpack_show_wpcom_site_logs_menu', false ) ) {
392 add_submenu_page( 'tools.php', esc_attr__( 'Site Logs', 'jetpack' ), __( 'Site Logs', 'jetpack' ), 'manage_options', 'https://wordpress.com/site-logs/' . $this->domain, null, 7 );
393 }
394 }
395
396 /**
397 * Override the global submenu_file for theme-install.php page so the WP Admin menu item gets highlighted correctly.
398 *
399 * @param string $submenu_file The current pages $submenu_file global variable value.
400 * @return string | null
401 */
402 public function override_the_theme_installer( $submenu_file ) {
403 global $pagenow;
404
405 if ( 'themes.php' === $submenu_file && 'theme-install.php' === $pagenow ) {
406 return null;
407 }
408 return $submenu_file;
409 }
410
411 /**
412 * Also remove the Gutenberg plugin menu.
413 */
414 public function add_gutenberg_menus() {
415 // Always remove the Gutenberg menu.
416 remove_menu_page( 'gutenberg' );
417 parent::add_gutenberg_menus();
418 }
419
420 /**
421 * Saves the sidebar state ( expanded / collapsed ) via an ajax request.
422 */
423 public function ajax_sidebar_state() {
424 $expanded = isset( $_REQUEST['expanded'] ) ? filter_var( wp_unslash( $_REQUEST['expanded'] ), FILTER_VALIDATE_BOOLEAN ) : false; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
425 Client::wpcom_json_api_request_as_user(
426 '/me/preferences',
427 '2',
428 array(
429 'method' => 'POST',
430 ),
431 (object) array( 'calypso_preferences' => (object) array( 'sidebarCollapsed' => ! $expanded ) ),
432 'wpcom'
433 );
434
435 wp_die();
436 }
437
438 /**
439 * Handle ajax requests to dismiss a just-in-time-message
440 */
441 public function wp_ajax_jitm_dismiss() {
442 check_ajax_referer( 'jitm_dismiss' );
443 $jitm = \Automattic\Jetpack\JITMS\JITM::get_instance();
444 if ( isset( $_REQUEST['id'] ) && isset( $_REQUEST['feature_class'] ) ) {
445 $jitm->dismiss( sanitize_text_field( wp_unslash( $_REQUEST['id'] ) ), sanitize_text_field( wp_unslash( $_REQUEST['feature_class'] ) ) );
446 }
447 wp_die();
448 }
449 }
450