PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 6.1.3
Jetpack – WP Security, Backup, Speed, & Growth v6.1.3
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 8 years ago _inc 6 years ago bin 8 years ago css 8 years ago images 6 years ago json-endpoints 8 years ago languages 8 years ago modules 5 years ago sal 8 years ago scss 8 years ago sync 8 years ago views 8 years ago wpcom-test-backup 6 years ago .svnignore 12 years ago CODE-OF-CONDUCT.md 9 years ago changelog.txt 8 years ago class.frame-nonce-preview.php 9 years ago class.jetpack-admin.php 8 years ago class.jetpack-autoupdate.php 8 years ago class.jetpack-bbpress-json-api-compat.php 9 years ago class.jetpack-cli.php 8 years ago class.jetpack-client-server.php 8 years ago class.jetpack-client.php 8 years ago class.jetpack-connection-banner.php 8 years ago class.jetpack-constants.php 8 years ago class.jetpack-data.php 9 years ago class.jetpack-debugger.php 8 years ago class.jetpack-error.php 10 years ago class.jetpack-heartbeat.php 9 years ago class.jetpack-idc.php 8 years ago class.jetpack-ixr-client.php 10 years ago class.jetpack-jitm.php 8 years ago class.jetpack-modules-list-table.php 8 years ago class.jetpack-network-sites-list-table.php 9 years ago class.jetpack-network.php 8 years ago class.jetpack-options.php 8 years ago class.jetpack-post-images.php 8 years ago class.jetpack-signature.php 8 years ago class.jetpack-tracks.php 8 years ago class.jetpack-twitter-cards.php 8 years ago class.jetpack-user-agent.php 8 years ago class.jetpack-xmlrpc-server.php 8 years ago class.jetpack.php 8 years ago class.json-api-endpoints.php 8 years ago class.json-api.php 8 years ago class.photon.php 8 years ago composer.json 8 years ago functions.compat.php 9 years ago functions.gallery.php 8 years ago functions.global.php 8 years ago functions.opengraph.php 8 years ago functions.photon.php 9 years ago jetpack.php 5 years ago json-api-config.php 10 years ago json-endpoints.php 8 years ago locales.php 9 years ago phpcs.xml 8 years ago readme.txt 5 years ago require-lib.php 8 years ago uninstall.php 8 years ago wpml-config.xml 10 years ago
class.jetpack-admin.php
268 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 add_action( 'admin_menu', array( $this->jetpack_react, 'add_actions' ), 998 );
43 add_action( 'jetpack_admin_menu', array( $this->jetpack_react, 'jetpack_add_dashboard_sub_nav_item' ) );
44 add_action( 'jetpack_admin_menu', array( $this->jetpack_react, 'jetpack_add_settings_sub_nav_item' ) );
45 add_action( 'jetpack_admin_menu', array( $this, 'admin_menu_debugger' ) );
46 add_action( 'jetpack_admin_menu', array( $this->fallback_page, '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() || Jetpack::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( Jetpack::module_configuration_url( $module ) ), __( 'Configure', 'jetpack' ) );
169 }
170
171 $modules[ $module ] = $module_array;
172 }
173 }
174
175 uasort( $modules, array( $this->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 * We never want to show VaultPress as activatable through Jetpack.
190 */
191 if ( 'vaultpress' === $module['module'] ) {
192 return false;
193 }
194
195 if ( Jetpack::is_development_mode() ) {
196 return ! ( $module['requires_connection'] );
197 } else {
198 if ( ! Jetpack::is_active() ) {
199 return false;
200 }
201
202 return Jetpack::active_plan_supports( $module['module'] );
203 }
204 }
205
206 function handle_unrecognized_action( $action ) {
207 switch( $action ) {
208 case 'bulk-activate' :
209 if ( ! current_user_can( 'jetpack_activate_modules' ) ) {
210 break;
211 }
212
213 $modules = (array) $_GET['modules'];
214 $modules = array_map( 'sanitize_key', $modules );
215 check_admin_referer( 'bulk-jetpack_page_jetpack_modules' );
216 foreach( $modules as $module ) {
217 Jetpack::log( 'activate', $module );
218 Jetpack::activate_module( $module, false );
219 }
220 // The following two lines will rarely happen, as Jetpack::activate_module normally exits at the end.
221 wp_safe_redirect( wp_get_referer() );
222 exit;
223 case 'bulk-deactivate' :
224 if ( ! current_user_can( 'jetpack_deactivate_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( 'deactivate', $module );
233 Jetpack::deactivate_module( $module );
234 Jetpack::state( 'message', 'module_deactivated' );
235 }
236 Jetpack::state( 'module', $modules );
237 wp_safe_redirect( wp_get_referer() );
238 exit;
239 default:
240 return;
241 }
242 }
243
244 function fix_redirect( $module, $redirect = true ) {
245 if ( ! $redirect ) {
246 return;
247 }
248 if ( wp_get_referer() ) {
249 add_filter( 'wp_redirect', 'wp_get_referer' );
250 }
251 }
252
253 function admin_menu_debugger() {
254 Jetpack_Debugger::disconnect_and_redirect();
255 $debugger_hook = add_submenu_page( null, __( 'Jetpack Debugging Center', 'jetpack' ), '', 'manage_options', 'jetpack-debugger', array( $this, 'debugger_page' ) );
256 add_action( "admin_head-$debugger_hook", array( 'Jetpack_Debugger', 'jetpack_debug_admin_head' ) );
257 }
258
259 function debugger_page() {
260 nocache_headers();
261 if ( ! current_user_can( 'manage_options' ) ) {
262 die( '-1' );
263 }
264 Jetpack_Debugger::jetpack_debug_display_handler();
265 }
266 }
267 Jetpack_Admin::init();
268