summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/class.jetpack-network-sites-list-table.php')
-rw-r--r--plugins/jetpack/class.jetpack-network-sites-list-table.php148
1 files changed, 148 insertions, 0 deletions
diff --git a/plugins/jetpack/class.jetpack-network-sites-list-table.php b/plugins/jetpack/class.jetpack-network-sites-list-table.php
new file mode 100644
index 00000000..168b52cd
--- /dev/null
+++ b/plugins/jetpack/class.jetpack-network-sites-list-table.php
@@ -0,0 +1,148 @@
+<?php
+
+if( ! class_exists( 'WP_List_Table' ) ) {
+ require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
+}
+
+class Jetpack_Network_Sites_List_Table extends WP_List_Table {
+
+
+ public function get_columns() {
+ // site name, status, username connected under
+ $columns = array(
+ 'cb' => '<input type="checkbox" />',
+ 'blogname' => __( 'Site Name', 'jetpack' ),
+ 'blog_path' => __( 'Path', 'jetpack' ),
+ 'connected' => __( 'Connected', 'jetpack' ),
+ );
+
+ return $columns;
+ }
+
+ public function prepare_items() {
+ $jpms = Jetpack_Network::init();
+
+ // Deal with bulk actions if any were requested by the user
+ $this->process_bulk_action();
+
+ $sites = get_sites( array(
+ 'site__not_in' => array( get_current_blog_id() ),
+ 'archived' => false,
+ 'number' => 0,
+ ) );
+
+ // Setup pagination
+ $per_page = 25;
+ $current_page = $this->get_pagenum();
+ $total_items = count( $sites );
+ $sites = array_slice( $sites, ( ( $current_page-1 ) * $per_page ), $per_page );
+ $this->set_pagination_args( array(
+ 'total_items' => $total_items,
+ 'per_page' => $per_page
+ ) );
+
+ $columns = $this->get_columns();
+ $hidden = array();
+ $sortable = array();
+ $this->_column_headers = array( $columns, $hidden, $sortable );
+ $this->items = $sites;
+ }
+
+ public function column_blogname( $item ) {
+ // http://jpms/wp-admin/network/site-info.php?id=1
+ switch_to_blog( $item->blog_id );
+ $jp_url = admin_url( 'admin.php?page=jetpack' );
+ restore_current_blog();
+
+ $actions = array(
+ 'edit' => '<a href="' . esc_url( network_admin_url( 'site-info.php?id=' . $item->blog_id ) ) . '">' . esc_html__( 'Edit', 'jetpack' ) . '</a>',
+ 'dashboard' => '<a href="' . esc_url( get_admin_url( $item->blog_id, '', 'admin' ) ) . '">' . esc_html__( 'Dashboard', 'jetpack' ) . '</a>',
+ 'view' => '<a href="' . esc_url( get_site_url( $item->blog_id, '', 'admin' ) ) . '">' . esc_html__( 'View', 'jetpack' ) . '</a>',
+ 'jetpack-' . $item->blog_id => '<a href="' . esc_url( $jp_url ) . '">Jetpack</a>',
+ );
+
+ return sprintf('%1$s %2$s', '<strong>' . get_blog_option( $item->blog_id, 'blogname' ) . '</strong>', $this->row_actions($actions) );
+ }
+
+ public function column_blog_path( $item ) {
+ return
+ '<a href="' .
+ get_site_url( $item->blog_id, '', 'admin' ) .
+ '">' .
+ str_replace( array( 'http://', 'https://' ), '', get_site_url( $item->blog_id, '', 'admin' ) ) .
+ '</a>';
+ }
+
+ public function column_connected( $item ) {
+ $jpms = Jetpack_Network::init();
+ $jp = Jetpack::init();
+
+ switch_to_blog( $item->blog_id );
+
+ if ( ! is_plugin_active( 'jetpack/jetpack.php' ) ) {
+ $title = __( 'Jetpack is not active on this site.', 'jetpack' );
+ $action = array(
+ 'manage-plugins' => '<a href="' . get_admin_url( $item->blog_id, 'plugins.php', 'admin' ) . '">' . __( 'Manage Plugins', 'jetpack' ) . '</a>',
+ );
+ restore_current_blog();
+ return sprintf( '%1$s %2$s', $title, $this->row_actions( $action ) );
+ }
+
+ if( $jp->is_active() ) {
+ // Build url for disconnecting
+ $url = $jpms->get_url( array(
+ 'name' => 'subsitedisconnect',
+ 'site_id' => $item->blog_id,
+
+ ) );
+ restore_current_blog();
+ return '<a href="' . esc_url( $url ) . '">' . esc_html__( 'Disconnect', 'jetpack' ) . '</a>';
+ }
+ restore_current_blog();
+
+ // Build URL for connecting
+ $url = $jpms->get_url( array(
+ 'name' => 'subsiteregister',
+ 'site_id' => $item->blog_id,
+ ) );
+ return '<a href="' . esc_url( $url ) . '">' . esc_html__( 'Connect', 'jetpack' ) . '</a>';
+ }
+
+ public function get_bulk_actions() {
+ $actions = array(
+ 'connect' => esc_html__( 'Connect', 'jetpack' ),
+ 'disconnect' => esc_html__( 'Disconnect', 'jetpack' )
+ );
+
+ return $actions;
+ }
+
+ function column_cb($item) {
+ return sprintf(
+ '<input type="checkbox" name="bulk[]" value="%s" />', $item->blog_id
+ );
+ }
+
+ public function process_bulk_action() {
+ if( !isset( $_POST['bulk'] ) || empty ( $_POST['bulk'] ) )
+ return; // Thou shall not pass! There is nothing to do
+
+
+ $jpms = Jetpack_Network::init();
+
+ $action = $this->current_action();
+ switch ( $action ) {
+
+ case 'connect':
+ foreach( $_POST['bulk'] as $k => $site ) {
+ $jpms->do_subsiteregister( $site );
+ }
+ break;
+ case 'disconnect':
+ foreach( $_POST['bulk'] as $k => $site ) {
+ $jpms->do_subsitedisconnect( $site );
+ }
+ break;
+ }
+ }
+} // end h