PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 7.5.0.1
Jetpack – WP Security, Backup, Speed, & Growth v7.5.0.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 7 years ago json-endpoints 6 years ago languages 6 years ago logs 9 years ago modules 6 years ago sal 6 years ago src 6 years ago sync 6 years ago vendor 6 years ago views 7 years ago wp-cli-templates 7 years ago .svnignore 12 years ago CODE-OF-CONDUCT.md 9 years ago changelog.txt 6 years ago class.frame-nonce-preview.php 9 years ago class.jetpack-admin.php 7 years ago class.jetpack-affiliate.php 7 years ago class.jetpack-autoupdate.php 7 years ago class.jetpack-bbpress-json-api-compat.php 9 years ago class.jetpack-cli.php 6 years ago class.jetpack-client-server.php 6 years ago class.jetpack-client.php 6 years ago class.jetpack-connection-banner.php 6 years ago class.jetpack-constants.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 7 years ago class.jetpack-idc.php 6 years ago class.jetpack-ixr-client.php 6 years ago class.jetpack-jitm.php 6 years ago class.jetpack-modules-list-table.php 6 years ago class.jetpack-network-sites-list-table.php 9 years ago class.jetpack-network.php 6 years ago class.jetpack-options.php 6 years ago class.jetpack-plan.php 6 years ago class.jetpack-post-images.php 7 years ago class.jetpack-signature.php 6 years ago class.jetpack-tracks.php 6 years ago class.jetpack-twitter-cards.php 7 years ago class.jetpack-user-agent.php 7 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 7 years ago class.photon.php 6 years ago composer.json 6 years ago functions.compat.php 6 years ago functions.gallery.php 6 years ago functions.global.php 6 years ago functions.opengraph.php 7 years ago functions.photon.php 6 years ago jest.config.js 7 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
285 lines
1 <?php
2
3
4 // Build the Jetpack admin menu as a whole
5 class Jetpack_Admin {
6
7 /**
8 * @var Jetpack_Admin
9 **/
10 private static $instance = null;
11
12 /**
13 * @var Jetpack
14 **/
15 private $jetpack;
16
17 static function init() {
18 if( isset( $_GET['page'] ) && $_GET['page'] === 'jetpack' ) {
19 add_filter( 'nocache_headers', array( 'Jetpack_Admin', 'add_no_store_header' ), 100 );
20 }
21
22 if ( is_null( self::$instance ) ) {
23 self::$instance = new Jetpack_Admin;
24 }
25 return self::$instance;
26 }
27
28 static function add_no_store_header( $headers ) {
29 $headers['Cache-Control'] .= ', no-store';
30 return $headers;
31 }
32
33 private function __construct() {
34 $this->jetpack = Jetpack::init();
35
36 jetpack_require_lib( 'admin-pages/class.jetpack-react-page' );
37 $this->jetpack_react = new Jetpack_React_Page;
38
39 jetpack_require_lib( 'admin-pages/class.jetpack-settings-page' );
40 $this->fallback_page = new Jetpack_Settings_Page;
41
42 jetpack_require_lib( 'admin-pages/class-jetpack-about-page' );
43 $this->jetpack_about = new Jetpack_About_Page;
44
45 add_action( 'admin_menu', array( $this->jetpack_react, 'add_actions' ), 998 );
46 add_action( 'jetpack_admin_menu', array( $this->jetpack_react, 'jetpack_add_dashboard_sub_nav_item' ) );
47 add_action( 'jetpack_admin_menu', array( $this->jetpack_react, 'jetpack_add_settings_sub_nav_item' ) );
48 add_action( 'jetpack_admin_menu', array( $this, 'admin_menu_debugger' ) );
49 add_action( 'jetpack_admin_menu', array( $this->fallback_page, 'add_actions' ) );
50 add_action( 'jetpack_admin_menu', array( $this->jetpack_about, 'add_actions' ) );
51
52 // Add redirect to current page for activation/deactivation of modules
53 add_action( 'jetpack_pre_activate_module', array( $this, 'fix_redirect' ), 10, 2 );
54 add_action( 'jetpack_pre_deactivate_module', array( $this, 'fix_redirect' ) );
55
56 // Add module bulk actions handler
57 add_action( 'jetpack_unrecognized_action', array( $this, 'handle_unrecognized_action' ) );
58 }
59
60 static function sort_requires_connection_last( $module1, $module2 ) {
61 if ( $module1['requires_connection'] == $module2['requires_connection'] ) {
62 return 0;
63 } elseif ( $module1['requires_connection'] ) {
64 return 1;
65 } elseif ( $module2['requires_connection'] ) {
66 return -1;
67 }
68
69 return 0;
70 }
71
72 // Produce JS understandable objects of modules containing information for
73 // presentation like description, name, configuration url, etc.
74 function get_modules() {
75 include_once( JETPACK__PLUGIN_DIR . 'modules/module-info.php' );
76 $available_modules = Jetpack::get_available_modules();
77 $active_modules = Jetpack::get_active_modules();
78 $modules = array();
79 $jetpack_active = Jetpack::is_active() || Jetpack::is_development_mode();
80 $overrides = Jetpack_Modules_Overrides::instance();
81 foreach ( $available_modules as $module ) {
82 if ( $module_array = Jetpack::get_module( $module ) ) {
83 /**
84 * Filters each module's short description.
85 *
86 * @since 3.0.0
87 *
88 * @param string $module_array['description'] Module description.
89 * @param string $module Module slug.
90 */
91 $short_desc = apply_filters( 'jetpack_short_module_description', $module_array['description'], $module );
92 // Fix: correct multibyte strings truncate with checking for mbstring extension
93 $short_desc_trunc = ( function_exists( 'mb_strlen' ) )
94 ? ( ( mb_strlen( $short_desc ) > 143 )
95 ? mb_substr( $short_desc, 0, 140 ) . '...'
96 : $short_desc )
97 : ( ( strlen( $short_desc ) > 143 )
98 ? substr( $short_desc, 0, 140 ) . '...'
99 : $short_desc );
100
101 $module_array['module'] = $module;
102 $module_array['activated'] = ( $jetpack_active ? in_array( $module, $active_modules ) : false );
103 $module_array['deactivate_nonce'] = wp_create_nonce( 'jetpack_deactivate-' . $module );
104 $module_array['activate_nonce'] = wp_create_nonce( 'jetpack_activate-' . $module );
105 $module_array['available'] = self::is_module_available( $module_array );
106 $module_array['short_description'] = $short_desc_trunc;
107 $module_array['configure_url'] = Jetpack::module_configuration_url( $module );
108 $module_array['override'] = $overrides->get_module_override( $module );
109
110 ob_start();
111 /**
112 * Allow the display of a "Learn More" button.
113 * The dynamic part of the action, $module, is the module slug.
114 *
115 * @since 3.0.0
116 */
117 do_action( 'jetpack_learn_more_button_' . $module );
118 $module_array['learn_more_button'] = ob_get_clean();
119
120 ob_start();
121 /**
122 * Allow the display of information text when Jetpack is connected to WordPress.com.
123 * The dynamic part of the action, $module, is the module slug.
124 *
125 * @since 3.0.0
126 */
127 do_action( 'jetpack_module_more_info_' . $module );
128
129 /**
130 * Filter the long description of a module.
131 *
132 * @since 3.5.0
133 *
134 * @param string ob_get_clean() The module long description.
135 * @param string $module The module name.
136 */
137 $module_array['long_description'] = apply_filters( 'jetpack_long_module_description', ob_get_clean(), $module );
138
139 ob_start();
140 /**
141 * Filter the search terms for a module
142 *
143 * Search terms are typically added to the module headers, under "Additional Search Queries".
144 *
145 * Use syntax:
146 * function jetpack_$module_search_terms( $terms ) {
147 * $terms = _x( 'term 1, term 2', 'search terms', 'jetpack' );
148 * return $terms;
149 * }
150 * add_filter( 'jetpack_search_terms_$module', 'jetpack_$module_search_terms' );
151 *
152 * @since 3.5.0
153 *
154 * @param string The search terms (comma separated).
155 */
156 echo apply_filters( 'jetpack_search_terms_' . $module, $module_array['additional_search_queries'] );
157 $module_array['search_terms'] = ob_get_clean();
158
159 $module_array['configurable'] = false;
160 if (
161 current_user_can( 'manage_options' ) &&
162 /**
163 * Allow the display of a configuration link in the Jetpack Settings screen.
164 *
165 * @since 3.0.0
166 *
167 * @param string $module Module name.
168 * @param bool false Should the Configure module link be displayed? Default to false.
169 */
170 apply_filters( 'jetpack_module_configurable_' . $module, false )
171 ) {
172 $module_array['configurable'] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $module_array['configure_url'] ), __( 'Configure', 'jetpack' ) );
173 }
174
175 $modules[ $module ] = $module_array;
176 }
177 }
178
179 uasort( $modules, array( $this->jetpack, 'sort_modules' ) );
180
181 if ( ! Jetpack::is_active() ) {
182 uasort( $modules, array( __CLASS__, 'sort_requires_connection_last' ) );
183 }
184
185 return $modules;
186 }
187
188 static function is_module_available( $module ) {
189 if ( ! is_array( $module ) || empty( $module ) )
190 return false;
191
192 /**
193 * We never want to show VaultPress as activatable through Jetpack.
194 */
195 if ( 'vaultpress' === $module['module'] ) {
196 return false;
197 }
198
199 if ( Jetpack::is_development_mode() ) {
200 return ! ( $module['requires_connection'] );
201 } else {
202 if ( ! Jetpack::is_active() ) {
203 return false;
204 }
205
206 return Jetpack_Plan::supports( $module['module'] );
207 }
208 }
209
210 function handle_unrecognized_action( $action ) {
211 switch( $action ) {
212 case 'bulk-activate' :
213 if ( ! current_user_can( 'jetpack_activate_modules' ) ) {
214 break;
215 }
216
217 $modules = (array) $_GET['modules'];
218 $modules = array_map( 'sanitize_key', $modules );
219 check_admin_referer( 'bulk-jetpack_page_jetpack_modules' );
220 foreach( $modules as $module ) {
221 Jetpack::log( 'activate', $module );
222 Jetpack::activate_module( $module, false );
223 }
224 // The following two lines will rarely happen, as Jetpack::activate_module normally exits at the end.
225 wp_safe_redirect( wp_get_referer() );
226 exit;
227 case 'bulk-deactivate' :
228 if ( ! current_user_can( 'jetpack_deactivate_modules' ) ) {
229 break;
230 }
231
232 $modules = (array) $_GET['modules'];
233 $modules = array_map( 'sanitize_key', $modules );
234 check_admin_referer( 'bulk-jetpack_page_jetpack_modules' );
235 foreach ( $modules as $module ) {
236 Jetpack::log( 'deactivate', $module );
237 Jetpack::deactivate_module( $module );
238 Jetpack::state( 'message', 'module_deactivated' );
239 }
240 Jetpack::state( 'module', $modules );
241 wp_safe_redirect( wp_get_referer() );
242 exit;
243 default:
244 return;
245 }
246 }
247
248 function fix_redirect( $module, $redirect = true ) {
249 if ( ! $redirect ) {
250 return;
251 }
252 if ( wp_get_referer() ) {
253 add_filter( 'wp_redirect', 'wp_get_referer' );
254 }
255 }
256
257 function admin_menu_debugger() {
258 jetpack_require_lib( 'debugger' );
259 Jetpack_Debugger::disconnect_and_redirect();
260 $debugger_hook = add_submenu_page(
261 null,
262 __( 'Debugging Center', 'jetpack' ),
263 '',
264 'manage_options',
265 'jetpack-debugger',
266 array( $this, 'wrap_debugger_page' )
267 );
268 add_action( "admin_head-$debugger_hook", array( 'Jetpack_Debugger', 'jetpack_debug_admin_head' ) );
269 }
270
271 function wrap_debugger_page( ) {
272 nocache_headers();
273 if ( ! current_user_can( 'manage_options' ) ) {
274 die( '-1' );
275 }
276 Jetpack_Admin_Page::wrap_ui( array( $this, 'debugger_page' ) );
277 }
278
279 function debugger_page() {
280 jetpack_require_lib( 'debugger' );
281 Jetpack_Debugger::jetpack_debug_display_handler();
282 }
283 }
284 Jetpack_Admin::init();
285