PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
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 / jetpack_vendor / automattic / jetpack-masterbar / src / admin-menu / class-admin-menu.php
jetpack / jetpack_vendor / automattic / jetpack-masterbar / src / admin-menu Last commit date
class-admin-menu.php 5 months ago class-atomic-admin-menu.php 3 weeks ago class-base-admin-menu.php 2 months ago class-dashboard-switcher-tracking.php 2 years ago class-domain-only-admin-menu.php 9 months ago class-wpcom-admin-menu.php 5 months ago class-wpcom-email-subscription-checker.php 2 years ago dashicon-set.php 2 years ago globe-icon.svg 2 years ago load.php 9 months ago menu-mappings.php 9 months ago
class-admin-menu.php
232 lines
1 <?php
2 /**
3 * Admin Menu file.
4 *
5 * @package automattic/jetpack-masterbar
6 */
7
8 namespace Automattic\Jetpack\Masterbar;
9
10 require_once __DIR__ . '/class-base-admin-menu.php';
11
12 /**
13 * Class Admin_Menu.
14 */
15 class Admin_Menu extends Base_Admin_Menu {
16
17 /**
18 * Create the desired menu output.
19 */
20 public function reregister_menu_items() {
21 $this->add_appearance_menu();
22 $this->add_plugins_menu();
23 $this->add_users_menu();
24
25 // Remove Links Manager menu since its usage is discouraged. https://github.com/Automattic/wp-calypso/issues/51188.
26 // @see https://core.trac.wordpress.org/ticket/21307#comment:73.
27 if ( $this->should_disable_links_manager() ) {
28 remove_menu_page( 'link-manager.php' );
29 }
30
31 ksort( $GLOBALS['menu'] );
32 }
33
34 /**
35 * Get the preferred view for the given screen.
36 *
37 * @param string $screen Screen identifier.
38 * @param bool $fallback_global_preference (Optional) Whether the global preference for all screens should be used
39 * as fallback if there is no specific preference for the given screen.
40 * Default: true.
41 * @return string
42 */
43 public function get_preferred_view( $screen, $fallback_global_preference = true ) {
44 $force_default_view = in_array( $screen, array( 'users.php', 'options-general.php' ), true );
45 $use_wp_admin = $this->use_wp_admin_interface();
46
47 // When no preferred view has been set for "Users > All Users" or "Settings > General", keep the previous
48 // behavior that forced the default view regardless of the global preference.
49 // This behavior is overriden by the wpcom_admin_interface option when it is set to wp-admin.
50 if ( ! $use_wp_admin && $fallback_global_preference && $force_default_view ) {
51 $preferred_view = parent::get_preferred_view( $screen, false );
52 if ( self::UNKNOWN_VIEW === $preferred_view ) {
53 return self::DEFAULT_VIEW;
54 }
55 return $preferred_view;
56 }
57
58 return parent::get_preferred_view( $screen, $fallback_global_preference );
59 }
60
61 /**
62 * Check if Links Manager is being used.
63 */
64 public function should_disable_links_manager() {
65 // The max ID number of the auto-generated links.
66 // See /wp-content/mu-plugins/wpcom-wp-install-defaults.php in WP.com.
67 $max_default_id = 10;
68
69 // We are only checking the latest entry link_id so are limiting the query to 1.
70 $link_manager_links = get_bookmarks(
71 array(
72 'orderby' => 'link_id',
73 'order' => 'DESC',
74 'limit' => 1,
75 'hide_invisible' => 0,
76 )
77 );
78
79 // Ordered links by ID descending, check if the first ID is more than $max_default_id.
80 if ( is_countable( $link_manager_links ) && count( $link_manager_links ) > 0 && $link_manager_links[0]->link_id > $max_default_id ) {
81 return false;
82 }
83
84 return true;
85 }
86
87 /**
88 * Adds Appearance menu.
89 *
90 * @return string The Customizer URL.
91 */
92 public function add_appearance_menu() {
93 $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
94 $default_customize_slug = add_query_arg( 'return', rawurlencode( remove_query_arg( wp_removable_query_args(), $request_uri ) ), 'customize.php' );
95 $default_customize_header_slug_1 = add_query_arg( array( 'autofocus' => array( 'control' => 'header_image' ) ), $default_customize_slug );
96 // TODO: Remove WPCom_Theme_Customizer::modify_header_menu_links() and WPcom_Custom_Header::modify_admin_menu_links().
97 $default_customize_header_slug_2 = admin_url( 'themes.php?page=custom-header' );
98 $default_customize_background_slug_1 = add_query_arg( array( 'autofocus' => array( 'control' => 'background_image' ) ), $default_customize_slug );
99 // TODO: Remove Colors_Manager::modify_header_menu_links() and Colors_Manager_Common::modify_header_menu_links().
100 $default_customize_background_slug_2 = add_query_arg( array( 'autofocus' => array( 'section' => 'colors_manager_tool' ) ), admin_url( 'customize.php' ) );
101
102 if ( $this->is_api_request ) {
103 // In case this is an api request we will have to add the 'return' querystring via JS.
104 $customize_url = 'customize.php';
105 } else {
106 $customize_url = $default_customize_slug;
107 }
108
109 $submenus_to_update = array(
110 $default_customize_slug => $customize_url,
111 $default_customize_header_slug_1 => add_query_arg( array( 'autofocus' => array( 'control' => 'header_image' ) ), $customize_url ),
112 $default_customize_header_slug_2 => add_query_arg( array( 'autofocus' => array( 'control' => 'header_image' ) ), $customize_url ),
113 $default_customize_background_slug_1 => add_query_arg( array( 'autofocus' => array( 'section' => 'colors_manager_tool' ) ), $customize_url ),
114 $default_customize_background_slug_2 => add_query_arg( array( 'autofocus' => array( 'section' => 'colors_manager_tool' ) ), $customize_url ),
115 );
116
117 if ( self::DEFAULT_VIEW === $this->get_preferred_view( 'themes.php' ) ) {
118 $submenus_to_update['themes.php'] = 'https://wordpress.com/themes/' . $this->domain;
119 }
120
121 $this->update_submenus( 'themes.php', $submenus_to_update );
122
123 $this->hide_submenu_page( 'themes.php', 'custom-header' );
124 $this->hide_submenu_page( 'themes.php', 'custom-background' );
125
126 return $customize_url;
127 }
128
129 /**
130 * Adds Plugins menu.
131 */
132 public function add_plugins_menu() {
133 if ( self::CLASSIC_VIEW === $this->get_preferred_view( 'plugins.php' ) ) {
134 return;
135 }
136 $this->hide_submenu_page( 'plugins.php', 'plugin-install.php' );
137 $this->hide_submenu_page( 'plugins.php', 'plugin-editor.php' );
138
139 $this->update_menu( 'plugins.php', 'https://wordpress.com/plugins/' . $this->domain );
140 }
141
142 /**
143 * Adds Users menu.
144 */
145 public function add_users_menu() {
146 $submenus_to_update = array(
147 'profile.php' => 'https://wordpress.com/me',
148 );
149
150 if ( self::DEFAULT_VIEW === $this->get_preferred_view( 'users.php' ) ) {
151 $submenus_to_update['users.php'] = 'https://wordpress.com/people/team/' . $this->domain;
152 $submenus_to_update['user-new.php'] = 'https://wordpress.com/people/new/' . $this->domain;
153 }
154
155 $slug = current_user_can( 'list_users' ) ? 'users.php' : 'profile.php';
156 $this->update_submenus( $slug, $submenus_to_update );
157 }
158
159 /**
160 * Renders the upsell nudge directly in the admin menu.
161 *
162 * This renders server-side via the `adminmenu` hook to avoid the layout
163 * shift caused by the previous AJAX-based approach.
164 */
165 public function render_upsell_nudge() {
166 // Skip if jetpack-mu-wpcom is already rendering the upsell banner.
167 if ( has_action( 'adminmenu', 'wpcom_add_sidebar_notice_menu_page' ) ) {
168 return;
169 }
170
171 /** This action is already documented in \Automattic\Jetpack\JITMS\JITM */
172 if ( ! apply_filters( 'jetpack_just_in_time_msgs', true ) ) {
173 return;
174 }
175
176 $nudge = $this->get_upsell_nudge();
177 if ( ! $nudge ) {
178 return;
179 }
180
181 $link = $nudge['link'];
182 if ( str_starts_with( $link, '/' ) ) {
183 $link = 'https://wordpress.com' . $link;
184 }
185 ?>
186 <li class="wp-not-current-submenu menu-top menu-icon-generic toplevel_page_site-notices" id="toplevel_page_site-notices">
187 <a href="<?php echo esc_url( $link ); ?>" class="wp-not-current-submenu menu-top menu-icon-generic toplevel_page_site-notices">
188 <div class="wp-menu-arrow">
189 <div></div>
190 </div>
191 <div class="wp-menu-image dashicons-before dashicons-admin-generic" aria-hidden="true"><br></div>
192 <div class="wp-menu-name">
193 <div class="upsell_banner">
194 <div class="banner__info">
195 <div class="banner__title">
196 <?php echo wp_kses( $nudge['content'], array() ); ?>
197 </div>
198 </div>
199 <div class="banner__action">
200 <button type="button" class="button">
201 <?php echo wp_kses( $nudge['cta'], array() ); ?>
202 </button>
203 </div>
204 <?php if ( $nudge['dismissible'] ) : ?>
205 <svg xmlns="http://www.w3.org/2000/svg" data-feature_class="<?php echo esc_attr( $nudge['feature_class'] ); ?>" data-feature_id="<?php echo esc_attr( $nudge['id'] ); ?>" viewBox="0 0 24 24" class="gridicon gridicons-cross dismissible-card__close-icon" height="24" width="24"><g><path d="M18.36 19.78L12 13.41l-6.36 6.37-1.42-1.42L10.59 12 4.22 5.64l1.42-1.42L12 10.59l6.36-6.36 1.41 1.41L13.41 12l6.36 6.36z"></path></g></svg>
206 <?php endif; ?>
207 </div>
208 </div>
209 </a>
210 </li>
211 <script>
212 ( function ( el ) {
213 if ( el && el.parentNode ) {
214 el.parentNode.prepend( el );
215 }
216 } )( document.getElementById( 'toplevel_page_site-notices' ) );
217 </script>
218 <?php
219 }
220
221 /**
222 * Returns the first available upsell nudge.
223 * Needs to be implemented separately for each child menu class.
224 * Empty by default.
225 *
226 * @return array
227 */
228 public function get_upsell_nudge() {
229 return array();
230 }
231 }
232