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