PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.4.5
Jetpack – WP Security, Backup, Speed, & Growth v13.4.5
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-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 2 years ago menu-mappings.php 3 years ago
class-jetpack-admin-menu.php
316 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 ( str_starts_with( $ptype_obj->menu_icon, 'data:image/svg+xml;base64,' ) || str_starts_with( $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 /* translators: Jetpack sidebar menu item. */
184 add_submenu_page( 'jetpack', esc_attr__( 'Search', 'jetpack' ), __( 'Search', 'jetpack' ), 'manage_options', 'jetpack-search', admin_url( 'admin.php?page=jetpack-search' ), 4 );
185
186 // Place "Scan" submenu after Backup.
187 $position = 0;
188 global $submenu;
189 foreach ( $submenu['jetpack'] as $submenu_item ) {
190 ++$position;
191 if ( __( 'Backup', 'jetpack' ) === $submenu_item[3] ) {
192 break;
193 }
194 }
195 add_submenu_page( 'jetpack', esc_attr__( 'Scan', 'jetpack' ), __( 'Scan', 'jetpack' ), 'manage_options', 'https://wordpress.com/scan/' . $this->domain, null, $position );
196 }
197
198 /**
199 * Adds Appearance menu.
200 *
201 * @return string The Customizer URL.
202 */
203 public function add_appearance_menu() {
204 $themes_url = 'https://wordpress.com/themes/' . $this->domain;
205 // Customize on Jetpack sites is always done on WP Admin (unsupported by Calypso).
206 $customize_url = 'customize.php';
207
208 add_menu_page( esc_attr__( 'Appearance', 'jetpack' ), __( 'Appearance', 'jetpack' ), 'switch_themes', $themes_url, null, 'dashicons-admin-appearance', 60 );
209 add_submenu_page( $themes_url, esc_attr__( 'Themes', 'jetpack' ), __( 'Themes', 'jetpack' ), 'switch_themes', 'https://wordpress.com/themes/' . $this->domain );
210
211 if ( ! has_action( 'customize_register' ) && wp_is_block_theme() ) {
212 return $customize_url;
213 }
214
215 add_submenu_page( $themes_url, esc_attr__( 'Customize', 'jetpack' ), __( 'Customize', 'jetpack' ), 'customize', $customize_url );
216
217 return $customize_url;
218 }
219
220 /**
221 * Adds Plugins menu.
222 */
223 public function add_plugins_menu() {
224 add_menu_page( esc_attr__( 'Plugins', 'jetpack' ), __( 'Plugins', 'jetpack' ), 'activate_plugins', 'https://wordpress.com/plugins/' . $this->domain, null, 'dashicons-admin-plugins', 65 );
225 }
226
227 /**
228 * Adds Users menu.
229 */
230 public function add_users_menu() {
231 if ( current_user_can( 'list_users' ) ) {
232 $users_url = 'https://wordpress.com/people/team/' . $this->domain;
233 add_menu_page( esc_attr__( 'Users', 'jetpack' ), __( 'Users', 'jetpack' ), 'list_users', $users_url, null, 'dashicons-admin-users', 70 );
234 add_submenu_page( $users_url, esc_attr__( 'All Users', 'jetpack' ), __( 'All Users', 'jetpack' ), 'list_users', $users_url, null, 10 );
235 add_submenu_page( $users_url, esc_attr__( 'Add New User', 'jetpack' ), __( 'Add New User', 'jetpack' ), 'promote_users', 'https://wordpress.com/people/new/' . $this->domain, null, 20 );
236 add_submenu_page( $users_url, esc_attr__( 'Subscribers', 'jetpack' ), __( 'Subscribers', 'jetpack' ), 'list_users', 'https://wordpress.com/subscribers/' . $this->domain, null, 30 );
237 add_submenu_page( $users_url, esc_attr__( 'My Profile', 'jetpack' ), __( 'My Profile', 'jetpack' ), 'read', 'https://wordpress.com/me', null, 40 );
238 add_submenu_page( $users_url, esc_attr__( 'Account Settings', 'jetpack' ), __( 'Account Settings', 'jetpack' ), 'read', 'https://wordpress.com/me/account', null, 50 );
239 } else {
240 add_menu_page( esc_attr__( 'My Profile', 'jetpack' ), __( 'Profile', 'jetpack' ), 'read', 'https://wordpress.com/me', null, 'dashicons-admin-users', 70 );
241 }
242 }
243
244 /**
245 * Adds Tools menu.
246 */
247 public function add_tools_menu() {
248 add_menu_page( esc_attr__( 'Tools', 'jetpack' ), __( 'Tools', 'jetpack' ), 'publish_posts', 'tools.php', null, 'dashicons-admin-tools', 75 );
249
250 add_submenu_page( 'tools.php', esc_attr__( 'Marketing', 'jetpack' ), __( 'Marketing', 'jetpack' ), 'publish_posts', 'https://wordpress.com/marketing/tools/' . $this->domain );
251
252 if ( Blaze::should_initialize() ) {
253 add_submenu_page( 'tools.php', esc_attr__( 'Advertising', 'jetpack' ), __( 'Advertising', 'jetpack' ), 'manage_options', 'https://wordpress.com/advertising/' . $this->domain, null, 1 );
254 }
255
256 add_submenu_page( 'tools.php', esc_attr__( 'Monetize', 'jetpack' ), __( 'Monetize', 'jetpack' ), 'manage_options', 'https://wordpress.com/earn/' . $this->domain );
257
258 // Import/Export on Jetpack sites is always handled on WP Admin.
259 add_submenu_page( 'tools.php', esc_attr__( 'Import', 'jetpack' ), __( 'Import', 'jetpack' ), 'import', 'import.php' );
260 add_submenu_page( 'tools.php', esc_attr__( 'Export', 'jetpack' ), __( 'Export', 'jetpack' ), 'export', 'export.php' );
261
262 // Remove the submenu auto-created by Core.
263 $this->hide_submenu_page( 'tools.php', 'tools.php' );
264 }
265
266 /**
267 * Adds Settings menu.
268 */
269 public function add_options_menu() {
270 $slug = 'https://wordpress.com/settings/general/' . $this->domain;
271 add_menu_page( esc_attr__( 'Settings', 'jetpack' ), __( 'Settings', 'jetpack' ), 'manage_options', $slug, null, 'dashicons-admin-settings', 80 );
272 add_submenu_page( $slug, esc_attr__( 'General', 'jetpack' ), __( 'General', 'jetpack' ), 'manage_options', $slug );
273 add_submenu_page( $slug, esc_attr__( 'Security', 'jetpack' ), __( 'Security', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/security/' . $this->domain );
274 add_submenu_page( $slug, esc_attr__( 'Performance', 'jetpack' ), __( 'Performance', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/performance/' . $this->domain );
275 add_submenu_page( $slug, esc_attr__( 'Writing', 'jetpack' ), __( 'Writing', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/writing/' . $this->domain );
276 add_submenu_page( $slug, esc_attr__( 'Reading', 'jetpack' ), __( 'Reading', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/reading/' . $this->domain );
277 add_submenu_page( $slug, esc_attr__( 'Discussion', 'jetpack' ), __( 'Discussion', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/discussion/' . $this->domain );
278 add_submenu_page( $slug, esc_attr__( 'Newsletter', 'jetpack' ), __( 'Newsletter', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/newsletter/' . $this->domain );
279
280 $plan_supports_scan = Jetpack_Plan::supports( 'scan' );
281 $products = Jetpack_Plan::get_products();
282 $has_scan_product = false;
283
284 if ( is_array( $products ) ) {
285 foreach ( $products as $product ) {
286 if ( strpos( $product['product_slug'], 'jetpack_scan' ) === 0 ) {
287 $has_scan_product = true;
288 break;
289 }
290 }
291 }
292
293 $has_scan = $plan_supports_scan || $has_scan_product;
294 $rewind_state = get_transient( 'jetpack_rewind_state' );
295 $has_backup = $rewind_state && in_array( $rewind_state->state, array( 'awaiting_credentials', 'provisioning', 'active' ), true );
296 if ( $has_scan || $has_backup ) {
297 add_submenu_page( $slug, esc_attr__( 'Jetpack', 'jetpack' ), __( 'Jetpack', 'jetpack' ), 'manage_options', 'https://wordpress.com/settings/jetpack/' . $this->domain );
298 }
299 }
300
301 /**
302 * Adds WP Admin menu.
303 */
304 public function add_wp_admin_menu() {
305 global $menu;
306
307 // Attempt to get last position.
308 ksort( $menu );
309 end( $menu );
310 $position = key( $menu );
311
312 $this->add_admin_menu_separator( ++$position );
313 add_menu_page( __( 'WP Admin', 'jetpack' ), __( 'WP Admin', 'jetpack' ), 'read', 'index.php', null, 'dashicons-wordpress-alt', $position );
314 }
315 }
316