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-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 /* 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 add_submenu_page( 'jetpack', esc_attr__( 'Subscribers', 'jetpack' ), __( 'Subscribers', 'jetpack' ), 'list_users', 'https://wordpress.com/subscribers/' . $this->domain, null, 3 );
197 }
198
199 /**
200 * Adds Appearance menu.
201 *
202 * @return string The Customizer URL.
203 */
204 public function add_appearance_menu() {
205 $themes_url = 'https://wordpress.com/themes/' . $this->domain;
206 // Customize on Jetpack sites is always done on WP Admin (unsupported by Calypso).
207 $customize_url = 'customize.php';
208
209 add_menu_page( esc_attr__( 'Appearance', 'jetpack' ), __( 'Appearance', 'jetpack' ), 'switch_themes', $themes_url, null, 'dashicons-admin-appearance', 60 );
210 add_submenu_page( $themes_url, esc_attr__( 'Themes', 'jetpack' ), __( 'Themes', 'jetpack' ), 'switch_themes', 'https://wordpress.com/themes/' . $this->domain );
211
212 if ( ! has_action( 'customize_register' ) && function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ) {
213 return $customize_url;
214 }
215
216 add_submenu_page( $themes_url, esc_attr__( 'Customize', 'jetpack' ), __( 'Customize', 'jetpack' ), 'customize', $customize_url );
217
218 return $customize_url;
219 }
220
221 /**
222 * Adds Plugins menu.
223 */
224 public function add_plugins_menu() {
225 add_menu_page( esc_attr__( 'Plugins', 'jetpack' ), __( 'Plugins', 'jetpack' ), 'activate_plugins', 'https://wordpress.com/plugins/' . $this->domain, null, 'dashicons-admin-plugins', 65 );
226 }
227
228 /**
229 * Adds Users menu.
230 */
231 public function add_users_menu() {
232 if ( current_user_can( 'list_users' ) ) {
233 add_menu_page( esc_attr__( 'Users', 'jetpack' ), __( 'Users', 'jetpack' ), 'list_users', 'https://wordpress.com/people/team/' . $this->domain, null, 'dashicons-admin-users', 70 );
234 } else {
235 add_menu_page( esc_attr__( 'My Profile', 'jetpack' ), __( 'Profile', 'jetpack' ), 'read', 'https://wordpress.com/me', null, 'dashicons-admin-users', 70 );
236 }
237 }
238
239 /**
240 * Adds Tools menu.
241 */
242 public function add_tools_menu() {
243 add_menu_page( esc_attr__( 'Tools', 'jetpack' ), __( 'Tools', 'jetpack' ), 'publish_posts', 'tools.php', null, 'dashicons-admin-tools', 75 );
244
245 add_submenu_page( 'tools.php', esc_attr__( 'Marketing', 'jetpack' ), __( 'Marketing', 'jetpack' ), 'publish_posts', 'https://wordpress.com/marketing/tools/' . $this->domain );
246
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
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