Completed
Push — improve/rename-anti-spam-in-si... ( e5a567...f08131 )
by
unknown
75:27 queued 67:29
created

add_connection_banner_actions()   A

Complexity

Conditions 6
Paths 4

Size

Total Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

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