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