PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | class.jetpack-network-sites-list-table.php +214 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,214 @@
1 +<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 +/**
3 + * Jetpack network sites list table.
4 + *
5 + * @package automattic/jetpack
6 + */
7 +
8 +if ( ! defined( 'ABSPATH' ) ) {
9 + exit( 0 );
10 +}
11 +
12 +if ( ! class_exists( 'WP_List_Table' ) ) {
13 + require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
14 +}
15 +
16 +/**
17 + * Jetpack network sites list table.
18 + */
19 +class Jetpack_Network_Sites_List_Table extends WP_List_Table {
20 +
21 + /**
22 + * Get columns.
23 + *
24 + * @return array name => header HTML.
25 + */
26 + public function get_columns() {
27 + // site name, status, username connected under.
28 + $columns = array(
29 + 'cb' => '<input type="checkbox" />',
30 + 'blogname' => __( 'Site Name', 'jetpack' ),
31 + 'blog_path' => __( 'Path', 'jetpack' ),
32 + 'connected' => __( 'Connected', 'jetpack' ),
33 + );
34 +
35 + return $columns;
36 + }
37 +
38 + /**
39 + * Prepare items.
40 + */
41 + public function prepare_items() {
42 + // Make sure Jetpack_Network is initialized.
43 + Jetpack_Network::init();
44 +
45 + // Deal with bulk actions if any were requested by the user.
46 + $this->process_bulk_action();
47 +
48 + $sites = get_sites(
49 + array(
50 + 'site__not_in' => array( get_current_blog_id() ),
51 + 'archived' => false,
52 + 'number' => 0,
53 + 'network_id' => get_current_network_id(),
54 + )
55 + );
56 +
57 + // Setup pagination.
58 + $per_page = 25;
59 + $current_page = $this->get_pagenum();
60 + $total_items = is_countable( $sites ) ? count( $sites ) : 0;
61 + $sites = array_slice( $sites, ( ( $current_page - 1 ) * $per_page ), $per_page );
62 + $this->set_pagination_args(
63 + array(
64 + 'total_items' => $total_items,
65 + 'per_page' => $per_page,
66 + )
67 + );
68 +
69 + $columns = $this->get_columns();
70 + $hidden = array();
71 + $sortable = array();
72 + $this->_column_headers = array( $columns, $hidden, $sortable );
73 + $this->items = $sites;
74 + }
75 +
76 + /**
77 + * Column blogname.
78 + *
79 + * @param object|array $item Item.
80 + * @return string HTML.
81 + */
82 + public function column_blogname( $item ) {
83 + // <http://jpms/wp-admin/network/site-info.php?id=1>.
84 + switch_to_blog( $item->blog_id );
85 + $jp_url = admin_url( 'admin.php?page=jetpack' );
86 + restore_current_blog();
87 +
88 + $actions = array(
89 + 'edit' => '<a href="' . esc_url( network_admin_url( 'site-info.php?id=' . $item->blog_id ) ) . '">' . esc_html__( 'Edit', 'jetpack' ) . '</a>',
90 + 'dashboard' => '<a href="' . esc_url( get_admin_url( $item->blog_id, '', 'admin' ) ) . '">' . esc_html__( 'Dashboard', 'jetpack' ) . '</a>',
91 + 'view' => '<a href="' . esc_url( get_site_url( $item->blog_id, '', 'admin' ) ) . '">' . esc_html__( 'View', 'jetpack' ) . '</a>',
92 + 'jetpack-' . $item->blog_id => '<a href="' . esc_url( $jp_url ) . '">Jetpack</a>',
93 + );
94 +
95 + return sprintf( '%1$s %2$s', '<strong>' . get_blog_option( $item->blog_id, 'blogname' ) . '</strong>', $this->row_actions( $actions ) );
96 + }
97 +
98 + /**
99 + * Column blog path.
100 + *
101 + * @param object|array $item Item.
102 + * @return string HTML.
103 + */
104 + public function column_blog_path( $item ) {
105 + return '<a href="' .
106 + get_site_url( $item->blog_id, '', 'admin' ) .
107 + '">' .
108 + str_replace( array( 'http://', 'https://' ), '', get_site_url( $item->blog_id, '', 'admin' ) ) .
109 + '</a>';
110 + }
111 +
112 + /**
113 + * Column connected.
114 + *
115 + * @param object|array $item Item.
116 + * @return string HTML.
117 + */
118 + public function column_connected( $item ) {
119 + $jpms = Jetpack_Network::init();
120 + $jp = Jetpack::init();
121 +
122 + switch_to_blog( $item->blog_id );
123 +
124 + // Checks for both the stock version of Jetpack and the one managed by the Jetpack Beta Plugin.
125 + if ( ! is_plugin_active( 'jetpack/jetpack.php' ) && ! is_plugin_active( 'jetpack-dev/jetpack.php' ) && ! array_key_exists( 'jetpack.php', get_mu_plugins() ) ) {
126 + $title = __( 'Jetpack is not active on this site.', 'jetpack' );
127 + $action = array(
128 + 'manage-plugins' => '<a href="' . get_admin_url( $item->blog_id, 'plugins.php', 'admin' ) . '">' . __( 'Manage Plugins', 'jetpack' ) . '</a>',
129 + );
130 + restore_current_blog();
131 + return sprintf( '%1$s %2$s', $title, $this->row_actions( $action ) );
132 + }
133 +
134 + if ( $jp->is_connection_ready() ) {
135 + // Build url for disconnecting.
136 + $url = $jpms->get_url(
137 + array(
138 + 'name' => 'subsitedisconnect',
139 + 'site_id' => $item->blog_id,
140 +
141 + )
142 + );
143 + restore_current_blog();
144 + return '<a href="' . wp_nonce_url( $url, 'jetpack-subsite-disconnect' ) . '">' . esc_html__( 'Disconnect', 'jetpack' ) . '</a>';
145 + }
146 + restore_current_blog();
147 +
148 + // Build URL for connecting.
149 + $url = $jpms->get_url(
150 + array(
151 + 'name' => 'subsiteregister',
152 + 'site_id' => $item->blog_id,
153 + )
154 + );
155 + return '<a href="' . wp_nonce_url( $url, 'jetpack-subsite-register' ) . '">' . esc_html__( 'Connect', 'jetpack' ) . '</a>';
156 + }
157 +
158 + /**
159 + * Get bulk actions.
160 + *
161 + * @return array Code => HTML.
162 + */
163 + public function get_bulk_actions() {
164 + $actions = array(
165 + 'connect' => esc_html__( 'Connect', 'jetpack' ),
166 + 'disconnect' => esc_html__( 'Disconnect', 'jetpack' ),
167 + );
168 +
169 + return $actions;
170 + }
171 +
172 + /**
173 + * Column checkbox.
174 + *
175 + * @param object|array $item Item.
176 + * @return string HTML.
177 + */
178 + public function column_cb( $item ) {
179 + return sprintf(
180 + '<input type="checkbox" name="bulk[]" value="%s" />',
181 + $item->blog_id
182 + );
183 + }
184 +
185 + /**
186 + * Process bulk actions.
187 + */
188 + public function process_bulk_action() {
189 + if ( empty( $_POST['bulk'] ) ) {
190 + return; // Thou shall not pass! There is nothing to do.
191 + }
192 +
193 + check_admin_referer( 'bulk-toplevel_page_jetpack-network' );
194 +
195 + $jpms = Jetpack_Network::init();
196 +
197 + $action = $this->current_action();
198 + switch ( $action ) {
199 +
200 + case 'connect':
201 + $bulk = wp_unslash( $_POST['bulk'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
202 + foreach ( $bulk as $site ) {
203 + $jpms->do_subsiteregister( $site );
204 + }
205 + break;
206 + case 'disconnect':
207 + $bulk = wp_unslash( $_POST['bulk'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
208 + foreach ( $bulk as $site ) {
209 + $jpms->do_subsitedisconnect( $site );
210 + }
211 + break;
212 + }
213 + }
214 +} // end h