PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 8.6.1
Jetpack – WP Security, Backup, Speed, & Growth v8.6.1
15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / class.jetpack-admin.php
jetpack Last commit date
3rd-party 6 years ago _inc 6 years ago bin 6 years ago css 6 years ago extensions 6 years ago images 6 years ago json-endpoints 6 years ago languages 6 years ago modules 6 years ago sal 6 years ago src 6 years ago vendor 6 years ago views 6 years ago .svnignore 12 years ago CODE-OF-CONDUCT.md 9 years ago changelog.txt 6 years ago class-jetpack-wizard-banner.php 6 years ago class.frame-nonce-preview.php 6 years ago class.jetpack-admin.php 6 years ago class.jetpack-affiliate.php 6 years ago class.jetpack-autoupdate.php 6 years ago class.jetpack-bbpress-json-api.compat.php 6 years ago class.jetpack-cli.php 6 years ago class.jetpack-client-server.php 6 years ago class.jetpack-connection-banner.php 6 years ago class.jetpack-data.php 6 years ago class.jetpack-debugger.php 7 years ago class.jetpack-error.php 10 years ago class.jetpack-gutenberg.php 6 years ago class.jetpack-heartbeat.php 6 years ago class.jetpack-idc.php 6 years ago class.jetpack-ixr-client.php 6 years ago class.jetpack-modules-list-table.php 6 years ago class.jetpack-network-sites-list-table.php 6 years ago class.jetpack-network.php 6 years ago class.jetpack-plan.php 6 years ago class.jetpack-post-images.php 6 years ago class.jetpack-twitter-cards.php 6 years ago class.jetpack-user-agent.php 6 years ago class.jetpack-xmlrpc-server.php 6 years ago class.jetpack.php 6 years ago class.json-api-endpoints.php 6 years ago class.json-api.php 6 years ago class.photon.php 6 years ago composer.json 6 years ago functions.compat.php 6 years ago functions.cookies.php 6 years ago functions.gallery.php 6 years ago functions.global.php 6 years ago functions.opengraph.php 6 years ago functions.photon.php 6 years ago jest.config.js 6 years ago jetpack.php 6 years ago json-api-config.php 10 years ago json-endpoints.php 7 years ago load-jetpack.php 6 years ago locales.php 7 years ago readme.txt 6 years ago require-lib.php 6 years ago uninstall.php 6 years ago wpml-config.xml 10 years ago
class.jetpack-admin.php
296 lines
1 <?php
2
3 use Automattic\Jetpack\Status;
4
5 // Build the Jetpack admin menu as a whole
6 class Jetpack_Admin {
7
8 /**
9 * @var Jetpack_Admin
10 **/
11 private static $instance = null;
12
13 static function init() {
14 if ( isset( $_GET['page'] ) && $_GET['page'] === 'jetpack' ) {
15 add_filter( 'nocache_headers', array( 'Jetpack_Admin', 'add_no_store_header' ), 100 );
16 }
17
18 if ( is_null( self::$instance ) ) {
19 self::$instance = new Jetpack_Admin();
20 }
21 return self::$instance;
22 }
23
24 static function add_no_store_header( $headers ) {
25 $headers['Cache-Control'] .= ', no-store';
26 return $headers;
27 }
28
29 private function __construct() {
30 jetpack_require_lib( 'admin-pages/class.jetpack-react-page' );
31 $this->jetpack_react = new Jetpack_React_Page();
32
33 jetpack_require_lib( 'admin-pages/class.jetpack-settings-page' );
34 $this->fallback_page = new Jetpack_Settings_Page();
35
36 jetpack_require_lib( 'admin-pages/class-jetpack-about-page' );
37 $this->jetpack_about = new Jetpack_About_Page();
38
39 add_action( 'admin_menu', array( $this->jetpack_react, 'add_actions' ), 998 );
40 add_action( 'admin_menu', array( $this->jetpack_react, 'add_actions' ), 998 );
41 add_action( 'jetpack_admin_menu', array( $this->jetpack_react, 'jetpack_add_dashboard_sub_nav_item' ) );
42 add_action( 'jetpack_admin_menu', array( $this->jetpack_react, 'jetpack_add_set_up_sub_nav_item' ) );
43 add_action( 'jetpack_admin_menu', array( $this->jetpack_react, 'jetpack_add_settings_sub_nav_item' ) );
44 add_action( 'jetpack_admin_menu', array( $this, 'admin_menu_debugger' ) );
45 add_action( 'jetpack_admin_menu', array( $this->fallback_page, 'add_actions' ) );
46 add_action( 'jetpack_admin_menu', array( $this->jetpack_about, 'add_actions' ) );
47
48 // Add redirect to current page for activation/deactivation of modules
49 add_action( 'jetpack_pre_activate_module', array( $this, 'fix_redirect' ), 10, 2 );
50 add_action( 'jetpack_pre_deactivate_module', array( $this, 'fix_redirect' ) );
51
52 // Add module bulk actions handler
53 add_action( 'jetpack_unrecognized_action', array( $this, 'handle_unrecognized_action' ) );
54 }
55
56 static function sort_requires_connection_last( $module1, $module2 ) {
57 if ( $module1['requires_connection'] == $module2['requires_connection'] ) {
58 return 0;
59 } elseif ( $module1['requires_connection'] ) {
60 return 1;
61 } elseif ( $module2['requires_connection'] ) {
62 return -1;
63 }
64
65 return 0;
66 }
67
68 // Produce JS understandable objects of modules containing information for
69 // presentation like description, name, configuration url, etc.
70 function get_modules() {
71 include_once JETPACK__PLUGIN_DIR . 'modules/module-info.php';
72 $available_modules = Jetpack::get_available_modules();
73 $active_modules = Jetpack::get_active_modules();
74 $modules = array();
75 $jetpack_active = Jetpack::is_active() || ( new Status() )->is_development_mode();
76 $overrides = Jetpack_Modules_Overrides::instance();
77 foreach ( $available_modules as $module ) {
78 if ( $module_array = Jetpack::get_module( $module ) ) {
79 /**
80 * Filters each module's short description.
81 *
82 * @since 3.0.0
83 *
84 * @param string $module_array['description'] Module description.
85 * @param string $module Module slug.
86 */
87 $short_desc = apply_filters( 'jetpack_short_module_description', $module_array['description'], $module );
88 // Fix: correct multibyte strings truncate with checking for mbstring extension
89 $short_desc_trunc = ( function_exists( 'mb_strlen' ) )
90 ? ( ( mb_strlen( $short_desc ) > 143 )
91 ? mb_substr( $short_desc, 0, 140 ) . '...'
92 : $short_desc )
93 : ( ( strlen( $short_desc ) > 143 )
94 ? substr( $short_desc, 0, 140 ) . '...'
95 : $short_desc );
96
97 $module_array['module'] = $module;
98 $module_array['activated'] = ( $jetpack_active ? in_array( $module, $active_modules ) : false );
99 $module_array['deactivate_nonce'] = wp_create_nonce( 'jetpack_deactivate-' . $module );
100 $module_array['activate_nonce'] = wp_create_nonce( 'jetpack_activate-' . $module );
101 $module_array['available'] = self::is_module_available( $module_array );
102 $module_array['short_description'] = $short_desc_trunc;
103 $module_array['configure_url'] = Jetpack::module_configuration_url( $module );
104 $module_array['override'] = $overrides->get_module_override( $module );
105
106 ob_start();
107 /**
108 * Allow the display of a "Learn More" button.
109 * The dynamic part of the action, $module, is the module slug.
110 *
111 * @since 3.0.0
112 */
113 do_action( 'jetpack_learn_more_button_' . $module );
114 $module_array['learn_more_button'] = ob_get_clean();
115
116 ob_start();
117 /**
118 * Allow the display of information text when Jetpack is connected to WordPress.com.
119 * The dynamic part of the action, $module, is the module slug.
120 *
121 * @since 3.0.0
122 */
123 do_action( 'jetpack_module_more_info_' . $module );
124
125 /**
126 * Filter the long description of a module.
127 *
128 * @since 3.5.0
129 *
130 * @param string ob_get_clean() The module long description.
131 * @param string $module The module name.
132 */
133 $module_array['long_description'] = apply_filters( 'jetpack_long_module_description', ob_get_clean(), $module );
134
135 ob_start();
136 /**
137 * Filter the search terms for a module
138 *
139 * Search terms are typically added to the module headers, under "Additional Search Queries".
140 *
141 * Use syntax:
142 * function jetpack_$module_search_terms( $terms ) {
143 * $terms = _x( 'term 1, term 2', 'search terms', 'jetpack' );
144 * return $terms;
145 * }
146 * add_filter( 'jetpack_search_terms_$module', 'jetpack_$module_search_terms' );
147 *
148 * @since 3.5.0
149 *
150 * @param string The search terms (comma separated).
151 */
152 echo apply_filters( 'jetpack_search_terms_' . $module, $module_array['additional_search_queries'] );
153 $module_array['search_terms'] = ob_get_clean();
154
155 $module_array['configurable'] = false;
156 if (
157 current_user_can( 'manage_options' ) &&
158 /**
159 * Allow the display of a configuration link in the Jetpack Settings screen.
160 *
161 * @since 3.0.0
162 *
163 * @param string $module Module name.
164 * @param bool false Should the Configure module link be displayed? Default to false.
165 */
166 apply_filters( 'jetpack_module_configurable_' . $module, false )
167 ) {
168 $module_array['configurable'] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $module_array['configure_url'] ), __( 'Configure', 'jetpack' ) );
169 }
170
171 $modules[ $module ] = $module_array;
172 }
173 }
174
175 uasort( $modules, array( 'Jetpack', 'sort_modules' ) );
176
177 if ( ! Jetpack::is_active() ) {
178 uasort( $modules, array( __CLASS__, 'sort_requires_connection_last' ) );
179 }
180
181 return $modules;
182 }
183
184 static function is_module_available( $module ) {
185 if ( ! is_array( $module ) || empty( $module ) ) {
186 return false;
187 }
188
189 /**
190 * We never want to show VaultPress as activatable through Jetpack.
191 */
192 if ( 'vaultpress' === $module['module'] ) {
193 return false;
194 }
195
196 /*
197 * WooCommerce Analytics should only be available
198 * when running WooCommerce 3+
199 */
200 if (
201 'woocommerce-analytics' === $module['module']
202 && (
203 ! class_exists( 'WooCommerce' )
204 || version_compare( WC_VERSION, '3.0', '<' )
205 )
206 ) {
207 return false;
208 }
209
210 if ( ( new Status() )->is_development_mode() ) {
211 return ! ( $module['requires_connection'] );
212 } else {
213 if ( ! Jetpack::is_active() ) {
214 return false;
215 }
216
217 return Jetpack_Plan::supports( $module['module'] );
218 }
219 }
220
221 function handle_unrecognized_action( $action ) {
222 switch ( $action ) {
223 case 'bulk-activate':
224 if ( ! current_user_can( 'jetpack_activate_modules' ) ) {
225 break;
226 }
227
228 $modules = (array) $_GET['modules'];
229 $modules = array_map( 'sanitize_key', $modules );
230 check_admin_referer( 'bulk-jetpack_page_jetpack_modules' );
231 foreach ( $modules as $module ) {
232 Jetpack::log( 'activate', $module );
233 Jetpack::activate_module( $module, false );
234 }
235 // The following two lines will rarely happen, as Jetpack::activate_module normally exits at the end.
236 wp_safe_redirect( wp_get_referer() );
237 exit;
238 case 'bulk-deactivate':
239 if ( ! current_user_can( 'jetpack_deactivate_modules' ) ) {
240 break;
241 }
242
243 $modules = (array) $_GET['modules'];
244 $modules = array_map( 'sanitize_key', $modules );
245 check_admin_referer( 'bulk-jetpack_page_jetpack_modules' );
246 foreach ( $modules as $module ) {
247 Jetpack::log( 'deactivate', $module );
248 Jetpack::deactivate_module( $module );
249 Jetpack::state( 'message', 'module_deactivated' );
250 }
251 Jetpack::state( 'module', $modules );
252 wp_safe_redirect( wp_get_referer() );
253 exit;
254 default:
255 return;
256 }
257 }
258
259 function fix_redirect( $module, $redirect = true ) {
260 if ( ! $redirect ) {
261 return;
262 }
263 if ( wp_get_referer() ) {
264 add_filter( 'wp_redirect', 'wp_get_referer' );
265 }
266 }
267
268 function admin_menu_debugger() {
269 jetpack_require_lib( 'debugger' );
270 Jetpack_Debugger::disconnect_and_redirect();
271 $debugger_hook = add_submenu_page(
272 null,
273 __( 'Debugging Center', 'jetpack' ),
274 '',
275 'manage_options',
276 'jetpack-debugger',
277 array( $this, 'wrap_debugger_page' )
278 );
279 add_action( "admin_head-$debugger_hook", array( 'Jetpack_Debugger', 'jetpack_debug_admin_head' ) );
280 }
281
282 function wrap_debugger_page() {
283 nocache_headers();
284 if ( ! current_user_can( 'manage_options' ) ) {
285 die( '-1' );
286 }
287 Jetpack_Admin_Page::wrap_ui( array( $this, 'debugger_page' ) );
288 }
289
290 function debugger_page() {
291 jetpack_require_lib( 'debugger' );
292 Jetpack_Debugger::jetpack_debug_display_handler();
293 }
294 }
295 Jetpack_Admin::init();
296