Completed
Push — update/wp-55-autoupdate ( 3add47...edccb1 )
by
unknown
07:48
created

Jetpack_Admin_Page::add_actions()   D

Complexity

Conditions 19
Paths 10

Size

Total Lines 57

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 19
nc 10
nop 0
dl 0
loc 57
rs 4.5166
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
use Automattic\Jetpack\Status;
4
use Automattic\Jetpack\Redirect;
5
6
// Shared logic between Jetpack admin pages
7
abstract class Jetpack_Admin_Page {
8
	// Add page specific actions given the page hook
9
	abstract function add_page_actions( $hook );
10
11
	// Create a menu item for the page and returns the hook
12
	abstract function get_page_hook();
13
14
	// Enqueue and localize page specific scripts
15
	abstract function page_admin_scripts();
16
17
	// Render page specific HTML
18
	abstract function page_render();
19
20
	/**
21
	 * Should we block the page rendering because the site is in IDC?
22
	 *
23
	 * @var bool
24
	 */
25
	static $block_page_rendering_for_idc;
26
27
	/**
28
	 * Function called after admin_styles to load any additional needed styles.
29
	 *
30
	 * @since 4.3.0
31
	 */
32
	function additional_styles() {}
33
34
	/**
35
	 * The constructor.
36
	 */
37
	public function __construct() {
38
		add_action( 'jetpack_loaded', array( $this, 'on_jetpack_loaded' ) );
39
	}
40
41
	/**
42
	 * Runs on Jetpack being ready to load its packages.
43
	 *
44
	 * @param Jetpack $jetpack object.
45
	 */
46
	public function on_jetpack_loaded( $jetpack ) {
47
		$this->jetpack = $jetpack;
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...
48
49
		self::$block_page_rendering_for_idc = (
50
			Jetpack::validate_sync_error_idc_option() && ! Jetpack_Options::get_option( 'safe_mode_confirmed' )
51
		);
52
	}
53
54
	function add_actions() {
55
		global $pagenow;
56
57
		$is_development_mode = ( new Status() )->is_development_mode();
58
		// If user is not an admin and site is in Dev Mode or not connected yet then don't do anything.
59
		if ( ! current_user_can( 'manage_options' ) && ( $is_development_mode || ! Jetpack::is_active() ) ) {
60
			return;
61
		}
62
63
		// Don't add in the modules page unless modules are available!
64
		if ( $this->dont_show_if_not_active && ! Jetpack::is_active() && ! $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...
65
			return;
66
		}
67
68
		// Initialize menu item for the page in the admin
69
		$hook = $this->get_page_hook();
70
71
		// Attach hooks common to all Jetpack admin pages based on the created
72
		// hook
73
		add_action( "load-$hook", array( $this, 'admin_help' ) );
74
		add_action( "load-$hook", array( $this, 'admin_page_load' ) );
75
		add_action( "admin_print_styles-$hook", array( $this, 'admin_styles' ) );
76
		add_action( "admin_print_scripts-$hook", array( $this, 'admin_scripts' ) );
77
78
		if ( ! self::$block_page_rendering_for_idc ) {
79
			add_action( "admin_print_styles-$hook", array( $this, 'additional_styles' ) );
80
		}
81
		// If someone just activated Jetpack, let's show them a fullscreen connection banner.
82
		if (
83
			( 'admin.php' === $pagenow && isset( $_GET['page'] ) && 'jetpack' === $_GET['page'] )
84
			&& ! Jetpack::is_active()
85
			&& current_user_can( 'jetpack_connect' )
86
			&& ! $is_development_mode
87
		) {
88
			add_action( 'admin_enqueue_scripts', array( 'Jetpack_Connection_Banner', 'enqueue_banner_scripts' ) );
89
			add_action( 'admin_enqueue_scripts', array( 'Jetpack_Connection_Banner', 'enqueue_connect_button_scripts' ) );
90
			add_action( 'admin_print_styles', array( Jetpack::init(), 'admin_banner_styles' ) );
91
			add_action( 'admin_notices', array( 'Jetpack_Connection_Banner', 'render_connect_prompt_full_screen' ) );
92
			delete_transient( 'activated_jetpack' );
93
		}
94
95
		// If Jetpack not yet connected, but user is viewing one of the pages with a Jetpack connection banner.
96
		if (
97
			( 'index.php' === $pagenow || 'plugins.php' === $pagenow )
98
			&& ! Jetpack::is_active()
99
			&& current_user_can( 'jetpack_connect' )
100
			&& ! $is_development_mode
101
		) {
102
			add_action( 'admin_enqueue_scripts', array( 'Jetpack_Connection_Banner', 'enqueue_connect_button_scripts' ) );
103
		}
104
105
		// Check if the site plan changed and deactivate modules accordingly.
106
		add_action( 'current_screen', array( $this, 'check_plan_deactivate_modules' ) );
107
108
		// Attach page specific actions in addition to the above
109
		$this->add_page_actions( $hook );
110
	}
111
112
	// Render the page with a common top and bottom part, and page specific content
113
	function render() {
114
		// We're in an IDC: we need a decision made before we show the UI again.
115
		if ( self::$block_page_rendering_for_idc ) {
116
			return;
117
		}
118
119
		// Check if we are looking at the main dashboard
120
		if ( isset( $_GET['page'] ) && 'jetpack' === $_GET['page'] ) {
121
			$this->page_render();
122
			return;
123
		}
124
		self::wrap_ui( array( $this, 'page_render' ) );
125
	}
126
127
	function admin_help() {
128
		$this->jetpack->admin_help();
129
	}
130
131
	function admin_page_load() {
132
		// This is big.  For the moment, just call the existing one.
133
		$this->jetpack->admin_page_load();
134
	}
135
136
	// Add page specific scripts and jetpack stats for all menu pages
137
	function admin_scripts() {
138
		$this->page_admin_scripts(); // Delegate to inheriting class
139
		add_action( 'admin_footer', array( $this->jetpack, 'do_stats' ) );
140
	}
141
142
	// Enqueue the Jetpack admin stylesheet
143
	function admin_styles() {
144
		$min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
145
146
		wp_enqueue_style( 'jetpack-admin', plugins_url( "css/jetpack-admin{$min}.css", JETPACK__PLUGIN_FILE ), array( 'genericons' ), JETPACK__VERSION . '-20121016' );
147
		wp_style_add_data( 'jetpack-admin', 'rtl', 'replace' );
148
		wp_style_add_data( 'jetpack-admin', 'suffix', $min );
149
	}
150
151
	/**
152
	 * Checks if REST API is enabled.
153
	 *
154
	 * @since 4.4.2
155
	 *
156
	 * @return bool
157
	 */
158
	function is_rest_api_enabled() {
159
		return /** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
160
			apply_filters( 'rest_enabled', true ) &&
161
			/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
162
			apply_filters( 'rest_jsonp_enabled', true ) &&
163
			/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
164
			apply_filters( 'rest_authentication_errors', true );
165
	}
166
167
	/**
168
	 * Checks the site plan and deactivates modules that were active but are no longer included in the plan.
169
	 *
170
	 * @since 4.4.0
171
	 *
172
	 * @param $page
173
	 *
174
	 * @return array
175
	 */
176
	function check_plan_deactivate_modules( $page ) {
177
		if (
178
			( new Status() )->is_development_mode()
179
			|| ! in_array(
180
				$page->base,
181
				array(
182
					'toplevel_page_jetpack',
183
					'admin_page_jetpack_modules',
184
					'jetpack_page_vaultpress',
185
					'jetpack_page_stats',
186
					'jetpack_page_akismet-key-config',
187
				)
188
			)
189
		) {
190
			return false;
191
		}
192
193
		$current = Jetpack_Plan::get();
194
195
		$to_deactivate = array();
196
		if ( isset( $current['product_slug'] ) ) {
197
			$active = Jetpack::get_active_modules();
198
			switch ( $current['product_slug'] ) {
199 View Code Duplication
				case 'jetpack_free':
200
					$to_deactivate = array( 'seo-tools', 'videopress', 'google-analytics', 'wordads', 'search' );
201
					break;
202
				case 'jetpack_personal':
203 View Code Duplication
				case 'jetpack_personal_monthly':
204
					$to_deactivate = array( 'seo-tools', 'videopress', 'google-analytics', 'wordads', 'search' );
205
					break;
206
				case 'jetpack_premium':
207
				case 'jetpack_premium_monthly':
208
					$to_deactivate = array( 'seo-tools', 'google-analytics', 'search' );
209
					break;
210
			}
211
			$to_deactivate = array_intersect( $active, $to_deactivate );
212
213
			$to_leave_enabled = array();
214
			foreach ( $to_deactivate as $feature ) {
215
				if ( Jetpack_Plan::supports( $feature ) ) {
216
					$to_leave_enabled [] = $feature;
217
				}
218
			}
219
			$to_deactivate = array_diff( $to_deactivate, $to_leave_enabled );
220
221
			if ( ! empty( $to_deactivate ) ) {
222
				Jetpack::update_active_modules( array_filter( array_diff( $active, $to_deactivate ) ) );
223
			}
224
		}
225
		return array(
226
			'current'    => $current,
227
			'deactivate' => $to_deactivate,
228
		);
229
	}
230
231
	static function load_wrapper_styles() {
232
		$rtl = is_rtl() ? '.rtl' : '';
233
		wp_enqueue_style( 'dops-css', plugins_url( "_inc/build/admin{$rtl}.css", JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION );
234
		wp_enqueue_style( 'components-css', plugins_url( "_inc/build/style.min{$rtl}.css", JETPACK__PLUGIN_FILE ), array( 'wp-components' ), JETPACK__VERSION );
235
		$custom_css = '
236
			#wpcontent {
237
				padding-left: 0 !important;
238
			}
239
			#wpbody-content {
240
				background-color: #f6f6f6;
241
			}
242
243
			#jp-plugin-container .wrap {
244
				margin: 0 auto;
245
				max-width:45rem;
246
				padding: 0 1.5rem;
247
			}
248
			#jp-plugin-container.is-wide .wrap {
249
				max-width: 1040px;
250
			}
251
			#jp-plugin-container .wrap .jetpack-wrap-container {
252
				margin-top: 1em;
253
			}
254
			.wp-admin #dolly {
255
			    float: none;
256
			    position: relative;
257
			    right: 0;
258
			    left: 0;
259
			    top: 0;
260
			    padding: .625rem;
261
			    text-align: right;
262
			    background: #fff;
263
			    font-size: .75rem;
264
			    font-style: italic;
265
			    color: #87a6bc;
266
			    border-bottom: 1px #e9eff3 solid;
267
			}
268
		';
269
		wp_add_inline_style( 'dops-css', $custom_css );
270
	}
271
272
	public static function wrap_ui( $callback, $args = array() ) {
273
		$defaults          = array(
274
			'is-wide'  => false,
275
			'show-nav' => true,
276
		);
277
		$args              = wp_parse_args( $args, $defaults );
0 ignored issues
show
Documentation introduced by
$defaults is of type array<string,boolean,{"i...,"show-nav":"boolean"}>, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
278
		$jetpack_admin_url = admin_url( 'admin.php?page=jetpack' );
279
		$jetpack_about_url = ( Jetpack::is_active() || Jetpack::is_development_mode() )
0 ignored issues
show
Deprecated Code introduced by
The method Jetpack::is_development_mode() has been deprecated with message: since 8.0.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
280
			? admin_url( 'admin.php?page=jetpack_about' )
281
			: Redirect::get_url( 'jetpack' );
282
283
		$jetpack_privacy_url = ( Jetpack::is_active() || Jetpack::is_development_mode() )
0 ignored issues
show
Deprecated Code introduced by
The method Jetpack::is_development_mode() has been deprecated with message: since 8.0.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
284
			? $jetpack_admin_url . '#/privacy'
285
			: Redirect::get_url( 'a8c-privacy' );
286
287
		?>
288
		<div id="jp-plugin-container" class="
289
		<?php
290
		if ( $args['is-wide'] ) {
291
			echo 'is-wide'; }
292
		?>
293
		">
294
295
			<div class="jp-masthead">
296
				<div class="jp-masthead__inside-container">
297
					<div class="jp-masthead__logo-container">
298
						<a class="jp-masthead__logo-link" href="<?php echo esc_url( $jetpack_admin_url ); ?>">
299
							<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>
300
						</a>
301
					</div>
302
					<?php
303
					if ( $args['show-nav'] ) :
304
						?>
305
						<div class="jp-masthead__nav">
306
							<?php
307
							if ( is_network_admin() ) {
308
								$current_screen = get_current_screen();
309
310
								$highlight_current_sites    = ( 'toplevel_page_jetpack-network' === $current_screen->id ? 'is-primary' : '' );
311
								$highlight_current_settings = ( 'jetpack_page_jetpack-settings-network' === $current_screen->id ? 'is-primary' : '' );
312
								?>
313
								<span class="dops-button-group">
314
									<?php
315 View Code Duplication
									if ( current_user_can( 'jetpack_network_sites_page' ) ) {
316
										?>
317
										<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>
318
										<?php
319
									} if ( current_user_can( 'jetpack_network_settings_page' ) ) {
320
										?>
321
										<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>
322
										<?php
323
									}
324
									?>
325
								</span>
326
							<?php } else { ?>
327
								<span class="dops-button-group">
328
									<a href="<?php echo esc_url( $jetpack_admin_url ); ?>" type="button" class="dops-button is-compact"><?php esc_html_e( 'Dashboard', 'jetpack' ); ?></a>
329
														<?php
330
														if ( current_user_can( 'jetpack_manage_modules' ) ) {
331
															?>
332
										<a href="<?php echo esc_url( $jetpack_admin_url . '#/settings' ); ?>" type="button" class="dops-button is-compact"><?php esc_html_e( 'Settings', 'jetpack' ); ?></a>
333
															<?php
334
														}
335
														?>
336
								</span>
337
							<?php } ?>
338
						</div>
339
					<?php endif; ?>
340
				</div>
341
			</div>
342
			<div class="wrap"><div id="jp-admin-notices" aria-live="polite"></div></div>
343
			<!-- START OF CALLBACK -->
344
			<?php
345
			ob_start();
346
			call_user_func( $callback );
347
			$callback_ui = ob_get_contents();
348
			ob_end_clean();
349
			echo $callback_ui;
350
			?>
351
			<!-- END OF CALLBACK -->
352
353
			<div class="jp-footer">
354
				<div class="jp-footer__a8c-attr-container">
355
					<a href="<?php echo esc_url( $jetpack_about_url ); ?>">
356
						<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>
357
					</a>
358
				</div>
359
				<ul class="jp-footer__links">
360
					<li class="jp-footer__link-item">
361
						<a href="<?php echo esc_url( Redirect::get_url( 'jetpack' ) ); ?>" target="_blank" rel="noopener noreferrer" class="jp-footer__link" title="<?php esc_html_e( 'Jetpack version', 'jetpack' ); ?>">Jetpack <?php echo esc_html( JETPACK__VERSION ); ?></a>
362
					</li>
363
					<li class="jp-footer__link-item">
364
						<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>
365
					</li>
366
					<li class="jp-footer__link-item">
367
						<a href="<?php echo esc_url( Redirect::get_url( 'wpcom-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>
368
					</li>
369
					<li class="jp-footer__link-item">
370
						<a href="<?php echo esc_url( $jetpack_privacy_url ); ?>" 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>
371
					</li>
372 View Code Duplication
					<?php if ( is_multisite() && current_user_can( 'jetpack_network_sites_page' ) ) { ?>
373
						<li class="jp-footer__link-item">
374
							<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>
375
						</li>
376
					<?php } ?>
377 View Code Duplication
					<?php if ( is_multisite() && current_user_can( 'jetpack_network_settings_page' ) ) { ?>
378
						<li class="jp-footer__link-item">
379
							<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>
380
						</li>
381
					<?php } ?>
382
					<?php if ( current_user_can( 'manage_options' ) ) { ?>
383
						<li class="jp-footer__link-item">
384
							<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>
385
						</li>
386
						<li class="jp-footer__link-item">
387
							<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>
388
						</li>
389
					<?php } ?>
390
				</ul>
391
			</div>
392
		</div>
393
		<?php
394
		return;
395
	}
396
}
397