PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.3
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 13.7.2 13.8.3 13.9.2 14.0.1 All 504 releases
jetpack / class.jetpack-network-sites-list-table.php

class.jetpack-network-sites-list-table.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.3, at class.jetpack-network-sites-list-table.php

215 lines 5.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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
215