Completed
Push — update/simple-payments-block ( 3e7154...dd9bd2 )
by
unknown
09:20 queued 02:30
created

Jetpack_Admin_Page::admin_page_load()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
// Shared logic between Jetpack admin pages
4
abstract class Jetpack_Admin_Page {
5
	// Add page specific actions given the page hook
6
	abstract function add_page_actions( $hook );
7
8
	// Create a menu item for the page and returns the hook
9
	abstract function get_page_hook();
10
11
	// Enqueue and localize page specific scripts
12
	abstract function page_admin_scripts();
13
14
	// Render page specific HTML
15
	abstract function page_render();
16
17
	/**
18
	 * Should we block the page rendering because the site is in IDC?
19
	 *
20
	 * @var bool
21
	 */
22
	static $block_page_rendering_for_idc;
23
24
	/**
25
	 * Function called after admin_styles to load any additional needed styles.
26
	 *
27
	 * @since 4.3.0
28
	 */
29
	function additional_styles() {}
30
31
	function __construct() {
32
		$this->jetpack                      = Jetpack::init();
0 ignored issues
show
Bug introduced by
The property jetpack does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
33
		self::$block_page_rendering_for_idc = (
34
			Jetpack::validate_sync_error_idc_option() && ! Jetpack_Options::get_option( 'safe_mode_confirmed' )
35
		);
36
	}
37
38
	function add_actions() {
39
		global $pagenow;
40
41
		// If user is not an admin and site is in Dev Mode, don't do anything
42
		if ( ! current_user_can( 'manage_options' ) && Jetpack::is_development_mode() ) {
43
			return;
44
		}
45
46
		// Don't add in the modules page unless modules are available!
47
		if ( $this->dont_show_if_not_active && ! Jetpack::is_active() && ! Jetpack::is_development_mode() ) {
0 ignored issues
show
Bug introduced by
The property dont_show_if_not_active does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
48
			return;
49
		}
50
51
		// Initialize menu item for the page in the admin
52
		$hook = $this->get_page_hook();
53
54
		// Attach hooks common to all Jetpack admin pages based on the created
55
		// hook
56
		add_action( "load-$hook", array( $this, 'admin_help' ) );
57
		add_action( "load-$hook", array( $this, 'admin_page_load' ) );
58
		add_action( "admin_print_styles-$hook", array( $this, 'admin_styles' ) );
59
		add_action( "admin_print_scripts-$hook", array( $this, 'admin_scripts' ) );
60
61
		if ( ! self::$block_page_rendering_for_idc ) {
62
			add_action( "admin_print_styles-$hook", array( $this, 'additional_styles' ) );
63
		}
64
		// If someone just activated Jetpack, let's show them a fullscreen connection banner.
65
		if (
66
			( 'admin.php' === $pagenow && isset( $_GET['page'] ) && 'jetpack' === $_GET['page'] )
67
			&& ! Jetpack::is_active()
68
			&& current_user_can( 'jetpack_connect' )
69
			&& ! Jetpack::is_development_mode()
70
		) {
71
			add_action( 'admin_enqueue_scripts', array( 'Jetpack_Connection_Banner', 'enqueue_banner_scripts' ) );
72
			add_action( 'admin_enqueue_scripts', array( 'Jetpack_Connection_Banner', 'enqueue_connect_button_scripts' ) );
73
			add_action( 'admin_print_styles', array( Jetpack::init(), 'admin_banner_styles' ) );
74
			add_action( 'admin_notices', array( 'Jetpack_Connection_Banner', 'render_connect_prompt_full_screen' ) );
75
			delete_transient( 'activated_jetpack' );
76
		}
77
78
		// Check if the site plan changed and deactivate modules accordingly.
79
		add_action( 'current_screen', array( $this, 'check_plan_deactivate_modules' ) );
80
81
		// Attach page specific actions in addition to the above
82
		$this->add_page_actions( $hook );
83
	}
84
85
	// Render the page with a common top and bottom part, and page specific content
86
	function render() {
87
		// We're in an IDC: we need a decision made before we show the UI again.
88
		if ( self::$block_page_rendering_for_idc ) {
89
			return;
90
		}
91
92
		// Check if we are looking at the main dashboard
93
		if ( isset( $_GET['page'] ) && 'jetpack' === $_GET['page'] ) {
94
			$this->page_render();
95
			return;
96
		}
97
		self::wrap_ui( array( $this, 'page_render' ) );
98
	}
99
100
	function admin_help() {
101
		$this->jetpack->admin_help();
102
	}
103
104
	function admin_page_load() {
105
		// This is big.  For the moment, just call the existing one.
106
		$this->jetpack->admin_page_load();
107
	}
108
109
	// Add page specific scripts and jetpack stats for all menu pages
110
	function admin_scripts() {
111
		$this->page_admin_scripts(); // Delegate to inheriting class
112
		add_action( 'admin_footer', array( $this->jetpack, 'do_stats' ) );
113
	}
114
115
	// Enqueue the Jetpack admin stylesheet
116
	function admin_styles() {
117
		$min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
118
119
		wp_enqueue_style( 'jetpack-admin', plugins_url( "css/jetpack-admin{$min}.css", JETPACK__PLUGIN_FILE ), array( 'genericons' ), JETPACK__VERSION . '-20121016' );
120
		wp_style_add_data( 'jetpack-admin', 'rtl', 'replace' );
121
		wp_style_add_data( 'jetpack-admin', 'suffix', $min );
122
	}
123
124
	/**
125
	 * Checks if REST API is enabled.
126
	 *
127
	 * @since 4.4.2
128
	 *
129
	 * @return bool
130
	 */
131
	function is_rest_api_enabled() {
132
		return /** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
133
			apply_filters( 'rest_enabled', true ) &&
134
			/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
135
			apply_filters( 'rest_jsonp_enabled', true ) &&
136
			/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
137
			apply_filters( 'rest_authentication_errors', true );
138
	}
139
140
	/**
141
	 * Checks the site plan and deactivates modules that were active but are no longer included in the plan.
142
	 *
143
	 * @since 4.4.0
144
	 *
145
	 * @param $page
146
	 *
147
	 * @return array
148
	 */
149
	function check_plan_deactivate_modules( $page ) {
150
		if (
151
			Jetpack::is_development_mode()
152
			|| ! in_array(
153
				$page->base,
154
				array(
155
					'toplevel_page_jetpack',
156
					'admin_page_jetpack_modules',
157
					'jetpack_page_vaultpress',
158
					'jetpack_page_stats',
159
					'jetpack_page_akismet-key-config',
160
				)
161
			)
162
		) {
163
			return false;
164
		}
165
166
		$current = Jetpack_Plan::get();
167
168
		$to_deactivate = array();
169
		if ( isset( $current['product_slug'] ) ) {
170
			$active = Jetpack::get_active_modules();
171
			switch ( $current['product_slug'] ) {
172 View Code Duplication
				case 'jetpack_free':
173
					$to_deactivate = array( 'seo-tools', 'videopress', 'google-analytics', 'wordads', 'search' );
174
					break;
175
				case 'jetpack_personal':
176 View Code Duplication
				case 'jetpack_personal_monthly':
177
					$to_deactivate = array( 'seo-tools', 'videopress', 'google-analytics', 'wordads', 'search' );
178
					break;
179
				case 'jetpack_premium':
180
				case 'jetpack_premium_monthly':
181
					$to_deactivate = array( 'seo-tools', 'google-analytics', 'search' );
182
					break;
183
			}
184
			$to_deactivate = array_intersect( $active, $to_deactivate );
185
186
			$to_leave_enabled = array();
187
			foreach ( $to_deactivate as $feature ) {
188
				if ( Jetpack_Plan::supports( $feature ) ) {
189
					$to_leave_enabled [] = $feature;
190
				}
191
			}
192
			$to_deactivate = array_diff( $to_deactivate, $to_leave_enabled );
193
194
			if ( ! empty( $to_deactivate ) ) {
195
				Jetpack::update_active_modules( array_filter( array_diff( $active, $to_deactivate ) ) );
196
			}
197
		}
198
		return array(
199
			'current'    => $current,
200
			'deactivate' => $to_deactivate,
201
		);
202
	}
203
204
	static function load_wrapper_styles() {
205
		$rtl = is_rtl() ? '.rtl' : '';
206
		wp_enqueue_style( 'dops-css', plugins_url( "_inc/build/admin{$rtl}.css", JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION );
207
		wp_enqueue_style( 'components-css', plugins_url( "_inc/build/style.min{$rtl}.css", JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION );
208
		$custom_css = '
209
			#wpcontent {
210
				padding-left: 0 !important;
211
			}
212
			#wpbody-content {
213
				background-color: #f6f6f6;
214
			}
215
216
			#jp-plugin-container .wrap {
217
				margin: 0 auto;
218
				max-width:45rem;
219
				padding: 0 1.5rem;
220
			}
221
			#jp-plugin-container.is-wide .wrap {
222
				max-width: 1040px;
223
			}
224
			#jp-plugin-container .wrap .jetpack-wrap-container {
225
				margin-top: 1em;
226
			}
227
			.wp-admin #dolly {
228
			    float: none;
229
			    position: relative;
230
			    right: 0;
231
			    left: 0;
232
			    top: 0;
233
			    padding: .625rem;
234
			    text-align: right;
235
			    background: #fff;
236
			    font-size: .75rem;
237
			    font-style: italic;
238
			    color: #87a6bc;
239
			    border-bottom: 1px #e9eff3 solid;
240
			}
241
		';
242
		wp_add_inline_style( 'dops-css', $custom_css );
243
	}
244
245
	public static function wrap_ui( $callback, $args = array() ) {
246
		$defaults          = array(
247
			'is-wide'  => false,
248
			'show-nav' => true,
249
		);
250
		$args              = wp_parse_args( $args, $defaults );
251
		$jetpack_admin_url = admin_url( 'admin.php?page=jetpack' );
252
		$jetpack_about_url = ( Jetpack::is_active() || Jetpack::is_development_mode() )
253
			? admin_url( 'admin.php?page=jetpack_about' )
254
			: 'https://jetpack.com';
255
256
		?>
257
		<div id="jp-plugin-container" class="
258
		<?php
259
		if ( $args['is-wide'] ) {
260
			echo 'is-wide'; }
261
		?>
262
		">
263
264
			<div class="jp-masthead">
265
				<div class="jp-masthead__inside-container">
266
					<div class="jp-masthead__logo-container">
267
						<a class="jp-masthead__logo-link" href="<?php echo esc_url( $jetpack_admin_url ); ?>">
268
							<svg class="jetpack-logo__masthead" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" height="32" viewBox="0 0 118 32"><path fill="#00BE28" d="M16,0C7.2,0,0,7.2,0,16s7.2,16,16,16s16-7.2,16-16S24.8,0,16,0z M15,19H7l8-16V19z M17,29V13h8L17,29z"></path><path d="M41.3,26.6c-0.5-0.7-0.9-1.4-1.3-2.1c2.3-1.4,3-2.5,3-4.6V8h-3V6h6v13.4C46,22.8,45,24.8,41.3,26.6z"></path><path d="M65,18.4c0,1.1,0.8,1.3,1.4,1.3c0.5,0,2-0.2,2.6-0.4v2.1c-0.9,0.3-2.5,0.5-3.7,0.5c-1.5,0-3.2-0.5-3.2-3.1V12H60v-2h2.1V7.1 H65V10h4v2h-4V18.4z"></path><path d="M71,10h3v1.3c1.1-0.8,1.9-1.3,3.3-1.3c2.5,0,4.5,1.8,4.5,5.6s-2.2,6.3-5.8,6.3c-0.9,0-1.3-0.1-2-0.3V28h-3V10z M76.5,12.3 c-0.8,0-1.6,0.4-2.5,1.2v5.9c0.6,0.1,0.9,0.2,1.8,0.2c2,0,3.2-1.3,3.2-3.9C79,13.4,78.1,12.3,76.5,12.3z"></path><path d="M93,22h-3v-1.5c-0.9,0.7-1.9,1.5-3.5,1.5c-1.5,0-3.1-1.1-3.1-3.2c0-2.9,2.5-3.4,4.2-3.7l2.4-0.3v-0.3c0-1.5-0.5-2.3-2-2.3 c-0.7,0-2.3,0.5-3.7,1.1L84,11c1.2-0.4,3-1,4.4-1c2.7,0,4.6,1.4,4.6,4.7L93,22z M90,16.4l-2.2,0.4c-0.7,0.1-1.4,0.5-1.4,1.6 c0,0.9,0.5,1.4,1.3,1.4s1.5-0.5,2.3-1V16.4z"></path><path d="M104.5,21.3c-1.1,0.4-2.2,0.6-3.5,0.6c-4.2,0-5.9-2.4-5.9-5.9c0-3.7,2.3-6,6.1-6c1.4,0,2.3,0.2,3.2,0.5V13 c-0.8-0.3-2-0.6-3.2-0.6c-1.7,0-3.2,0.9-3.2,3.6c0,2.9,1.5,3.8,3.3,3.8c0.9,0,1.9-0.2,3.2-0.7V21.3z"></path><path d="M110,15.2c0.2-0.3,0.2-0.8,3.8-5.2h3.7l-4.6,5.7l5,6.3h-3.7l-4.2-5.8V22h-3V6h3V15.2z"></path><path d="M58.5,21.3c-1.5,0.5-2.7,0.6-4.2,0.6c-3.6,0-5.8-1.8-5.8-6c0-3.1,1.9-5.9,5.5-5.9s4.9,2.5,4.9,4.9c0,0.8,0,1.5-0.1,2h-7.3 c0.1,2.5,1.5,2.8,3.6,2.8c1.1,0,2.2-0.3,3.4-0.7C58.5,19,58.5,21.3,58.5,21.3z M56,15c0-1.4-0.5-2.9-2-2.9c-1.4,0-2.3,1.3-2.4,2.9 C51.6,15,56,15,56,15z"></path></svg>
269
						</a>
270
					</div>
271
					<?php
272
					if ( $args['show-nav'] ) :
273
						?>
274
						<div class="jp-masthead__nav">
275
							<?php
276
							if ( is_network_admin() ) {
277
								$current_screen = get_current_screen();
278
279
								$highlight_current_sites    = ( 'toplevel_page_jetpack-network' === $current_screen->id ? 'is-primary' : '' );
280
								$highlight_current_settings = ( 'jetpack_page_jetpack-settings-network' === $current_screen->id ? 'is-primary' : '' );
281
								?>
282
								<span class="dops-button-group">
283
									<?php
284 View Code Duplication
									if ( current_user_can( 'jetpack_network_sites_page' ) ) {
285
										?>
286
										<a href="<?php echo esc_url( network_admin_url( 'admin.php?page=jetpack' ) ); ?>" type="button" class="<?php echo esc_attr( $highlight_current_sites ); ?> dops-button is-compact" title="<?php esc_html_e( "Manage your network's Jetpack Sites.", 'jetpack' ); ?>"><?php echo esc_html_x( 'Sites', 'Navigation item', 'jetpack' ); ?></a>
287
										<?php
288
									} if ( current_user_can( 'jetpack_network_settings_page' ) ) {
289
										?>
290
										<a href="<?php echo esc_url( network_admin_url( 'admin.php?page=jetpack-settings' ) ); ?>" type="button" class="<?php echo esc_attr( $highlight_current_settings ); ?> dops-button is-compact" title="<?php esc_html_e( "Manage your network's Jetpack Sites.", 'jetpack' ); ?>"><?php echo esc_html_x( 'Network Settings', 'Navigation item', 'jetpack' ); ?></a>
291
										<?php
292
									}
293
									?>
294
								</span>
295
							<?php } else { ?>
296
								<span class="dops-button-group">
297
									<a href="<?php echo esc_url( $jetpack_admin_url ); ?>" type="button" class="dops-button is-compact"><?php esc_html_e( 'Dashboard', 'jetpack' ); ?></a>
298
														<?php
299
														if ( current_user_can( 'jetpack_manage_modules' ) ) {
300
															?>
301
										<a href="<?php echo esc_url( $jetpack_admin_url . '#/settings' ); ?>" type="button" class="dops-button is-compact"><?php esc_html_e( 'Settings', 'jetpack' ); ?></a>
302
															<?php
303
														}
304
														?>
305
								</span>
306
							<?php } ?>
307
						</div>
308
					<?php endif; ?>
309
				</div>
310
			</div>
311
			<div class="wrap"><div id="jp-admin-notices" aria-live="polite"></div></div>
312
			<!-- START OF CALLBACK -->
313
			<?php
314
			ob_start();
315
			call_user_func( $callback );
316
			$callback_ui = ob_get_contents();
317
			ob_end_clean();
318
			echo $callback_ui;
319
			?>
320
			<!-- END OF CALLBACK -->
321
			<div class="jp-footer">
322
				<div class="jp-footer__a8c-attr-container">
323
					<a href="<?php echo esc_url( $jetpack_about_url ); ?>">
324
						<svg role="img" class="jp-footer__a8c-attr" x="0" y="0" viewBox="0 0 935 38.2" enable-background="new 0 0 935 38.2" aria-labelledby="a8c-svg-title"><title id="a8c-svg-title">An Automattic Airline</title><path d="M317.1 38.2c-12.6 0-20.7-9.1-20.7-18.5v-1.2c0-9.6 8.2-18.5 20.7-18.5 12.6 0 20.8 8.9 20.8 18.5v1.2C337.9 29.1 329.7 38.2 317.1 38.2zM331.2 18.6c0-6.9-5-13-14.1-13s-14 6.1-14 13v0.9c0 6.9 5 13.1 14 13.1s14.1-6.2 14.1-13.1V18.6zM175 36.8l-4.7-8.8h-20.9l-4.5 8.8h-7L157 1.3h5.5L182 36.8H175zM159.7 8.2L152 23.1h15.7L159.7 8.2zM212.4 38.2c-12.7 0-18.7-6.9-18.7-16.2V1.3h6.6v20.9c0 6.6 4.3 10.5 12.5 10.5 8.4 0 11.9-3.9 11.9-10.5V1.3h6.7V22C231.4 30.8 225.8 38.2 212.4 38.2zM268.6 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H268.6zM397.3 36.8V8.7l-1.8 3.1 -14.9 25h-3.3l-14.7-25 -1.8-3.1v28.1h-6.5V1.3h9.2l14 24.4 1.7 3 1.7-3 13.9-24.4h9.1v35.5H397.3zM454.4 36.8l-4.7-8.8h-20.9l-4.5 8.8h-7l19.2-35.5h5.5l19.5 35.5H454.4zM439.1 8.2l-7.7 14.9h15.7L439.1 8.2zM488.4 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H488.4zM537.3 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H537.3zM569.3 36.8V4.6c2.7 0 3.7-1.4 3.7-3.4h2.8v35.5L569.3 36.8 569.3 36.8zM628 11.3c-3.2-2.9-7.9-5.7-14.2-5.7 -9.5 0-14.8 6.5-14.8 13.3v0.7c0 6.7 5.4 13 15.3 13 5.9 0 10.8-2.8 13.9-5.7l4 4.2c-3.9 3.8-10.5 7.1-18.3 7.1 -13.4 0-21.6-8.7-21.6-18.3v-1.2c0-9.6 8.9-18.7 21.9-18.7 7.5 0 14.3 3.1 18 7.1L628 11.3zM321.5 12.4c1.2 0.8 1.5 2.4 0.8 3.6l-6.1 9.4c-0.8 1.2-2.4 1.6-3.6 0.8l0 0c-1.2-0.8-1.5-2.4-0.8-3.6l6.1-9.4C318.7 11.9 320.3 11.6 321.5 12.4L321.5 12.4z"></path><path d="M37.5 36.7l-4.7-8.9H11.7l-4.6 8.9H0L19.4 0.8H25l19.7 35.9H37.5zM22 7.8l-7.8 15.1h15.9L22 7.8zM82.8 36.7l-23.3-24 -2.3-2.5v26.6h-6.7v-36H57l22.6 24 2.3 2.6V0.8h6.7v35.9H82.8z"></path><path d="M719.9 37l-4.8-8.9H694l-4.6 8.9h-7.1l19.5-36h5.6l19.8 36H719.9zM704.4 8l-7.8 15.1h15.9L704.4 8zM733 37V1h6.8v36H733zM781 37c-1.8 0-2.6-2.5-2.9-5.8l-0.2-3.7c-0.2-3.6-1.7-5.1-8.4-5.1h-12.8V37H750V1h19.6c10.8 0 15.7 4.3 15.7 9.9 0 3.9-2 7.7-9 9 7 0.5 8.5 3.7 8.6 7.9l0.1 3c0.1 2.5 0.5 4.3 2.2 6.1V37H781zM778.5 11.8c0-2.6-2.1-5.1-7.9-5.1h-13.8v10.8h14.4c5 0 7.3-2.4 7.3-5.2V11.8zM794.8 37V1h6.8v30.4h28.2V37H794.8zM836.7 37V1h6.8v36H836.7zM886.2 37l-23.4-24.1 -2.3-2.5V37h-6.8V1h6.5l22.7 24.1 2.3 2.6V1h6.8v36H886.2zM902.3 37V1H935v5.6h-26v9.2h20v5.5h-20v10.1h26V37H902.3z"></path></svg>
325
					</a>
326
				</div>
327
				<ul class="jp-footer__links">
328
					<li class="jp-footer__link-item">
329
						<a href="https://jetpack.com" target="_blank" rel="noopener noreferrer" class="jp-footer__link" title="<?php esc_html_e( 'Jetpack version', 'jetpack' ); ?>">Jetpack <?php echo JETPACK__VERSION; ?></a>
330
					</li>
331
					<li class="jp-footer__link-item">
332
						<a href="<?php echo esc_url( $jetpack_about_url ); ?>" title="<?php esc_attr__( 'About Jetpack', 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html__( 'About', 'jetpack' ); ?></a>
333
					</li>
334
					<li class="jp-footer__link-item">
335
						<a href="https://wordpress.com/tos/" target="_blank" rel="noopener noreferrer" title="<?php esc_html__( 'WordPress.com Terms of Service', 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Terms', 'Navigation item', 'jetpack' ); ?></a>
336
					</li>
337
					<li class="jp-footer__link-item">
338
						<a href="<?php echo esc_url( $jetpack_admin_url . '#/privacy' ); ?>" rel="noopener noreferrer" title="<?php esc_html_e( "Automattic's Privacy Policy", 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Privacy', 'Navigation item', 'jetpack' ); ?></a>
339
					</li>
340 View Code Duplication
					<?php if ( is_multisite() && current_user_can( 'jetpack_network_sites_page' ) ) { ?>
341
						<li class="jp-footer__link-item">
342
							<a href="<?php echo esc_url( network_admin_url( 'admin.php?page=jetpack' ) ); ?>" title="<?php esc_html_e( "Manage your network's Jetpack Sites.", 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Network Sites', 'Navigation item', 'jetpack' ); ?></a>
343
						</li>
344
					<?php } ?>
345 View Code Duplication
					<?php if ( is_multisite() && current_user_can( 'jetpack_network_settings_page' ) ) { ?>
346
						<li class="jp-footer__link-item">
347
							<a href="<?php echo esc_url( network_admin_url( 'admin.php?page=jetpack-settings' ) ); ?>" title="<?php esc_html_e( "Manage your network's Jetpack Sites.", 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Network Settings', 'Navigation item', 'jetpack' ); ?></a>
348
						</li>
349
					<?php } ?>
350
					<?php if ( current_user_can( 'manage_options' ) ) { ?>
351
						<li class="jp-footer__link-item">
352
							<a href="<?php echo esc_url( admin_url( 'admin.php?page=jetpack_modules' ) ); ?>" title="<?php esc_html_e( "Access the full list of Jetpack modules available on your site.", 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Modules', 'Navigation item', 'jetpack' ); ?></a>
353
						</li>
354
						<li class="jp-footer__link-item">
355
							<a href="<?php echo esc_url( admin_url( 'admin.php?page=jetpack-debugger' ) ); ?>" title="<?php esc_html_e( "Test your site's compatibility with Jetpack.", 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Debug', 'Navigation item', 'jetpack' ); ?></a>
356
						</li>
357
					<?php } ?>
358
				</ul>
359
			</div>
360
		</div>
361
		<?php
362
		return;
363
	}
364
}
365