PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.3
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 13.7.2 13.8.3 All 506 releases
jetpack / _inc / lib / admin-pages / class.jetpack-settings-page.php

class.jetpack-settings-page.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.3, at _inc/lib/admin-pages/class.jetpack-settings-page.php

242 lines 9.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 return Admin_Menu::add_menu(
49 __( 'Jetpack Settings', 'jetpack' ),
50 __( 'Modules', 'jetpack' ),
51 'jetpack_manage_modules',
52 'jetpack_modules',
53 array( $this, 'render' ),
54 Admin_Menu::POSITION_FIRST_FALLBACK
55 );
56 }
57
58 return add_submenu_page(
59 '',
60 __( 'Jetpack Settings', 'jetpack' ),
61 __( 'Settings', 'jetpack' ),
62 'jetpack_manage_modules',
63 'jetpack_modules',
64 array( $this, 'render' )
65 );
66 }
67
68 /**
69 * Renders the module list table where you can use bulk action or row
70 * actions to activate/deactivate and configure modules
71 */
72 public function page_render() {
73 $list_table = new Jetpack_Modules_List_Table();
74
75 // Currently selected product group filter (used to highlight the active View button).
76 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is view logic.
77 $current_group = isset( $_GET['product_group'] ) ? sanitize_text_field( wp_unslash( $_GET['product_group'] ) ) : '';
78
79 $is_offline_mode = ( new Status() )->is_offline_mode();
80 // Currently selected offline-availability filter (only meaningful in Offline Mode).
81 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is view logic.
82 $current_availability = isset( $_GET['offline_available'] ) ? sanitize_text_field( wp_unslash( $_GET['offline_available'] ) ) : '';
83
84 // We have static.html so let's continue trying to fetch the others.
85 $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.
86 $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.
87
88 $noscript_notice = str_replace(
89 '#HEADER_TEXT#',
90 esc_html__( 'You have JavaScript disabled', 'jetpack' ),
91 $noscript_notice
92 );
93 $noscript_notice = str_replace(
94 '#TEXT#',
95 esc_html__( "Turn on JavaScript to unlock Jetpack's full potential!", 'jetpack' ),
96 $noscript_notice
97 );
98
99 $rest_api_notice = str_replace(
100 '#HEADER_TEXT#',
101 esc_html( __( 'WordPress REST API is disabled', 'jetpack' ) ),
102 $rest_api_notice
103 );
104 $rest_api_notice = str_replace(
105 '#TEXT#',
106 esc_html( __( "Enable WordPress REST API to unlock Jetpack's full potential!", 'jetpack' ) ),
107 $rest_api_notice
108 );
109
110 if ( ! $this->is_rest_api_enabled() ) {
111 echo $rest_api_notice; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
112 }
113 echo $noscript_notice; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
114 ?>
115
116 <!-- Core relocates other plugins' notices to just after this marker. -->
117 <div class="wrap"><div class="wp-header-end"></div></div>
118 <div class="jetpack-module-list">
119 <?php if ( $is_offline_mode ) : ?>
120 <div class="wrap">
121 <div class="jetpack-offline-notice">
122 <p class="jetpack-offline-notice__title"><?php esc_html_e( "You're working in Offline Mode", 'jetpack' ); ?></p>
123 <p class="jetpack-offline-notice__text">
124 <?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' ); ?>
125 <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>
126 </p>
127 </div>
128 </div>
129 <?php endif; ?>
130 <div class="wrap">
131 <div class="manage-left">
132 <div class="jetpack-modules-card">
133 <div class="jetpack-modules-card__bulk">
134 <label class="jetpack-modules-card__checkall">
135 <input type="checkbox" class="checkall" />
136 <span><?php esc_html_e( 'Select all', 'jetpack' ); ?></span>
137 </label>
138 <?php $list_table->unprotected_display_tablenav( 'top' ); ?>
139 <span class="filter-search">
140 <button type="button" class="button"><?php esc_html_e( 'Filter', 'jetpack' ); ?></button>
141 </span>
142 </div>
143 <form class="jetpack-modules-list-table-form" onsubmit="return false;">
144 <table class="<?php echo esc_attr( implode( ' ', $list_table->get_table_classes() ) ); ?> jetpack-modules">
145 <tbody id="the-list">
146 <?php $list_table->display_rows_or_placeholder(); ?>
147 </tbody>
148 </table>
149 </form>
150 </div>
151 </div>
152 <div class="manage-right">
153 <div class="bumper">
154 <form class="navbar-form" role="search">
155 <input type="hidden" name="page" value="jetpack_modules" />
156 <?php $list_table->search_box( __( 'Search modules…', 'jetpack' ), 'srch-term' ); ?>
157 <?php if ( $is_offline_mode ) : ?>
158 <p><?php esc_html_e( 'Available in offline mode', 'jetpack' ); ?></p>
159 <span class="dops-button-group button-group availability-filter">
160 <button type="button" class="dops-button is-compact button
161 <?php echo 'all' === $current_availability ? 'active' : ''; ?>
162 " data-availability="all"><?php esc_html_e( 'All', 'jetpack' ); ?></button>
163 <button type="button" class="dops-button button
164 <?php echo 'all' === $current_availability ? '' : 'active'; ?>
165 " data-availability="hide-unavailable"><?php esc_html_e( 'Hide unavailable', 'jetpack' ); ?></button>
166 </span>
167 <?php endif; ?>
168 <p><?php esc_html_e( 'State', 'jetpack' ); ?></p>
169 <span class="dops-button-group button-group module-filter filter-state">
170 <button type="button" class="dops-button is-compact button
171 <?php // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is view logic.
172 if ( empty( $_GET['activated'] ) ) {
173 echo 'active';
174 }
175 ?>
176 ">
177 <?php esc_html_e( 'All', 'jetpack' ); ?></button>
178 <button type="button" class="dops-button button
179 <?php // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is view logic.
180 if ( ! empty( $_GET['activated'] ) && 'true' === $_GET['activated'] ) {
181 echo 'active';
182 }
183 ?>
184 " data-filter-by="activated" data-filter-value="true"><?php esc_html_e( 'Active', 'jetpack' ); ?></button>
185 <button type="button" class="dops-button button
186 <?php // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is view logic.
187 if ( ! empty( $_GET['activated'] ) && 'false' === $_GET['activated'] ) {
188 echo 'active';
189 }
190 ?>
191 " data-filter-by="activated" data-filter-value="false"><?php esc_html_e( 'Inactive', 'jetpack' ); ?></button>
192 </span>
193 <p><?php esc_html_e( 'Purpose', 'jetpack' ); ?></p>
194 <ul class="purpose-filter">
195 <li class="all<?php echo '' === $current_group ? ' current' : ''; ?>"><a href="#" data-group=""><?php esc_html_e( 'All', 'jetpack' ); ?></a> <span class="count"></span></li>
196 <?php
197 foreach ( Jetpack_Modules_List_Table::PRODUCT_GROUP_ORDER as $group_slug ) {
198 printf(
199 '<li class="%1$s%2$s"><a href="#" data-group="%1$s">%3$s</a> <span class="count"></span></li>',
200 esc_attr( $group_slug ),
201 $group_slug === $current_group ? ' current' : '',
202 esc_html( Jetpack_Modules_List_Table::get_product_group_name( $group_slug ) )
203 );
204 }
205 ?>
206 </ul>
207 <p><?php esc_html_e( 'Tags', 'jetpack' ); ?></p>
208 <?php $list_table->views(); ?>
209 </form>
210 </div>
211 </div>
212 </div>
213 </div><!-- /.jetpack-module-list -->
214 <?php
215
216 $tracking = new Tracking();
217 $tracking->record_user_event( 'wpa_page_view', array( 'path' => 'old_settings' ) );
218 }
219
220 /**
221 * Load styles for static page.
222 *
223 * @since 4.3.0
224 */
225 public function additional_styles() {
226 Jetpack_Admin_Page::load_wrapper_styles();
227 }
228
229 /**
230 * Javascript logic specific to the list table
231 */
232 public function page_admin_scripts() {
233 wp_enqueue_script(
234 'jetpack-admin-js',
235 Assets::get_file_url_for_environment( '_inc/build/jetpack-admin.min.js', '_inc/jetpack-admin.js' ),
236 array( 'jquery' ),
237 JETPACK__VERSION,
238 true
239 );
240 }
241 }
242