2010-10-25 04:57:43 +02:00
|
|
|
<?php
|
|
|
|
/**
|
2015-10-17 17:13:25 +02:00
|
|
|
* List Table API: WP_MS_Sites_List_Table class
|
2010-10-25 04:57:43 +02:00
|
|
|
*
|
|
|
|
* @package WordPress
|
2015-10-17 17:13:25 +02:00
|
|
|
* @subpackage Administration
|
|
|
|
* @since 3.1.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Core class used to implement displaying sites in a list table for the network admin.
|
|
|
|
*
|
2010-10-25 06:04:18 +02:00
|
|
|
* @since 3.1.0
|
2015-10-17 17:13:25 +02:00
|
|
|
*
|
|
|
|
* @see WP_List_Table
|
2010-10-25 04:57:43 +02:00
|
|
|
*/
|
2010-11-04 09:07:03 +01:00
|
|
|
class WP_MS_Sites_List_Table extends WP_List_Table {
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2015-06-13 18:23:25 +02:00
|
|
|
/**
|
2015-07-13 19:53:24 +02:00
|
|
|
* Site status list.
|
2015-06-13 18:23:25 +02:00
|
|
|
*
|
2015-07-13 19:53:24 +02:00
|
|
|
* @since 4.3.0
|
2015-06-13 18:23:25 +02:00
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
public $status_list;
|
|
|
|
|
2014-08-10 04:18:17 +02:00
|
|
|
/**
|
|
|
|
* Constructor.
|
2014-09-04 17:23:16 +02:00
|
|
|
*
|
2014-08-10 04:18:17 +02:00
|
|
|
* @since 3.1.0
|
|
|
|
*
|
|
|
|
* @see WP_List_Table::__construct() for more information on default arguments.
|
|
|
|
*
|
|
|
|
* @param array $args An associative array of arguments.
|
2014-09-04 17:23:16 +02:00
|
|
|
*/
|
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-19 03:17:15 +02:00
|
|
|
public function __construct( $args = array() ) {
|
2015-06-13 18:23:25 +02:00
|
|
|
$this->status_list = array(
|
|
|
|
'archived' => array( 'site-archived', __( 'Archived' ) ),
|
|
|
|
'spam' => array( 'site-spammed', _x( 'Spam', 'site' ) ),
|
|
|
|
'deleted' => array( 'site-deleted', __( 'Deleted' ) ),
|
2017-12-01 00:11:00 +01:00
|
|
|
'mature' => array( 'site-mature', __( 'Mature' ) ),
|
2015-06-13 18:23:25 +02:00
|
|
|
);
|
|
|
|
|
2017-12-01 00:11:00 +01:00
|
|
|
parent::__construct(
|
|
|
|
array(
|
|
|
|
'plural' => 'sites',
|
|
|
|
'screen' => isset( $args['screen'] ) ? $args['screen'] : null,
|
|
|
|
)
|
|
|
|
);
|
2010-10-25 04:57:43 +02:00
|
|
|
}
|
|
|
|
|
2015-05-29 22:17:26 +02:00
|
|
|
/**
|
|
|
|
* @return bool
|
|
|
|
*/
|
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-19 03:17:15 +02:00
|
|
|
public function ajax_user_can() {
|
2010-12-16 10:18:28 +01:00
|
|
|
return current_user_can( 'manage_sites' );
|
2010-10-25 04:57:43 +02:00
|
|
|
}
|
|
|
|
|
2015-05-28 23:41:30 +02:00
|
|
|
/**
|
2016-06-17 18:06:31 +02:00
|
|
|
* Prepares the list of sites for display.
|
|
|
|
*
|
|
|
|
* @since 3.1.0
|
2015-05-28 23:41:30 +02:00
|
|
|
*
|
2020-07-10 18:04:05 +02:00
|
|
|
* @global string $mode List table view mode.
|
2015-05-28 23:41:30 +02:00
|
|
|
* @global string $s
|
2019-08-04 03:12:56 +02:00
|
|
|
* @global wpdb $wpdb WordPress database abstraction object.
|
2015-05-28 23:41:30 +02:00
|
|
|
*/
|
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-19 03:17:15 +02:00
|
|
|
public function prepare_items() {
|
2020-07-10 18:04:05 +02:00
|
|
|
global $mode, $s, $wpdb;
|
2013-11-13 04:23:10 +01:00
|
|
|
|
2016-02-17 23:00:27 +01:00
|
|
|
if ( ! empty( $_REQUEST['mode'] ) ) {
|
2020-02-09 17:55:09 +01:00
|
|
|
$mode = 'excerpt' === $_REQUEST['mode'] ? 'excerpt' : 'list';
|
2016-02-18 17:51:27 +01:00
|
|
|
set_user_setting( 'sites_list_mode', $mode );
|
2016-02-17 23:00:27 +01:00
|
|
|
} else {
|
2016-02-18 17:51:27 +01:00
|
|
|
$mode = get_user_setting( 'sites_list_mode', 'list' );
|
2016-02-17 23:00:27 +01:00
|
|
|
}
|
2010-10-25 04:57:43 +02:00
|
|
|
|
|
|
|
$per_page = $this->get_items_per_page( 'sites_network_per_page' );
|
|
|
|
|
|
|
|
$pagenum = $this->get_pagenum();
|
|
|
|
|
2017-12-01 00:11:00 +01:00
|
|
|
$s = isset( $_REQUEST['s'] ) ? wp_unslash( trim( $_REQUEST['s'] ) ) : '';
|
2010-11-03 20:26:23 +01:00
|
|
|
$wild = '';
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( false !== strpos( $s, '*' ) ) {
|
2016-06-17 02:03:29 +02:00
|
|
|
$wild = '*';
|
2017-12-01 00:11:00 +01:00
|
|
|
$s = trim( $s, '*' );
|
2010-11-03 20:26:23 +01:00
|
|
|
}
|
|
|
|
|
2014-07-17 11:14:16 +02:00
|
|
|
/*
|
|
|
|
* If the network is large and a search is not being performed, show only
|
2016-01-28 04:35:27 +01:00
|
|
|
* the latest sites with no paging in order to avoid expensive count queries.
|
2014-07-17 11:14:16 +02:00
|
|
|
*/
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( ! $s && wp_is_large_network() ) {
|
|
|
|
if ( ! isset( $_REQUEST['orderby'] ) ) {
|
2019-07-01 14:52:01 +02:00
|
|
|
$_GET['orderby'] = '';
|
|
|
|
$_REQUEST['orderby'] = '';
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
|
|
|
if ( ! isset( $_REQUEST['order'] ) ) {
|
2019-07-01 14:52:01 +02:00
|
|
|
$_GET['order'] = 'DESC';
|
|
|
|
$_REQUEST['order'] = 'DESC';
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
2010-11-01 18:53:03 +01:00
|
|
|
}
|
|
|
|
|
2016-06-17 02:03:29 +02:00
|
|
|
$args = array(
|
2020-10-08 23:15:13 +02:00
|
|
|
'number' => (int) $per_page,
|
|
|
|
'offset' => (int) ( ( $pagenum - 1 ) * $per_page ),
|
2016-06-17 02:03:29 +02:00
|
|
|
'network_id' => get_current_network_id(),
|
|
|
|
);
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( empty( $s ) ) {
|
2010-11-03 19:28:02 +01:00
|
|
|
// Nothing to do.
|
2023-04-18 10:37:19 +02:00
|
|
|
} elseif ( preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $s )
|
|
|
|
|| preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s )
|
|
|
|
|| preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s )
|
|
|
|
|| preg_match( '/^[0-9]{1,3}\.$/', $s )
|
|
|
|
) {
|
2020-01-29 01:45:18 +01:00
|
|
|
// IPv4 address.
|
2023-04-18 10:37:19 +02:00
|
|
|
$sql = $wpdb->prepare(
|
|
|
|
"SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE %s",
|
|
|
|
$wpdb->esc_like( $s ) . ( ! empty( $wild ) ? '%' : '' )
|
|
|
|
);
|
|
|
|
|
2014-06-10 02:44:15 +02:00
|
|
|
$reg_blog_ids = $wpdb->get_col( $sql );
|
2010-11-19 19:16:03 +01:00
|
|
|
|
2016-06-17 02:03:29 +02:00
|
|
|
if ( $reg_blog_ids ) {
|
|
|
|
$args['site__in'] = $reg_blog_ids;
|
|
|
|
}
|
|
|
|
} elseif ( is_numeric( $s ) && empty( $wild ) ) {
|
|
|
|
$args['ID'] = $s;
|
2010-11-03 19:28:02 +01:00
|
|
|
} else {
|
2016-06-17 02:03:29 +02:00
|
|
|
$args['search'] = $s;
|
|
|
|
|
|
|
|
if ( ! is_subdomain_install() ) {
|
|
|
|
$args['search_columns'] = array( 'path' );
|
2010-10-25 04:57:43 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-12-30 19:06:33 +01:00
|
|
|
$order_by = isset( $_REQUEST['orderby'] ) ? $_REQUEST['orderby'] : '';
|
2016-06-17 02:03:29 +02:00
|
|
|
if ( 'registered' === $order_by ) {
|
2020-01-29 01:45:18 +01:00
|
|
|
// 'registered' is a valid field name.
|
2016-06-17 02:03:29 +02:00
|
|
|
} elseif ( 'lastupdated' === $order_by ) {
|
|
|
|
$order_by = 'last_updated';
|
|
|
|
} elseif ( 'blogname' === $order_by ) {
|
2015-06-10 08:50:25 +02:00
|
|
|
if ( is_subdomain_install() ) {
|
2016-06-17 02:03:29 +02:00
|
|
|
$order_by = 'domain';
|
2015-06-10 08:50:25 +02:00
|
|
|
} else {
|
2016-06-17 02:03:29 +02:00
|
|
|
$order_by = 'path';
|
2015-06-10 08:50:25 +02:00
|
|
|
}
|
2016-06-17 02:03:29 +02:00
|
|
|
} elseif ( 'blog_id' === $order_by ) {
|
|
|
|
$order_by = 'id';
|
|
|
|
} elseif ( ! $order_by ) {
|
|
|
|
$order_by = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
$args['orderby'] = $order_by;
|
|
|
|
|
|
|
|
if ( $order_by ) {
|
2017-12-01 00:11:00 +01:00
|
|
|
$args['order'] = ( isset( $_REQUEST['order'] ) && 'DESC' === strtoupper( $_REQUEST['order'] ) ) ? 'DESC' : 'ASC';
|
2010-10-25 04:57:43 +02:00
|
|
|
}
|
|
|
|
|
2016-06-17 02:03:29 +02:00
|
|
|
if ( wp_is_large_network() ) {
|
|
|
|
$args['no_found_rows'] = true;
|
|
|
|
} else {
|
|
|
|
$args['no_found_rows'] = false;
|
2010-11-19 19:16:03 +01:00
|
|
|
}
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2019-09-23 19:51:58 +02:00
|
|
|
// Take into account the role the user has selected.
|
|
|
|
$status = isset( $_REQUEST['status'] ) ? wp_unslash( trim( $_REQUEST['status'] ) ) : '';
|
|
|
|
if ( in_array( $status, array( 'public', 'archived', 'mature', 'spam', 'deleted' ), true ) ) {
|
|
|
|
$args[ $status ] = 1;
|
|
|
|
}
|
|
|
|
|
2016-06-29 00:26:30 +02:00
|
|
|
/**
|
|
|
|
* Filters the arguments for the site query in the sites list table.
|
|
|
|
*
|
|
|
|
* @since 4.6.0
|
|
|
|
*
|
|
|
|
* @param array $args An array of get_sites() arguments.
|
|
|
|
*/
|
|
|
|
$args = apply_filters( 'ms_sites_list_table_query_args', $args );
|
|
|
|
|
2016-06-17 02:03:29 +02:00
|
|
|
$_sites = get_sites( $args );
|
|
|
|
if ( is_array( $_sites ) ) {
|
|
|
|
update_site_cache( $_sites );
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2016-06-17 02:03:29 +02:00
|
|
|
$this->items = array_slice( $_sites, 0, $per_page );
|
|
|
|
}
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2017-12-01 00:11:00 +01:00
|
|
|
$total_sites = get_sites(
|
|
|
|
array_merge(
|
2018-08-17 03:51:36 +02:00
|
|
|
$args,
|
|
|
|
array(
|
2017-12-01 00:11:00 +01:00
|
|
|
'count' => true,
|
|
|
|
'offset' => 0,
|
|
|
|
'number' => 0,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
);
|
2010-11-01 18:53:03 +01:00
|
|
|
|
2017-12-01 00:11:00 +01:00
|
|
|
$this->set_pagination_args(
|
|
|
|
array(
|
|
|
|
'total_items' => $total_sites,
|
|
|
|
'per_page' => $per_page,
|
|
|
|
)
|
|
|
|
);
|
2010-10-25 04:57:43 +02:00
|
|
|
}
|
|
|
|
|
2015-05-29 23:32:24 +02:00
|
|
|
/**
|
|
|
|
*/
|
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-19 03:17:15 +02:00
|
|
|
public function no_items() {
|
2010-10-25 04:57:43 +02:00
|
|
|
_e( 'No sites found.' );
|
|
|
|
}
|
|
|
|
|
2019-09-23 19:51:58 +02:00
|
|
|
/**
|
|
|
|
* Gets links to filter sites by status.
|
|
|
|
*
|
|
|
|
* @since 5.3.0
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
protected function get_views() {
|
|
|
|
$counts = wp_count_sites();
|
|
|
|
|
|
|
|
$statuses = array(
|
2019-10-04 21:58:55 +02:00
|
|
|
/* translators: %s: Number of sites. */
|
|
|
|
'all' => _nx_noop(
|
|
|
|
'All <span class="count">(%s)</span>',
|
|
|
|
'All <span class="count">(%s)</span>',
|
|
|
|
'sites'
|
|
|
|
),
|
|
|
|
|
|
|
|
/* translators: %s: Number of sites. */
|
|
|
|
'public' => _n_noop(
|
|
|
|
'Public <span class="count">(%s)</span>',
|
|
|
|
'Public <span class="count">(%s)</span>'
|
|
|
|
),
|
|
|
|
|
|
|
|
/* translators: %s: Number of sites. */
|
|
|
|
'archived' => _n_noop(
|
|
|
|
'Archived <span class="count">(%s)</span>',
|
|
|
|
'Archived <span class="count">(%s)</span>'
|
|
|
|
),
|
|
|
|
|
|
|
|
/* translators: %s: Number of sites. */
|
|
|
|
'mature' => _n_noop(
|
|
|
|
'Mature <span class="count">(%s)</span>',
|
|
|
|
'Mature <span class="count">(%s)</span>'
|
|
|
|
),
|
|
|
|
|
|
|
|
/* translators: %s: Number of sites. */
|
|
|
|
'spam' => _nx_noop(
|
|
|
|
'Spam <span class="count">(%s)</span>',
|
|
|
|
'Spam <span class="count">(%s)</span>',
|
|
|
|
'sites'
|
|
|
|
),
|
|
|
|
|
|
|
|
/* translators: %s: Number of sites. */
|
|
|
|
'deleted' => _n_noop(
|
|
|
|
'Deleted <span class="count">(%s)</span>',
|
|
|
|
'Deleted <span class="count">(%s)</span>'
|
|
|
|
),
|
2019-09-23 19:51:58 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
$view_links = array();
|
|
|
|
$requested_status = isset( $_REQUEST['status'] ) ? wp_unslash( trim( $_REQUEST['status'] ) ) : '';
|
|
|
|
$url = 'sites.php';
|
|
|
|
|
|
|
|
foreach ( $statuses as $status => $label_count ) {
|
|
|
|
if ( (int) $counts[ $status ] > 0 ) {
|
2023-04-18 10:37:19 +02:00
|
|
|
$label = sprintf(
|
|
|
|
translate_nooped_plural( $label_count, $counts[ $status ] ),
|
|
|
|
number_format_i18n( $counts[ $status ] )
|
|
|
|
);
|
|
|
|
|
2019-09-23 19:51:58 +02:00
|
|
|
$full_url = 'all' === $status ? $url : add_query_arg( 'status', $status, $url );
|
|
|
|
|
2022-09-19 23:08:10 +02:00
|
|
|
$view_links[ $status ] = array(
|
|
|
|
'url' => esc_url( $full_url ),
|
|
|
|
'label' => $label,
|
|
|
|
'current' => $requested_status === $status || ( '' === $requested_status && 'all' === $status ),
|
2019-09-23 19:51:58 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-19 23:08:10 +02:00
|
|
|
return $this->get_views_links( $view_links );
|
2019-09-23 19:51:58 +02:00
|
|
|
}
|
|
|
|
|
2015-05-29 22:17:26 +02:00
|
|
|
/**
|
|
|
|
* @return array
|
|
|
|
*/
|
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-19 03:17:15 +02:00
|
|
|
protected function get_bulk_actions() {
|
2010-10-25 04:57:43 +02:00
|
|
|
$actions = array();
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( current_user_can( 'delete_sites' ) ) {
|
2010-11-12 17:35:28 +01:00
|
|
|
$actions['delete'] = __( 'Delete' );
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
2020-07-24 02:27:03 +02:00
|
|
|
$actions['spam'] = _x( 'Mark as spam', 'site' );
|
|
|
|
$actions['notspam'] = _x( 'Not spam', 'site' );
|
2010-10-25 04:57:43 +02:00
|
|
|
|
|
|
|
return $actions;
|
|
|
|
}
|
|
|
|
|
2014-12-01 01:33:23 +01:00
|
|
|
/**
|
2017-03-22 04:48:42 +01:00
|
|
|
* @global string $mode List table view mode.
|
2015-05-28 23:41:30 +02:00
|
|
|
*
|
2019-09-20 22:57:57 +02:00
|
|
|
* @param string $which The location of the pagination nav markup: 'top' or 'bottom'.
|
2014-12-01 01:33:23 +01:00
|
|
|
*/
|
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-19 03:17:15 +02:00
|
|
|
protected function pagination( $which ) {
|
2010-10-25 04:57:43 +02:00
|
|
|
global $mode;
|
|
|
|
|
|
|
|
parent::pagination( $which );
|
|
|
|
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( 'top' === $which ) {
|
2010-10-25 04:57:43 +02:00
|
|
|
$this->view_switcher( $mode );
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
2010-10-25 04:57:43 +02:00
|
|
|
}
|
|
|
|
|
2019-09-20 22:53:58 +02:00
|
|
|
/**
|
|
|
|
* Extra controls to be displayed between bulk actions and pagination.
|
|
|
|
*
|
|
|
|
* @since 5.3.0
|
|
|
|
*
|
2019-09-20 22:57:57 +02:00
|
|
|
* @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
|
2019-09-20 22:53:58 +02:00
|
|
|
*/
|
|
|
|
protected function extra_tablenav( $which ) {
|
|
|
|
?>
|
|
|
|
<div class="alignleft actions">
|
|
|
|
<?php
|
|
|
|
if ( 'top' === $which ) {
|
|
|
|
ob_start();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Fires before the Filter button on the MS sites list table.
|
|
|
|
*
|
|
|
|
* @since 5.3.0
|
|
|
|
*
|
|
|
|
* @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
|
|
|
|
*/
|
|
|
|
do_action( 'restrict_manage_sites', $which );
|
2020-08-04 17:58:06 +02:00
|
|
|
|
2019-09-20 22:53:58 +02:00
|
|
|
$output = ob_get_clean();
|
2020-08-04 17:58:06 +02:00
|
|
|
|
2019-09-20 22:53:58 +02:00
|
|
|
if ( ! empty( $output ) ) {
|
|
|
|
echo $output;
|
|
|
|
submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'site-query-submit' ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|
|
|
|
</div>
|
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Fires immediately following the closing "actions" div in the tablenav for the
|
|
|
|
* MS sites list table.
|
|
|
|
*
|
|
|
|
* @since 5.3.0
|
|
|
|
*
|
|
|
|
* @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
|
|
|
|
*/
|
|
|
|
do_action( 'manage_sites_extra_tablenav', $which );
|
|
|
|
}
|
|
|
|
|
2015-05-29 22:17:26 +02:00
|
|
|
/**
|
|
|
|
* @return array
|
|
|
|
*/
|
2014-07-12 05:27:14 +02:00
|
|
|
public function get_columns() {
|
2010-10-25 04:57:43 +02:00
|
|
|
$sites_columns = array(
|
|
|
|
'cb' => '<input type="checkbox" />',
|
2015-06-10 08:50:25 +02:00
|
|
|
'blogname' => __( 'URL' ),
|
2010-10-25 04:57:43 +02:00
|
|
|
'lastupdated' => __( 'Last Updated' ),
|
|
|
|
'registered' => _x( 'Registered', 'site' ),
|
2015-06-10 08:50:25 +02:00
|
|
|
'users' => __( 'Users' ),
|
2010-10-25 04:57:43 +02:00
|
|
|
);
|
|
|
|
|
2015-06-10 08:50:25 +02:00
|
|
|
if ( has_filter( 'wpmublogsaction' ) ) {
|
2010-10-25 04:57:43 +02:00
|
|
|
$sites_columns['plugins'] = __( 'Actions' );
|
2015-06-10 08:50:25 +02:00
|
|
|
}
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2013-11-23 22:58:10 +01:00
|
|
|
/**
|
2016-05-22 20:01:30 +02:00
|
|
|
* Filters the displayed site columns in Sites list table.
|
2013-11-23 22:58:10 +01:00
|
|
|
*
|
2017-08-01 22:44:43 +02:00
|
|
|
* @since MU (3.0.0)
|
2013-11-23 22:58:10 +01:00
|
|
|
*
|
2018-03-22 21:27:32 +01:00
|
|
|
* @param string[] $sites_columns An array of displayed site columns. Default 'cb',
|
|
|
|
* 'blogname', 'lastupdated', 'registered', 'users'.
|
2013-11-23 22:58:10 +01:00
|
|
|
*/
|
2015-05-29 22:17:26 +02:00
|
|
|
return apply_filters( 'wpmu_blogs_columns', $sites_columns );
|
2010-10-25 04:57:43 +02:00
|
|
|
}
|
|
|
|
|
2015-05-29 22:17:26 +02:00
|
|
|
/**
|
|
|
|
* @return array
|
|
|
|
*/
|
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-19 03:17:15 +02:00
|
|
|
protected function get_sortable_columns() {
|
2010-10-25 04:57:43 +02:00
|
|
|
return array(
|
|
|
|
'blogname' => 'blogname',
|
|
|
|
'lastupdated' => 'lastupdated',
|
2010-12-30 19:06:33 +01:00
|
|
|
'registered' => 'blog_id',
|
2010-10-25 04:57:43 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2015-05-28 23:41:30 +02:00
|
|
|
/**
|
2015-07-13 19:53:24 +02:00
|
|
|
* Handles the checkbox column output.
|
|
|
|
*
|
2015-06-13 18:23:25 +02:00
|
|
|
* @since 4.3.0
|
Code Modernization: Fix parameter name mismatches for parent/child classes in `WP_List_Table::column_cb()`.
Matches the method signatures of the parent class and each child class.
Why? PHP 8 introduces the ability to pass named arguments to function/method calls. This means the child and parent method signatures (i.e. parameter names) need to match.
For readability:
- `@since` clearly specifies the original parameter name and its new name as well as why the change happened
- in methods longer than a single line, the generic parameter is reassigned to the original parameter restoring it for context for use within the method. An inline comment is added to explain why this reassignment is made.
Follow-up to [15632], [30679], [31210], [32740], [32753], [32754], [32755], [32756], [32757].
Props jrf, hellofromTonya, sergeybiryukov, azaozz, desrosj, johnbillion.
See #51553.
Built from https://develop.svn.wordpress.org/trunk@51735
git-svn-id: http://core.svn.wordpress.org/trunk@51343 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-07 20:19:56 +02:00
|
|
|
* @since 5.9.0 Renamed `$blog` to `$item` to match parent class for PHP 8 named parameter support.
|
2015-06-13 18:23:25 +02:00
|
|
|
*
|
Code Modernization: Fix parameter name mismatches for parent/child classes in `WP_List_Table::column_cb()`.
Matches the method signatures of the parent class and each child class.
Why? PHP 8 introduces the ability to pass named arguments to function/method calls. This means the child and parent method signatures (i.e. parameter names) need to match.
For readability:
- `@since` clearly specifies the original parameter name and its new name as well as why the change happened
- in methods longer than a single line, the generic parameter is reassigned to the original parameter restoring it for context for use within the method. An inline comment is added to explain why this reassignment is made.
Follow-up to [15632], [30679], [31210], [32740], [32753], [32754], [32755], [32756], [32757].
Props jrf, hellofromTonya, sergeybiryukov, azaozz, desrosj, johnbillion.
See #51553.
Built from https://develop.svn.wordpress.org/trunk@51735
git-svn-id: http://core.svn.wordpress.org/trunk@51343 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-07 20:19:56 +02:00
|
|
|
* @param array $item Current site.
|
2015-06-13 18:23:25 +02:00
|
|
|
*/
|
Code Modernization: Fix parameter name mismatches for parent/child classes in `WP_List_Table::column_cb()`.
Matches the method signatures of the parent class and each child class.
Why? PHP 8 introduces the ability to pass named arguments to function/method calls. This means the child and parent method signatures (i.e. parameter names) need to match.
For readability:
- `@since` clearly specifies the original parameter name and its new name as well as why the change happened
- in methods longer than a single line, the generic parameter is reassigned to the original parameter restoring it for context for use within the method. An inline comment is added to explain why this reassignment is made.
Follow-up to [15632], [30679], [31210], [32740], [32753], [32754], [32755], [32756], [32757].
Props jrf, hellofromTonya, sergeybiryukov, azaozz, desrosj, johnbillion.
See #51553.
Built from https://develop.svn.wordpress.org/trunk@51735
git-svn-id: http://core.svn.wordpress.org/trunk@51343 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-07 20:19:56 +02:00
|
|
|
public function column_cb( $item ) {
|
|
|
|
// Restores the more descriptive, specific name for use within this method.
|
|
|
|
$blog = $item;
|
|
|
|
|
2015-06-13 18:23:25 +02:00
|
|
|
if ( ! is_main_site( $blog['blog_id'] ) ) :
|
|
|
|
$blogname = untrailingslashit( $blog['domain'] . $blog['path'] );
|
2018-08-17 03:51:36 +02:00
|
|
|
?>
|
2017-12-01 00:11:00 +01:00
|
|
|
<label class="screen-reader-text" for="blog_<?php echo $blog['blog_id']; ?>">
|
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 19:13:59 +02:00
|
|
|
<?php
|
2019-09-03 02:41:05 +02:00
|
|
|
/* translators: %s: Site URL. */
|
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 19:13:59 +02:00
|
|
|
printf( __( 'Select %s' ), $blogname );
|
|
|
|
?>
|
2017-12-01 00:11:00 +01:00
|
|
|
</label>
|
2023-04-18 10:37:19 +02:00
|
|
|
<input type="checkbox" id="blog_<?php echo $blog['blog_id']; ?>" name="allblogs[]"
|
|
|
|
value="<?php echo esc_attr( $blog['blog_id'] ); ?>" />
|
2018-08-17 03:51:36 +02:00
|
|
|
<?php
|
2017-12-01 00:11:00 +01:00
|
|
|
endif;
|
2015-06-13 18:23:25 +02:00
|
|
|
}
|
|
|
|
|
2015-09-18 17:58:25 +02:00
|
|
|
/**
|
|
|
|
* Handles the ID column output.
|
|
|
|
*
|
|
|
|
* @since 4.4.0
|
|
|
|
*
|
|
|
|
* @param array $blog Current site.
|
|
|
|
*/
|
|
|
|
public function column_id( $blog ) {
|
|
|
|
echo $blog['blog_id'];
|
|
|
|
}
|
|
|
|
|
2015-06-13 18:23:25 +02:00
|
|
|
/**
|
2016-01-28 04:35:27 +01:00
|
|
|
* Handles the site name column output.
|
2015-07-13 19:53:24 +02:00
|
|
|
*
|
2015-06-13 18:23:25 +02:00
|
|
|
* @since 4.3.0
|
2015-05-28 23:41:30 +02:00
|
|
|
*
|
2017-03-22 04:48:42 +01:00
|
|
|
* @global string $mode List table view mode.
|
2015-06-13 18:23:25 +02:00
|
|
|
*
|
2016-01-28 04:35:27 +01:00
|
|
|
* @param array $blog Current site.
|
2015-05-28 23:41:30 +02:00
|
|
|
*/
|
2015-06-13 18:23:25 +02:00
|
|
|
public function column_blogname( $blog ) {
|
2013-11-13 04:23:10 +01:00
|
|
|
global $mode;
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2019-09-17 01:34:55 +02:00
|
|
|
$blogname = untrailingslashit( $blog['domain'] . $blog['path'] );
|
2015-06-13 18:23:25 +02:00
|
|
|
|
|
|
|
?>
|
2017-04-07 15:51:43 +02:00
|
|
|
<strong>
|
2023-04-18 10:37:19 +02:00
|
|
|
<?php
|
|
|
|
printf(
|
|
|
|
'<a href="%1$s" class="edit">%2$s</a>',
|
|
|
|
esc_url( network_admin_url( 'site-info.php?id=' . $blog['blog_id'] ) ),
|
|
|
|
$blogname
|
|
|
|
);
|
|
|
|
|
|
|
|
$this->site_states( $blog );
|
|
|
|
?>
|
2017-04-07 15:51:43 +02:00
|
|
|
</strong>
|
2015-06-13 18:23:25 +02:00
|
|
|
<?php
|
|
|
|
if ( 'list' !== $mode ) {
|
|
|
|
switch_to_blog( $blog['blog_id'] );
|
2016-02-24 02:06:26 +01:00
|
|
|
echo '<p>';
|
|
|
|
printf(
|
2019-09-03 02:41:05 +02:00
|
|
|
/* translators: 1: Site title, 2: Site tagline. */
|
2016-02-24 02:06:26 +01:00
|
|
|
__( '%1$s – %2$s' ),
|
|
|
|
get_option( 'blogname' ),
|
2019-09-17 01:34:55 +02:00
|
|
|
'<em>' . get_option( 'blogdescription' ) . '</em>'
|
2016-02-24 02:06:26 +01:00
|
|
|
);
|
|
|
|
echo '</p>';
|
2015-06-13 18:23:25 +02:00
|
|
|
restore_current_blog();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2015-07-13 19:53:24 +02:00
|
|
|
* Handles the lastupdated column output.
|
|
|
|
*
|
2015-06-13 18:23:25 +02:00
|
|
|
* @since 4.3.0
|
|
|
|
*
|
2017-03-22 04:48:42 +01:00
|
|
|
* @global string $mode List table view mode.
|
|
|
|
*
|
2015-07-13 19:53:24 +02:00
|
|
|
* @param array $blog Current site.
|
2015-06-13 18:23:25 +02:00
|
|
|
*/
|
|
|
|
public function column_lastupdated( $blog ) {
|
|
|
|
global $mode;
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2015-09-22 08:06:25 +02:00
|
|
|
if ( 'list' === $mode ) {
|
2015-03-19 17:22:28 +01:00
|
|
|
$date = __( 'Y/m/d' );
|
2014-06-29 20:11:14 +02:00
|
|
|
} else {
|
2015-03-19 17:22:28 +01:00
|
|
|
$date = __( 'Y/m/d g:i:s a' );
|
2014-06-29 20:11:14 +02:00
|
|
|
}
|
|
|
|
|
2023-04-18 10:37:19 +02:00
|
|
|
if ( '0000-00-00 00:00:00' === $blog['last_updated'] ) {
|
|
|
|
_e( 'Never' );
|
|
|
|
} else {
|
|
|
|
echo mysql2date( $date, $blog['last_updated'] );
|
|
|
|
}
|
2015-06-13 18:23:25 +02:00
|
|
|
}
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2015-06-13 18:23:25 +02:00
|
|
|
/**
|
2015-07-13 19:53:24 +02:00
|
|
|
* Handles the registered column output.
|
|
|
|
*
|
2015-06-13 18:23:25 +02:00
|
|
|
* @since 4.3.0
|
|
|
|
*
|
2017-03-22 04:48:42 +01:00
|
|
|
* @global string $mode List table view mode.
|
|
|
|
*
|
2015-07-13 19:53:24 +02:00
|
|
|
* @param array $blog Current site.
|
2015-06-13 18:23:25 +02:00
|
|
|
*/
|
|
|
|
public function column_registered( $blog ) {
|
|
|
|
global $mode;
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2015-09-22 08:06:25 +02:00
|
|
|
if ( 'list' === $mode ) {
|
2015-06-13 18:23:25 +02:00
|
|
|
$date = __( 'Y/m/d' );
|
|
|
|
} else {
|
|
|
|
$date = __( 'Y/m/d g:i:s a' );
|
|
|
|
}
|
2010-11-17 19:47:34 +01:00
|
|
|
|
2020-02-09 17:55:09 +01:00
|
|
|
if ( '0000-00-00 00:00:00' === $blog['registered'] ) {
|
2015-06-13 18:23:25 +02:00
|
|
|
echo '—';
|
|
|
|
} else {
|
|
|
|
echo mysql2date( $date, $blog['registered'] );
|
|
|
|
}
|
|
|
|
}
|
2010-10-25 04:57:43 +02:00
|
|
|
|
2015-06-13 18:23:25 +02:00
|
|
|
/**
|
2015-07-13 19:53:24 +02:00
|
|
|
* Handles the users column output.
|
|
|
|
*
|
2015-06-13 18:23:25 +02:00
|
|
|
* @since 4.3.0
|
|
|
|
*
|
2015-07-13 19:53:24 +02:00
|
|
|
* @param array $blog Current site.
|
2015-06-13 18:23:25 +02:00
|
|
|
*/
|
|
|
|
public function column_users( $blog ) {
|
|
|
|
$user_count = wp_cache_get( $blog['blog_id'] . '_user_count', 'blog-details' );
|
|
|
|
if ( ! $user_count ) {
|
2018-08-17 03:51:36 +02:00
|
|
|
$blog_users = new WP_User_Query(
|
|
|
|
array(
|
|
|
|
'blog_id' => $blog['blog_id'],
|
|
|
|
'fields' => 'ID',
|
|
|
|
'number' => 1,
|
|
|
|
'count_total' => true,
|
|
|
|
)
|
|
|
|
);
|
2018-06-28 04:45:03 +02:00
|
|
|
$user_count = $blog_users->get_total();
|
2015-06-13 18:23:25 +02:00
|
|
|
wp_cache_set( $blog['blog_id'] . '_user_count', $user_count, 'blog-details', 12 * HOUR_IN_SECONDS );
|
|
|
|
}
|
2015-05-29 04:41:25 +02:00
|
|
|
|
2015-06-13 18:23:25 +02:00
|
|
|
printf(
|
2023-04-18 10:37:19 +02:00
|
|
|
'<a href="%1$s">%2$s</a>',
|
2015-06-13 18:23:25 +02:00
|
|
|
esc_url( network_admin_url( 'site-users.php?id=' . $blog['blog_id'] ) ),
|
|
|
|
number_format_i18n( $user_count )
|
|
|
|
);
|
|
|
|
}
|
2015-05-29 04:41:25 +02:00
|
|
|
|
2015-06-13 18:23:25 +02:00
|
|
|
/**
|
2015-07-13 19:53:24 +02:00
|
|
|
* Handles the plugins column output.
|
|
|
|
*
|
2015-06-13 18:23:25 +02:00
|
|
|
* @since 4.3.0
|
|
|
|
*
|
2015-07-13 19:53:24 +02:00
|
|
|
* @param array $blog Current site.
|
2015-06-13 18:23:25 +02:00
|
|
|
*/
|
|
|
|
public function column_plugins( $blog ) {
|
|
|
|
if ( has_filter( 'wpmublogsaction' ) ) {
|
|
|
|
/**
|
|
|
|
* Fires inside the auxiliary 'Actions' column of the Sites list table.
|
|
|
|
*
|
|
|
|
* By default this column is hidden unless something is hooked to the action.
|
|
|
|
*
|
2017-08-01 22:44:43 +02:00
|
|
|
* @since MU (3.0.0)
|
2015-06-13 18:23:25 +02:00
|
|
|
*
|
|
|
|
* @param int $blog_id The site ID.
|
|
|
|
*/
|
|
|
|
do_action( 'wpmublogsaction', $blog['blog_id'] );
|
|
|
|
}
|
|
|
|
}
|
2015-05-29 04:41:25 +02:00
|
|
|
|
2015-06-13 18:23:25 +02:00
|
|
|
/**
|
2015-07-13 19:53:24 +02:00
|
|
|
* Handles output for the default column.
|
|
|
|
*
|
2015-06-13 18:23:25 +02:00
|
|
|
* @since 4.3.0
|
2021-09-07 18:57:58 +02:00
|
|
|
* @since 5.9.0 Renamed `$blog` to `$item` to match parent class for PHP 8 named parameter support.
|
2015-06-13 18:23:25 +02:00
|
|
|
*
|
Code Modernization: Fix parameter name mismatches for parent/child classes in `WP_List_Table::column_default()`.
Matches the method signatures of the parent class and each child class.
Why? PHP 8 introduces the ability to pass named arguments to function/method calls. This means the child and parent method signatures (i.e. parameter names) need to match.
For readability:
- `@since` clearly specifies the original parameter name and its new name as well as why the change happened
- in methods longer than a single line, the generic parameter is reassigned to the original parameter restoring it for context for use within the method. An inline comment is added to explain why this reassignment is made.
Follow-up to [15632], [30679], [31210], [32740], [32753], [32754], [32755], [32756], [32757].
Props jrf, hellofromTonya, @sergeybiryukov, @azaozz, @desrosj, @johnbillion
See #51553.
Built from https://develop.svn.wordpress.org/trunk@51728
git-svn-id: http://core.svn.wordpress.org/trunk@51334 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-03 00:26:56 +02:00
|
|
|
* @param array $item Current site.
|
2015-07-13 19:53:24 +02:00
|
|
|
* @param string $column_name Current column name.
|
2015-06-13 18:23:25 +02:00
|
|
|
*/
|
Code Modernization: Fix parameter name mismatches for parent/child classes in `WP_List_Table::column_default()`.
Matches the method signatures of the parent class and each child class.
Why? PHP 8 introduces the ability to pass named arguments to function/method calls. This means the child and parent method signatures (i.e. parameter names) need to match.
For readability:
- `@since` clearly specifies the original parameter name and its new name as well as why the change happened
- in methods longer than a single line, the generic parameter is reassigned to the original parameter restoring it for context for use within the method. An inline comment is added to explain why this reassignment is made.
Follow-up to [15632], [30679], [31210], [32740], [32753], [32754], [32755], [32756], [32757].
Props jrf, hellofromTonya, @sergeybiryukov, @azaozz, @desrosj, @johnbillion
See #51553.
Built from https://develop.svn.wordpress.org/trunk@51728
git-svn-id: http://core.svn.wordpress.org/trunk@51334 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-03 00:26:56 +02:00
|
|
|
public function column_default( $item, $column_name ) {
|
2015-06-13 18:23:25 +02:00
|
|
|
/**
|
|
|
|
* Fires for each registered custom column in the Sites list table.
|
|
|
|
*
|
|
|
|
* @since 3.1.0
|
|
|
|
*
|
|
|
|
* @param string $column_name The name of the column to display.
|
|
|
|
* @param int $blog_id The site ID.
|
|
|
|
*/
|
Code Modernization: Fix parameter name mismatches for parent/child classes in `WP_List_Table::column_default()`.
Matches the method signatures of the parent class and each child class.
Why? PHP 8 introduces the ability to pass named arguments to function/method calls. This means the child and parent method signatures (i.e. parameter names) need to match.
For readability:
- `@since` clearly specifies the original parameter name and its new name as well as why the change happened
- in methods longer than a single line, the generic parameter is reassigned to the original parameter restoring it for context for use within the method. An inline comment is added to explain why this reassignment is made.
Follow-up to [15632], [30679], [31210], [32740], [32753], [32754], [32755], [32756], [32757].
Props jrf, hellofromTonya, @sergeybiryukov, @azaozz, @desrosj, @johnbillion
See #51553.
Built from https://develop.svn.wordpress.org/trunk@51728
git-svn-id: http://core.svn.wordpress.org/trunk@51334 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-03 00:26:56 +02:00
|
|
|
do_action( 'manage_sites_custom_column', $column_name, $item['blog_id'] );
|
2015-06-13 18:23:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-07-10 18:04:05 +02:00
|
|
|
* @global string $mode List table view mode.
|
2015-06-13 18:23:25 +02:00
|
|
|
*/
|
|
|
|
public function display_rows() {
|
|
|
|
foreach ( $this->items as $blog ) {
|
2017-12-01 00:11:00 +01:00
|
|
|
$blog = $blog->to_array();
|
2015-06-13 18:23:25 +02:00
|
|
|
$class = '';
|
|
|
|
reset( $this->status_list );
|
|
|
|
|
|
|
|
foreach ( $this->status_list as $status => $col ) {
|
2023-04-18 10:37:19 +02:00
|
|
|
if ( '1' === $blog[ $status ] ) {
|
2015-06-13 18:23:25 +02:00
|
|
|
$class = " class='{$col[0]}'";
|
2010-10-25 04:57:43 +02:00
|
|
|
}
|
|
|
|
}
|
2015-06-13 18:23:25 +02:00
|
|
|
|
|
|
|
echo "<tr{$class}>";
|
|
|
|
|
|
|
|
$this->single_row_columns( $blog );
|
|
|
|
|
|
|
|
echo '</tr>';
|
2010-10-25 04:57:43 +02:00
|
|
|
}
|
|
|
|
}
|
2015-05-29 04:41:25 +02:00
|
|
|
|
2019-09-17 01:34:55 +02:00
|
|
|
/**
|
|
|
|
* Maybe output comma-separated site states.
|
|
|
|
*
|
|
|
|
* @since 5.3.0
|
|
|
|
*
|
|
|
|
* @param array $site
|
|
|
|
*/
|
|
|
|
protected function site_states( $site ) {
|
|
|
|
$site_states = array();
|
|
|
|
|
|
|
|
// $site is still an array, so get the object.
|
|
|
|
$_site = WP_Site::get_instance( $site['blog_id'] );
|
|
|
|
|
|
|
|
if ( is_main_site( $_site->id ) ) {
|
|
|
|
$site_states['main'] = __( 'Main' );
|
|
|
|
}
|
|
|
|
|
|
|
|
reset( $this->status_list );
|
|
|
|
|
2019-10-08 19:46:02 +02:00
|
|
|
$site_status = isset( $_REQUEST['status'] ) ? wp_unslash( trim( $_REQUEST['status'] ) ) : '';
|
2019-09-17 01:34:55 +02:00
|
|
|
foreach ( $this->status_list as $status => $col ) {
|
2023-04-18 10:37:19 +02:00
|
|
|
if ( '1' === $_site->{$status} && $site_status !== $status ) {
|
2019-09-17 01:34:55 +02:00
|
|
|
$site_states[ $col[0] ] = $col[1];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-11 02:34:08 +02:00
|
|
|
* Filters the default site display states for items in the Sites list table.
|
2019-09-17 01:34:55 +02:00
|
|
|
*
|
|
|
|
* @since 5.3.0
|
|
|
|
*
|
2021-12-07 13:20:02 +01:00
|
|
|
* @param string[] $site_states An array of site states. Default 'Main',
|
|
|
|
* 'Archived', 'Mature', 'Spam', 'Deleted'.
|
|
|
|
* @param WP_Site $site The current site object.
|
2019-09-17 01:34:55 +02:00
|
|
|
*/
|
|
|
|
$site_states = apply_filters( 'display_site_states', $site_states, $_site );
|
|
|
|
|
|
|
|
if ( ! empty( $site_states ) ) {
|
|
|
|
$state_count = count( $site_states );
|
2021-09-27 02:37:01 +02:00
|
|
|
|
|
|
|
$i = 0;
|
|
|
|
|
2019-09-17 01:34:55 +02:00
|
|
|
echo ' — ';
|
2021-09-27 02:37:01 +02:00
|
|
|
|
2019-09-17 01:34:55 +02:00
|
|
|
foreach ( $site_states as $state ) {
|
|
|
|
++$i;
|
2021-09-27 02:37:01 +02:00
|
|
|
|
Coding Standards: Use more meaningful variable names for output in the admin.
This renames some variables for clarity, per the [https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/#naming-conventions Naming Conventions]:
> Don’t abbreviate variable names unnecessarily; let the code be unambiguous and self-documenting.
* `$out` is renamed to `$output` in various list table methods and admin functions.
* `$sep` is renamed to `$separator` in various list table methods and admin functions.
This affects:
* `WP_Comments_List_Table::handle_row_actions()`
* `WP_List_Table::row_actions()`
* `WP_Media_List_Table::column_default()`
* `WP_MS_Sites_List_Table::site_states()`
* `WP_MS_Users_List_Table::column_blogs()`
* `WP_Terms_List_Table::column_name()`
* `_wp_dashboard_recent_comments_row()`
* `image_align_input_fields()`
* `image_size_input_fields()`
* `wp_doc_link_parse()`
* `_post_states()`
* `_media_states()`
Follow-up to [8653], [8692], [8864], [8910], [8911], [8916], [9103], [9153], [10607], [15491], [17793], [32644], [54070].
Props mukesh27, costdev.
See #56448, #55647.
Built from https://develop.svn.wordpress.org/trunk@54071
git-svn-id: http://core.svn.wordpress.org/trunk@53630 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-05 19:19:09 +02:00
|
|
|
$separator = ( $i < $state_count ) ? ', ' : '';
|
2021-09-27 02:37:01 +02:00
|
|
|
|
Coding Standards: Use more meaningful variable names for output in the admin.
This renames some variables for clarity, per the [https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/#naming-conventions Naming Conventions]:
> Don’t abbreviate variable names unnecessarily; let the code be unambiguous and self-documenting.
* `$out` is renamed to `$output` in various list table methods and admin functions.
* `$sep` is renamed to `$separator` in various list table methods and admin functions.
This affects:
* `WP_Comments_List_Table::handle_row_actions()`
* `WP_List_Table::row_actions()`
* `WP_Media_List_Table::column_default()`
* `WP_MS_Sites_List_Table::site_states()`
* `WP_MS_Users_List_Table::column_blogs()`
* `WP_Terms_List_Table::column_name()`
* `_wp_dashboard_recent_comments_row()`
* `image_align_input_fields()`
* `image_size_input_fields()`
* `wp_doc_link_parse()`
* `_post_states()`
* `_media_states()`
Follow-up to [8653], [8692], [8864], [8910], [8911], [8916], [9103], [9153], [10607], [15491], [17793], [32644], [54070].
Props mukesh27, costdev.
See #56448, #55647.
Built from https://develop.svn.wordpress.org/trunk@54071
git-svn-id: http://core.svn.wordpress.org/trunk@53630 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-05 19:19:09 +02:00
|
|
|
echo "<span class='post-state'>{$state}{$separator}</span>";
|
2019-09-17 01:34:55 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-05-29 04:41:25 +02:00
|
|
|
/**
|
2015-07-13 19:53:24 +02:00
|
|
|
* Gets the name of the default primary column.
|
2015-05-29 04:41:25 +02:00
|
|
|
*
|
|
|
|
* @since 4.3.0
|
|
|
|
*
|
2015-05-31 03:34:25 +02:00
|
|
|
* @return string Name of the default primary column, in this case, 'blogname'.
|
2015-05-29 04:41:25 +02:00
|
|
|
*/
|
|
|
|
protected function get_default_primary_column_name() {
|
|
|
|
return 'blogname';
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2015-07-13 19:53:24 +02:00
|
|
|
* Generates and displays row action links.
|
2015-05-29 04:41:25 +02:00
|
|
|
*
|
|
|
|
* @since 4.3.0
|
Code Modernization: Fix parameter name mismatches for parent/child classes in `WP_List_Table::handle_row_actions()`.
Matches the method signatures of the parent class and each child class.
Why? PHP 8 introduces the ability to pass named arguments to function/method calls. This means the child and parent method signatures (i.e. parameter names) need to match.
For readability:
- `@since` clearly specifies the original parameter name and its new name as well as why the change happened
- in methods longer than a single line, the generic parameter is reassigned to the original parameter restoring it for context for use within the method. An inline comment is added to explain why this reassignment is made.
Follow-up to [32644], [32664], [32798], [38489], [49183], [49197].
Props jrf, hellofromTonya, sergeybiryukov, azaozz, desrosj, johnbillion.
See #51553.
Built from https://develop.svn.wordpress.org/trunk@51737
git-svn-id: http://core.svn.wordpress.org/trunk@51345 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-07 21:24:53 +02:00
|
|
|
* @since 5.9.0 Renamed `$blog` to `$item` to match parent class for PHP 8 named parameter support.
|
2015-05-29 04:41:25 +02:00
|
|
|
*
|
Code Modernization: Fix parameter name mismatches for parent/child classes in `WP_List_Table::handle_row_actions()`.
Matches the method signatures of the parent class and each child class.
Why? PHP 8 introduces the ability to pass named arguments to function/method calls. This means the child and parent method signatures (i.e. parameter names) need to match.
For readability:
- `@since` clearly specifies the original parameter name and its new name as well as why the change happened
- in methods longer than a single line, the generic parameter is reassigned to the original parameter restoring it for context for use within the method. An inline comment is added to explain why this reassignment is made.
Follow-up to [32644], [32664], [32798], [38489], [49183], [49197].
Props jrf, hellofromTonya, sergeybiryukov, azaozz, desrosj, johnbillion.
See #51553.
Built from https://develop.svn.wordpress.org/trunk@51737
git-svn-id: http://core.svn.wordpress.org/trunk@51345 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-07 21:24:53 +02:00
|
|
|
* @param array $item Site being acted upon.
|
2015-05-31 03:34:25 +02:00
|
|
|
* @param string $column_name Current column name.
|
|
|
|
* @param string $primary Primary column name.
|
2020-01-11 18:59:04 +01:00
|
|
|
* @return string Row actions output for sites in Multisite, or an empty string
|
|
|
|
* if the current column is not the primary column.
|
2015-05-29 04:41:25 +02:00
|
|
|
*/
|
Code Modernization: Fix parameter name mismatches for parent/child classes in `WP_List_Table::handle_row_actions()`.
Matches the method signatures of the parent class and each child class.
Why? PHP 8 introduces the ability to pass named arguments to function/method calls. This means the child and parent method signatures (i.e. parameter names) need to match.
For readability:
- `@since` clearly specifies the original parameter name and its new name as well as why the change happened
- in methods longer than a single line, the generic parameter is reassigned to the original parameter restoring it for context for use within the method. An inline comment is added to explain why this reassignment is made.
Follow-up to [32644], [32664], [32798], [38489], [49183], [49197].
Props jrf, hellofromTonya, sergeybiryukov, azaozz, desrosj, johnbillion.
See #51553.
Built from https://develop.svn.wordpress.org/trunk@51737
git-svn-id: http://core.svn.wordpress.org/trunk@51345 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-07 21:24:53 +02:00
|
|
|
protected function handle_row_actions( $item, $column_name, $primary ) {
|
2015-07-14 19:47:24 +02:00
|
|
|
if ( $primary !== $column_name ) {
|
2020-01-11 18:59:04 +01:00
|
|
|
return '';
|
2015-07-14 19:47:24 +02:00
|
|
|
}
|
2015-05-29 04:41:25 +02:00
|
|
|
|
Code Modernization: Fix parameter name mismatches for parent/child classes in `WP_List_Table::handle_row_actions()`.
Matches the method signatures of the parent class and each child class.
Why? PHP 8 introduces the ability to pass named arguments to function/method calls. This means the child and parent method signatures (i.e. parameter names) need to match.
For readability:
- `@since` clearly specifies the original parameter name and its new name as well as why the change happened
- in methods longer than a single line, the generic parameter is reassigned to the original parameter restoring it for context for use within the method. An inline comment is added to explain why this reassignment is made.
Follow-up to [32644], [32664], [32798], [38489], [49183], [49197].
Props jrf, hellofromTonya, sergeybiryukov, azaozz, desrosj, johnbillion.
See #51553.
Built from https://develop.svn.wordpress.org/trunk@51737
git-svn-id: http://core.svn.wordpress.org/trunk@51345 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-07 21:24:53 +02:00
|
|
|
// Restores the more descriptive, specific name for use within this method.
|
|
|
|
$blog = $item;
|
2015-07-14 19:47:24 +02:00
|
|
|
$blogname = untrailingslashit( $blog['domain'] . $blog['path'] );
|
2015-05-29 04:41:25 +02:00
|
|
|
|
2015-07-14 19:47:24 +02:00
|
|
|
// Preordered.
|
|
|
|
$actions = array(
|
2017-12-01 00:11:00 +01:00
|
|
|
'edit' => '',
|
|
|
|
'backend' => '',
|
|
|
|
'activate' => '',
|
|
|
|
'deactivate' => '',
|
|
|
|
'archive' => '',
|
|
|
|
'unarchive' => '',
|
|
|
|
'spam' => '',
|
|
|
|
'unspam' => '',
|
|
|
|
'delete' => '',
|
|
|
|
'visit' => '',
|
2015-07-14 19:47:24 +02:00
|
|
|
);
|
2015-05-29 04:41:25 +02:00
|
|
|
|
2023-04-18 10:37:19 +02:00
|
|
|
$actions['edit'] = sprintf(
|
|
|
|
'<a href="%1$s">%2$s</a>',
|
|
|
|
esc_url( network_admin_url( 'site-info.php?id=' . $blog['blog_id'] ) ),
|
|
|
|
__( 'Edit' )
|
|
|
|
);
|
|
|
|
|
|
|
|
$actions['backend'] = sprintf(
|
|
|
|
'<a href="%1$s" class="edit">%2$s</a>',
|
|
|
|
esc_url( get_admin_url( $blog['blog_id'] ) ),
|
|
|
|
__( 'Dashboard' )
|
|
|
|
);
|
|
|
|
|
2023-04-20 16:30:19 +02:00
|
|
|
if ( ! is_main_site( $blog['blog_id'] ) ) {
|
2023-04-18 10:37:19 +02:00
|
|
|
if ( '1' === $blog['deleted'] ) {
|
|
|
|
$actions['activate'] = sprintf(
|
|
|
|
'<a href="%1$s">%2$s</a>',
|
|
|
|
esc_url(
|
|
|
|
wp_nonce_url(
|
|
|
|
network_admin_url( 'sites.php?action=confirm&action2=activateblog&id=' . $blog['blog_id'] ),
|
|
|
|
'activateblog_' . $blog['blog_id']
|
|
|
|
)
|
|
|
|
),
|
|
|
|
__( 'Activate' )
|
|
|
|
);
|
2015-07-14 19:47:24 +02:00
|
|
|
} else {
|
2023-04-18 10:37:19 +02:00
|
|
|
$actions['deactivate'] = sprintf(
|
|
|
|
'<a href="%1$s">%2$s</a>',
|
|
|
|
esc_url(
|
|
|
|
wp_nonce_url(
|
|
|
|
network_admin_url( 'sites.php?action=confirm&action2=deactivateblog&id=' . $blog['blog_id'] ),
|
|
|
|
'deactivateblog_' . $blog['blog_id']
|
|
|
|
)
|
|
|
|
),
|
|
|
|
__( 'Deactivate' )
|
|
|
|
);
|
2015-07-14 19:47:24 +02:00
|
|
|
}
|
2015-05-29 04:41:25 +02:00
|
|
|
|
2023-04-18 10:37:19 +02:00
|
|
|
if ( '1' === $blog['archived'] ) {
|
|
|
|
$actions['unarchive'] = sprintf(
|
|
|
|
'<a href="%1$s">%2$s</a>',
|
|
|
|
esc_url(
|
|
|
|
wp_nonce_url(
|
|
|
|
network_admin_url( 'sites.php?action=confirm&action2=unarchiveblog&id=' . $blog['blog_id'] ),
|
|
|
|
'unarchiveblog_' . $blog['blog_id']
|
|
|
|
)
|
|
|
|
),
|
|
|
|
__( 'Unarchive' )
|
|
|
|
);
|
2015-07-14 19:47:24 +02:00
|
|
|
} else {
|
2023-04-18 10:37:19 +02:00
|
|
|
$actions['archive'] = sprintf(
|
|
|
|
'<a href="%1$s">%2$s</a>',
|
|
|
|
esc_url(
|
|
|
|
wp_nonce_url(
|
|
|
|
network_admin_url( 'sites.php?action=confirm&action2=archiveblog&id=' . $blog['blog_id'] ),
|
|
|
|
'archiveblog_' . $blog['blog_id']
|
|
|
|
)
|
|
|
|
),
|
|
|
|
_x( 'Archive', 'verb; site' )
|
|
|
|
);
|
2015-05-29 04:41:25 +02:00
|
|
|
}
|
|
|
|
|
2023-04-18 10:37:19 +02:00
|
|
|
if ( '1' === $blog['spam'] ) {
|
|
|
|
$actions['unspam'] = sprintf(
|
|
|
|
'<a href="%1$s">%2$s</a>',
|
|
|
|
esc_url(
|
|
|
|
wp_nonce_url(
|
|
|
|
network_admin_url( 'sites.php?action=confirm&action2=unspamblog&id=' . $blog['blog_id'] ),
|
|
|
|
'unspamblog_' . $blog['blog_id']
|
|
|
|
)
|
|
|
|
),
|
|
|
|
_x( 'Not Spam', 'site' )
|
|
|
|
);
|
2015-07-14 19:47:24 +02:00
|
|
|
} else {
|
2023-04-18 10:37:19 +02:00
|
|
|
$actions['spam'] = sprintf(
|
|
|
|
'<a href="%1$s">%2$s</a>',
|
|
|
|
esc_url(
|
|
|
|
wp_nonce_url(
|
|
|
|
network_admin_url( 'sites.php?action=confirm&action2=spamblog&id=' . $blog['blog_id'] ),
|
|
|
|
'spamblog_' . $blog['blog_id']
|
|
|
|
)
|
|
|
|
),
|
|
|
|
_x( 'Spam', 'site' )
|
|
|
|
);
|
2015-07-14 19:47:24 +02:00
|
|
|
}
|
2015-05-29 04:41:25 +02:00
|
|
|
|
2015-07-14 19:47:24 +02:00
|
|
|
if ( current_user_can( 'delete_site', $blog['blog_id'] ) ) {
|
2023-04-18 10:37:19 +02:00
|
|
|
$actions['delete'] = sprintf(
|
|
|
|
'<a href="%1$s">%2$s</a>',
|
|
|
|
esc_url(
|
|
|
|
wp_nonce_url(
|
|
|
|
network_admin_url( 'sites.php?action=confirm&action2=deleteblog&id=' . $blog['blog_id'] ),
|
|
|
|
'deleteblog_' . $blog['blog_id']
|
|
|
|
)
|
|
|
|
),
|
|
|
|
__( 'Delete' )
|
|
|
|
);
|
2015-07-14 19:47:24 +02:00
|
|
|
}
|
2015-05-29 04:41:25 +02:00
|
|
|
}
|
2015-07-14 19:47:24 +02:00
|
|
|
|
2023-04-18 10:37:19 +02:00
|
|
|
$actions['visit'] = sprintf(
|
|
|
|
'<a href="%1$s" rel="bookmark">%2$s</a>',
|
|
|
|
esc_url( get_home_url( $blog['blog_id'], '/' ) ),
|
|
|
|
__( 'Visit' )
|
|
|
|
);
|
2015-07-14 19:47:24 +02:00
|
|
|
|
|
|
|
/**
|
2016-05-22 20:01:30 +02:00
|
|
|
* Filters the action links displayed for each site in the Sites list table.
|
2015-07-14 19:47:24 +02:00
|
|
|
*
|
|
|
|
* The 'Edit', 'Dashboard', 'Delete', and 'Visit' links are displayed by
|
|
|
|
* default for each site. The site's status determines whether to show the
|
|
|
|
* 'Activate' or 'Deactivate' link, 'Unarchive' or 'Archive' links, and
|
|
|
|
* 'Not Spam' or 'Spam' link for each site.
|
|
|
|
*
|
|
|
|
* @since 3.1.0
|
|
|
|
*
|
2018-03-22 21:27:32 +01:00
|
|
|
* @param string[] $actions An array of action links to be displayed.
|
|
|
|
* @param int $blog_id The site ID.
|
|
|
|
* @param string $blogname Site path, formatted depending on whether it is a sub-domain
|
|
|
|
* or subdirectory multisite installation.
|
2015-07-14 19:47:24 +02:00
|
|
|
*/
|
|
|
|
$actions = apply_filters( 'manage_sites_action_links', array_filter( $actions ), $blog['blog_id'], $blogname );
|
2020-01-11 18:59:04 +01:00
|
|
|
|
2015-07-14 19:47:24 +02:00
|
|
|
return $this->row_actions( $actions );
|
2015-05-29 04:41:25 +02:00
|
|
|
}
|
2010-10-25 04:57:43 +02:00
|
|
|
}
|