wp/wp-admin/includes/class-wp-comments-list-table.php
changeset 5 5e2f62d02dcd
parent 0 d970ebf37754
child 7 cf61fcea0001
--- a/wp/wp-admin/includes/class-wp-comments-list-table.php	Mon Jun 08 16:11:51 2015 +0000
+++ b/wp/wp-admin/includes/class-wp-comments-list-table.php	Tue Jun 09 03:35:32 2015 +0200
@@ -17,11 +17,25 @@
  */
 class WP_Comments_List_Table extends WP_List_Table {
 
-	var $checkbox = true;
+	public $checkbox = true;
+
+	public $pending_count = array();
+
+	public $extra_items;
+
+	private $user_can;
 
-	var $pending_count = array();
-
-	function __construct( $args = array() ) {
+	/**
+	 * Constructor.
+	 *
+	 * @since 3.1.0
+	 * @access public
+	 *
+	 * @see WP_List_Table::__construct() for more information on default arguments.
+	 *
+	 * @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;
@@ -37,11 +51,11 @@
 		) );
 	}
 
-	function ajax_user_can() {
+	public function ajax_user_can() {
 		return current_user_can('edit_posts');
 	}
 
-	function prepare_items() {
+	public function prepare_items() {
 		global $post_id, $comment_status, $search, $comment_type;
 
 		$comment_status = isset( $_REQUEST['comment_status'] ) ? $_REQUEST['comment_status'] : 'all';
@@ -125,13 +139,21 @@
 		) );
 	}
 
-	function get_per_page( $comment_status = 'all' ) {
+	public function get_per_page( $comment_status = 'all' ) {
 		$comments_per_page = $this->get_items_per_page( 'edit_comments_per_page' );
+		/**
+		 * 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'.
+		 */
 		$comments_per_page = apply_filters( 'comments_per_page', $comments_per_page, $comment_status );
 		return $comments_per_page;
 	}
 
-	function no_items() {
+	public function no_items() {
 		global $comment_status;
 
 		if ( 'moderated' == $comment_status )
@@ -140,7 +162,7 @@
 			_e( 'No comments found.' );
 	}
 
-	function get_views() {
+	protected function get_views() {
 		global $post_id, $comment_status, $comment_type;
 
 		$status_links = array();
@@ -181,11 +203,19 @@
 			) . '</a>';
 		}
 
+		/**
+		 * 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'.
+		 */
 		$status_links = apply_filters( 'comment_status_links', $status_links );
 		return $status_links;
 	}
 
-	function get_bulk_actions() {
+	protected function get_bulk_actions() {
 		global $comment_status;
 
 		$actions = array();
@@ -193,7 +223,7 @@
 			$actions['unapprove'] = __( 'Unapprove' );
 		if ( in_array( $comment_status, array( 'all', 'moderated' ) ) )
 			$actions['approve'] = __( 'Approve' );
-		if ( in_array( $comment_status, array( 'all', 'moderated', 'approved' ) ) )
+		if ( in_array( $comment_status, array( 'all', 'moderated', 'approved', 'trash' ) ) )
 			$actions['spam'] = _x( 'Mark as Spam', 'comment' );
 
 		if ( 'trash' == $comment_status )
@@ -209,28 +239,41 @@
 		return $actions;
 	}
 
-	function extra_tablenav( $which ) {
+	protected function extra_tablenav( $which ) {
 		global $comment_status, $comment_type;
 ?>
 		<div class="alignleft actions">
 <?php
 		if ( 'top' == $which ) {
 ?>
-			<select name="comment_type">
-				<option value=""><?php _e( 'Show all comment types' ); ?></option>
+			<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
+				/**
+				 * Filter the comment types dropdown menu.
+				 *
+				 * @since 2.7.0
+				 *
+				 * @param array $comment_types An array of comment types. Accepts 'Comments', 'Pings'.
+				 */
 				$comment_types = apply_filters( 'admin_comment_types_dropdown', array(
 					'comment' => __( 'Comments' ),
 					'pings' => __( 'Pings' ),
 				) );
 
 				foreach ( $comment_types as $type => $label )
-					echo "\t<option value='" . esc_attr( $type ) . "'" . selected( $comment_type, $type, false ) . ">$label</option>\n";
+					echo "\t" . '<option value="' . esc_attr( $type ) . '"' . selected( $comment_type, $type, false ) . ">$label</option>\n";
 			?>
 			</select>
 <?php
+			/**
+			 * Fires just before the Filter submit button for comment types.
+			 *
+			 * @since 3.5.0
+			 */
 			do_action( 'restrict_manage_comments' );
-			submit_button( __( 'Filter' ), 'button', false, false, array( 'id' => 'post-query-submit' ) );
+			submit_button( __( 'Filter' ), 'button', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
 		}
 
 		if ( ( 'spam' == $comment_status || 'trash' == $comment_status ) && current_user_can( 'moderate_comments' ) ) {
@@ -238,18 +281,25 @@
 			$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>';
 	}
 
-	function current_action() {
+	public function current_action() {
 		if ( isset( $_REQUEST['delete_all'] ) || isset( $_REQUEST['delete_all2'] ) )
 			return 'delete_all';
 
 		return parent::current_action();
 	}
 
-	function get_columns() {
+	public function get_columns() {
 		global $post_id;
 
 		$columns = array();
@@ -266,34 +316,26 @@
 		return $columns;
 	}
 
-	function get_sortable_columns() {
+	protected function get_sortable_columns() {
 		return array(
 			'author'   => 'comment_author',
 			'response' => 'comment_post_ID'
 		);
 	}
 
-	function display() {
-		extract( $this->_args );
-
+	public function display() {
 		wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' );
 
 		$this->display_tablenav( 'top' );
 
 ?>
-<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
+<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>">
 	<thead>
 	<tr>
 		<?php $this->print_column_headers(); ?>
 	</tr>
 	</thead>
 
-	<tfoot>
-	<tr>
-		<?php $this->print_column_headers( false ); ?>
-	</tr>
-	</tfoot>
-
 	<tbody id="the-comment-list" data-wp-lists="list:comment">
 		<?php $this->display_rows_or_placeholder(); ?>
 	</tbody>
@@ -301,17 +343,28 @@
 	<tbody id="the-extra-comment-list" data-wp-lists="list:comment" style="display: none;">
 		<?php $this->items = $this->extra_items; $this->display_rows(); ?>
 	</tbody>
+
+	<tfoot>
+	<tr>
+		<?php $this->print_column_headers( false ); ?>
+	</tr>
+	</tfoot>
+
 </table>
 <?php
 
 		$this->display_tablenav( 'bottom' );
 	}
 
-	function single_row( $a_comment ) {
+	public function single_row( $a_comment ) {
 		global $post, $comment;
 
 		$comment = $a_comment;
-		$the_comment_class = join( ' ', get_comment_class( wp_get_comment_status( $comment->comment_ID ) ) );
+		$the_comment_class = wp_get_comment_status( $comment->comment_ID );
+		if ( ! $the_comment_class ) {
+			$the_comment_class = '';
+		}
+		$the_comment_class = join( ' ', get_comment_class( $the_comment_class, $comment->comment_ID, $comment->comment_post_ID ) );
 
 		$post = get_post( $comment->comment_post_ID );
 
@@ -322,7 +375,7 @@
 		echo "</tr>\n";
 	}
 
-	function column_cb( $comment ) {
+	public function column_cb( $comment ) {
 		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; ?>" />
@@ -330,16 +383,14 @@
 		}
 	}
 
-	function column_comment( $comment ) {
+	public function column_comment( $comment ) {
 		global $comment_status;
 		$post = get_post();
 
-		$user_can = $this->user_can;
-
 		$comment_url = esc_url( get_comment_link( $comment->comment_ID ) );
 		$the_comment_status = wp_get_comment_status( $comment->comment_ID );
 
-		if ( $user_can ) {
+		if ( $this->user_can ) {
 			$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" ) );
 
@@ -354,6 +405,10 @@
 			$delete_url = esc_url( $url . "&action=deletecomment&$del_nonce" );
 		}
 
+		echo '<div class="comment-author">';
+			$this->column_author( $comment );
+		echo '</div>';
+
 		echo '<div class="submitted-on">';
 		/* translators: 2: comment date, 3: comment time */
 		printf( __( 'Submitted on <a href="%1$s">%2$s at %3$s</a>' ), $comment_url,
@@ -371,9 +426,12 @@
 
 		echo '</div>';
 		comment_text();
-		if ( $user_can ) { ?>
+		if ( $this->user_can ) { ?>
 		<div id="inline-<?php echo $comment->comment_ID; ?>" class="hidden">
-		<textarea class="comment" rows="1" cols="1"><?php echo esc_textarea( apply_filters( 'comment_edit_pre', $comment->comment_content ) ); ?></textarea>
+		<textarea class="comment" rows="1" cols="1"><?php
+			/** This filter is documented in wp-admin/includes/comment.php */
+			echo esc_textarea( apply_filters( 'comment_edit_pre', $comment->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>
@@ -382,8 +440,8 @@
 		<?php
 		}
 
-		if ( $user_can ) {
-			// preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash
+		if ( $this->user_can ) {
+			// Preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash.
 			$actions = array(
 				'approve' => '', 'unapprove' => '',
 				'reply' => '',
@@ -393,21 +451,25 @@
 				'trash' => '', 'untrash' => '', 'delete' => ''
 			);
 
-			if ( $comment_status && 'all' != $comment_status ) { // not looking at all comments
-				if ( 'approved' == $the_comment_status )
+			// 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&amp;new=unapproved' class='vim-u vim-destructive' title='" . esc_attr__( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
-				else if ( 'unapproved' == $the_comment_status )
+				} 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&amp;new=approved' class='vim-a vim-destructive' title='" . esc_attr__( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
+				}
 			} else {
 				$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>';
 			}
 
-			if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) {
+			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' title='" . 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'>" . _x( 'Not Spam', 'comment' ) . '</a>';
-			} elseif ( 'trash' == $the_comment_status ) {
+			}
+
+			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'>" . __( 'Restore' ) . '</a>';
 			}
 
@@ -419,10 +481,15 @@
 
 			if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) {
 				$actions['edit'] = "<a href='comment.php?action=editcomment&amp;c={$comment->comment_ID}' title='" . esc_attr__( 'Edit comment' ) . "'>". __( 'Edit' ) . '</a>';
-				$actions['quickedit'] = '<a onclick="commentReply.open( \''.$comment->comment_ID.'\',\''.$post->ID.'\',\'edit\' );return false;" class="vim-q" title="'.esc_attr__( 'Quick Edit' ).'" href="#">' . __( 'Quick&nbsp;Edit' ) . '</a>';
-				$actions['reply'] = '<a onclick="commentReply.open( \''.$comment->comment_ID.'\',\''.$post->ID.'\' );return false;" class="vim-r" title="'.esc_attr__( 'Reply to this comment' ).'" href="#">' . __( 'Reply' ) . '</a>';
+
+				$format = '<a data-comment-id="%d" data-post-id="%d" data-action="%s" class="%s" title="%s" href="#">%s</a>';
+
+				$actions['quickedit'] = sprintf( $format, $comment->comment_ID, $post->ID, 'edit', 'vim-q comment-inline',esc_attr__( 'Edit this item inline' ), __( 'Quick&nbsp;Edit' ) );
+
+				$actions['reply'] = sprintf( $format, $comment->comment_ID, $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 );
 
 			$i = 0;
@@ -447,7 +514,7 @@
 		}
 	}
 
-	function column_author( $comment ) {
+	public function column_author( $comment ) {
 		global $comment_status;
 
 		$author_url = get_comment_author_url();
@@ -466,22 +533,23 @@
 				comment_author_email_link();
 				echo '<br />';
 			}
-			echo '<a href="edit-comments.php?s=';
-			comment_author_IP();
-			echo '&amp;mode=detail';
-			if ( 'spam' == $comment_status )
-				echo '&amp;comment_status=spam';
-			echo '">';
-			comment_author_IP();
-			echo '</a>';
+
+			$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 );
+			}
 		}
 	}
 
-	function column_date( $comment ) {
-		return get_comment_date( __( 'Y/m/d \a\t g:ia' ) );
+	public function column_date() {
+		return get_comment_date( __( 'Y/m/d \a\t g:i a' ) );
 	}
 
-	function column_response( $comment ) {
+	public function column_response() {
 		$post = get_post();
 
 		if ( isset( $this->pending_count[$post->ID] ) ) {
@@ -493,9 +561,9 @@
 
 		if ( current_user_can( 'edit_post', $post->ID ) ) {
 			$post_link = "<a href='" . get_edit_post_link( $post->ID ) . "'>";
-			$post_link .= get_the_title( $post->ID ) . '</a>';
+			$post_link .= esc_html( get_the_title( $post->ID ) ) . '</a>';
 		} else {
-			$post_link = get_the_title( $post->ID );
+			$post_link = esc_html( get_the_title( $post->ID ) );
 		}
 
 		echo '<div class="response-links"><span class="post-com-count-wrapper">';
@@ -509,7 +577,15 @@
 			echo $thumb;
 	}
 
-	function column_default( $comment, $column_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 );
 	}
 }
@@ -526,39 +602,42 @@
  */
 class WP_Post_Comments_List_Table extends WP_Comments_List_Table {
 
-	function get_column_info() {
-		$this->_column_headers = array(
+	protected function get_column_info() {
+		return array(
 			array(
-			'author'   => __( 'Author' ),
-			'comment'  => _x( 'Comment', 'column name' ),
+				'author'   => __( 'Author' ),
+				'comment'  => _x( 'Comment', 'column name' ),
 			),
 			array(),
 			array(),
 		);
-
-		return $this->_column_headers;
 	}
 
-	function get_table_classes() {
+	protected function get_table_classes() {
 		$classes = parent::get_table_classes();
 		$classes[] = 'comments-box';
 		return $classes;
 	}
 
-	function display( $output_empty = false ) {
-		extract( $this->_args );
+	public function display( $output_empty = false ) {
+		$singular = $this->_args['singular'];
 
 		wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' );
 ?>
-<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0" style="display:none;">
-	<tbody id="the-comment-list"<?php if ( $singular ) echo " data-wp-lists='list:$singular'"; ?>>
-		<?php if ( ! $output_empty ) $this->display_rows_or_placeholder(); ?>
+<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" style="display:none;">
+	<tbody id="the-comment-list"<?php
+		if ( $singular ) {
+			echo " data-wp-lists='list:$singular'";
+		} ?>>
+		<?php if ( ! $output_empty ) {
+			$this->display_rows_or_placeholder();
+		} ?>
 	</tbody>
 </table>
 <?php
 	}
 
-	function get_per_page( $comment_status = false ) {
+	public function get_per_page( $comment_status = false ) {
 		return 10;
 	}
 }