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