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