PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.2.3
Jetpack – WP Security, Backup, Speed, & Growth v12.2.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
455 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
210 if ( get_option( 'wpcom_is_staging_site' ) ) {
211 $badge .= '<span class="site__badge site__badge-staging">' . esc_html__( 'Staging', 'jetpack' ) . '</span>';
212 }
213
214 if ( ( function_exists( 'site_is_private' ) && site_is_private() ) || $is_coming_soon ) {
215 $badge .= sprintf(
216 '<span class="site__badge site__badge-private">%s</span>',
217 $is_coming_soon ? esc_html__( 'Coming Soon', 'jetpack' ) : esc_html__( 'Private', 'jetpack' )
218 );
219 }
220
221 $site_card = '
222 <div class="site__info">
223 <div class="site__title">%1$s</div>
224 <div class="site__domain">%2$s</div>
225 %3$s
226 </div>';
227
228 $site_card = sprintf(
229 $site_card,
230 $blog_name,
231 $this->domain,
232 $badge
233 );
234
235 add_menu_page( 'site-card', $site_card, 'read', get_home_url(), null, $icon, 1 );
236 add_filter( 'add_menu_classes', array( $this, 'set_site_card_menu_class' ) );
237 }
238
239 /**
240 * Adds a custom element class and id for Site Card's menu item.
241 *
242 * @param array $menu Associative array of administration menu items.
243 *
244 * @return array
245 */
246 public function set_site_card_menu_class( array $menu ) {
247 foreach ( $menu as $key => $menu_item ) {
248 if ( 'site-card' !== $menu_item[3] ) {
249 continue;
250 }
251
252 $classes = ' toplevel_page_site-card';
253
254 // webclip.png is the default on WoA sites. Anything other than that means we have a custom site icon.
255 if ( has_site_icon() && 'https://s0.wp.com/i/webclip.png' !== get_site_icon_url( 512 ) ) {
256 $classes .= ' has-site-icon';
257 }
258
259 $menu[ $key ][4] = $menu_item[4] . $classes;
260 $menu[ $key ][5] = 'toplevel_page_site_card';
261 break;
262 }
263
264 return $menu;
265 }
266
267 /**
268 * Returns the first available upsell nudge.
269 *
270 * @return array
271 */
272 public function get_upsell_nudge() {
273 $jitm = \Automattic\Jetpack\JITMS\JITM::get_instance();
274 $message_path = 'calypso:sites:sidebar_notice';
275 $message = $jitm->get_messages( $message_path, wp_json_encode( array( 'message_path' => $message_path ) ), false );
276
277 if ( isset( $message[0] ) ) {
278 $message = $message[0];
279 return array(
280 'content' => $message->content->message,
281 'cta' => $message->CTA->message, // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
282 'link' => $message->CTA->link, // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
283 'tracks_impression_event_name' => $message->tracks->display->name,
284 'tracks_impression_cta_name' => $message->tracks->display->props->cta_name,
285 'tracks_click_event_name' => $message->tracks->click->name,
286 'tracks_click_cta_name' => $message->tracks->click->props->cta_name,
287 'dismissible' => $message->is_dismissible,
288 'feature_class' => $message->feature_class,
289 'id' => $message->id,
290 );
291 }
292 }
293
294 /**
295 * Adds Stats menu.
296 */
297 public function add_stats_menu() {
298 $menu_title = __( 'Stats', 'jetpack' );
299
300 if (
301 ! $this->is_api_request &&
302 \Jetpack::is_module_active( 'stats' ) &&
303 function_exists( 'stats_get_image_chart_src' )
304 ) {
305 $img_src = esc_attr(
306 stats_get_image_chart_src( 'admin-bar-hours-scale-2x', array( 'masterbar' => '' ) )
307 );
308 $alt = esc_attr__( 'Hourly views', 'jetpack' );
309
310 $menu_title .= "<img class='sidebar-unified__sparkline' src='$img_src' width='80' height='20' alt='$alt'>";
311 }
312
313 add_menu_page( __( 'Stats', 'jetpack' ), $menu_title, 'edit_posts', 'https://wordpress.com/stats/day/' . $this->domain, null, 'dashicons-chart-bar', 3 );
314 }
315
316 /**
317 * Adds Upgrades menu.
318 *
319 * @param string $plan The current WPCOM plan of the blog.
320 */
321 public function add_upgrades_menu( $plan = null ) {
322
323 if ( get_option( 'wpcom_is_staging_site' ) ) {
324 return;
325 }
326 $products = Jetpack_Plan::get();
327 if ( array_key_exists( 'product_name_short', $products ) ) {
328 $plan = $products['product_name_short'];
329 }
330 parent::add_upgrades_menu( $plan );
331
332 $last_upgrade_submenu_position = $this->get_submenu_item_count( 'paid-upgrades.php' );
333
334 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 );
335
336 /**
337 * Whether to show the WordPress.com Emails submenu under the main Upgrades menu.
338 *
339 * @use add_filter( 'jetpack_show_wpcom_upgrades_email_menu', '__return_true' );
340 * @module masterbar
341 *
342 * @since 9.7.0
343 *
344 * @param bool $show_wpcom_upgrades_email_menu Load the WordPress.com Emails submenu item. Default to false.
345 */
346 if ( apply_filters( 'jetpack_show_wpcom_upgrades_email_menu', false ) ) {
347 add_submenu_page( 'paid-upgrades.php', __( 'Emails', 'jetpack' ), __( 'Emails', 'jetpack' ), 'manage_options', 'https://wordpress.com/email/' . $this->domain, null, $last_upgrade_submenu_position );
348 }
349 }
350
351 /**
352 * Adds Settings menu.
353 */
354 public function add_options_menu() {
355 parent::add_options_menu();
356
357 if ( Jetpack_Plan::supports( 'security-settings' ) ) {
358 add_submenu_page(
359 'options-general.php',
360 esc_attr__( 'Security', 'jetpack' ),
361 __( 'Security', 'jetpack' ),
362 'manage_options',
363 'https://wordpress.com/settings/security/' . $this->domain,
364 null,
365 2
366 );
367 }
368
369 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 );
370
371 // Page Optimize is active by default on all Atomic sites and registers a Settings > Performance submenu which
372 // would conflict with our own Settings > Performance that links to Calypso, so we hide it it since the Calypso
373 // performance settings already have a link to Page Optimize settings page.
374 $this->hide_submenu_page( 'options-general.php', 'page-optimize' );
375
376 if ( Blaze::should_initialize() ) {
377 add_submenu_page( 'tools.php', esc_attr__( 'Advertising', 'jetpack' ), __( 'Advertising', 'jetpack' ), 'manage_options', 'https://wordpress.com/advertising/' . $this->domain, null, 1 );
378 }
379 }
380
381 /**
382 * Adds Tools menu entries.
383 */
384 public function add_tools_menu() {
385 parent::add_tools_menu();
386
387 /**
388 * Whether to show the WordPress.com Site Logs submenu under the main Tools menu.
389 *
390 * @use add_filter( 'jetpack_show_wpcom_site_logs_menu', '__return_true' );
391 * @module masterbar
392 *
393 * @since 12.0
394 *
395 * @param bool $show_wpcom_site_logs_menu Load the WordPress.com Site Logs submenu item. Default to false.
396 */
397 if ( apply_filters( 'jetpack_show_wpcom_site_logs_menu', false ) ) {
398 add_submenu_page( 'tools.php', esc_attr__( 'Site Logs', 'jetpack' ), __( 'Site Logs', 'jetpack' ), 'manage_options', 'https://wordpress.com/site-logs/' . $this->domain, null, 7 );
399 }
400 }
401
402 /**
403 * Override the global submenu_file for theme-install.php page so the WP Admin menu item gets highlighted correctly.
404 *
405 * @param string $submenu_file The current pages $submenu_file global variable value.
406 * @return string | null
407 */
408 public function override_the_theme_installer( $submenu_file ) {
409 global $pagenow;
410
411 if ( 'themes.php' === $submenu_file && 'theme-install.php' === $pagenow ) {
412 return null;
413 }
414 return $submenu_file;
415 }
416
417 /**
418 * Also remove the Gutenberg plugin menu.
419 */
420 public function remove_gutenberg_menu() {
421 // Always remove the Gutenberg menu.
422 remove_menu_page( 'gutenberg' );
423 }
424
425 /**
426 * Saves the sidebar state ( expanded / collapsed ) via an ajax request.
427 */
428 public function ajax_sidebar_state() {
429 $expanded = isset( $_REQUEST['expanded'] ) ? filter_var( wp_unslash( $_REQUEST['expanded'] ), FILTER_VALIDATE_BOOLEAN ) : false; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
430 Client::wpcom_json_api_request_as_user(
431 '/me/preferences',
432 '2',
433 array(
434 'method' => 'POST',
435 ),
436 (object) array( 'calypso_preferences' => (object) array( 'sidebarCollapsed' => ! $expanded ) ),
437 'wpcom'
438 );
439
440 wp_die();
441 }
442
443 /**
444 * Handle ajax requests to dismiss a just-in-time-message
445 */
446 public function wp_ajax_jitm_dismiss() {
447 check_ajax_referer( 'jitm_dismiss' );
448 $jitm = \Automattic\Jetpack\JITMS\JITM::get_instance();
449 if ( isset( $_REQUEST['id'] ) && isset( $_REQUEST['feature_class'] ) ) {
450 $jitm->dismiss( sanitize_text_field( wp_unslash( $_REQUEST['id'] ) ), sanitize_text_field( wp_unslash( $_REQUEST['feature_class'] ) ) );
451 }
452 wp_die();
453 }
454 }
455