PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.1.3
Jetpack – WP Security, Backup, Speed, & Growth v12.1.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 $this->remove_gutenberg_menu();
73
74 if ( ! get_option( 'wpcom_is_staging_site' ) ) {
75 $this->add_inbox_menu();
76 }
77
78 // Not needed outside of wp-admin.
79 if ( ! $this->is_api_request ) {
80 $this->add_browse_sites_link();
81 $this->add_site_card_menu();
82 $this->add_new_site_link();
83 }
84
85 $this->add_woocommerce_installation_menu();
86
87 ksort( $GLOBALS['menu'] );
88 }
89
90 /**
91 * Get the preferred view for the given screen.
92 *
93 * @param string $screen Screen identifier.
94 * @param bool $fallback_global_preference (Optional) Whether the global preference for all screens should be used
95 * as fallback if there is no specific preference for the given screen.
96 * Default: true.
97 * @return string
98 */
99 public function get_preferred_view( $screen, $fallback_global_preference = true ) {
100 // Export on Atomic sites are always managed on WP Admin.
101 if ( in_array( $screen, array( 'export.php' ), true ) ) {
102 return self::CLASSIC_VIEW;
103 }
104
105 /**
106 * When Jetpack SSO is disabled, we need to force Calypso because it might create confusion to be redirected to WP-Admin.
107 * 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.
108 */
109 if ( ! \Jetpack::is_module_active( 'sso' ) ) {
110 return self::DEFAULT_VIEW;
111 }
112
113 return parent::get_preferred_view( $screen, $fallback_global_preference );
114 }
115
116 /**
117 * Adds Plugins menu.
118 */
119 public function add_plugins_menu() {
120 global $submenu;
121
122 // Calypso plugins screens link.
123 $plugins_slug = 'https://wordpress.com/plugins/' . $this->domain;
124
125 // Link to the Marketplace on sites that can't manage plugins.
126 if (
127 function_exists( 'wpcom_site_has_feature' ) &&
128 ! wpcom_site_has_feature( \WPCOM_Features::MANAGE_PLUGINS )
129 ) {
130 add_menu_page( __( 'Plugins', 'jetpack' ), __( 'Plugins', 'jetpack' ), 'manage_options', $plugins_slug, null, 'dashicons-admin-plugins', '65' );
131 return;
132 }
133
134 if ( ! isset( $submenu['plugins.php'] ) ) {
135 return;
136 }
137
138 $plugins_submenu = $submenu['plugins.php'];
139
140 // Move "Add New" plugin submenu to the top position.
141 foreach ( $plugins_submenu as $submenu_key => $submenu_keys ) {
142 if ( 'plugin-install.php' === $submenu_keys[2] ) {
143 // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
144 $submenu['plugins.php'] = array( $submenu_key => $plugins_submenu[ $submenu_key ] ) + $plugins_submenu;
145 }
146 }
147
148 $submenus_to_update = array( 'plugin-install.php' => $plugins_slug );
149
150 $this->update_submenus( 'plugins.php', $submenus_to_update );
151 }
152
153 /**
154 * Adds the site switcher link if user has more than one site.
155 */
156 public function add_browse_sites_link() {
157 $site_count = get_user_option( 'wpcom_site_count' );
158 if ( ! $site_count || $site_count < 2 ) {
159 return;
160 }
161
162 // Add the menu item.
163 add_menu_page( __( 'site-switcher', 'jetpack' ), __( 'Browse sites', 'jetpack' ), 'read', 'https://wordpress.com/sites', null, 'dashicons-arrow-left-alt2', 0 );
164 add_filter( 'add_menu_classes', array( $this, 'set_browse_sites_link_class' ) );
165 }
166
167 /**
168 * Adds a custom element class for Site Switcher menu item.
169 *
170 * @param array $menu Associative array of administration menu items.
171 *
172 * @return array
173 */
174 public function set_browse_sites_link_class( array $menu ) {
175 foreach ( $menu as $key => $menu_item ) {
176 if ( 'site-switcher' !== $menu_item[3] ) {
177 continue;
178 }
179
180 $menu[ $key ][4] = add_cssclass( 'site-switcher', $menu_item[4] );
181 break;
182 }
183
184 return $menu;
185 }
186
187 /**
188 * Adds a link to the menu to create a new site.
189 */
190 public function add_new_site_link() {
191 $site_count = get_user_option( 'wpcom_site_count' );
192 if ( $site_count && $site_count > 1 ) {
193 return;
194 }
195
196 add_menu_page( __( 'Add New Site', 'jetpack' ), __( 'Add New Site', 'jetpack' ), 'read', 'https://wordpress.com/start?ref=calypso-sidebar', null, 'dashicons-plus-alt' );
197 }
198
199 /**
200 * Adds site card component.
201 */
202 public function add_site_card_menu() {
203 $default = plugins_url( 'globe-icon.svg', __FILE__ );
204 $icon = get_site_icon_url( 32, $default );
205 $blog_name = get_option( 'blogname' ) !== '' ? get_option( 'blogname' ) : $this->domain;
206 $is_coming_soon = ( new Status() )->is_coming_soon();
207
208 $badge = '';
209 if ( ( function_exists( 'site_is_private' ) && site_is_private() ) || $is_coming_soon ) {
210 $badge .= sprintf(
211 '<span class="site__badge site__badge-private">%s</span>',
212 $is_coming_soon ? esc_html__( 'Coming Soon', 'jetpack' ) : esc_html__( 'Private', 'jetpack' )
213 );
214 }
215
216 $site_card = '
217 <div class="site__info">
218 <div class="site__title">%1$s</div>
219 <div class="site__domain">%2$s</div>
220 %3$s
221 </div>';
222
223 $site_card = sprintf(
224 $site_card,
225 $blog_name,
226 $this->domain,
227 $badge
228 );
229
230 add_menu_page( 'site-card', $site_card, 'read', get_home_url(), null, $icon, 1 );
231 add_filter( 'add_menu_classes', array( $this, 'set_site_card_menu_class' ) );
232 }
233
234 /**
235 * Adds a custom element class and id for Site Card's menu item.
236 *
237 * @param array $menu Associative array of administration menu items.
238 *
239 * @return array
240 */
241 public function set_site_card_menu_class( array $menu ) {
242 foreach ( $menu as $key => $menu_item ) {
243 if ( 'site-card' !== $menu_item[3] ) {
244 continue;
245 }
246
247 $classes = ' toplevel_page_site-card';
248
249 // webclip.png is the default on WoA sites. Anything other than that means we have a custom site icon.
250 if ( has_site_icon() && 'https://s0.wp.com/i/webclip.png' !== get_site_icon_url( 512 ) ) {
251 $classes .= ' has-site-icon';
252 }
253
254 $menu[ $key ][4] = $menu_item[4] . $classes;
255 $menu[ $key ][5] = 'toplevel_page_site_card';
256 break;
257 }
258
259 return $menu;
260 }
261
262 /**
263 * Returns the first available upsell nudge.
264 *
265 * @return array
266 */
267 public function get_upsell_nudge() {
268 $jitm = \Automattic\Jetpack\JITMS\JITM::get_instance();
269 $message_path = 'calypso:sites:sidebar_notice';
270 $message = $jitm->get_messages( $message_path, wp_json_encode( array( 'message_path' => $message_path ) ), false );
271
272 if ( isset( $message[0] ) ) {
273 $message = $message[0];
274 return array(
275 'content' => $message->content->message,
276 'cta' => $message->CTA->message, // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
277 'link' => $message->CTA->link, // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
278 'tracks_impression_event_name' => $message->tracks->display->name,
279 'tracks_impression_cta_name' => $message->tracks->display->props->cta_name,
280 'tracks_click_event_name' => $message->tracks->click->name,
281 'tracks_click_cta_name' => $message->tracks->click->props->cta_name,
282 'dismissible' => $message->is_dismissible,
283 'feature_class' => $message->feature_class,
284 'id' => $message->id,
285 );
286 }
287 }
288
289 /**
290 * Adds Stats menu.
291 */
292 public function add_stats_menu() {
293 $menu_title = __( 'Stats', 'jetpack' );
294
295 if (
296 ! $this->is_api_request &&
297 \Jetpack::is_module_active( 'stats' ) &&
298 function_exists( 'stats_get_image_chart_src' )
299 ) {
300 $img_src = esc_attr(
301 stats_get_image_chart_src( 'admin-bar-hours-scale-2x', array( 'masterbar' => '' ) )
302 );
303 $alt = esc_attr__( 'Hourly views', 'jetpack' );
304
305 $menu_title .= "<img class='sidebar-unified__sparkline' src='$img_src' width='80' height='20' alt='$alt'>";
306 }
307
308 add_menu_page( __( 'Stats', 'jetpack' ), $menu_title, 'edit_posts', 'https://wordpress.com/stats/day/' . $this->domain, null, 'dashicons-chart-bar', 3 );
309 }
310
311 /**
312 * Adds Upgrades menu.
313 *
314 * @param string $plan The current WPCOM plan of the blog.
315 */
316 public function add_upgrades_menu( $plan = null ) {
317
318 if ( get_option( 'wpcom_is_staging_site' ) ) {
319 return;
320 }
321 $products = Jetpack_Plan::get();
322 if ( array_key_exists( 'product_name_short', $products ) ) {
323 $plan = $products['product_name_short'];
324 }
325 parent::add_upgrades_menu( $plan );
326
327 $last_upgrade_submenu_position = $this->get_submenu_item_count( 'paid-upgrades.php' );
328
329 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 );
330
331 /**
332 * Whether to show the WordPress.com Emails submenu under the main Upgrades menu.
333 *
334 * @use add_filter( 'jetpack_show_wpcom_upgrades_email_menu', '__return_true' );
335 * @module masterbar
336 *
337 * @since 9.7.0
338 *
339 * @param bool $show_wpcom_upgrades_email_menu Load the WordPress.com Emails submenu item. Default to false.
340 */
341 if ( apply_filters( 'jetpack_show_wpcom_upgrades_email_menu', false ) ) {
342 add_submenu_page( 'paid-upgrades.php', __( 'Emails', 'jetpack' ), __( 'Emails', 'jetpack' ), 'manage_options', 'https://wordpress.com/email/' . $this->domain, null, $last_upgrade_submenu_position );
343 }
344 }
345
346 /**
347 * Adds Settings menu.
348 */
349 public function add_options_menu() {
350 parent::add_options_menu();
351
352 if ( Jetpack_Plan::supports( 'security-settings' ) ) {
353 add_submenu_page(
354 'options-general.php',
355 esc_attr__( 'Security', 'jetpack' ),
356 __( 'Security', 'jetpack' ),
357 'manage_options',
358 'https://wordpress.com/settings/security/' . $this->domain,
359 null,
360 2
361 );
362 }
363
364 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 );
365
366 // Page Optimize is active by default on all Atomic sites and registers a Settings > Performance submenu which
367 // would conflict with our own Settings > Performance that links to Calypso, so we hide it it since the Calypso
368 // performance settings already have a link to Page Optimize settings page.
369 $this->hide_submenu_page( 'options-general.php', 'page-optimize' );
370
371 if ( Blaze::should_initialize() ) {
372 add_submenu_page( 'tools.php', esc_attr__( 'Advertising', 'jetpack' ), __( 'Advertising', 'jetpack' ), 'manage_options', 'https://wordpress.com/advertising/' . $this->domain, null, 1 );
373 }
374 }
375
376 /**
377 * Adds Tools menu entries.
378 */
379 public function add_tools_menu() {
380 parent::add_tools_menu();
381
382 /**
383 * Whether to show the WordPress.com Site Logs submenu under the main Tools menu.
384 *
385 * @use add_filter( 'jetpack_show_wpcom_site_logs_menu', '__return_true' );
386 * @module masterbar
387 *
388 * @since 12.0
389 *
390 * @param bool $show_wpcom_site_logs_menu Load the WordPress.com Site Logs submenu item. Default to false.
391 */
392 if ( apply_filters( 'jetpack_show_wpcom_site_logs_menu', false ) ) {
393 add_submenu_page( 'tools.php', esc_attr__( 'Site Logs', 'jetpack' ), __( 'Site Logs', 'jetpack' ), 'manage_options', 'https://wordpress.com/site-logs/' . $this->domain, null, 7 );
394 }
395 }
396
397 /**
398 * Override the global submenu_file for theme-install.php page so the WP Admin menu item gets highlighted correctly.
399 *
400 * @param string $submenu_file The current pages $submenu_file global variable value.
401 * @return string | null
402 */
403 public function override_the_theme_installer( $submenu_file ) {
404 global $pagenow;
405
406 if ( 'themes.php' === $submenu_file && 'theme-install.php' === $pagenow ) {
407 return null;
408 }
409 return $submenu_file;
410 }
411
412 /**
413 * Also remove the Gutenberg plugin menu.
414 */
415 public function remove_gutenberg_menu() {
416 // Always remove the Gutenberg menu.
417 remove_menu_page( 'gutenberg' );
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