PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.3.2
Jetpack – WP Security, Backup, Speed, & Growth v12.3.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-jetpack-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-jetpack-admin-menu.php
310 lines
1 <?php
2 /**
3 * Jetpack Admin Menu file.
4 *
5 * @package Jetpack
6 */
7
8 namespace Automattic\Jetpack\Dashboard_Customizations;
9
10 use Automattic\Jetpack\Blaze;
11 use Automattic\Jetpack\Current_Plan as Jetpack_Plan;
12
13 require_once __DIR__ . '/class-admin-menu.php';
14
15 /**
16 * Class Jetpack_Admin_Menu.
17 */
18 class Jetpack_Admin_Menu extends Admin_Menu {
19
20 /**
21 * Determines whether the current locale is right-to-left (RTL).
22 *
23 * Performs the check against the current locale set on the WordPress.com's account settings.
24 * See `Masterbar::__construct` in `modules/masterbar/masterbar/class-masterbar.php`.
25 */
26 public function is_rtl() {
27 return get_user_option( 'jetpack_wpcom_is_rtl' );
28 }
29
30 /**
31 * Create the desired menu output.
32 */
33 public function reregister_menu_items() {
34 global $menu, $submenu;
35
36 // Reset menus so there are no third-party plugin items.
37 $menu = array(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
38 $submenu = array(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
39
40 parent::reregister_menu_items();
41
42 $this->add_feedback_menu();
43 $this->add_cpt_menus();
44 $this->add_wp_admin_menu();
45
46 ksort( $GLOBALS['menu'] );
47 }
48
49 /**
50 * Get the preferred view for the given screen.
51 *
52 * @param string $screen Screen identifier.
53 * @param bool $fallback_global_preference (Optional) Whether the global preference for all screens should be used
54 * as fallback if there is no specific preference for the given screen.
55 * Default: true.
56 * @return string
57 */
58 public function get_preferred_view( $screen, $fallback_global_preference = true ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
59 // Force default views (Calypso) on Jetpack sites since Nav Unification is disabled on WP Admin.
60 return self::DEFAULT_VIEW;
61 }
62
63 /**
64 * Get the Calypso or wp-admin link to CPT page.
65 *
66 * @param object $ptype_obj The post type object.
67 * @return string The link to Calypso if SSO is enabled and the post_type
68 * supports rest or to WP Admin if SSO is disabled.
69 */
70 public function get_cpt_menu_link( $ptype_obj ) {
71
72 $post_type = $ptype_obj->name;
73
74 if ( \Jetpack::is_module_active( 'sso' ) && $ptype_obj->show_in_rest ) {
75 return 'https://wordpress.com/types/' . $post_type . '/' . $this->domain;
76 } else {
77 return 'edit.php?post_type=' . $post_type;
78 }
79 }
80
81 /**
82 * Adds Posts menu.
83 */
84 public function add_posts_menu() {
85 $post = get_post_type_object( 'post' );
86 add_menu_page( esc_attr( $post->labels->menu_name ), $post->labels->menu_name, $post->cap->edit_posts, 'https://wordpress.com/posts/' . $this->domain, null, 'dashicons-admin-post' );
87 }
88
89 /**
90 * Adds Media menu.
91 */
92 public function add_media_menu() {
93 add_menu_page( __( 'Media', 'jetpack' ), __( 'Media', 'jetpack' ), 'upload_files', 'https://wordpress.com/media/' . $this->domain, null, 'dashicons-admin-media' );
94 }
95
96 /**
97 * Adds Page menu.
98 */
99 public function add_page_menu() {
100 $page = get_post_type_object( 'page' );
101 add_menu_page( esc_attr( $page->labels->menu_name ), $page->labels->menu_name, $page->cap->edit_posts, 'https://wordpress.com/pages/' . $this->domain, null, 'dashicons-admin-page' );
102 }
103
104 /**
105 * Adds a custom post type menu.
106 *
107 * @param string $post_type Custom post type.
108 * @param int|null $position Optional. Position where to display the menu item. Default null.
109 */
110 public function add_custom_post_type_menu( $post_type, $position = null ) {
111 $ptype_obj = get_post_type_object( $post_type );
112 if ( empty( $ptype_obj ) ) {
113 return;
114 }
115
116 $menu_slug = $this->get_cpt_menu_link( $ptype_obj );
117
118 // Menu icon.
119 $menu_icon = 'dashicons-admin-post';
120 if ( is_string( $ptype_obj->menu_icon ) ) {
121 // Special handling for data:image/svg+xml and Dashicons.
122 if ( 0 === strpos( $ptype_obj->menu_icon, 'data:image/svg+xml;base64,' ) || 0 === strpos( $ptype_obj->menu_icon, 'dashicons-' ) ) {
123 $menu_icon = $ptype_obj->menu_icon;
124 } else {
125 $menu_icon = esc_url( $ptype_obj->menu_icon );
126 }
127 }
128
129 add_menu_page( esc_attr( $ptype_obj->labels->menu_name ), $ptype_obj->labels->menu_name, $ptype_obj->cap->edit_posts, $menu_slug, null, $menu_icon, $position );
130 }
131
132 /**
133 * Adds Comments menu.
134 */
135 public function add_comments_menu() {
136 add_menu_page( esc_attr__( 'Comments', 'jetpack' ), __( 'Comments', 'jetpack' ), 'edit_posts', 'https://wordpress.com/comments/all/' . $this->domain, null, 'dashicons-admin-comments' );
137 }
138
139 /**
140 * Adds Feedback menu.
141 */
142 public function add_feedback_menu() {
143 $post_type = 'feedback';
144
145 $ptype_obj = get_post_type_object( $post_type );
146 if ( empty( $ptype_obj ) ) {
147 return;
148 }
149
150 $slug = 'edit.php?post_type=' . $post_type;
151 $name = __( 'Feedback', 'jetpack' );
152 $capability = $ptype_obj->cap->edit_posts;
153 $icon = $ptype_obj->menu_icon;
154 $position = 45; // Before Jetpack.
155
156 add_menu_page( esc_attr( $name ), $name, $capability, $slug, null, $icon, $position );
157 }
158
159 /**
160 * Adds CPT menu items
161 */
162 public function add_cpt_menus() {
163
164 $post_type_list = get_post_types(
165 array(
166 'show_in_menu' => true,
167 '_builtin' => false,
168 )
169 );
170
171 foreach ( $post_type_list as $post_type ) {
172 $position = 46; // After Feedback.
173 $this->add_custom_post_type_menu( $post_type, $position );
174 }
175 }
176
177 /**
178 * Adds Jetpack menu.
179 */
180 public function add_jetpack_menu() {
181 parent::add_jetpack_menu();
182
183 $current_locale = get_user_locale();
184 /* translators: Jetpack sidebar menu item. */
185 add_submenu_page( 'jetpack', esc_attr__( 'Search', 'jetpack' ), __( 'Search', 'jetpack' ), 'manage_options', 'jetpack-search', admin_url( 'admin.php?page=jetpack-search' ), 4 );
186
187 // Place "Scan" submenu after Backup.
188 $position = 0;
189 global $submenu;
190 foreach ( $submenu['jetpack'] as $submenu_item ) {
191 ++$position;
192 if ( __( 'Backup', 'jetpack' ) === $submenu_item[3] ) {
193 break;
194 }
195 }
196 add_submenu_page( 'jetpack', esc_attr__( 'Scan', 'jetpack' ), __( 'Scan', 'jetpack' ), 'manage_options', 'https://wordpress.com/scan/' . $this->domain, null, $position );
197 if ( substr( $current_locale, 0, 2 ) === 'en' ) {
198 add_submenu_page( 'jetpack', esc_attr__( 'Subscribers', 'jetpack' ), __( 'Subscribers', 'jetpack' ), 'list_users', 'https://wordpress.com/subscribers/' . $this->domain, null, 3 );
199 }
200 }
201
202 /**
203 * Adds Appearance menu.
204 *
205 * @return string The Customizer URL.
206 */
207 public function add_appearance_menu() {
208 $themes_url = 'https://wordpress.com/themes/' . $this->domain;
209 // Customize on Jetpack sites is always done on WP Admin (unsupported by Calypso).
210 $customize_url = 'customize.php';
211
212 add_menu_page( esc_attr__( 'Appearance', 'jetpack' ), __( 'Appearance', 'jetpack' ), 'switch_themes', $themes_url, null, 'dashicons-admin-appearance', 60 );
213 add_submenu_page( $themes_url, esc_attr__( 'Themes', 'jetpack' ), __( 'Themes', 'jetpack' ), 'switch_themes', 'https://wordpress.com/themes/' . $this->domain );
214
215 if ( ! has_action( 'customize_register' ) && function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ) {
216 return $customize_url;
217 }
218
219 add_submenu_page( $themes_url, esc_attr__( 'Customize', 'jetpack' ), __( 'Customize', 'jetpack' ), 'customize', $customize_url );
220
221 return $customize_url;
222 }
223
224 /**
225 * Adds Plugins menu.
226 */
227 public function add_plugins_menu() {
228 add_menu_page( esc_attr__( 'Plugins', 'jetpack' ), __( 'Plugins', 'jetpack' ), 'activate_plugins', 'https://wordpress.com/plugins/' . $this->domain, null, 'dashicons-admin-plugins', 65 );
229 }
230
231 /**
232 * Adds Users menu.
233 */
234 public function add_users_menu() {
235 if ( current_user_can( 'list_users' ) ) {
236 add_menu_page( esc_attr__( 'Users', 'jetpack' ), __( 'Users', 'jetpack' ), 'list_users', 'https://wordpress.com/people/team/' . $this->domain, null, 'dashicons-admin-users', 70 );
237 } else {
238 add_menu_page( esc_attr__( 'My Profile', 'jetpack' ), __( 'Profile', 'jetpack' ), 'read', 'https://wordpress.com/me', null, 'dashicons-admin-users', 70 );
239 }
240 }
241
242 /**
243 * Adds Tools menu.
244 */
245 public function add_tools_menu() {
246 add_menu_page( esc_attr__( 'Tools', 'jetpack' ), __( 'Tools', 'jetpack' ), 'publish_posts', 'tools.php', null, 'dashicons-admin-tools', 75 );
247 if ( Blaze::should_initialize() ) {
248 add_submenu_page( 'tools.php', esc_attr__( 'Advertising', 'jetpack' ), __( 'Advertising', 'jetpack' ), 'manage_options', 'https://wordpress.com/advertising/' . $this->domain, null, 1 );
249 }
250 add_submenu_page( 'tools.php', esc_attr__( 'Marketing', 'jetpack' ), __( 'Marketing', 'jetpack' ), 'publish_posts', 'https://wordpress.com/marketing/tools/' . $this->domain );
251 add_submenu_page( 'tools.php', esc_attr__( 'Earn', 'jetpack' ), __( 'Earn', 'jetpack' ), 'manage_options', 'https://wordpress.com/earn/' . $this->domain );
252
253 // Import/Export on Jetpack sites is always handled on WP Admin.
254 add_submenu_page( 'tools.php', esc_attr__( 'Import', 'jetpack' ), __( 'Import', 'jetpack' ), 'import', 'import.php' );
255 add_submenu_page( 'tools.php', esc_attr__( 'Export', 'jetpack' ), __( 'Export', 'jetpack' ), 'export', 'export.php' );
256
257 // Remove the submenu auto-created by Core.
258 $this->hide_submenu_page( 'tools.php', 'tools.php' );
259 }
260
261 /**
262 * Adds Settings menu.
263 */
264 public function add_options_menu() {
265 $slug = 'https://wordpress.com/settings/general/' . $this->domain;
266 add_menu_page( esc_attr__( 'Settings', 'jetpack' ), __( 'Settings', 'jetpack' ), 'manage_options', $slug, null, 'dashicons-admin-settings', 80 );
267 add_submenu_page( $slug, esc_attr__( 'General', 'jetpack' ), __( 'General', 'jetpack' ), 'manage_options', $slug );
268 add_submenu_page( $slug, esc_attr__( 'Security', 'jetpack' ), __( 'Security', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/security/' . $this->domain );
269 add_submenu_page( $slug, esc_attr__( 'Performance', 'jetpack' ), __( 'Performance', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/performance/' . $this->domain );
270 add_submenu_page( $slug, esc_attr__( 'Writing', 'jetpack' ), __( 'Writing', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/writing/' . $this->domain );
271 add_submenu_page( $slug, esc_attr__( 'Reading', 'jetpack' ), __( 'Reading', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/reading/' . $this->domain );
272 add_submenu_page( $slug, esc_attr__( 'Discussion', 'jetpack' ), __( 'Discussion', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/discussion/' . $this->domain );
273
274 $plan_supports_scan = Jetpack_Plan::supports( 'scan' );
275 $products = Jetpack_Plan::get_products();
276 $has_scan_product = false;
277
278 if ( is_array( $products ) ) {
279 foreach ( $products as $product ) {
280 if ( strpos( $product['product_slug'], 'jetpack_scan' ) === 0 ) {
281 $has_scan_product = true;
282 break;
283 }
284 }
285 }
286
287 $has_scan = $plan_supports_scan || $has_scan_product;
288 $rewind_state = get_transient( 'jetpack_rewind_state' );
289 $has_backup = $rewind_state && in_array( $rewind_state->state, array( 'awaiting_credentials', 'provisioning', 'active' ), true );
290 if ( $has_scan || $has_backup ) {
291 add_submenu_page( $slug, esc_attr__( 'Jetpack', 'jetpack' ), __( 'Jetpack', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/jetpack/' . $this->domain );
292 }
293 }
294
295 /**
296 * Adds WP Admin menu.
297 */
298 public function add_wp_admin_menu() {
299 global $menu;
300
301 // Attempt to get last position.
302 ksort( $menu );
303 end( $menu );
304 $position = key( $menu );
305
306 $this->add_admin_menu_separator( ++$position );
307 add_menu_page( __( 'WP Admin', 'jetpack' ), __( 'WP Admin', 'jetpack' ), 'read', 'index.php', null, 'dashicons-wordpress-alt', $position );
308 }
309 }
310