PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 7.2.1
Jetpack – WP Security, Backup, Speed, & Growth v7.2.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-modules-list-table.php
jetpack Last commit date
3rd-party 7 years ago _inc 7 years ago bin 7 years ago css 7 years ago extensions 7 years ago images 7 years ago json-endpoints 7 years ago languages 7 years ago logs 9 years ago modules 7 years ago sal 7 years ago scss 7 years ago sync 7 years ago views 7 years ago .svnignore 12 years ago CODE-OF-CONDUCT.md 9 years ago changelog.txt 7 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 8 years ago class.jetpack-bbpress-json-api-compat.php 9 years ago class.jetpack-cli.php 7 years ago class.jetpack-client-server.php 8 years ago class.jetpack-client.php 7 years ago class.jetpack-connection-banner.php 7 years ago class.jetpack-constants.php 8 years ago class.jetpack-data.php 7 years ago class.jetpack-debugger.php 7 years ago class.jetpack-error.php 10 years ago class.jetpack-gutenberg.php 7 years ago class.jetpack-heartbeat.php 7 years ago class.jetpack-idc.php 8 years ago class.jetpack-ixr-client.php 10 years ago class.jetpack-jitm.php 7 years ago class.jetpack-modules-list-table.php 7 years ago class.jetpack-network-sites-list-table.php 9 years ago class.jetpack-network.php 7 years ago class.jetpack-options.php 7 years ago class.jetpack-plan.php 7 years ago class.jetpack-post-images.php 7 years ago class.jetpack-signature.php 7 years ago class.jetpack-tracks.php 7 years ago class.jetpack-twitter-cards.php 7 years ago class.jetpack-user-agent.php 8 years ago class.jetpack-xmlrpc-server.php 7 years ago class.jetpack.php 7 years ago class.json-api-endpoints.php 7 years ago class.json-api.php 7 years ago class.photon.php 7 years ago composer.json 7 years ago functions.compat.php 7 years ago functions.gallery.php 8 years ago functions.global.php 7 years ago functions.opengraph.php 7 years ago functions.photon.php 7 years ago jetpack.php 7 years ago json-api-config.php 10 years ago json-endpoints.php 7 years ago locales.php 7 years ago readme.txt 7 years ago require-lib.php 7 years ago uninstall.php 8 years ago wpml-config.xml 10 years ago
class.jetpack-modules-list-table.php
346 lines
1 <?php
2
3 if ( ! class_exists( 'WP_List_Table' ) )
4 require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
5
6 class Jetpack_Modules_List_Table extends WP_List_Table {
7
8 function __construct() {
9 parent::__construct();
10
11 Jetpack::init();
12
13 if ( $this->compat_fields && is_array( $this->compat_fields ) ) {
14 array_push( $this->compat_fields, 'all_items' );
15 }
16
17 $this->items = $this->all_items = Jetpack_Admin::init()->get_modules();
18 $this->items = $this->filter_displayed_table_items( $this->items );
19 /**
20 * Filters the list of modules available to be displayed in the Jetpack Settings screen.
21 *
22 * @since 3.0.0
23 *
24 * @param array $this->items Array of Jetpack modules.
25 */
26 $this->items = apply_filters( 'jetpack_modules_list_table_items', $this->items );
27 $this->_column_headers = array( $this->get_columns(), array(), array(), 'name' );
28 $modal_info = isset( $_GET['info'] ) ? $_GET['info'] : false;
29
30 wp_register_script(
31 'models.jetpack-modules',
32 Jetpack::get_file_url_for_environment(
33 '_inc/build/jetpack-modules.models.min.js',
34 '_inc/jetpack-modules.models.js'
35 ),
36 array( 'backbone', 'underscore' ),
37 JETPACK__VERSION
38 );
39 wp_register_script(
40 'views.jetpack-modules',
41 Jetpack::get_file_url_for_environment(
42 '_inc/build/jetpack-modules.views.min.js',
43 '_inc/jetpack-modules.views.js'
44 ),
45 array( 'backbone', 'underscore', 'wp-util' ),
46 JETPACK__VERSION
47 );
48 wp_register_script(
49 'jetpack-modules-list-table',
50 Jetpack::get_file_url_for_environment(
51 '_inc/build/jetpack-modules.min.js',
52 '_inc/jetpack-modules.js'
53 ),
54 array(
55 'views.jetpack-modules',
56 'models.jetpack-modules',
57 'jquery',
58 ),
59 JETPACK__VERSION,
60 true
61 );
62
63 wp_localize_script( 'jetpack-modules-list-table', 'jetpackModulesData', array(
64 'modules' => Jetpack::get_translated_modules( $this->all_items ),
65 'i18n' => array(
66 'search_placeholder' => __( 'Search Modules…', 'jetpack' ),
67 ),
68 'modalinfo' => $this->module_info_check( $modal_info, $this->all_items ),
69 'nonces' => array(
70 'bulk' => wp_create_nonce( 'bulk-jetpack_page_jetpack_modules' ),
71 ),
72 ) );
73
74 wp_enqueue_script( 'jetpack-modules-list-table' );
75
76 /**
77 * Filters the js_templates callback value.
78 *
79 * @since 3.6.0
80 *
81 * @param array array( $this, 'js_templates' ) js_templates callback.
82 */
83 add_action( 'admin_footer', apply_filters( 'jetpack_modules_list_table_js_template_callback', array( $this, 'js_templates' ) ), 9 );
84 }
85
86 function js_templates() {
87 ?>
88 <script type="text/html" id="tmpl-Jetpack_Modules_List_Table_Template">
89 <# var i = 0;
90 if ( data.items.length ) {
91 _.each( data.items, function( item, key, list ) {
92 if ( item === undefined ) return;
93 if ( 'manage' == item.module && item.activated ) return; #>
94 <tr class="jetpack-module <# if ( ++i % 2 ) { #> alternate<# } #><# if ( item.activated ) { #> active<# } #><# if ( ! item.available ) { #> unavailable<# } #>" id="{{{ item.module }}}">
95 <th scope="row" class="check-column">
96 <# if ( 'videopress' !== item.module ) { #>
97 <input type="checkbox" name="modules[]" value="{{{ item.module }}}" />
98 <# } #>
99 </th>
100 <td class='name column-name'>
101 <span class='info'><a href="{{{item.learn_more_button}}}" target="blank">{{{ item.name }}}</a></span>
102 <div class="row-actions">
103 <# if ( item.configurable ) { #>
104 <span class='configure'>{{{ item.configurable }}}</span>
105 <# } #>
106 <# if ( item.activated && 'vaultpress' !== item.module && item.available && 'videopress' !== item.module ) { #>
107 <span class='delete'><a href="<?php echo admin_url( 'admin.php' ); ?>?page=jetpack&#038;action=deactivate&#038;module={{{ item.module }}}&#038;_wpnonce={{{ item.deactivate_nonce }}}"><?php _e( 'Deactivate', 'jetpack' ); ?></a></span>
108 <# } else if ( item.available && 'videopress' !== item.module ) { #>
109 <span class='activate'><a href="<?php echo admin_url( 'admin.php' ); ?>?page=jetpack&#038;action=activate&#038;module={{{ item.module }}}&#038;_wpnonce={{{ item.activate_nonce }}}"><?php _e( 'Activate', 'jetpack' ); ?></a></span>
110 <# } #>
111 </div>
112 </td>
113 </tr>
114 <#
115 });
116 } else {
117 #>
118 <tr class="no-modules-found">
119 <td colspan="2"><?php esc_html_e( 'No Modules Found' , 'jetpack' ); ?></td>
120 </tr>
121 <#
122 }
123 #>
124 </script>
125 <?php
126 }
127
128 function get_views() {
129 $modules = Jetpack_Admin::init()->get_modules();
130 $array_of_module_tags = wp_list_pluck( $modules, 'module_tags' );
131 $module_tags = call_user_func_array( 'array_merge', $array_of_module_tags );
132 $module_tags_unique = array_count_values( $module_tags );
133 ksort( $module_tags_unique );
134
135 $format = '<a href="%3$s"%4$s data-title="%1$s">%1$s <span class="count">(%2$s)</span></a>';
136 $title = __( 'All', 'jetpack' );
137 $count = count( $modules );
138 $url = esc_url( remove_query_arg( 'module_tag' ) );
139 $current = empty( $_GET['module_tag'] ) ? ' class="current all"' : ' class="all"';
140 $views = array(
141 'all' => sprintf( $format, $title, $count, $url, $current ),
142 );
143 foreach ( $module_tags_unique as $title => $count ) {
144 if ( 'Jumpstart' == $title ) {
145 continue;
146 }
147 $key = sanitize_title( $title );
148 if ( 'centralized-management' === $key && Jetpack::is_module_active( 'manage' ) ) {
149 continue;
150 }
151 $display_title = esc_html( wptexturize( $title ) );
152 $url = esc_url( add_query_arg( 'module_tag', urlencode( $title ) ) );
153 $current = '';
154 if ( ! empty( $_GET['module_tag'] ) && $title == $_GET['module_tag'] )
155 $current = ' class="current"';
156 $views[ $key ] = sprintf( $format, $display_title, $count, $url, $current );
157 }
158 return $views;
159 }
160
161 function views() {
162 $views = $this->get_views();
163
164 echo "<ul class='subsubsub'>\n";
165 foreach ( $views as $class => $view ) {
166 $views[ $class ] = "\t<li class='$class'>$view</li>";
167 }
168 echo implode( "\n", $views ) . "\n";
169 echo "</ul>";
170 }
171
172 function filter_displayed_table_items( $modules ) {
173 return array_filter( $modules, array( $this, 'is_module_displayed' ) );
174 }
175
176 static function is_module_displayed( $module ) {
177 // Handle module tag based filtering.
178 if ( ! empty( $_REQUEST['module_tag'] ) ) {
179 $module_tag = sanitize_text_field( $_REQUEST['module_tag'] );
180 if ( ! in_array( $module_tag, $module['module_tags'] ) )
181 return false;
182 }
183
184 // If nothing rejected it, include it!
185 return true;
186 }
187
188 static function sort_requires_connection_last( $module1, $module2 ) {
189 if ( $module1['requires_connection'] == $module2['requires_connection'] )
190 return 0;
191 if ( $module1['requires_connection'] )
192 return 1;
193 if ( $module2['requires_connection'] )
194 return -1;
195
196 return 0;
197 }
198
199 function get_columns() {
200 $columns = array(
201 'cb' => '<input type="checkbox" />',
202 'name' => __( 'Name', 'jetpack' ),
203 );
204 return $columns;
205 }
206
207 function get_bulk_actions() {
208 $actions = array(
209 'bulk-activate' => __( 'Activate', 'jetpack' ),
210 'bulk-deactivate' => __( 'Deactivate', 'jetpack' ),
211 );
212 return $actions;
213 }
214
215 function single_row( $item ) {
216 static $i = 0;
217 $row_class = ( ++$i % 2 ) ? ' alternate' : '';
218
219 if ( ! empty( $item['activated'] ) )
220 $row_class .= ' active';
221
222 if ( ! Jetpack_Admin::is_module_available( $item ) ) {
223 $row_class .= ' unavailable';
224 }
225
226 echo '<tr class="jetpack-module' . esc_attr( $row_class ) . '" id="' . esc_attr( $item['module'] ) . '">';
227 $this->single_row_columns( $item );
228 echo '</tr>';
229 }
230
231 function get_table_classes() {
232 return array( 'table', 'table-bordered', 'wp-list-table', 'widefat', 'fixed', 'jetpack-modules' );
233 }
234
235 function column_cb( $item ) {
236 if ( ! Jetpack_Admin::is_module_available( $item ) )
237 return '';
238
239 return sprintf( '<input type="checkbox" name="modules[]" value="%s" />', $item['module'] );
240 }
241
242 function column_icon( $item ) {
243 $badge_text = $free_text = '';
244 ob_start();
245 ?>
246 <a href="#TB_inline?width=600&height=550&inlineId=more-info-module-settings-modal" class="thickbox">
247 <div class="module-image">
248 <p><span class="module-image-badge"><?php echo $badge_text; ?></span><span class="module-image-free" style="display: none"><?php echo $free_text; ?></span></p>
249 </div>
250 </a>
251 <?php
252 return ob_get_clean();
253
254 }
255
256 function column_name( $item ) {
257 $actions = array(
258 'info' => sprintf( '<a href="%s" target="blank">%s</a>', esc_url( $item['learn_more_button'] ), esc_html__( 'Feature Info', 'jetpack' ) ),
259 );
260
261 if ( ! empty( $item['configurable'] ) ) {
262 $actions['configure'] = $item['configurable'];
263 }
264
265 if ( empty( $item['activated'] ) && Jetpack_Admin::is_module_available( $item ) ) {
266 $url = wp_nonce_url(
267 Jetpack::admin_url( array(
268 'page' => 'jetpack',
269 'action' => 'activate',
270 'module' => $item['module'],
271 ) ),
272 'jetpack_activate-' . $item['module']
273 );
274 $actions['activate'] = sprintf( '<a href="%s">%s</a>', esc_url( $url ), esc_html__( 'Activate', 'jetpack' ) );
275 } elseif ( ! empty( $item['activated'] ) ) {
276 $url = wp_nonce_url(
277 Jetpack::admin_url( array(
278 'page' => 'jetpack',
279 'action' => 'deactivate',
280 'module' => $item['module'],
281 ) ),
282 'jetpack_deactivate-' . $item['module']
283 );
284 $actions['delete'] = sprintf( '<a href="%s">%s</a>', esc_url( $url ), esc_html__( 'Deactivate', 'jetpack' ) );
285 }
286
287 return $this->row_actions( $actions ) . wptexturize( $item['name'] );
288 }
289
290 function column_description( $item ) {
291 ob_start();
292 /** This action is documented in class.jetpack-admin.php */
293 echo apply_filters( 'jetpack_short_module_description', $item['description'], $item['module'] );
294 /** This action is documented in class.jetpack-admin.php */
295 do_action( 'jetpack_learn_more_button_' . $item['module'] );
296 echo '<div id="more-info-' . $item['module'] . '" class="more-info">';
297 /** This action is documented in class.jetpack-admin.php */
298 do_action( 'jetpack_module_more_info_' . $item['module'] );
299 echo '</div>';
300 return ob_get_clean();
301 }
302
303 function column_module_tags( $item ) {
304 $module_tags = array();
305 foreach( $item['module_tags'] as $module_tag ) {
306 $module_tags[] = sprintf( '<a href="%3$s" data-title="%2$s">%1$s</a>', esc_html( $module_tag ), esc_attr( $module_tag ), esc_url( add_query_arg( 'module_tag', urlencode( $module_tag ) ) ) );
307 }
308 return implode( ', ', $module_tags );
309 }
310
311 function column_default( $item, $column_name ) {
312 switch ( $column_name ) {
313 case 'icon':
314 case 'name':
315 case 'description':
316 break;
317 default:
318 return print_r( $item, true );
319 }
320 }
321
322 //Check if the info parameter provided in the URL corresponds to an actual module
323 function module_info_check( $info = false, $modules ) {
324 if ( false == $info ) {
325 return false;
326 } else if ( array_key_exists( $info, $modules ) ) {
327 return $info;
328 }
329 }
330
331 /**
332 * Core switched their `display_tablenav()` method to protected, so we can't access it directly.
333 * Instead, let's include an access function to make it doable without errors!
334 *
335 * @see https://github.com/WordPress/WordPress/commit/d28f6344de97616de8ece543ed290c4ba2383622
336 *
337 * @param string $which
338 *
339 * @return mixed
340 */
341 function unprotected_display_tablenav( $which = 'top' ) {
342 return $this->display_tablenav( $which );
343 }
344
345 }
346