2019-03-12 09:27:46 +00:00
< ? php
/**
* List Table API : WP_Comments_List_Table class
*
* @ package WordPress
* @ subpackage Administration
* @ since 3.1 . 0
*/
/**
* Core class used to implement displaying comments in a list table .
*
* @ since 3.1 . 0
* @ access private
*
* @ see WP_List_Table
*/
class WP_Comments_List_Table extends WP_List_Table {
public $checkbox = true ;
public $pending_count = array ();
public $extra_items ;
private $user_can ;
/**
* Constructor .
*
* @ since 3.1 . 0
*
* @ see WP_List_Table :: __construct () for more information on default arguments .
*
* @ global int $post_id
*
* @ param array $args An associative array of arguments .
*/
public function __construct ( $args = array () ) {
global $post_id ;
$post_id = isset ( $_REQUEST [ 'p' ] ) ? absint ( $_REQUEST [ 'p' ] ) : 0 ;
if ( get_option ( 'show_avatars' ) ) {
add_filter ( 'comment_author' , array ( $this , 'floated_admin_avatar' ), 10 , 2 );
}
2019-04-16 19:56:22 +00:00
parent :: __construct (
array (
'plural' => 'comments' ,
'singular' => 'comment' ,
'ajax' => true ,
'screen' => isset ( $args [ 'screen' ] ) ? $args [ 'screen' ] : null ,
)
);
2019-03-12 09:27:46 +00:00
}
public function floated_admin_avatar ( $name , $comment_ID ) {
$comment = get_comment ( $comment_ID );
2019-04-16 19:56:22 +00:00
$avatar = get_avatar ( $comment , 32 , 'mystery' );
2019-03-12 09:27:46 +00:00
return " $avatar $name " ;
}
/**
* @ return bool
*/
public function ajax_user_can () {
2019-04-16 19:56:22 +00:00
return current_user_can ( 'edit_posts' );
2019-03-12 09:27:46 +00:00
}
/**
* @ global int $post_id
* @ global string $comment_status
* @ global string $search
* @ global string $comment_type
*/
public function prepare_items () {
global $post_id , $comment_status , $search , $comment_type ;
$comment_status = isset ( $_REQUEST [ 'comment_status' ] ) ? $_REQUEST [ 'comment_status' ] : 'all' ;
2019-04-16 19:56:22 +00:00
if ( ! in_array ( $comment_status , array ( 'all' , 'mine' , 'moderated' , 'approved' , 'spam' , 'trash' ) ) ) {
2019-03-12 09:27:46 +00:00
$comment_status = 'all' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$comment_type = ! empty ( $_REQUEST [ 'comment_type' ] ) ? $_REQUEST [ 'comment_type' ] : '' ;
2019-03-12 09:27:46 +00:00
$search = ( isset ( $_REQUEST [ 's' ] ) ) ? $_REQUEST [ 's' ] : '' ;
$post_type = ( isset ( $_REQUEST [ 'post_type' ] ) ) ? sanitize_key ( $_REQUEST [ 'post_type' ] ) : '' ;
$user_id = ( isset ( $_REQUEST [ 'user_id' ] ) ) ? $_REQUEST [ 'user_id' ] : '' ;
$orderby = ( isset ( $_REQUEST [ 'orderby' ] ) ) ? $_REQUEST [ 'orderby' ] : '' ;
2019-04-16 19:56:22 +00:00
$order = ( isset ( $_REQUEST [ 'order' ] ) ) ? $_REQUEST [ 'order' ] : '' ;
2019-03-12 09:27:46 +00:00
$comments_per_page = $this -> get_per_page ( $comment_status );
$doing_ajax = wp_doing_ajax ();
if ( isset ( $_REQUEST [ 'number' ] ) ) {
$number = ( int ) $_REQUEST [ 'number' ];
2019-04-16 19:56:22 +00:00
} else {
2019-03-12 09:27:46 +00:00
$number = $comments_per_page + min ( 8 , $comments_per_page ); // Grab a few extra
}
$page = $this -> get_pagenum ();
if ( isset ( $_REQUEST [ 'start' ] ) ) {
$start = $_REQUEST [ 'start' ];
} else {
$start = ( $page - 1 ) * $comments_per_page ;
}
if ( $doing_ajax && isset ( $_REQUEST [ 'offset' ] ) ) {
$start += $_REQUEST [ 'offset' ];
}
$status_map = array (
2019-04-16 19:56:22 +00:00
'mine' => '' ,
2019-03-12 09:27:46 +00:00
'moderated' => 'hold' ,
2019-04-16 19:56:22 +00:00
'approved' => 'approve' ,
'all' => '' ,
2019-03-12 09:27:46 +00:00
);
$args = array (
2019-04-16 19:56:22 +00:00
'status' => isset ( $status_map [ $comment_status ] ) ? $status_map [ $comment_status ] : $comment_status ,
'search' => $search ,
'user_id' => $user_id ,
'offset' => $start ,
'number' => $number ,
'post_id' => $post_id ,
'type' => $comment_type ,
'orderby' => $orderby ,
'order' => $order ,
2019-03-12 09:27:46 +00:00
'post_type' => $post_type ,
);
2019-04-16 19:56:22 +00:00
/**
* Filters the arguments for the comment query in the comments list table .
*
* @ since 5.1 . 0
*
* @ param array $args An array of get_comments () arguments .
*/
$args = apply_filters ( 'comments_list_table_query_args' , $args );
2019-03-12 09:27:46 +00:00
$_comments = get_comments ( $args );
if ( is_array ( $_comments ) ) {
update_comment_cache ( $_comments );
2019-04-16 19:56:22 +00:00
$this -> items = array_slice ( $_comments , 0 , $comments_per_page );
2019-03-12 09:27:46 +00:00
$this -> extra_items = array_slice ( $_comments , $comments_per_page );
$_comment_post_ids = array_unique ( wp_list_pluck ( $_comments , 'comment_post_ID' ) );
$this -> pending_count = get_pending_comments_num ( $_comment_post_ids );
}
2019-04-16 19:56:22 +00:00
$total_comments = get_comments (
array_merge (
$args ,
array (
'count' => true ,
'offset' => 0 ,
'number' => 0 ,
)
)
);
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$this -> set_pagination_args (
array (
'total_items' => $total_comments ,
'per_page' => $comments_per_page ,
)
);
2019-03-12 09:27:46 +00:00
}
/**
* @ param string $comment_status
* @ return int
*/
public function get_per_page ( $comment_status = 'all' ) {
$comments_per_page = $this -> get_items_per_page ( 'edit_comments_per_page' );
/**
* Filters the number of comments listed per page in the comments list table .
*
* @ since 2.6 . 0
*
* @ param int $comments_per_page The number of comments to list per page .
* @ param string $comment_status The comment status name . Default 'All' .
*/
return apply_filters ( 'comments_per_page' , $comments_per_page , $comment_status );
}
/**
* @ global string $comment_status
*/
public function no_items () {
global $comment_status ;
if ( 'moderated' === $comment_status ) {
_e ( 'No comments awaiting moderation.' );
} else {
_e ( 'No comments found.' );
}
}
/**
* @ global int $post_id
* @ global string $comment_status
* @ global string $comment_type
*/
protected function get_views () {
global $post_id , $comment_status , $comment_type ;
$status_links = array ();
$num_comments = ( $post_id ) ? wp_count_comments ( $post_id ) : wp_count_comments ();
$stati = array (
/* translators: %s: all comments count */
2019-04-16 19:56:22 +00:00
'all' => _nx_noop (
2019-03-12 09:27:46 +00:00
'All <span class="count">(%s)</span>' ,
'All <span class="count">(%s)</span>' ,
'comments'
), // singular not used
2019-04-16 19:56:22 +00:00
/* translators: %s: current user's comments count */
'mine' => _nx_noop (
'Mine <span class="count">(%s)</span>' ,
'Mine <span class="count">(%s)</span>' ,
'comments'
),
2019-03-12 09:27:46 +00:00
/* translators: %s: pending comments count */
'moderated' => _nx_noop (
'Pending <span class="count">(%s)</span>' ,
'Pending <span class="count">(%s)</span>' ,
'comments'
),
/* translators: %s: approved comments count */
2019-04-16 19:56:22 +00:00
'approved' => _nx_noop (
2019-03-12 09:27:46 +00:00
'Approved <span class="count">(%s)</span>' ,
'Approved <span class="count">(%s)</span>' ,
'comments'
),
/* translators: %s: spam comments count */
2019-04-16 19:56:22 +00:00
'spam' => _nx_noop (
2019-03-12 09:27:46 +00:00
'Spam <span class="count">(%s)</span>' ,
'Spam <span class="count">(%s)</span>' ,
'comments'
),
/* translators: %s: trashed comments count */
2019-04-16 19:56:22 +00:00
'trash' => _nx_noop (
2019-03-12 09:27:46 +00:00
'Trash <span class="count">(%s)</span>' ,
'Trash <span class="count">(%s)</span>' ,
'comments'
2019-04-16 19:56:22 +00:00
),
2019-03-12 09:27:46 +00:00
);
2019-04-16 19:56:22 +00:00
if ( ! EMPTY_TRASH_DAYS ) {
unset ( $stati [ 'trash' ] );
}
2019-03-12 09:27:46 +00:00
$link = admin_url ( 'edit-comments.php' );
2019-04-16 19:56:22 +00:00
if ( ! empty ( $comment_type ) && 'all' != $comment_type ) {
2019-03-12 09:27:46 +00:00
$link = add_query_arg ( 'comment_type' , $comment_type , $link );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
foreach ( $stati as $status => $label ) {
$current_link_attributes = '' ;
if ( $status === $comment_status ) {
$current_link_attributes = ' class="current" aria-current="page"' ;
}
2019-04-16 19:56:22 +00:00
if ( 'mine' === $status ) {
$current_user_id = get_current_user_id ();
$num_comments -> mine = get_comments (
array (
'post_id' => $post_id ? $post_id : 0 ,
'user_id' => $current_user_id ,
'count' => true ,
)
);
$link = add_query_arg ( 'user_id' , $current_user_id , $link );
} else {
$link = remove_query_arg ( 'user_id' , $link );
}
if ( ! isset ( $num_comments -> $status ) ) {
2019-03-12 09:27:46 +00:00
$num_comments -> $status = 10 ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
$link = add_query_arg ( 'comment_status' , $status , $link );
2019-04-16 19:56:22 +00:00
if ( $post_id ) {
2019-03-12 09:27:46 +00:00
$link = add_query_arg ( 'p' , absint ( $post_id ), $link );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
/*
// I toyed with this, but decided against it. Leaving it in here in case anyone thinks it is a good idea. ~ Mark
if ( ! empty ( $_REQUEST [ 's' ] ) )
$link = add_query_arg ( 's' , esc_attr ( wp_unslash ( $_REQUEST [ 's' ] ) ), $link );
*/
$status_links [ $status ] = " <a href=' $link ' $current_link_attributes > " . sprintf (
translate_nooped_plural ( $label , $num_comments -> $status ),
2019-04-16 19:56:22 +00:00
sprintf (
'<span class="%s-count">%s</span>' ,
2019-03-12 09:27:46 +00:00
( 'moderated' === $status ) ? 'pending' : $status ,
number_format_i18n ( $num_comments -> $status )
)
) . '</a>' ;
}
/**
* Filters the comment status links .
*
* @ since 2.5 . 0
2019-04-16 19:56:22 +00:00
* @ since 5.1 . 0 The 'Mine' link was added .
2019-03-12 09:27:46 +00:00
*
2019-04-16 19:56:22 +00:00
* @ param string [] $status_links An associative array of fully - formed comment status links . Includes 'All' , 'Mine' ,
* 'Pending' , 'Approved' , 'Spam' , and 'Trash' .
2019-03-12 09:27:46 +00:00
*/
return apply_filters ( 'comment_status_links' , $status_links );
}
/**
* @ global string $comment_status
*
* @ return array
*/
protected function get_bulk_actions () {
global $comment_status ;
$actions = array ();
2019-04-16 19:56:22 +00:00
if ( in_array ( $comment_status , array ( 'all' , 'approved' ) ) ) {
2019-03-12 09:27:46 +00:00
$actions [ 'unapprove' ] = __ ( 'Unapprove' );
2019-04-16 19:56:22 +00:00
}
if ( in_array ( $comment_status , array ( 'all' , 'moderated' ) ) ) {
2019-03-12 09:27:46 +00:00
$actions [ 'approve' ] = __ ( 'Approve' );
2019-04-16 19:56:22 +00:00
}
if ( in_array ( $comment_status , array ( 'all' , 'moderated' , 'approved' , 'trash' ) ) ) {
2019-03-12 09:27:46 +00:00
$actions [ 'spam' ] = _x ( 'Mark as Spam' , 'comment' );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
if ( 'trash' === $comment_status ) {
$actions [ 'untrash' ] = __ ( 'Restore' );
} elseif ( 'spam' === $comment_status ) {
$actions [ 'unspam' ] = _x ( 'Not Spam' , 'comment' );
}
2019-04-16 19:56:22 +00:00
if ( in_array ( $comment_status , array ( 'trash' , 'spam' ) ) || ! EMPTY_TRASH_DAYS ) {
2019-03-12 09:27:46 +00:00
$actions [ 'delete' ] = __ ( 'Delete Permanently' );
2019-04-16 19:56:22 +00:00
} else {
2019-03-12 09:27:46 +00:00
$actions [ 'trash' ] = __ ( 'Move to Trash' );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
return $actions ;
}
/**
* @ global string $comment_status
* @ global string $comment_type
*
* @ param string $which
*/
protected function extra_tablenav ( $which ) {
global $comment_status , $comment_type ;
static $has_items ;
if ( ! isset ( $has_items ) ) {
$has_items = $this -> has_items ();
}
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
< div class = " alignleft actions " >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
if ( 'top' === $which ) {
2019-04-16 19:56:22 +00:00
?>
< label class = " screen-reader-text " for = " filter-by-comment-type " >< ? php _e ( 'Filter by comment type' ); ?> </label>
< select id = " filter-by-comment-type " name = " comment_type " >
< option value = " " >< ? php _e ( 'All comment types' ); ?> </option>
< ? php
2019-03-12 09:27:46 +00:00
/**
* Filters the comment types dropdown menu .
*
* @ since 2.7 . 0
*
2019-04-16 19:56:22 +00:00
* @ param string [] $comment_types An array of comment types . Accepts 'Comments' , 'Pings' .
2019-03-12 09:27:46 +00:00
*/
2019-04-16 19:56:22 +00:00
$comment_types = apply_filters (
'admin_comment_types_dropdown' ,
array (
'comment' => __ ( 'Comments' ),
'pings' => __ ( 'Pings' ),
)
);
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
foreach ( $comment_types as $type => $label ) {
echo " \t " . '<option value="' . esc_attr ( $type ) . '"' . selected ( $comment_type , $type , false ) . " > $label </option> \n " ;
}
2019-03-12 09:27:46 +00:00
?>
2019-04-16 19:56:22 +00:00
</ select >
< ? php
2019-03-12 09:27:46 +00:00
/**
* Fires just before the Filter submit button for comment types .
*
* @ since 3.5 . 0
*/
do_action ( 'restrict_manage_comments' );
submit_button ( __ ( 'Filter' ), '' , 'filter_action' , false , array ( 'id' => 'post-query-submit' ) );
}
if ( ( 'spam' === $comment_status || 'trash' === $comment_status ) && current_user_can ( 'moderate_comments' ) && $has_items ) {
wp_nonce_field ( 'bulk-destroy' , '_destroy_nonce' );
$title = ( 'spam' === $comment_status ) ? esc_attr__ ( 'Empty Spam' ) : esc_attr__ ( 'Empty Trash' );
submit_button ( $title , 'apply' , 'delete_all' , false );
}
/**
* Fires after the Filter submit button for comment types .
*
* @ since 2.5 . 0
*
* @ param string $comment_status The comment status name . Default 'All' .
*/
do_action ( 'manage_comments_nav' , $comment_status );
echo '</div>' ;
}
/**
* @ return string | false
*/
public function current_action () {
2019-04-16 19:56:22 +00:00
if ( isset ( $_REQUEST [ 'delete_all' ] ) || isset ( $_REQUEST [ 'delete_all2' ] ) ) {
2019-03-12 09:27:46 +00:00
return 'delete_all' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
return parent :: current_action ();
}
/**
* @ global int $post_id
*
* @ return array
*/
public function get_columns () {
global $post_id ;
$columns = array ();
2019-04-16 19:56:22 +00:00
if ( $this -> checkbox ) {
2019-03-12 09:27:46 +00:00
$columns [ 'cb' ] = '<input type="checkbox" />' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$columns [ 'author' ] = __ ( 'Author' );
2019-03-12 09:27:46 +00:00
$columns [ 'comment' ] = _x ( 'Comment' , 'column name' );
if ( ! $post_id ) {
/* translators: column name or table row header */
$columns [ 'response' ] = __ ( 'In Response To' );
}
$columns [ 'date' ] = _x ( 'Submitted On' , 'column name' );
return $columns ;
}
/**
* @ return array
*/
protected function get_sortable_columns () {
return array (
'author' => 'comment_author' ,
'response' => 'comment_post_ID' ,
2019-04-16 19:56:22 +00:00
'date' => 'comment_date' ,
2019-03-12 09:27:46 +00:00
);
}
/**
* Get the name of the default primary column .
*
* @ since 4.3 . 0
*
* @ return string Name of the default primary column , in this case , 'comment' .
*/
protected function get_default_primary_column_name () {
return 'comment' ;
}
/**
*/
public function display () {
2019-04-16 19:56:22 +00:00
wp_nonce_field ( 'fetch-list-' . get_class ( $this ), '_ajax_fetch_list_nonce' );
2019-03-12 09:27:46 +00:00
$this -> display_tablenav ( 'top' );
$this -> screen -> render_screen_reader_content ( 'heading_list' );
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
< table class = " wp-list-table <?php echo implode( ' ', $this->get_table_classes () ); ?> " >
< thead >
< tr >
< ? php $this -> print_column_headers (); ?>
</ tr >
</ thead >
< tbody id = " the-comment-list " data - wp - lists = " list:comment " >
< ? php $this -> display_rows_or_placeholder (); ?>
</ tbody >
< tbody id = " the-extra-comment-list " data - wp - lists = " list:comment " style = " display: none; " >
< ? php
2019-04-16 19:56:22 +00:00
/*
* Back up the items to restore after printing the extra items markup .
* The extra items may be empty , which will prevent the table nav from displaying later .
*/
$items = $this -> items ;
2019-03-12 09:27:46 +00:00
$this -> items = $this -> extra_items ;
$this -> display_rows_or_placeholder ();
2019-04-16 19:56:22 +00:00
$this -> items = $items ;
2019-03-12 09:27:46 +00:00
?>
</ tbody >
< tfoot >
< tr >
< ? php $this -> print_column_headers ( false ); ?>
</ tr >
</ tfoot >
</ table >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
$this -> display_tablenav ( 'bottom' );
}
/**
* @ global WP_Post $post
* @ global WP_Comment $comment
*
* @ param WP_Comment $item
*/
public function single_row ( $item ) {
global $post , $comment ;
$comment = $item ;
$the_comment_class = wp_get_comment_status ( $comment );
if ( ! $the_comment_class ) {
$the_comment_class = '' ;
}
$the_comment_class = join ( ' ' , get_comment_class ( $the_comment_class , $comment , $comment -> comment_post_ID ) );
if ( $comment -> comment_post_ID > 0 ) {
$post = get_post ( $comment -> comment_post_ID );
}
$this -> user_can = current_user_can ( 'edit_comment' , $comment -> comment_ID );
echo " <tr id='comment- $comment->comment_ID ' class=' $the_comment_class '> " ;
$this -> single_row_columns ( $comment );
echo " </tr> \n " ;
unset ( $GLOBALS [ 'post' ], $GLOBALS [ 'comment' ] );
}
2019-04-16 19:56:22 +00:00
/**
* Generate and display row actions links .
*
* @ since 4.3 . 0
*
* @ global string $comment_status Status for the current listed comments .
*
* @ param WP_Comment $comment The comment object .
* @ param string $column_name Current column name .
* @ param string $primary Primary column name .
* @ return string | void Comment row actions output .
*/
protected function handle_row_actions ( $comment , $column_name , $primary ) {
global $comment_status ;
2019-03-12 09:27:46 +00:00
if ( $primary !== $column_name ) {
return '' ;
}
2019-04-16 19:56:22 +00:00
if ( ! $this -> user_can ) {
return ;
2019-03-12 09:27:46 +00:00
}
$the_comment_status = wp_get_comment_status ( $comment );
$out = '' ;
2019-04-16 19:56:22 +00:00
$del_nonce = esc_html ( '_wpnonce=' . wp_create_nonce ( " delete-comment_ $comment->comment_ID " ) );
2019-03-12 09:27:46 +00:00
$approve_nonce = esc_html ( '_wpnonce=' . wp_create_nonce ( " approve-comment_ $comment->comment_ID " ) );
$url = " comment.php?c= $comment->comment_ID " ;
2019-04-16 19:56:22 +00:00
$approve_url = esc_url ( $url . " &action=approvecomment& $approve_nonce " );
2019-03-12 09:27:46 +00:00
$unapprove_url = esc_url ( $url . " &action=unapprovecomment& $approve_nonce " );
2019-04-16 19:56:22 +00:00
$spam_url = esc_url ( $url . " &action=spamcomment& $del_nonce " );
$unspam_url = esc_url ( $url . " &action=unspamcomment& $del_nonce " );
$trash_url = esc_url ( $url . " &action=trashcomment& $del_nonce " );
$untrash_url = esc_url ( $url . " &action=untrashcomment& $del_nonce " );
$delete_url = esc_url ( $url . " &action=deletecomment& $del_nonce " );
2019-03-12 09:27:46 +00:00
// Preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash.
$actions = array (
2019-04-16 19:56:22 +00:00
'approve' => '' ,
'unapprove' => '' ,
'reply' => '' ,
2019-03-12 09:27:46 +00:00
'quickedit' => '' ,
2019-04-16 19:56:22 +00:00
'edit' => '' ,
'spam' => '' ,
'unspam' => '' ,
'trash' => '' ,
'untrash' => '' ,
'delete' => '' ,
2019-03-12 09:27:46 +00:00
);
// Not looking at all comments.
if ( $comment_status && 'all' != $comment_status ) {
if ( 'approved' === $the_comment_status ) {
$actions [ 'unapprove' ] = " <a href=' $unapprove_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID :e7e7d3:action=dim-comment&new=unapproved' class='vim-u vim-destructive' aria-label=' " . esc_attr__ ( 'Unapprove this comment' ) . " '> " . __ ( 'Unapprove' ) . '</a>' ;
} elseif ( 'unapproved' === $the_comment_status ) {
$actions [ 'approve' ] = " <a href=' $approve_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID :e7e7d3:action=dim-comment&new=approved' class='vim-a vim-destructive' aria-label=' " . esc_attr__ ( 'Approve this comment' ) . " '> " . __ ( 'Approve' ) . '</a>' ;
}
} else {
2019-04-16 19:56:22 +00:00
$actions [ 'approve' ] = " <a href=' $approve_url ' data-wp-lists='dim:the-comment-list:comment- $comment->comment_ID :unapproved:e7e7d3:e7e7d3:new=approved' class='vim-a' aria-label=' " . esc_attr__ ( 'Approve this comment' ) . " '> " . __ ( 'Approve' ) . '</a>' ;
2019-03-12 09:27:46 +00:00
$actions [ 'unapprove' ] = " <a href=' $unapprove_url ' data-wp-lists='dim:the-comment-list:comment- $comment->comment_ID :unapproved:e7e7d3:e7e7d3:new=unapproved' class='vim-u' aria-label=' " . esc_attr__ ( 'Unapprove this comment' ) . " '> " . __ ( 'Unapprove' ) . '</a>' ;
}
if ( 'spam' !== $the_comment_status ) {
$actions [ 'spam' ] = " <a href=' $spam_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID ::spam=1' class='vim-s vim-destructive' aria-label=' " . esc_attr__ ( 'Mark this comment as spam' ) . " '> " . /* translators: mark as spam link */ _x ( 'Spam' , 'verb' ) . '</a>' ;
} elseif ( 'spam' === $the_comment_status ) {
$actions [ 'unspam' ] = " <a href=' $unspam_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID :66cc66:unspam=1' class='vim-z vim-destructive' aria-label=' " . esc_attr__ ( 'Restore this comment from the spam' ) . " '> " . _x ( 'Not Spam' , 'comment' ) . '</a>' ;
}
if ( 'trash' === $the_comment_status ) {
$actions [ 'untrash' ] = " <a href=' $untrash_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID :66cc66:untrash=1' class='vim-z vim-destructive' aria-label=' " . esc_attr__ ( 'Restore this comment from the Trash' ) . " '> " . __ ( 'Restore' ) . '</a>' ;
}
2019-04-16 19:56:22 +00:00
if ( 'spam' === $the_comment_status || 'trash' === $the_comment_status || ! EMPTY_TRASH_DAYS ) {
2019-03-12 09:27:46 +00:00
$actions [ 'delete' ] = " <a href=' $delete_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID ::delete=1' class='delete vim-d vim-destructive' aria-label=' " . esc_attr__ ( 'Delete this comment permanently' ) . " '> " . __ ( 'Delete Permanently' ) . '</a>' ;
} else {
$actions [ 'trash' ] = " <a href=' $trash_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID ::trash=1' class='delete vim-d vim-destructive' aria-label=' " . esc_attr__ ( 'Move this comment to the Trash' ) . " '> " . _x ( 'Trash' , 'verb' ) . '</a>' ;
}
if ( 'spam' !== $the_comment_status && 'trash' !== $the_comment_status ) {
2019-04-16 19:56:22 +00:00
$actions [ 'edit' ] = " <a href='comment.php?action=editcomment&c= { $comment -> comment_ID } ' aria-label=' " . esc_attr__ ( 'Edit this comment' ) . " '> " . __ ( 'Edit' ) . '</a>' ;
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$format = '<button type="button" data-comment-id="%d" data-post-id="%d" data-action="%s" class="%s button-link" aria-expanded="false" aria-label="%s">%s</button>' ;
2019-03-12 09:27:46 +00:00
$actions [ 'quickedit' ] = sprintf ( $format , $comment -> comment_ID , $comment -> comment_post_ID , 'edit' , 'vim-q comment-inline' , esc_attr__ ( 'Quick edit this comment inline' ), __ ( 'Quick Edit' ) );
$actions [ 'reply' ] = sprintf ( $format , $comment -> comment_ID , $comment -> comment_post_ID , 'replyto' , 'vim-r comment-inline' , esc_attr__ ( 'Reply to this comment' ), __ ( 'Reply' ) );
}
/** This filter is documented in wp-admin/includes/dashboard.php */
$actions = apply_filters ( 'comment_row_actions' , array_filter ( $actions ), $comment );
2019-04-16 19:56:22 +00:00
$i = 0 ;
2019-03-12 09:27:46 +00:00
$out .= '<div class="row-actions">' ;
foreach ( $actions as $action => $link ) {
++ $i ;
( ( ( 'approve' === $action || 'unapprove' === $action ) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | ' ;
// Reply and quickedit need a hide-if-no-js span when not added with ajax
2019-04-16 19:56:22 +00:00
if ( ( 'reply' === $action || 'quickedit' === $action ) && ! wp_doing_ajax () ) {
2019-03-12 09:27:46 +00:00
$action .= ' hide-if-no-js' ;
2019-04-16 19:56:22 +00:00
} elseif ( ( $action === 'untrash' && $the_comment_status === 'trash' ) || ( $action === 'unspam' && $the_comment_status === 'spam' ) ) {
if ( '1' == get_comment_meta ( $comment -> comment_ID , '_wp_trash_meta_status' , true ) ) {
2019-03-12 09:27:46 +00:00
$action .= ' approve' ;
2019-04-16 19:56:22 +00:00
} else {
2019-03-12 09:27:46 +00:00
$action .= ' unapprove' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
}
$out .= " <span class=' $action '> $sep $link </span> " ;
}
$out .= '</div>' ;
$out .= '<button type="button" class="toggle-row"><span class="screen-reader-text">' . __ ( 'Show more details' ) . '</span></button>' ;
return $out ;
}
/**
* @ param WP_Comment $comment The comment object .
*/
public function column_cb ( $comment ) {
2019-04-16 19:56:22 +00:00
if ( $this -> user_can ) {
?>
2019-03-12 09:27:46 +00:00
< label class = " screen-reader-text " for = " cb-select-<?php echo $comment->comment_ID ; ?> " >< ? php _e ( 'Select comment' ); ?> </label>
< input id = " cb-select-<?php echo $comment->comment_ID ; ?> " type = " checkbox " name = " delete_comments[] " value = " <?php echo $comment->comment_ID ; ?> " />
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
}
}
/**
* @ param WP_Comment $comment The comment object .
*/
public function column_comment ( $comment ) {
echo '<div class="comment-author">' ;
$this -> column_author ( $comment );
echo '</div>' ;
if ( $comment -> comment_parent ) {
$parent = get_comment ( $comment -> comment_parent );
if ( $parent ) {
$parent_link = esc_url ( get_comment_link ( $parent ) );
2019-04-16 19:56:22 +00:00
$name = get_comment_author ( $parent );
2019-03-12 09:27:46 +00:00
printf (
/* translators: %s: comment link */
__ ( 'In reply to %s.' ),
'<a href="' . $parent_link . '">' . $name . '</a>'
);
}
}
comment_text ( $comment );
2019-04-16 19:56:22 +00:00
if ( $this -> user_can ) {
2019-03-12 09:27:46 +00:00
/** This filter is documented in wp-admin/includes/comment.php */
2019-04-16 19:56:22 +00:00
$comment_content = apply_filters ( 'comment_edit_pre' , $comment -> comment_content );
?>
< div id = " inline-<?php echo $comment->comment_ID ; ?> " class = " hidden " >
< textarea class = " comment " rows = " 1 " cols = " 1 " >< ? php echo esc_textarea ( $comment_content ); ?> </textarea>
< div class = " author-email " >< ? php echo esc_attr ( $comment -> comment_author_email ); ?> </div>
< div class = " author " >< ? php echo esc_attr ( $comment -> comment_author ); ?> </div>
< div class = " author-url " >< ? php echo esc_attr ( $comment -> comment_author_url ); ?> </div>
< div class = " comment_status " >< ? php echo $comment -> comment_approved ; ?> </div>
2019-03-12 09:27:46 +00:00
</ div >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
}
}
/**
* @ global string $comment_status
*
* @ param WP_Comment $comment The comment object .
*/
public function column_author ( $comment ) {
global $comment_status ;
$author_url = get_comment_author_url ( $comment );
$author_url_display = untrailingslashit ( preg_replace ( '|^http(s)?://(www\.)?|i' , '' , $author_url ) );
if ( strlen ( $author_url_display ) > 50 ) {
$author_url_display = wp_html_excerpt ( $author_url_display , 49 , '…' );
}
2019-04-16 19:56:22 +00:00
echo '<strong>' ;
comment_author ( $comment );
echo '</strong><br />' ;
2019-03-12 09:27:46 +00:00
if ( ! empty ( $author_url_display ) ) {
printf ( '<a href="%s">%s</a><br />' , esc_url ( $author_url ), esc_html ( $author_url_display ) );
}
if ( $this -> user_can ) {
if ( ! empty ( $comment -> comment_author_email ) ) {
/** This filter is documented in wp-includes/comment-template.php */
$email = apply_filters ( 'comment_email' , $comment -> comment_author_email , $comment );
if ( ! empty ( $email ) && '@' !== $email ) {
printf ( '<a href="%1$s">%2$s</a><br />' , esc_url ( 'mailto:' . $email ), esc_html ( $email ) );
}
}
$author_ip = get_comment_author_IP ( $comment );
if ( $author_ip ) {
2019-04-16 19:56:22 +00:00
$author_ip_url = add_query_arg (
array (
's' => $author_ip ,
'mode' => 'detail' ,
),
admin_url ( 'edit-comments.php' )
);
2019-03-12 09:27:46 +00:00
if ( 'spam' === $comment_status ) {
$author_ip_url = add_query_arg ( 'comment_status' , 'spam' , $author_ip_url );
}
printf ( '<a href="%1$s">%2$s</a>' , esc_url ( $author_ip_url ), esc_html ( $author_ip ) );
}
}
}
/**
* @ param WP_Comment $comment The comment object .
*/
public function column_date ( $comment ) {
/* translators: 1: comment date, 2: comment time */
2019-04-16 19:56:22 +00:00
$submitted = sprintf (
__ ( '%1$s at %2$s' ),
2019-03-12 09:27:46 +00:00
/* translators: comment date format. See https://secure.php.net/date */
get_comment_date ( __ ( 'Y/m/d' ), $comment ),
get_comment_date ( __ ( 'g:i a' ), $comment )
);
echo '<div class="submitted-on">' ;
2019-04-16 19:56:22 +00:00
if ( 'approved' === wp_get_comment_status ( $comment ) && ! empty ( $comment -> comment_post_ID ) ) {
2019-03-12 09:27:46 +00:00
printf (
'<a href="%s">%s</a>' ,
esc_url ( get_comment_link ( $comment ) ),
$submitted
);
} else {
echo $submitted ;
}
echo '</div>' ;
}
/**
* @ param WP_Comment $comment The comment object .
*/
public function column_response ( $comment ) {
$post = get_post ();
if ( ! $post ) {
return ;
}
2019-04-16 19:56:22 +00:00
if ( isset ( $this -> pending_count [ $post -> ID ] ) ) {
$pending_comments = $this -> pending_count [ $post -> ID ];
2019-03-12 09:27:46 +00:00
} else {
$_pending_count_temp = get_pending_comments_num ( array ( $post -> ID ) );
2019-04-16 19:56:22 +00:00
$pending_comments = $this -> pending_count [ $post -> ID ] = $_pending_count_temp [ $post -> ID ];
2019-03-12 09:27:46 +00:00
}
if ( current_user_can ( 'edit_post' , $post -> ID ) ) {
2019-04-16 19:56:22 +00:00
$post_link = " <a href=' " . get_edit_post_link ( $post -> ID ) . " ' class='comments-edit-item-link'> " ;
2019-03-12 09:27:46 +00:00
$post_link .= esc_html ( get_the_title ( $post -> ID ) ) . '</a>' ;
} else {
$post_link = esc_html ( get_the_title ( $post -> ID ) );
}
echo '<div class="response-links">' ;
if ( 'attachment' === $post -> post_type && ( $thumb = wp_get_attachment_image ( $post -> ID , array ( 80 , 60 ), true ) ) ) {
echo $thumb ;
}
echo $post_link ;
$post_type_object = get_post_type_object ( $post -> post_type );
echo " <a href=' " . get_permalink ( $post -> ID ) . " ' class='comments-view-item-link'> " . $post_type_object -> labels -> view_item . '</a>' ;
echo '<span class="post-com-count-wrapper post-com-count-' , $post -> ID , '">' ;
$this -> comments_bubble ( $post -> ID , $pending_comments );
echo '</span> ' ;
echo '</div>' ;
}
/**
* @ param WP_Comment $comment The comment object .
* @ param string $column_name The custom column ' s name .
*/
public function column_default ( $comment , $column_name ) {
/**
* Fires when the default column output is displayed for a single row .
*
* @ since 2.8 . 0
*
* @ param string $column_name The custom column ' s name .
* @ param int $comment -> comment_ID The custom column ' s unique ID number .
*/
do_action ( 'manage_comments_custom_column' , $column_name , $comment -> comment_ID );
}
}