Completed
Push — instant-search-master ( 95535d...2c1eb1 )
by
unknown
22:37 queued 16:04
created

Jetpack_Admin_Page::wrap_ui()   F

Complexity

Conditions 18
Paths 4864

Size

Total Lines 124

Duplication

Lines 15
Ratio 12.1 %

Importance

Changes 0
Metric Value
cc 18
nc 4864
nop 2
dl 15
loc 124
rs 0.56
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
5
// Shared logic between Jetpack admin pages
6
abstract class Jetpack_Admin_Page {
7
	// Add page specific actions given the page hook
8
	abstract function add_page_actions( $hook );
9
10
	// Create a menu item for the page and returns the hook
11
	abstract function get_page_hook();
12
13
	// Enqueue and localize page specific scripts
14
	abstract function page_admin_scripts();
15
16
	// Render page specific HTML
17
	abstract function page_render();
18
19
	/**
20
	 * Should we block the page rendering because the site is in IDC?
21
	 *
22
	 * @var bool
23
	 */
24
	static $block_page_rendering_for_idc;
25
26
	/**
27
	 * Function called after admin_styles to load any additional needed styles.
28
	 *
29
	 * @since 4.3.0
30
	 */
31
	function additional_styles() {}
32
33
	/**
34
	 * The constructor.
35
	 */
36
	public function __construct() {
37
		add_action( 'jetpack_loaded', array( $this, 'on_jetpack_loaded' ) );
38
	}
39
40
	/**
41
	 * Runs on Jetpack being ready to load its packages.
42
	 *
43
	 * @param Jetpack $jetpack object.
44
	 */
45
	public function on_jetpack_loaded( $jetpack ) {
46
		$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...
47
48
		self::$block_page_rendering_for_idc = (
49
			Jetpack::validate_sync_error_idc_option() && ! Jetpack_Options::get_option( 'safe_mode_confirmed' )
50
		);
51
	}
52
53
	function add_actions() {
54
		global $pagenow;
55
56
		$is_development_mode = ( new Status() )->is_development_mode();
57
		// If user is not an admin and site is in Dev Mode or not connected yet then don't do anything.
58
		if ( ! current_user_can( 'manage_options' ) && ( $is_development_mode || ! Jetpack::is_active() ) ) {
59
			return;
60
		}
61
62
		// Don't add in the modules page unless modules are available!
63
		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...
64
			return;
65
		}
66
67
		// Initialize menu item for the page in the admin
68
		$hook = $this->get_page_hook();
69
70
		// Attach hooks common to all Jetpack admin pages based on the created
71
		// hook
72
		add_action( "load-$hook", array( $this, 'admin_help' ) );
73
		add_action( "load-$hook", array( $this, 'admin_page_load' ) );
74
		add_action( "admin_print_styles-$hook", array( $this, 'admin_styles' ) );
75
		add_action( "admin_print_scripts-$hook", array( $this, 'admin_scripts' ) );
76
77
		if ( ! self::$block_page_rendering_for_idc ) {
78
			add_action( "admin_print_styles-$hook", array( $this, 'additional_styles' ) );
79
		}
80
		// If someone just activated Jetpack, let's show them a fullscreen connection banner.
81
		if (
82
			( 'admin.php' === $pagenow && isset( $_GET['page'] ) && 'jetpack' === $_GET['page'] )
83
			&& ! Jetpack::is_active()
84
			&& current_user_can( 'jetpack_connect' )
85
			&& ! $is_development_mode
86
		) {
87
			add_action( 'admin_enqueue_scripts', array( 'Jetpack_Connection_Banner', 'enqueue_banner_scripts' ) );
88
			add_action( 'admin_enqueue_scripts', array( 'Jetpack_Connection_Banner', 'enqueue_connect_button_scripts' ) );
89
			add_action( 'admin_print_styles', array( Jetpack::init(), 'admin_banner_styles' ) );
90
			add_action( 'admin_notices', array( 'Jetpack_Connection_Banner', 'render_connect_prompt_full_screen' ) );
91
			delete_transient( 'activated_jetpack' );
92
		}
93
94
		// If Jetpack not yet connected, but user is viewing one of the pages with a Jetpack connection banner.
95
		if (
96
			( 'index.php' === $pagenow || 'plugins.php' === $pagenow )
97
			&& ! Jetpack::is_active()
98
			&& current_user_can( 'jetpack_connect' )
99
			&& ! $is_development_mode
100
		) {
101
			add_action( 'admin_enqueue_scripts', array( 'Jetpack_Connection_Banner', 'enqueue_connect_button_scripts' ) );
102
		}
103
104
		// Check if the site plan changed and deactivate modules accordingly.
105
		add_action( 'current_screen', array( $this, 'check_plan_deactivate_modules' ) );
106
107
		// Attach page specific actions in addition to the above
108
		$this->add_page_actions( $hook );
109
	}
110
111
	// Render the page with a common top and bottom part, and page specific content
112
	function render() {
113
		// We're in an IDC: we need a decision made before we show the UI again.
114
		if ( self::$block_page_rendering_for_idc ) {
115
			return;
116
		}
117
118
		// Check if we are looking at the main dashboard
119
		if ( isset( $_GET['page'] ) && 'jetpack' === $_GET['page'] ) {
120
			$this->page_render();
121
			return;
122
		}
123
		self::wrap_ui( array( $this, 'page_render' ) );
124
	}
125
126
	function admin_help() {
127
		$this->jetpack->admin_help();
128
	}
129
130
	function admin_page_load() {
131
		// This is big.  For the moment, just call the existing one.
132
		$this->jetpack->admin_page_load();
133
	}
134
135
	// Add page specific scripts and jetpack stats for all menu pages
136
	function admin_scripts() {
137
		$this->page_admin_scripts(); // Delegate to inheriting class
138
		add_action( 'admin_footer', array( $this->jetpack, 'do_stats' ) );
139
	}
140
141
	// Enqueue the Jetpack admin stylesheet
142
	function admin_styles() {
143
		$min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
144
145
		wp_enqueue_style( 'jetpack-admin', plugins_url( "css/jetpack-admin{$min}.css", JETPACK__PLUGIN_FILE ), array( 'genericons' ), JETPACK__VERSION . '-20121016' );
146
		wp_style_add_data( 'jetpack-admin', 'rtl', 'replace' );
147
		wp_style_add_data( 'jetpack-admin', 'suffix', $min );
148
	}
149
150
	/**
151
	 * Checks if REST API is enabled.
152
	 *
153
	 * @since 4.4.2
154
	 *
155
	 * @return bool
156
	 */
157
	function is_rest_api_enabled() {
158
		return /** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
159
			apply_filters( 'rest_enabled', true ) &&
160
			/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
161
			apply_filters( 'rest_jsonp_enabled', true ) &&
162
			/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
163
			apply_filters( 'rest_authentication_errors', true );
164
	}
165
166
	/**
167
	 * Checks the site plan and deactivates modules that were active but are no longer included in the plan.
168
	 *
169
	 * @since 4.4.0
170
	 *
171
	 * @param $page
172
	 *
173
	 * @return array
174
	 */
175
	function check_plan_deactivate_modules( $page ) {
176
		if (
177
			( new Status() )->is_development_mode()
178
			|| ! in_array(
179
				$page->base,
180
				array(
181
					'toplevel_page_jetpack',
182
					'admin_page_jetpack_modules',
183
					'jetpack_page_vaultpress',
184
					'jetpack_page_stats',
185
					'jetpack_page_akismet-key-config',
186
				)
187
			)
188
		) {
189
			return false;
190
		}
191
192
		$current = Jetpack_Plan::get();
193
194
		$to_deactivate = array();
195
		if ( isset( $current['product_slug'] ) ) {
196
			$active = Jetpack::get_active_modules();
197
			switch ( $current['product_slug'] ) {
198 View Code Duplication
				case 'jetpack_free':
199
					$to_deactivate = array( 'seo-tools', 'videopress', 'google-analytics', 'wordads', 'search' );
200
					break;
201
				case 'jetpack_personal':
202 View Code Duplication
				case 'jetpack_personal_monthly':
203
					$to_deactivate = array( 'seo-tools', 'videopress', 'google-analytics', 'wordads', 'search' );
204
					break;
205
				case 'jetpack_premium':
206
				case 'jetpack_premium_monthly':
207
					$to_deactivate = array( 'seo-tools', 'google-analytics', 'search' );
208
					break;
209
			}
210
			$to_deactivate = array_intersect( $active, $to_deactivate );
211
212
			$to_leave_enabled = array();
213
			foreach ( $to_deactivate as $feature ) {
214
				if ( Jetpack_Plan::supports( $feature ) ) {
215
					$to_leave_enabled [] = $feature;
216
				}
217
			}
218
			$to_deactivate = array_diff( $to_deactivate, $to_leave_enabled );
219
220
			if ( ! empty( $to_deactivate ) ) {
221
				Jetpack::update_active_modules( array_filter( array_diff( $active, $to_deactivate ) ) );
222
			}
223
		}
224
		return array(
225
			'current'    => $current,
226
			'deactivate' => $to_deactivate,
227
		);
228
	}
229
230
	static function load_wrapper_styles() {
231
		$rtl = is_rtl() ? '.rtl' : '';
232
		wp_enqueue_style( 'dops-css', plugins_url( "_inc/build/admin{$rtl}.css", JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION );
233
		wp_enqueue_style( 'components-css', plugins_url( "_inc/build/style.min{$rtl}.css", JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION );
234
		$custom_css = '
235
			#wpcontent {
236
				padding-left: 0 !important;
237
			}
238
			#wpbody-content {
239
				background-color: #f6f6f6;
240
			}
241
242
			#jp-plugin-container .wrap {
243
				margin: 0 auto;
244
				max-width:45rem;
245
				padding: 0 1.5rem;
246
			}
247
			#jp-plugin-container.is-wide .wrap {
248
				max-width: 1040px;
249
			}
250
			#jp-plugin-container .wrap .jetpack-wrap-container {
251
				margin-top: 1em;
252
			}
253
			.wp-admin #dolly {
254
			    float: none;
255
			    position: relative;
256
			    right: 0;
257
			    left: 0;
258
			    top: 0;
259
			    padding: .625rem;
260
			    text-align: right;
261
			    background: #fff;
262
			    font-size: .75rem;
263
			    font-style: italic;
264
			    color: #87a6bc;
265
			    border-bottom: 1px #e9eff3 solid;
266
			}
267
		';
268
		wp_add_inline_style( 'dops-css', $custom_css );
269
	}
270
271
	public static function wrap_ui( $callback, $args = array() ) {
272
		$defaults          = array(
273
			'is-wide'  => false,
274
			'show-nav' => true,
275
		);
276
		$args              = wp_parse_args( $args, $defaults );
277
		$jetpack_admin_url = admin_url( 'admin.php?page=jetpack' );
278
		$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...
279
			? admin_url( 'admin.php?page=jetpack_about' )
280
			: 'https://jetpack.com';
281
282
		$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...
283
			? $jetpack_admin_url . '#/privacy'
284
			: 'https://automattic.com/privacy/';
285
286
		?>
287
		<div id="jp-plugin-container" class="
288
		<?php
289
		if ( $args['is-wide'] ) {
290
			echo 'is-wide'; }
291
		?>
292
		">
293
294
			<div class="jp-masthead">
295
				<div class="jp-masthead__inside-container">
296
					<div class="jp-masthead__logo-container">
297
						<a class="jp-masthead__logo-link" href="<?php echo esc_url( $jetpack_admin_url ); ?>">
298
							<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>
299
						</a>
300
					</div>
301
					<?php
302
					if ( $args['show-nav'] ) :
303
						?>
304
						<div class="jp-masthead__nav">
305
							<?php
306
							if ( is_network_admin() ) {
307
								$current_screen = get_current_screen();
308
309
								$highlight_current_sites    = ( 'toplevel_page_jetpack-network' === $current_screen->id ? 'is-primary' : '' );
310
								$highlight_current_settings = ( 'jetpack_page_jetpack-settings-network' === $current_screen->id ? 'is-primary' : '' );
311
								?>
312
								<span class="dops-button-group">
313
									<?php
314 View Code Duplication
									if ( current_user_can( 'jetpack_network_sites_page' ) ) {
315
										?>
316
										<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>
317
										<?php
318
									} if ( current_user_can( 'jetpack_network_settings_page' ) ) {
319
										?>
320
										<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>
321
										<?php
322
									}
323
									?>
324
								</span>
325
							<?php } else { ?>
326
								<span class="dops-button-group">
327
									<a href="<?php echo esc_url( $jetpack_admin_url ); ?>" type="button" class="dops-button is-compact"><?php esc_html_e( 'Dashboard', 'jetpack' ); ?></a>
328
														<?php
329
														if ( current_user_can( 'jetpack_manage_modules' ) ) {
330
															?>
331
										<a href="<?php echo esc_url( $jetpack_admin_url . '#/settings' ); ?>" type="button" class="dops-button is-compact"><?php esc_html_e( 'Settings', 'jetpack' ); ?></a>
332
															<?php
333
														}
334
														?>
335
								</span>
336
							<?php } ?>
337
						</div>
338
					<?php endif; ?>
339
				</div>
340
			</div>
341
			<div class="wrap"><div id="jp-admin-notices" aria-live="polite"></div></div>
342
			<!-- START OF CALLBACK -->
343
			<?php
344
			ob_start();
345
			call_user_func( $callback );
346
			$callback_ui = ob_get_contents();
347
			ob_end_clean();
348
			echo $callback_ui;
349
			?>
350
			<!-- END OF CALLBACK -->
351
352
			<div class="jp-footer">
353
				<div class="jp-footer__a8c-attr-container">
354
					<a href="<?php echo esc_url( $jetpack_about_url ); ?>">
355
						<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>
356
					</a>
357
				</div>
358
				<ul class="jp-footer__links">
359
					<li class="jp-footer__link-item">
360
						<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>
361
					</li>
362
					<li class="jp-footer__link-item">
363
						<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>
364
					</li>
365
					<li class="jp-footer__link-item">
366
						<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>
367
					</li>
368
					<li class="jp-footer__link-item">
369
						<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>
370
					</li>
371 View Code Duplication
					<?php if ( is_multisite() && current_user_can( 'jetpack_network_sites_page' ) ) { ?>
372
						<li class="jp-footer__link-item">
373
							<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>
374
						</li>
375
					<?php } ?>
376 View Code Duplication
					<?php if ( is_multisite() && current_user_can( 'jetpack_network_settings_page' ) ) { ?>
377
						<li class="jp-footer__link-item">
378
							<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>
379
						</li>
380
					<?php } ?>
381
					<?php if ( current_user_can( 'manage_options' ) ) { ?>
382
						<li class="jp-footer__link-item">
383
							<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>
384
						</li>
385
						<li class="jp-footer__link-item">
386
							<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>
387
						</li>
388
					<?php } ?>
389
				</ul>
390
			</div>
391
		</div>
392
		<?php
393
		return;
394
	}
395
}
396