2010-10-25 04:57:43 +02:00
< ? php
/**
2010-10-25 06:04:18 +02:00
* Comments and Post Comments List Table classes .
2010-10-25 04:57:43 +02:00
*
* @ package WordPress
2010-10-25 06:04:18 +02:00
* @ subpackage List_Table
* @ since 3.1 . 0
2010-10-25 04:57:43 +02:00
*/
2010-10-25 06:04:18 +02:00
/**
* Comments List Table class .
*
* @ package WordPress
* @ subpackage List_Table
* @ since 3.1 . 0
2011-01-16 22:47:24 +01:00
* @ access private
2010-10-25 06:04:18 +02:00
*/
2010-11-04 09:07:03 +01:00
class WP_Comments_List_Table extends WP_List_Table {
2010-10-25 04:57:43 +02:00
2014-05-19 01:59:15 +02:00
public $checkbox = true ;
2010-10-25 04:57:43 +02:00
2014-05-19 01:59:15 +02:00
public $pending_count = array ();
2010-10-25 04:57:43 +02:00
2014-12-21 00:27:25 +01:00
public $extra_items ;
2015-01-12 17:02:24 +01:00
private $user_can ;
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
2014-08-10 04:22:16 +02:00
* @ access public
2014-08-10 04:18:17 +02:00
*
* @ see WP_List_Table :: __construct () for more information on default arguments .
*
2015-05-28 23:41:30 +02:00
* @ global int $post_id
*
2014-08-10 04:18:17 +02:00
* @ param array $args An associative array of arguments .
2014-09-04 17:23:16 +02:00
*/
2014-05-19 01:59:15 +02:00
public function __construct ( $args = array () ) {
2010-11-29 21:15:04 +01:00
global $post_id ;
2010-10-25 04:57:43 +02:00
2010-11-29 21:15:04 +01:00
$post_id = isset ( $_REQUEST [ 'p' ] ) ? absint ( $_REQUEST [ 'p' ] ) : 0 ;
2010-10-25 04:57:43 +02:00
2010-11-29 21:15:04 +01:00
if ( get_option ( 'show_avatars' ) )
2010-10-25 04:57:43 +02:00
add_filter ( 'comment_author' , 'floated_admin_avatar' );
2011-04-29 22:05:12 +02:00
parent :: __construct ( array (
2010-12-22 20:03:43 +01:00
'plural' => 'comments' ,
'singular' => 'comment' ,
2011-01-21 22:17:12 +01:00
'ajax' => true ,
2012-09-29 12:05:15 +02:00
'screen' => isset ( $args [ 'screen' ] ) ? $args [ 'screen' ] : null ,
2010-10-25 04:57:43 +02:00
) );
}
2014-05-19 01:59:15 +02:00
public function ajax_user_can () {
2010-12-16 10:18:28 +01:00
return current_user_can ( 'edit_posts' );
2010-10-25 04:57:43 +02:00
}
2015-05-28 23:41:30 +02:00
/**
*
* @ global int $post_id
* @ global string $comment_status
* @ global string $search
* @ global string $comment_type
*/
2014-05-19 01:59:15 +02:00
public function prepare_items () {
2011-01-22 19:27:04 +01:00
global $post_id , $comment_status , $search , $comment_type ;
2010-10-25 04:57:43 +02:00
$comment_status = isset ( $_REQUEST [ 'comment_status' ] ) ? $_REQUEST [ 'comment_status' ] : 'all' ;
if ( ! in_array ( $comment_status , array ( 'all' , 'moderated' , 'approved' , 'spam' , 'trash' ) ) )
$comment_status = 'all' ;
$comment_type = ! empty ( $_REQUEST [ 'comment_type' ] ) ? $_REQUEST [ 'comment_type' ] : '' ;
$search = ( isset ( $_REQUEST [ 's' ] ) ) ? $_REQUEST [ 's' ] : '' ;
2013-09-20 22:16:11 +02:00
$post_type = ( isset ( $_REQUEST [ 'post_type' ] ) ) ? sanitize_key ( $_REQUEST [ 'post_type' ] ) : '' ;
2010-10-25 04:57:43 +02:00
$user_id = ( isset ( $_REQUEST [ 'user_id' ] ) ) ? $_REQUEST [ 'user_id' ] : '' ;
2010-11-24 12:19:23 +01:00
$orderby = ( isset ( $_REQUEST [ 'orderby' ] ) ) ? $_REQUEST [ 'orderby' ] : '' ;
$order = ( isset ( $_REQUEST [ 'order' ] ) ) ? $_REQUEST [ 'order' ] : '' ;
2010-12-13 22:21:50 +01:00
2010-12-29 16:58:46 +01:00
$comments_per_page = $this -> get_per_page ( $comment_status );
2010-10-25 04:57:43 +02:00
2010-12-14 12:53:31 +01:00
$doing_ajax = defined ( 'DOING_AJAX' ) && DOING_AJAX ;
if ( isset ( $_REQUEST [ 'number' ] ) ) {
$number = ( int ) $_REQUEST [ 'number' ];
}
else {
2010-10-25 04:57:43 +02:00
$number = $comments_per_page + min ( 8 , $comments_per_page ); // Grab a few extra
2010-12-14 12:53:31 +01:00
}
2010-10-25 04:57:43 +02:00
$page = $this -> get_pagenum ();
2011-01-06 05:11:14 +01:00
2010-12-22 20:03:43 +01:00
if ( isset ( $_REQUEST [ 'start' ] ) ) {
$start = $_REQUEST [ 'start' ];
} else {
$start = ( $page - 1 ) * $comments_per_page ;
}
2011-01-06 05:11:14 +01:00
2010-12-14 12:53:31 +01:00
if ( $doing_ajax && isset ( $_REQUEST [ 'offset' ] ) ) {
$start += $_REQUEST [ 'offset' ];
}
2010-10-25 04:57:43 +02:00
$status_map = array (
'moderated' => 'hold' ,
2012-09-28 23:46:24 +02:00
'approved' => 'approve' ,
'all' => '' ,
2010-10-25 04:57:43 +02:00
);
2010-12-13 22:21:50 +01:00
2010-10-25 04:57:43 +02:00
$args = array (
'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 ,
2010-11-24 12:19:23 +01:00
'orderby' => $orderby ,
'order' => $order ,
2013-09-20 22:16:11 +02:00
'post_type' => $post_type ,
2010-10-25 04:57:43 +02:00
);
$_comments = get_comments ( $args );
2015-05-25 19:59:25 +02:00
if ( is_array ( $_comments ) ) {
update_comment_cache ( $_comments );
2010-10-25 04:57:43 +02:00
2015-05-25 19:59:25 +02:00
$this -> items = array_slice ( $_comments , 0 , $comments_per_page );
$this -> extra_items = array_slice ( $_comments , $comments_per_page );
2010-10-25 04:57:43 +02:00
2015-05-25 19:59:25 +02:00
$_comment_post_ids = array_unique ( wp_list_pluck ( $_comments , 'comment_post_ID' ) );
2010-10-25 04:57:43 +02:00
2015-05-25 19:59:25 +02:00
$this -> pending_count = get_pending_comments_num ( $_comment_post_ids );
2010-10-25 04:57:43 +02:00
}
2015-05-25 19:59:25 +02:00
$total_comments = get_comments ( array_merge ( $args , array (
'count' => true ,
'offset' => 0 ,
'number' => 0
) ) );
2010-10-25 04:57:43 +02:00
$this -> set_pagination_args ( array (
'total_items' => $total_comments ,
'per_page' => $comments_per_page ,
) );
}
2011-01-06 05:11:14 +01:00
2014-05-19 01:59:15 +02:00
public function get_per_page ( $comment_status = 'all' ) {
2010-12-29 16:58:46 +01:00
$comments_per_page = $this -> get_items_per_page ( 'edit_comments_per_page' );
2013-11-13 20:47:10 +01:00
/**
* Filter 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' .
*/
2010-12-29 16:58:46 +01:00
$comments_per_page = apply_filters ( 'comments_per_page' , $comments_per_page , $comment_status );
return $comments_per_page ;
}
2010-10-25 04:57:43 +02:00
2015-05-28 23:41:30 +02:00
/**
*
* @ global string $comment_status
*/
2014-05-19 01:59:15 +02:00
public function no_items () {
2010-10-31 02:17:00 +01:00
global $comment_status ;
if ( 'moderated' == $comment_status )
2012-01-09 20:53:51 +01:00
_e ( 'No comments awaiting moderation.' );
2010-10-31 02:17:00 +01:00
else
_e ( 'No comments found.' );
}
2015-05-28 23:41:30 +02:00
/**
*
* @ global int $post_id
* @ global string $comment_status
* @ global string $comment_type
*/
2014-07-14 00:09:16 +02:00
protected function get_views () {
2012-04-04 19:36:23 +02:00
global $post_id , $comment_status , $comment_type ;
2010-10-25 04:57:43 +02:00
$status_links = array ();
$num_comments = ( $post_id ) ? wp_count_comments ( $post_id ) : wp_count_comments ();
//, number_format_i18n($num_comments->moderated) ), "<span class='comment-count'>" . number_format_i18n($num_comments->moderated) . "</span>"),
//, number_format_i18n($num_comments->spam) ), "<span class='spam-comment-count'>" . number_format_i18n($num_comments->spam) . "</span>")
$stati = array (
'all' => _nx_noop ( 'All' , 'All' , 'comments' ), // singular not used
'moderated' => _n_noop ( 'Pending <span class="count">(<span class="pending-count">%s</span>)</span>' , 'Pending <span class="count">(<span class="pending-count">%s</span>)</span>' ),
'approved' => _n_noop ( 'Approved' , 'Approved' ), // singular not used
'spam' => _n_noop ( 'Spam <span class="count">(<span class="spam-count">%s</span>)</span>' , 'Spam <span class="count">(<span class="spam-count">%s</span>)</span>' ),
'trash' => _n_noop ( 'Trash <span class="count">(<span class="trash-count">%s</span>)</span>' , 'Trash <span class="count">(<span class="trash-count">%s</span>)</span>' )
);
if ( ! EMPTY_TRASH_DAYS )
unset ( $stati [ 'trash' ]);
$link = 'edit-comments.php' ;
if ( ! empty ( $comment_type ) && 'all' != $comment_type )
$link = add_query_arg ( 'comment_type' , $comment_type , $link );
foreach ( $stati as $status => $label ) {
$class = ( $status == $comment_status ) ? ' class="current"' : '' ;
if ( ! isset ( $num_comments -> $status ) )
$num_comments -> $status = 10 ;
$link = add_query_arg ( 'comment_status' , $status , $link );
if ( $post_id )
$link = add_query_arg ( 'p' , absint ( $post_id ), $link );
/*
// 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' ] ) )
2013-03-01 18:00:25 +01:00
$link = add_query_arg ( 's' , esc_attr ( wp_unslash ( $_REQUEST [ 's' ] ) ), $link );
2010-10-25 04:57:43 +02:00
*/
2010-11-05 15:34:09 +01:00
$status_links [ $status ] = " <a href=' $link ' $class > " . sprintf (
2010-10-29 15:12:14 +02:00
translate_nooped_plural ( $label , $num_comments -> $status ),
2010-10-25 04:57:43 +02:00
number_format_i18n ( $num_comments -> $status )
) . '</a>' ;
}
2013-11-13 20:47:10 +01:00
/**
* Filter the comment status links .
*
* @ since 2.5 . 0
*
* @ param array $status_links An array of fully - formed status links . Default 'All' .
* Accepts 'All' , 'Pending' , 'Approved' , 'Spam' , and 'Trash' .
*/
2010-10-25 04:57:43 +02:00
$status_links = apply_filters ( 'comment_status_links' , $status_links );
return $status_links ;
}
2015-05-28 23:41:30 +02:00
/**
*
* @ global string $comment_status
*/
2014-07-14 00:09:16 +02:00
protected function get_bulk_actions () {
2010-10-25 04:57:43 +02:00
global $comment_status ;
$actions = array ();
if ( in_array ( $comment_status , array ( 'all' , 'approved' ) ) )
$actions [ 'unapprove' ] = __ ( 'Unapprove' );
2012-04-19 16:00:44 +02:00
if ( in_array ( $comment_status , array ( 'all' , 'moderated' ) ) )
2010-10-25 04:57:43 +02:00
$actions [ 'approve' ] = __ ( 'Approve' );
2014-06-30 01:19:16 +02:00
if ( in_array ( $comment_status , array ( 'all' , 'moderated' , 'approved' , 'trash' ) ) )
2010-10-25 04:57:43 +02:00
$actions [ 'spam' ] = _x ( 'Mark as Spam' , 'comment' );
if ( 'trash' == $comment_status )
$actions [ 'untrash' ] = __ ( 'Restore' );
elseif ( 'spam' == $comment_status )
$actions [ 'unspam' ] = _x ( 'Not Spam' , 'comment' );
if ( in_array ( $comment_status , array ( 'trash' , 'spam' ) ) || ! EMPTY_TRASH_DAYS )
$actions [ 'delete' ] = __ ( 'Delete Permanently' );
else
$actions [ 'trash' ] = __ ( 'Move to Trash' );
return $actions ;
}
2015-05-28 23:41:30 +02:00
/**
*
* @ global string $comment_status
* @ global string $comment_type
* @ param string $which
*/
2014-07-14 00:09:16 +02:00
protected function extra_tablenav ( $which ) {
2010-10-25 04:57:43 +02:00
global $comment_status , $comment_type ;
?>
< div class = " alignleft actions " >
< ? php
if ( 'top' == $which ) {
?>
2014-10-11 04:26:18 +02: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 " >
2014-03-19 23:13:14 +01:00
< option value = " " >< ? php _e ( 'All comment types' ); ?> </option>
2010-10-25 04:57:43 +02:00
< ? php
2013-11-13 20:47:10 +01:00
/**
* Filter the comment types dropdown menu .
*
* @ since 2.7 . 0
*
* @ param array $comment_types An array of comment types . Accepts 'Comments' , 'Pings' .
*/
2010-10-25 04:57:43 +02:00
$comment_types = apply_filters ( 'admin_comment_types_dropdown' , array (
'comment' => __ ( 'Comments' ),
'pings' => __ ( 'Pings' ),
) );
foreach ( $comment_types as $type => $label )
2014-05-19 07:04:16 +02:00
echo " \t " . '<option value="' . esc_attr ( $type ) . '"' . selected ( $comment_type , $type , false ) . " > $label </option> \n " ;
2010-10-25 04:57:43 +02:00
?>
</ select >
< ? php
2013-11-13 20:47:10 +01:00
/**
* Fires just before the Filter submit button for comment types .
*
* @ since 3.5 . 0
*/
2012-09-24 23:23:43 +02:00
do_action ( 'restrict_manage_comments' );
2014-06-30 03:10:15 +02:00
submit_button ( __ ( 'Filter' ), 'button' , 'filter_action' , false , array ( 'id' => 'post-query-submit' ) );
2010-10-25 04:57:43 +02:00
}
if ( ( 'spam' == $comment_status || 'trash' == $comment_status ) && current_user_can ( 'moderate_comments' ) ) {
wp_nonce_field ( 'bulk-destroy' , '_destroy_nonce' );
$title = ( 'spam' == $comment_status ) ? esc_attr__ ( 'Empty Spam' ) : esc_attr__ ( 'Empty Trash' );
2012-09-21 21:34:23 +02:00
submit_button ( $title , 'apply' , 'delete_all' , false );
2010-10-25 04:57:43 +02:00
}
2013-11-13 20:47:10 +01:00
/**
* Fires after the Filter submit button for comment types .
*
* @ since 2.5 . 0
*
* @ param string $comment_status The comment status name . Default 'All' .
*/
2010-10-25 04:57:43 +02:00
do_action ( 'manage_comments_nav' , $comment_status );
echo '</div>' ;
}
2014-05-19 01:59:15 +02:00
public function current_action () {
2010-10-25 04:57:43 +02:00
if ( isset ( $_REQUEST [ 'delete_all' ] ) || isset ( $_REQUEST [ 'delete_all2' ] ) )
return 'delete_all' ;
return parent :: current_action ();
}
2015-05-28 23:41:30 +02:00
/**
*
* @ global int $post_id
* @ return array
*/
2014-05-19 01:59:15 +02:00
public function get_columns () {
2010-11-29 21:15:04 +01:00
global $post_id ;
2010-10-25 04:57:43 +02:00
$columns = array ();
if ( $this -> checkbox )
$columns [ 'cb' ] = '<input type="checkbox" />' ;
$columns [ 'author' ] = __ ( 'Author' );
$columns [ 'comment' ] = _x ( 'Comment' , 'column name' );
2010-11-29 21:15:04 +01:00
if ( ! $post_id )
2010-11-13 21:53:21 +01:00
$columns [ 'response' ] = _x ( 'In Response To' , 'column name' );
2010-10-25 04:57:43 +02:00
return $columns ;
}
2014-07-14 00:09:16 +02:00
protected function get_sortable_columns () {
2010-10-25 04:57:43 +02:00
return array (
'author' => 'comment_author' ,
'response' => 'comment_post_ID'
);
}
2014-05-19 01:59:15 +02:00
public function display () {
2011-01-21 22:17:12 +01:00
wp_nonce_field ( " fetch-list- " . get_class ( $this ), '_ajax_fetch_list_nonce' );
2011-01-11 23:42:22 +01:00
2010-10-25 04:57:43 +02:00
$this -> display_tablenav ( 'top' );
?>
2014-01-26 21:28:12 +01:00
< table class = " <?php echo implode( ' ', $this->get_table_classes () ); ?> " >
2010-10-25 04:57:43 +02:00
< thead >
< tr >
< ? php $this -> print_column_headers (); ?>
</ tr >
</ thead >
2012-11-06 02:01:52 +01:00
< tbody id = " the-comment-list " data - wp - lists = " list:comment " >
2010-12-21 18:34:29 +01:00
< ? php $this -> display_rows_or_placeholder (); ?>
2010-10-25 04:57:43 +02:00
</ tbody >
2012-11-06 02:01:52 +01:00
< tbody id = " the-extra-comment-list " data - wp - lists = " list:comment " style = " display: none; " >
2010-10-25 04:57:43 +02:00
< ? php $this -> items = $this -> extra_items ; $this -> display_rows (); ?>
</ tbody >
2015-02-22 22:48:26 +01:00
< tfoot >
< tr >
< ? php $this -> print_column_headers ( false ); ?>
</ tr >
</ tfoot >
2010-10-25 04:57:43 +02:00
</ table >
< ? php
$this -> display_tablenav ( 'bottom' );
}
2015-05-28 23:41:30 +02:00
/**
*
* @ global WP_Post $post
* @ global object $comment
* @ param object $a_comment
*/
2014-05-19 01:59:15 +02:00
public function single_row ( $a_comment ) {
2012-09-04 20:23:51 +02:00
global $post , $comment ;
2010-10-25 04:57:43 +02:00
$comment = $a_comment ;
2013-11-04 12:00:11 +01:00
$the_comment_class = wp_get_comment_status ( $comment -> comment_ID );
2015-03-09 03:11:28 +01:00
if ( ! $the_comment_class ) {
$the_comment_class = '' ;
}
2013-11-04 12:00:11 +01:00
$the_comment_class = join ( ' ' , get_comment_class ( $the_comment_class , $comment -> comment_ID , $comment -> comment_post_ID ) );
2010-10-25 04:57:43 +02:00
$post = get_post ( $comment -> comment_post_ID );
$this -> user_can = current_user_can ( 'edit_comment' , $comment -> comment_ID );
2011-08-24 13:12:07 +02:00
echo " <tr id='comment- $comment->comment_ID ' class=' $the_comment_class '> " ;
2013-04-29 03:10:50 +02:00
$this -> single_row_columns ( $comment );
2011-08-24 13:13:33 +02:00
echo " </tr> \n " ;
2010-10-25 04:57:43 +02:00
}
2014-05-19 01:59:15 +02:00
public function column_cb ( $comment ) {
2012-07-25 18:18:14 +02:00
if ( $this -> user_can ) { ?>
< 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 ; ?> " />
< ? php
2012-07-24 20:01:22 +02:00
}
2010-10-25 04:57:43 +02:00
}
2015-05-28 23:41:30 +02:00
/**
*
* @ global string $comment_status
* @ param object $comment
*/
2014-05-19 01:59:15 +02:00
public function column_comment ( $comment ) {
2012-09-04 18:29:28 +02:00
global $comment_status ;
$post = get_post ();
2010-10-25 04:57:43 +02:00
$comment_url = esc_url ( get_comment_link ( $comment -> comment_ID ) );
2011-08-25 10:05:15 +02:00
$the_comment_status = wp_get_comment_status ( $comment -> comment_ID );
2010-10-25 04:57:43 +02:00
2014-01-16 21:34:10 +01:00
echo '<div class="comment-author">' ;
$this -> column_author ( $comment );
echo '</div>' ;
2010-11-14 21:28:55 +01:00
echo '<div class="submitted-on">' ;
2010-10-25 04:57:43 +02:00
/* translators: 2: comment date, 3: comment time */
2010-11-13 21:58:39 +01:00
printf ( __ ( 'Submitted on <a href="%1$s">%2$s at %3$s</a>' ), $comment_url ,
2013-06-23 10:30:30 +02:00
/* translators: comment date format. See http://php.net/date */
get_comment_date ( __ ( 'Y/m/d' ) ),
get_comment_date ( get_option ( 'time_format' ) )
);
2010-10-25 04:57:43 +02:00
if ( $comment -> comment_parent ) {
$parent = get_comment ( $comment -> comment_parent );
$parent_link = esc_url ( get_comment_link ( $comment -> comment_parent ) );
$name = get_comment_author ( $parent -> comment_ID );
printf ( ' | ' . __ ( 'In reply to <a href="%1$s">%2$s</a>.' ), $parent_link , $name );
}
echo '</div>' ;
comment_text ();
2014-12-21 00:27:25 +01:00
if ( $this -> user_can ) { ?>
2010-10-25 04:57:43 +02:00
< div id = " inline-<?php echo $comment->comment_ID ; ?> " class = " hidden " >
2013-11-19 20:35:10 +01:00
< textarea class = " comment " rows = " 1 " cols = " 1 " >< ? php
2013-11-13 20:47:10 +01:00
/** This filter is documented in wp-admin/includes/comment.php */
echo esc_textarea ( apply_filters ( 'comment_edit_pre' , $comment -> comment_content ) );
2013-11-19 20:35:10 +01:00
?> </textarea>
2010-10-25 04:57:43 +02:00
< 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>
</ div >
< ? php
}
2014-12-21 00:27:25 +01:00
if ( $this -> user_can ) {
2015-05-19 22:46:25 +02:00
$del_nonce = esc_html ( '_wpnonce=' . wp_create_nonce ( " delete-comment_ $comment->comment_ID " ) );
$approve_nonce = esc_html ( '_wpnonce=' . wp_create_nonce ( " approve-comment_ $comment->comment_ID " ) );
$url = " comment.php?c= $comment->comment_ID " ;
$approve_url = esc_url ( $url . " &action=approvecomment& $approve_nonce " );
$unapprove_url = esc_url ( $url . " &action=unapprovecomment& $approve_nonce " );
$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 " );
2014-07-17 11:14:16 +02:00
// Preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash.
2010-10-25 04:57:43 +02:00
$actions = array (
'approve' => '' , 'unapprove' => '' ,
'reply' => '' ,
'quickedit' => '' ,
'edit' => '' ,
'spam' => '' , 'unspam' => '' ,
'trash' => '' , 'untrash' => '' , 'delete' => ''
);
2014-07-17 11:14:16 +02:00
// Not looking at all comments.
if ( $comment_status && 'all' != $comment_status ) {
2015-01-08 08:05:25 +01:00
if ( 'approved' == $the_comment_status ) {
2012-11-06 02:01:52 +01:00
$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' title=' " . esc_attr__ ( 'Unapprove this comment' ) . " '> " . __ ( 'Unapprove' ) . '</a>' ;
2015-01-08 08:05:25 +01:00
} elseif ( 'unapproved' == $the_comment_status ) {
2012-11-06 02:01:52 +01:00
$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' title=' " . esc_attr__ ( 'Approve this comment' ) . " '> " . __ ( 'Approve' ) . '</a>' ;
2015-01-08 08:05:25 +01:00
}
2010-10-25 04:57:43 +02:00
} else {
2012-11-06 02:01:52 +01: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' title=' " . esc_attr__ ( 'Approve this comment' ) . " '> " . __ ( 'Approve' ) . '</a>' ;
$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' title=' " . esc_attr__ ( 'Unapprove this comment' ) . " '> " . __ ( 'Unapprove' ) . '</a>' ;
2010-10-25 04:57:43 +02:00
}
2014-06-30 01:19:16 +02:00
if ( 'spam' != $the_comment_status ) {
2012-11-06 02:01:52 +01:00
$actions [ 'spam' ] = " <a href=' $spam_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID ::spam=1' class='vim-s vim-destructive' title=' " . esc_attr__ ( 'Mark this comment as spam' ) . " '> " . /* translators: mark as spam link */ _x ( 'Spam' , 'verb' ) . '</a>' ;
2010-10-25 04:57:43 +02:00
} elseif ( 'spam' == $the_comment_status ) {
2012-11-06 02:01:52 +01:00
$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'> " . _x ( 'Not Spam' , 'comment' ) . '</a>' ;
2014-06-30 01:19:16 +02:00
}
if ( 'trash' == $the_comment_status ) {
2012-11-06 02:01:52 +01:00
$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'> " . __ ( 'Restore' ) . '</a>' ;
2010-10-25 04:57:43 +02:00
}
if ( 'spam' == $the_comment_status || 'trash' == $the_comment_status || ! EMPTY_TRASH_DAYS ) {
2012-11-06 02:01:52 +01: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'> " . __ ( 'Delete Permanently' ) . '</a>' ;
2010-10-25 04:57:43 +02:00
} else {
2012-11-06 02:01:52 +01:00
$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' title=' " . esc_attr__ ( 'Move this comment to the trash' ) . " '> " . _x ( 'Trash' , 'verb' ) . '</a>' ;
2010-10-25 04:57:43 +02:00
}
2011-11-15 15:02:42 +01:00
if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) {
2010-10-25 04:57:43 +02:00
$actions [ 'edit' ] = " <a href='comment.php?action=editcomment&c= { $comment -> comment_ID } ' title=' " . esc_attr__ ( 'Edit comment' ) . " '> " . __ ( 'Edit' ) . '</a>' ;
2014-06-24 01:55:16 +02:00
2014-09-02 05:57:18 +02:00
$format = '<a data-comment-id="%d" data-post-id="%d" data-action="%s" class="%s" title="%s" href="#">%s</a>' ;
2014-06-24 01:55:16 +02:00
2015-03-25 23:15:27 +01:00
$actions [ 'quickedit' ] = sprintf ( $format , $comment -> comment_ID , $post -> ID , 'edit' , 'vim-q comment-inline' , esc_attr__ ( 'Edit this item inline' ), __ ( 'Quick Edit' ) );
2014-06-24 01:55:16 +02:00
2014-09-02 05:57:18 +02:00
$actions [ 'reply' ] = sprintf ( $format , $comment -> comment_ID , $post -> ID , 'replyto' , 'vim-r comment-inline' , esc_attr__ ( 'Reply to this comment' ), __ ( 'Reply' ) );
2010-10-25 04:57:43 +02:00
}
2013-11-13 20:47:10 +01:00
/** This filter is documented in wp-admin/includes/dashboard.php */
2010-10-25 04:57:43 +02:00
$actions = apply_filters ( 'comment_row_actions' , array_filter ( $actions ), $comment );
$i = 0 ;
echo '<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
2010-11-14 19:19:45 +01:00
if ( ( 'reply' == $action || 'quickedit' == $action ) && ! defined ( 'DOING_AJAX' ) )
2010-10-25 04:57:43 +02:00
$action .= ' hide-if-no-js' ;
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 ) )
$action .= ' approve' ;
else
$action .= ' unapprove' ;
}
echo " <span class=' $action '> $sep $link </span> " ;
}
echo '</div>' ;
}
}
2015-05-28 23:41:30 +02:00
/**
*
* @ global string $comment_status
* @ param object $comment
*/
2014-05-19 01:59:15 +02:00
public function column_author ( $comment ) {
2010-10-25 04:57:43 +02:00
global $comment_status ;
$author_url = get_comment_author_url ();
if ( 'http://' == $author_url )
$author_url = '' ;
$author_url_display = preg_replace ( '|http://(www\.)?|i' , '' , $author_url );
if ( strlen ( $author_url_display ) > 50 )
2013-05-08 23:27:31 +02:00
$author_url_display = substr ( $author_url_display , 0 , 49 ) . '…' ;
2010-10-25 04:57:43 +02:00
echo " <strong> " ; comment_author (); echo '</strong><br />' ;
if ( ! empty ( $author_url ) )
echo " <a title=' $author_url ' href=' $author_url '> $author_url_display </a><br /> " ;
if ( $this -> user_can ) {
if ( ! empty ( $comment -> comment_author_email ) ) {
comment_author_email_link ();
echo '<br />' ;
}
2014-09-28 08:38:18 +02:00
$author_ip = get_comment_author_IP ();
if ( $author_ip ) {
$author_ip_url = add_query_arg ( array ( 's' => $author_ip , 'mode' => 'detail' ), 'edit-comments.php' );
if ( 'spam' == $comment_status ) {
$author_ip_url = add_query_arg ( 'comment_status' , 'spam' , $author_ip_url );
}
printf ( '<a href="%s">%s</a>' , esc_url ( $author_ip_url ), $author_ip );
}
2010-10-25 04:57:43 +02:00
}
}
2014-05-30 18:59:14 +02:00
public function column_date () {
2015-03-23 03:14:27 +01:00
return get_comment_date ( __ ( 'Y/m/d \a\t g:i a' ) );
2010-10-25 04:57:43 +02:00
}
2014-05-30 18:59:14 +02:00
public function column_response () {
2012-09-04 18:29:28 +02:00
$post = get_post ();
2010-10-25 04:57:43 +02:00
if ( isset ( $this -> pending_count [ $post -> ID ] ) ) {
$pending_comments = $this -> pending_count [ $post -> ID ];
} else {
$_pending_count_temp = get_pending_comments_num ( array ( $post -> ID ) );
$pending_comments = $this -> pending_count [ $post -> ID ] = $_pending_count_temp [ $post -> ID ];
}
if ( current_user_can ( 'edit_post' , $post -> ID ) ) {
$post_link = " <a href=' " . get_edit_post_link ( $post -> ID ) . " '> " ;
2015-04-20 09:39:25 +02:00
$post_link .= esc_html ( get_the_title ( $post -> ID ) ) . '</a>' ;
2010-10-25 04:57:43 +02:00
} else {
2015-04-20 09:39:25 +02:00
$post_link = esc_html ( get_the_title ( $post -> ID ) );
2010-10-25 04:57:43 +02:00
}
echo '<div class="response-links"><span class="post-com-count-wrapper">' ;
echo $post_link . '<br />' ;
$this -> comments_bubble ( $post -> ID , $pending_comments );
echo '</span> ' ;
2011-10-03 16:03:01 +02:00
$post_type_object = get_post_type_object ( $post -> post_type );
echo " <a href=' " . get_permalink ( $post -> ID ) . " '> " . $post_type_object -> labels -> view_item . '</a>' ;
2010-10-25 04:57:43 +02:00
echo '</div>' ;
if ( 'attachment' == $post -> post_type && ( $thumb = wp_get_attachment_image ( $post -> ID , array ( 80 , 60 ), true ) ) )
echo $thumb ;
}
2014-05-19 01:59:15 +02:00
public function column_default ( $comment , $column_name ) {
2013-11-13 20:47:10 +01:00
/**
* 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 .
*/
2010-10-25 04:57:43 +02:00
do_action ( 'manage_comments_custom_column' , $column_name , $comment -> comment_ID );
}
}
2010-10-26 06:48:03 +02:00
/**
* Post Comments List Table class .
*
* @ package WordPress
* @ subpackage List_Table
* @ since 3.1 . 0
2011-01-16 22:47:24 +01:00
* @ access private
2010-10-26 06:48:03 +02:00
*
* @ see WP_Comments_Table
*/
2010-11-04 09:07:03 +01:00
class WP_Post_Comments_List_Table extends WP_Comments_List_Table {
2010-10-26 06:48:03 +02:00
2014-07-14 00:09:16 +02:00
protected function get_column_info () {
2014-12-21 00:27:25 +01:00
return array (
2010-12-22 20:03:43 +01:00
array (
2014-12-21 00:27:25 +01:00
'author' => __ ( 'Author' ),
'comment' => _x ( 'Comment' , 'column name' ),
2010-12-22 20:03:43 +01:00
),
array (),
array (),
2010-10-26 06:48:03 +02:00
);
}
2011-01-06 05:11:14 +01:00
2014-07-14 00:09:16 +02:00
protected function get_table_classes () {
2010-12-22 20:03:43 +01:00
$classes = parent :: get_table_classes ();
$classes [] = 'comments-box' ;
return $classes ;
}
2011-01-06 05:11:14 +01:00
2014-05-19 01:59:15 +02:00
public function display ( $output_empty = false ) {
2014-05-13 07:04:14 +02:00
$singular = $this -> _args [ 'singular' ];
2011-01-11 23:42:22 +01:00
2011-01-21 22:17:12 +01:00
wp_nonce_field ( " fetch-list- " . get_class ( $this ), '_ajax_fetch_list_nonce' );
2010-12-22 20:03:43 +01:00
?>
2014-01-26 21:28:12 +01:00
< table class = " <?php echo implode( ' ', $this->get_table_classes () ); ?> " style = " display:none; " >
2014-05-13 07:04:14 +02:00
< tbody id = " the-comment-list " < ? php
if ( $singular ) {
echo " data-wp-lists='list: $singular ' " ;
} ?> >
< ? php if ( ! $output_empty ) {
$this -> display_rows_or_placeholder ();
} ?>
2010-12-22 20:03:43 +01:00
</ tbody >
</ table >
< ? php
2010-10-26 06:48:03 +02:00
}
2011-01-06 05:11:14 +01:00
2014-05-19 01:59:15 +02:00
public function get_per_page ( $comment_status = false ) {
2010-12-29 16:58:46 +01:00
return 10 ;
}
2010-10-26 06:48:03 +02:00
}