PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | _inc/lib/admin-pages/class.jetpack-settings-page.php +243 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,243 @@
1 +<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 +
3 +use Automattic\Jetpack\Admin_UI\Admin_Menu;
4 +use Automattic\Jetpack\Assets;
5 +use Automattic\Jetpack\Redirect;
6 +use Automattic\Jetpack\Status;
7 +use Automattic\Jetpack\Tracking;
8 +
9 +if ( ! defined( 'ABSPATH' ) ) {
10 + exit( 0 );
11 +}
12 +
13 +require_once __DIR__ . '/class.jetpack-admin-page.php';
14 +require_once JETPACK__PLUGIN_DIR . 'class.jetpack-modules-list-table.php';
15 +
16 +/**
17 + * Builds the settings page and its menu
18 + */
19 +class Jetpack_Settings_Page extends Jetpack_Admin_Page {
20 +
21 + /**
22 + * Show the settings page only when Jetpack is connected or in dev mode.
23 + *
24 + * @var boolean
25 + */
26 + protected $dont_show_if_not_active = true;
27 +
28 + /**
29 + * Add page action.
30 + *
31 + * @param string $hook Hook of current page.
32 + * @return void
33 + */
34 + public function add_page_actions( $hook ) {} //phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
35 +
36 + /**
37 + * Adds the Settings sub menu.
38 + */
39 + public function get_page_hook() {
40 + /*
41 + * In Offline Mode My Jetpack does not initialize, so nothing holds the top slot and
42 + * WordPress points the top-level "Jetpack" link at whichever item sorts first. Pin
43 + * Modules above the alphabetical run so that link lands here rather than on whatever
44 + * feature page happens to sort first. Only reachable offline, where My Jetpack's -10
45 + * is never registered.
46 + */
47 + if ( ( new Status() )->is_offline_mode() ) {
48 + $position = defined( Admin_Menu::class . '::POSITION_FIRST_FALLBACK' ) ? Admin_Menu::POSITION_FIRST_FALLBACK : -5;
49 +
50 + return Admin_Menu::add_menu(
51 + __( 'Jetpack Settings', 'jetpack' ),
52 + __( 'Modules', 'jetpack' ),
53 + 'jetpack_manage_modules',
54 + 'jetpack_modules',
55 + array( $this, 'render' ),
56 + $position
57 + );
58 + }
59 +
60 + return add_submenu_page(
61 + '',
62 + __( 'Jetpack Settings', 'jetpack' ),
63 + __( 'Settings', 'jetpack' ),
64 + 'jetpack_manage_modules',
65 + 'jetpack_modules',
66 + array( $this, 'render' )
67 + );
68 + }
69 +
70 + /**
71 + * Renders the module list table where you can use bulk action or row
72 + * actions to activate/deactivate and configure modules
73 + */
74 + public function page_render() {
75 + $list_table = new Jetpack_Modules_List_Table();
76 +
77 + // Currently selected product group filter (used to highlight the active View button).
78 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is view logic.
79 + $current_group = isset( $_GET['product_group'] ) ? sanitize_text_field( wp_unslash( $_GET['product_group'] ) ) : '';
80 +
81 + $is_offline_mode = ( new Status() )->is_offline_mode();
82 + // Currently selected offline-availability filter (only meaningful in Offline Mode).
83 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is view logic.
84 + $current_availability = isset( $_GET['offline_available'] ) ? sanitize_text_field( wp_unslash( $_GET['offline_available'] ) ) : '';
85 +
86 + // We have static.html so let's continue trying to fetch the others.
87 + $noscript_notice = @file_get_contents( JETPACK__PLUGIN_DIR . '_inc/build/static-noscript-notice.html' ); //phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged, WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents, Not fetching a remote file.
88 + $rest_api_notice = @file_get_contents( JETPACK__PLUGIN_DIR . '_inc/build/static-version-notice.html' ); //phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged, WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents, Not fetching a remote file.
89 +
90 + $noscript_notice = str_replace(
91 + '#HEADER_TEXT#',
92 + esc_html__( 'You have JavaScript disabled', 'jetpack' ),
93 + $noscript_notice
94 + );
95 + $noscript_notice = str_replace(
96 + '#TEXT#',
97 + esc_html__( "Turn on JavaScript to unlock Jetpack's full potential!", 'jetpack' ),
98 + $noscript_notice
99 + );
100 +
101 + $rest_api_notice = str_replace(
102 + '#HEADER_TEXT#',
103 + esc_html( __( 'WordPress REST API is disabled', 'jetpack' ) ),
104 + $rest_api_notice
105 + );
106 + $rest_api_notice = str_replace(
107 + '#TEXT#',
108 + esc_html( __( "Enable WordPress REST API to unlock Jetpack's full potential!", 'jetpack' ) ),
109 + $rest_api_notice
110 + );
111 +
112 + if ( ! $this->is_rest_api_enabled() ) {
113 + echo $rest_api_notice; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
114 + }
115 + echo $noscript_notice; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
116 + ?>
117 +
118 + <!-- Core relocates other plugins' notices to just after this marker. -->
119 + <div class="wrap"><div class="wp-header-end"></div></div>
120 + <div class="jetpack-module-list">
121 + <?php if ( $is_offline_mode ) : ?>
122 + <div class="wrap">
123 + <div class="jetpack-offline-notice">
124 + <p class="jetpack-offline-notice__title"><?php esc_html_e( "You're working in Offline Mode", 'jetpack' ); ?></p>
125 + <p class="jetpack-offline-notice__text">
126 + <?php esc_html_e( 'Jetpack is running in Offline Mode, so features that need a connection to WordPress.com are paused for now — this is completely normal for local and development sites. Go ahead and activate or configure any of the modules below that work offline.', 'jetpack' ); ?>
127 + <a href="<?php echo esc_url( Redirect::get_url( 'jetpack-support-development-mode' ) ); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Learn more about Offline Mode.', 'jetpack' ); ?></a>
128 + </p>
129 + </div>
130 + </div>
131 + <?php endif; ?>
132 + <div class="wrap">
133 + <div class="manage-left">
134 + <div class="jetpack-modules-card">
135 + <div class="jetpack-modules-card__bulk">
136 + <label class="jetpack-modules-card__checkall">
137 + <input type="checkbox" class="checkall" />
138 + <span><?php esc_html_e( 'Select all', 'jetpack' ); ?></span>
139 + </label>
140 + <?php $list_table->unprotected_display_tablenav( 'top' ); ?>
141 + <span class="filter-search">
142 + <button type="button" class="button"><?php esc_html_e( 'Filter', 'jetpack' ); ?></button>
143 + </span>
144 + </div>
145 + <form class="jetpack-modules-list-table-form" onsubmit="return false;">
146 + <table class="<?php echo esc_attr( implode( ' ', $list_table->get_table_classes() ) ); ?> jetpack-modules">
147 + <tbody id="the-list">
148 + <?php $list_table->display_rows_or_placeholder(); ?>
149 + </tbody>
150 + </table>
151 + </form>
152 + </div>
153 + </div>
154 + <div class="manage-right">
155 + <div class="bumper">
156 + <form class="navbar-form" role="search">
157 + <input type="hidden" name="page" value="jetpack_modules" />
158 + <?php $list_table->search_box( __( 'Search modules…', 'jetpack' ), 'srch-term' ); ?>
159 + <?php if ( $is_offline_mode ) : ?>
160 + <p><?php esc_html_e( 'Available in offline mode', 'jetpack' ); ?></p>
161 + <span class="dops-button-group button-group availability-filter">
162 + <button type="button" class="dops-button is-compact button
163 + <?php echo 'all' === $current_availability ? 'active' : ''; ?>
164 + " data-availability="all"><?php esc_html_e( 'All', 'jetpack' ); ?></button>
165 + <button type="button" class="dops-button button
166 + <?php echo 'all' === $current_availability ? '' : 'active'; ?>
167 + " data-availability="hide-unavailable"><?php esc_html_e( 'Hide unavailable', 'jetpack' ); ?></button>
168 + </span>
169 + <?php endif; ?>
170 + <p><?php esc_html_e( 'State', 'jetpack' ); ?></p>
171 + <span class="dops-button-group button-group module-filter filter-state">
172 + <button type="button" class="dops-button is-compact button
173 + <?php // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is view logic.
174 + if ( empty( $_GET['activated'] ) ) {
175 + echo 'active';
176 + }
177 + ?>
178 + ">
179 + <?php esc_html_e( 'All', 'jetpack' ); ?></button>
180 + <button type="button" class="dops-button button
181 + <?php // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is view logic.
182 + if ( ! empty( $_GET['activated'] ) && 'true' === $_GET['activated'] ) {
183 + echo 'active';
184 + }
185 + ?>
186 + " data-filter-by="activated" data-filter-value="true"><?php esc_html_e( 'Active', 'jetpack' ); ?></button>
187 + <button type="button" class="dops-button button
188 + <?php // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is view logic.
189 + if ( ! empty( $_GET['activated'] ) && 'false' === $_GET['activated'] ) {
190 + echo 'active';
191 + }
192 + ?>
193 + " data-filter-by="activated" data-filter-value="false"><?php esc_html_e( 'Inactive', 'jetpack' ); ?></button>
194 + </span>
195 + <p><?php esc_html_e( 'Purpose', 'jetpack' ); ?></p>
196 + <ul class="purpose-filter">
197 + <li class="all<?php echo '' === $current_group ? ' current' : ''; ?>"><a href="#" data-group=""><?php esc_html_e( 'All', 'jetpack' ); ?></a> <span class="count"></span></li>
198 + <?php
199 + foreach ( Jetpack_Modules_List_Table::PRODUCT_GROUP_ORDER as $group_slug ) {
200 + printf(
201 + '<li class="%1$s%2$s"><a href="#" data-group="%1$s">%3$s</a> <span class="count"></span></li>',
202 + esc_attr( $group_slug ),
203 + $group_slug === $current_group ? ' current' : '',
204 + esc_html( Jetpack_Modules_List_Table::get_product_group_name( $group_slug ) )
205 + );
206 + }
207 + ?>
208 + </ul>
209 + <p><?php esc_html_e( 'Tags', 'jetpack' ); ?></p>
210 + <?php $list_table->views(); ?>
211 + </form>
212 + </div>
213 + </div>
214 + </div>
215 + </div><!-- /.jetpack-module-list -->
216 + <?php
217 +
218 + $tracking = new Tracking();
219 + $tracking->record_user_event( 'wpa_page_view', array( 'path' => 'old_settings' ) );
220 + }
221 +
222 + /**
223 + * Load styles for static page.
224 + *
225 + * @since 4.3.0
226 + */
227 + public function additional_styles() {
228 + Jetpack_Admin_Page::load_wrapper_styles();
229 + }
230 +
231 + /**
232 + * Javascript logic specific to the list table
233 + */
234 + public function page_admin_scripts() {
235 + wp_enqueue_script(
236 + 'jetpack-admin-js',
237 + Assets::get_file_url_for_environment( '_inc/build/jetpack-admin.min.js', '_inc/jetpack-admin.js' ),
238 + array( 'jquery' ),
239 + JETPACK__VERSION,
240 + true
241 + );
242 + }
243 +}