Changeset 32644
- Timestamp:
- 05/29/2015 02:40:52 AM (9 years ago)
- Location:
- trunk/src/wp-admin/includes
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-admin/includes/class-wp-comments-list-table.php
r32642 r32644 358 358 } 359 359 360 /** 361 * Get name of default primary column 362 * 363 * @since 4.3.0 364 * @access protected 365 * 366 * @return string 367 */ 368 protected function get_default_primary_column_name() { 369 return 'comment'; 370 } 371 360 372 public function display() { 361 373 wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); … … 414 426 $this->single_row_columns( $comment ); 415 427 echo "</tr>\n"; 428 } 429 430 /** 431 * Generate and display row actions links 432 * 433 * @since 4.3.0 434 * @access protected 435 * 436 * @param object $comment Comment being acted upon 437 * @param string $column_name Current column name 438 * @param string $primary Primary column name 439 * 440 * @return string 441 */ 442 protected function handle_row_actions( $comment, $column_name, $primary ) { 443 global $comment_status; 444 445 if ( ! $this->user_can ) { 446 return; 447 448 } 449 450 $post = get_post(); 451 452 $the_comment_status = wp_get_comment_status( $comment->comment_ID ); 453 454 $out = ''; 455 456 if( $primary === $column_name ) { 457 $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) ); 458 $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) ); 459 460 $url = "comment.php?c=$comment->comment_ID"; 461 462 $approve_url = esc_url( $url . "&action=approvecomment&$approve_nonce" ); 463 $unapprove_url = esc_url( $url . "&action=unapprovecomment&$approve_nonce" ); 464 $spam_url = esc_url( $url . "&action=spamcomment&$del_nonce" ); 465 $unspam_url = esc_url( $url . "&action=unspamcomment&$del_nonce" ); 466 $trash_url = esc_url( $url . "&action=trashcomment&$del_nonce" ); 467 $untrash_url = esc_url( $url . "&action=untrashcomment&$del_nonce" ); 468 $delete_url = esc_url( $url . "&action=deletecomment&$del_nonce" ); 469 470 // Preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash. 471 $actions = array( 472 'approve' => '', 'unapprove' => '', 473 'reply' => '', 474 'quickedit' => '', 475 'edit' => '', 476 'spam' => '', 'unspam' => '', 477 'trash' => '', 'untrash' => '', 'delete' => '' 478 ); 479 480 // Not looking at all comments. 481 if ( $comment_status && 'all' != $comment_status ) { 482 if ( 'approved' == $the_comment_status ) { 483 $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>'; 484 } elseif ( 'unapproved' == $the_comment_status ) { 485 $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>'; 486 } 487 } else { 488 $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>'; 489 $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>'; 490 } 491 492 if ( 'spam' != $the_comment_status ) { 493 $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>'; 494 } elseif ( 'spam' == $the_comment_status ) { 495 $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>'; 496 } 497 498 if ( 'trash' == $the_comment_status ) { 499 $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>'; 500 } 501 502 if ( 'spam' == $the_comment_status || 'trash' == $the_comment_status || !EMPTY_TRASH_DAYS ) { 503 $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>'; 504 } else { 505 $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>'; 506 } 507 508 if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) { 509 $actions['edit'] = "<a href='comment.php?action=editcomment&c={$comment->comment_ID}' title='" . esc_attr__( 'Edit comment' ) . "'>". __( 'Edit' ) . '</a>'; 510 511 $format = '<a data-comment-id="%d" data-post-id="%d" data-action="%s" class="%s" title="%s" href="#">%s</a>'; 512 513 $actions['quickedit'] = sprintf( $format, $comment->comment_ID, $post->ID, 'edit', 'vim-q comment-inline',esc_attr__( 'Edit this item inline' ), __( 'Quick Edit' ) ); 514 515 $actions['reply'] = sprintf( $format, $comment->comment_ID, $post->ID, 'replyto', 'vim-r comment-inline', esc_attr__( 'Reply to this comment' ), __( 'Reply' ) ); 516 } 517 518 /** This filter is documented in wp-admin/includes/dashboard.php */ 519 $actions = apply_filters( 'comment_row_actions', array_filter( $actions ), $comment ); 520 521 $i = 0; 522 $out .= '<div class="row-actions">'; 523 foreach ( $actions as $action => $link ) { 524 ++$i; 525 ( ( ( 'approve' == $action || 'unapprove' == $action ) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | '; 526 527 // Reply and quickedit need a hide-if-no-js span when not added with ajax 528 if ( ( 'reply' == $action || 'quickedit' == $action ) && ! defined('DOING_AJAX') ) 529 $action .= ' hide-if-no-js'; 530 elseif ( ( $action == 'untrash' && $the_comment_status == 'trash' ) || ( $action == 'unspam' && $the_comment_status == 'spam' ) ) { 531 if ( '1' == get_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', true ) ) 532 $action .= ' approve'; 533 else 534 $action .= ' unapprove'; 535 } 536 537 $out .= "<span class='$action'>$sep$link</span>"; 538 } 539 $out .= '</div>'; 540 } 541 542 return $out; 416 543 } 417 544 … … 470 597 <?php 471 598 } 472 473 if ( $this->user_can ) {474 $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) );475 $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) );476 477 $url = "comment.php?c=$comment->comment_ID";478 479 $approve_url = esc_url( $url . "&action=approvecomment&$approve_nonce" );480 $unapprove_url = esc_url( $url . "&action=unapprovecomment&$approve_nonce" );481 $spam_url = esc_url( $url . "&action=spamcomment&$del_nonce" );482 $unspam_url = esc_url( $url . "&action=unspamcomment&$del_nonce" );483 $trash_url = esc_url( $url . "&action=trashcomment&$del_nonce" );484 $untrash_url = esc_url( $url . "&action=untrashcomment&$del_nonce" );485 $delete_url = esc_url( $url . "&action=deletecomment&$del_nonce" );486 487 // Preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash.488 $actions = array(489 'approve' => '', 'unapprove' => '',490 'reply' => '',491 'quickedit' => '',492 'edit' => '',493 'spam' => '', 'unspam' => '',494 'trash' => '', 'untrash' => '', 'delete' => ''495 );496 497 // Not looking at all comments.498 if ( $comment_status && 'all' != $comment_status ) {499 if ( 'approved' == $the_comment_status ) {500 $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>';501 } elseif ( 'unapproved' == $the_comment_status ) {502 $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>';503 }504 } else {505 $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>';506 $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>';507 }508 509 if ( 'spam' != $the_comment_status ) {510 $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>';511 } elseif ( 'spam' == $the_comment_status ) {512 $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>';513 }514 515 if ( 'trash' == $the_comment_status ) {516 $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>';517 }518 519 if ( 'spam' == $the_comment_status || 'trash' == $the_comment_status || !EMPTY_TRASH_DAYS ) {520 $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>';521 } else {522 $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>';523 }524 525 if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) {526 $actions['edit'] = "<a href='comment.php?action=editcomment&c={$comment->comment_ID}' title='" . esc_attr__( 'Edit comment' ) . "'>". __( 'Edit' ) . '</a>';527 528 $format = '<a data-comment-id="%d" data-post-id="%d" data-action="%s" class="%s" title="%s" href="#">%s</a>';529 530 $actions['quickedit'] = sprintf( $format, $comment->comment_ID, $post->ID, 'edit', 'vim-q comment-inline',esc_attr__( 'Edit this item inline' ), __( 'Quick Edit' ) );531 532 $actions['reply'] = sprintf( $format, $comment->comment_ID, $post->ID, 'replyto', 'vim-r comment-inline', esc_attr__( 'Reply to this comment' ), __( 'Reply' ) );533 }534 535 /** This filter is documented in wp-admin/includes/dashboard.php */536 $actions = apply_filters( 'comment_row_actions', array_filter( $actions ), $comment );537 538 $i = 0;539 echo '<div class="row-actions">';540 foreach ( $actions as $action => $link ) {541 ++$i;542 ( ( ( 'approve' == $action || 'unapprove' == $action ) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | ';543 544 // Reply and quickedit need a hide-if-no-js span when not added with ajax545 if ( ( 'reply' == $action || 'quickedit' == $action ) && ! defined('DOING_AJAX') )546 $action .= ' hide-if-no-js';547 elseif ( ( $action == 'untrash' && $the_comment_status == 'trash' ) || ( $action == 'unspam' && $the_comment_status == 'spam' ) ) {548 if ( '1' == get_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', true ) )549 $action .= ' approve';550 else551 $action .= ' unapprove';552 }553 554 echo "<span class='$action'>$sep$link</span>";555 }556 echo '</div>';557 }558 599 } 559 600 -
trunk/src/wp-admin/includes/class-wp-links-list-table.php
r32642 r32644 122 122 123 123 /** 124 * Get name of default primary column 125 * 126 * @since 4.3.0 127 * @access protected 128 * 129 * @return string 130 */ 131 protected function get_default_primary_column_name() { 132 return 'name'; 133 } 134 135 /** 124 136 * 125 137 * @global int $cat_id … … 143 155 <?php 144 156 145 list( $columns, $hidden ) = $this->get_column_info();157 list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); 146 158 147 159 foreach ( $columns as $column_name => $column_display_name ) { 148 $class = "class='column-$column_name'"; 160 $classes = "$column_name column-$column_name"; 161 if ( $primary === $column_name ) { 162 $classes .= ' has-row-actions column-primary'; 163 } 149 164 150 165 $style = ''; 151 if ( in_array( $column_name, $hidden ) ) 166 if ( in_array( $column_name, $hidden ) ) { 152 167 $style = ' style="display:none;"'; 153 154 $attributes = $class . $style; 155 156 switch ( $column_name ) { 157 case 'cb': ?> 158 <th scope="row" class="check-column"> 159 <label class="screen-reader-text" for="cb-select-<?php echo $link->link_id; ?>"><?php echo sprintf( __( 'Select %s' ), $link->link_name ); ?></label> 160 <input type="checkbox" name="linkcheck[]" id="cb-select-<?php echo $link->link_id; ?>" value="<?php echo esc_attr( $link->link_id ); ?>" /> 161 </th> 162 <?php 163 break; 164 165 case 'name': 166 echo "<td $attributes><strong><a class='row-title' href='$edit_link' title='" . esc_attr( sprintf( __( 'Edit “%s”' ), $link->link_name ) ) . "'>$link->link_name</a></strong><br />"; 167 168 $actions = array(); 169 $actions['edit'] = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>'; 170 $actions['delete'] = "<a class='submitdelete' href='" . wp_nonce_url( "link.php?action=delete&link_id=$link->link_id", 'delete-bookmark_' . $link->link_id ) . "' onclick=\"if ( confirm( '" . esc_js( sprintf( __( "You are about to delete this link '%s'\n 'Cancel' to stop, 'OK' to delete." ), $link->link_name ) ) . "' ) ) { return true;}return false;\">" . __( 'Delete' ) . "</a>"; 171 echo $this->row_actions( $actions ); 172 173 echo '</td>'; 174 break; 175 case 'url': 176 echo "<td $attributes><a href='$link->link_url' title='". esc_attr( sprintf( __( 'Visit %s' ), $link->link_name ) )."'>$short_url</a></td>"; 177 break; 178 case 'categories': 179 ?><td <?php echo $attributes ?>><?php 180 $cat_names = array(); 181 foreach ( $link->link_category as $category ) { 182 $cat = get_term( $category, 'link_category', OBJECT, 'display' ); 183 if ( is_wp_error( $cat ) ) 184 echo $cat->get_error_message(); 185 $cat_name = $cat->name; 186 if ( $cat_id != $category ) 187 $cat_name = "<a href='link-manager.php?cat_id=$category'>$cat_name</a>"; 188 $cat_names[] = $cat_name; 189 } 190 echo implode( ', ', $cat_names ); 191 ?></td><?php 192 break; 193 case 'rel': 194 ?><td <?php echo $attributes ?>><?php echo empty( $link->link_rel ) ? '<br />' : $link->link_rel; ?></td><?php 195 break; 196 case 'visible': 197 ?><td <?php echo $attributes ?>><?php echo $visible; ?></td><?php 198 break; 199 case 'rating': 200 ?><td <?php echo $attributes ?>><?php echo $rating; ?></td><?php 201 break; 202 default: 203 ?> 204 <td <?php echo $attributes ?>><?php 168 } 169 170 $attributes = "class='$classes'$style"; 171 172 if ( 'cb' === $column_name ) { 173 ?> 174 <th scope="row" class="check-column"> 175 <label class="screen-reader-text" for="cb-select-<?php echo $link->link_id; ?>"><?php echo sprintf( __( 'Select %s' ), $link->link_name ); ?></label> 176 <input type="checkbox" name="linkcheck[]" id="cb-select-<?php echo $link->link_id; ?>" value="<?php echo esc_attr( $link->link_id ); ?>" /> 177 </th> 178 <?php 179 } else { 180 echo "<td $attributes>"; 181 182 switch ( $column_name ) { 183 case 'name': 184 echo "<strong><a class='row-title' href='$edit_link' title='" . esc_attr( sprintf( __( 'Edit “%s”' ), $link->link_name ) ) . "'>$link->link_name</a></strong><br />"; 185 break; 186 case 'url': 187 echo "<a href='$link->link_url' title='". esc_attr( sprintf( __( 'Visit %s' ), $link->link_name ) )."'>$short_url</a>"; 188 break; 189 case 'categories': 190 $cat_names = array(); 191 foreach ( $link->link_category as $category ) { 192 $cat = get_term( $category, 'link_category', OBJECT, 'display' ); 193 if ( is_wp_error( $cat ) ) 194 echo $cat->get_error_message(); 195 $cat_name = $cat->name; 196 if ( $cat_id != $category ) 197 $cat_name = "<a href='link-manager.php?cat_id=$category'>$cat_name</a>"; 198 $cat_names[] = $cat_name; 199 } 200 echo implode( ', ', $cat_names ); 201 break; 202 case 'rel': 203 echo empty( $link->link_rel ) ? '<br />' : $link->link_rel; 204 break; 205 case 'visible': 206 echo $visible; 207 break; 208 case 'rating': 209 echo $rating; 210 break; 211 default: 205 212 /** 206 213 * Fires for each registered custom link column. … … 212 219 */ 213 220 do_action( 'manage_link_custom_column', $column_name, $link->link_id ); 214 ?></td> 215 <?php 216 break; 221 break; 222 } 223 224 echo $this->handle_row_actions( $link, $column_name, $primary ); 225 echo '</td>'; 217 226 } 218 227 } … … 222 231 } 223 232 } 233 234 /** 235 * Generate and display row actions links 236 * 237 * @since 4.3 238 * @access protected 239 * 240 * @param object $link Link being acted upon 241 * @param string $column_name Current column name 242 * @param string $primary Primary column name 243 * 244 * @return string 245 */ 246 protected function handle_row_actions( $link, $column_name, $primary ) { 247 if( $primary === $column_name ) { 248 $edit_link = get_edit_bookmark_link( $link ); 249 250 $actions = array(); 251 $actions['edit'] = '<a href="' . $edit_link . '">' . __('Edit') . '</a>'; 252 $actions['delete'] = "<a class='submitdelete' href='" . wp_nonce_url("link.php?action=delete&link_id=$link->link_id", 'delete-bookmark_' . $link->link_id) . "' onclick=\"if ( confirm( '" . esc_js(sprintf(__("You are about to delete this link '%s'\n 'Cancel' to stop, 'OK' to delete."), $link->link_name)) . "' ) ) { return true;}return false;\">" . __('Delete') . "</a>"; 253 return $this->row_actions($actions); 254 } 255 } 224 256 } -
trunk/src/wp-admin/includes/class-wp-list-table.php
r32642 r32644 796 796 797 797 /** 798 * Get name of default primary column 799 * 800 * @since 4.3.0 801 * @access protected 802 * 803 * @return string 804 */ 805 protected function get_default_primary_column_name() { 806 return ''; 807 } 808 809 /** 810 * Get name of primary column. 811 * 812 * @since 4.3.0 813 * @access protected 814 * 815 * @return string Filtered name of primary column 816 */ 817 protected function get_primary_column_name() { 818 $columns = $this->get_columns(); 819 $default = $this->get_default_primary_column_name(); 820 /** 821 * Filter the name of the primary column for the current list table, with context as argument (eg: 'plugins'). 822 * 823 * @since 4.3.0 824 * 825 * @param string $default Column name default for the specific list table (eg: 'name') 826 * @param string $context Screen ID for specific list table (eg: 'plugins') 827 */ 828 $column = apply_filters( 'list_table_primary_column', $default, $this->screen->id ); 829 830 if ( empty( $column ) || ! isset( $columns[ $column ] ) ) { 831 $column = $default; 832 } 833 834 return $column; 835 } 836 837 /** 798 838 * Get a list of all, hidden and sortable columns, with filter applied 799 839 * … … 835 875 } 836 876 837 $this->_column_headers = array( $columns, $hidden, $sortable ); 877 $primary = $this->get_primary_column_name(); 878 $this->_column_headers = array( $columns, $hidden, $sortable, $primary ); 838 879 839 880 return $this->_column_headers; … … 1063 1104 */ 1064 1105 protected function single_row_columns( $item ) { 1065 list( $columns, $hidden ) = $this->get_column_info();1106 list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); 1066 1107 1067 1108 foreach ( $columns as $column_name => $column_display_name ) { 1068 $class = "class='$column_name column-$column_name'"; 1109 $classes = "$column_name column-$column_name"; 1110 if ( $primary === $column_name ) { 1111 $classes .= ' has-row-actions column-primary'; 1112 } 1069 1113 1070 1114 $style = ''; 1071 if ( in_array( $column_name, $hidden ) ) 1115 if ( in_array( $column_name, $hidden ) ) { 1072 1116 $style = ' style="display:none;"'; 1073 1074 $attributes = "$class$style"; 1117 } 1118 1119 $attributes = "class='$classes'$style"; 1075 1120 1076 1121 if ( 'cb' == $column_name ) { … … 1082 1127 echo "<td $attributes>"; 1083 1128 echo call_user_func( array( $this, 'column_' . $column_name ), $item ); 1129 echo $this->handle_row_actions( $item, $column_name, $primary ); 1084 1130 echo "</td>"; 1085 1131 } … … 1087 1133 echo "<td $attributes>"; 1088 1134 echo $this->column_default( $item, $column_name ); 1135 echo $this->handle_row_actions( $item, $column_name, $primary ); 1089 1136 echo "</td>"; 1090 1137 } 1091 1138 } 1092 1139 } 1140 1141 /** 1142 * Generate and display row actions links 1143 * 1144 * @since 4.3.0 1145 * @access protected 1146 * 1147 * @param object $item Item being acted upon 1148 * @param string $column_name Current column name 1149 * @param string $primary Primary column name 1150 * 1151 * @return string 1152 */ 1153 protected function handle_row_actions( $item, $column_name, $primary ) { 1154 return ''; 1155 } 1093 1156 1094 1157 /** -
trunk/src/wp-admin/includes/class-wp-media-list-table.php
r32642 r32644 309 309 <?php 310 310 311 list( $columns, $hidden ) = $this->get_column_info(); 311 list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); 312 312 313 foreach ( $columns as $column_name => $column_display_name ) { 313 $class = "class='$column_name column-$column_name'"; 314 $classes = "$column_name column-$column_name"; 315 if ( $primary === $column_name ) { 316 $classes .= ' has-row-actions column-primary'; 317 } 314 318 315 319 $style = ''; 316 if ( in_array( $column_name, $hidden ) ) 320 if ( in_array( $column_name, $hidden ) ) { 317 321 $style = ' style="display:none;"'; 318 319 $attributes = $class . $style; 320 321 switch ( $column_name ) { 322 323 case 'cb': 322 } 323 324 $attributes = "class='$classes'$style"; 325 326 if ( 'cb' === $column_name ) { 324 327 ?> 325 328 <th scope="row" class="check-column"> … … 330 333 </th> 331 334 <?php 332 break; 333 334 case 'icon': 335 list( $mime ) = explode( '/', $post->post_mime_type ); 336 $attributes = 'class="column-icon media-icon ' . $mime . '-icon"' . $style; 337 ?> 338 <td <?php echo $attributes ?>><?php 339 if ( $thumb = wp_get_attachment_image( $post->ID, array( 80, 60 ), true ) ) { 340 if ( $this->is_trash || ! $user_can_edit ) { 341 echo $thumb; 335 } else { 336 echo "<td $attributes>"; 337 338 switch ( $column_name ) { 339 case 'icon': 340 list( $mime ) = explode( '/', $post->post_mime_type ); 341 $attributes = 'class="column-icon media-icon ' . $mime . '-icon"' . $style; 342 343 if ( $thumb = wp_get_attachment_image( $post->ID, array( 80, 60 ), true ) ) { 344 if ( $this->is_trash || ! $user_can_edit ) { 345 echo $thumb; 346 } else { ?> 347 <a href="<?php echo get_edit_post_link( $post->ID ); ?>" title="<?php echo esc_attr( sprintf( __( 'Edit “%s”' ), $att_title ) ); ?>"> 348 <?php echo $thumb; ?> 349 </a><?php 350 } 351 } 352 break; 353 354 case 'title': 355 ?> 356 <strong> 357 <?php if ( $this->is_trash || ! $user_can_edit ) { 358 echo $att_title; 359 } else { ?> 360 <a href="<?php echo get_edit_post_link( $post->ID ); ?>" 361 title="<?php echo esc_attr( sprintf( __( 'Edit “%s”' ), $att_title ) ); ?>"> 362 <?php echo $att_title; ?></a> 363 <?php } 364 _media_states( $post ); ?></strong> 365 <p class="filename"><?php echo wp_basename( $post->guid ); ?></p> 366 <?php 367 break; 368 369 case 'author': 370 printf( '<a href="%s">%s</a>', 371 esc_url( add_query_arg( array( 'author' => get_the_author_meta('ID') ), 'upload.php' ) ), 372 get_the_author() 373 ); 374 375 break; 376 377 case 'desc': 378 echo has_excerpt() ? $post->post_excerpt : ''; 379 break; 380 381 case 'date': 382 if ( '0000-00-00 00:00:00' == $post->post_date ) { 383 $h_time = __( 'Unpublished' ); 342 384 } else { 343 ?> 344 <a href="<?php echo get_edit_post_link( $post->ID ); ?>" title="<?php echo esc_attr( sprintf( __( 'Edit “%s”' ), $att_title ) ); ?>"> 345 <?php echo $thumb; ?> 346 </a> 347 348 <?php } 349 } 350 ?> 351 </td> 352 <?php 353 break; 354 355 case 'title': 356 ?> 357 <td <?php echo $attributes ?>><strong> 358 <?php if ( $this->is_trash || ! $user_can_edit ) { 359 echo $att_title; 360 } else { ?> 361 <a href="<?php echo get_edit_post_link( $post->ID ); ?>" 362 title="<?php echo esc_attr( sprintf( __( 'Edit “%s”' ), $att_title ) ); ?>"> 363 <?php echo $att_title; ?></a> 364 <?php }; 365 _media_states( $post ); ?></strong> 366 <p class="filename"><?php echo wp_basename( $post->guid ); ?></p> 367 <?php 368 echo $this->row_actions( $this->_get_row_actions( $post, $att_title ) ); 369 ?> 370 </td> 371 <?php 372 break; 373 374 case 'author': 375 ?> 376 <td <?php echo $attributes ?>><?php 377 printf( '<a href="%s">%s</a>', 378 esc_url( add_query_arg( array( 'author' => get_the_author_meta('ID') ), 'upload.php' ) ), 379 get_the_author() 380 ); 381 ?></td> 382 <?php 383 break; 384 385 case 'desc': 386 ?> 387 <td <?php echo $attributes ?>><?php echo has_excerpt() ? $post->post_excerpt : ''; ?></td> 388 <?php 389 break; 390 391 case 'date': 392 if ( '0000-00-00 00:00:00' == $post->post_date ) { 393 $h_time = __( 'Unpublished' ); 394 } else { 395 $m_time = $post->post_date; 396 $time = get_post_time( 'G', true, $post, false ); 397 if ( ( abs( $t_diff = time() - $time ) ) < DAY_IN_SECONDS ) { 398 if ( $t_diff < 0 ) 399 $h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) ); 385 $m_time = $post->post_date; 386 $time = get_post_time( 'G', true, $post, false ); 387 if ( ( abs( $t_diff = time() - $time ) ) < DAY_IN_SECONDS ) { 388 if ( $t_diff < 0 ) 389 $h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) ); 390 else 391 $h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) ); 392 } else { 393 $h_time = mysql2date( __( 'Y/m/d' ), $m_time ); 394 } 395 } 396 397 echo $h_time; 398 break; 399 400 case 'parent': 401 if ( $post->post_parent > 0 ) 402 $parent = get_post( $post->post_parent ); 400 403 else 401 $h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) ); 402 } else { 403 $h_time = mysql2date( __( 'Y/m/d' ), $m_time ); 404 } 405 } 406 ?> 407 <td <?php echo $attributes ?>><?php echo $h_time ?></td> 408 <?php 409 break; 410 411 case 'parent': 412 if ( $post->post_parent > 0 ) 413 $parent = get_post( $post->post_parent ); 414 else 415 $parent = false; 416 417 if ( $parent ) { 418 $title = _draft_or_post_title( $post->post_parent ); 419 $parent_type = get_post_type_object( $parent->post_type ); 420 ?> 421 <td <?php echo $attributes ?>><strong> 422 <?php if ( $parent_type && $parent_type->show_ui && current_user_can( 'edit_post', $post->post_parent ) ) { ?> 423 <a href="<?php echo get_edit_post_link( $post->post_parent ); ?>"> 424 <?php echo $title ?></a><?php 404 $parent = false; 405 406 if ( $parent ) { 407 $title = _draft_or_post_title( $post->post_parent ); 408 $parent_type = get_post_type_object( $parent->post_type ); 409 ?> 410 <strong> 411 <?php if ( $parent_type && $parent_type->show_ui && current_user_can( 'edit_post', $post->post_parent ) ) { ?> 412 <a href="<?php echo get_edit_post_link( $post->post_parent ); ?>"> 413 <?php echo $title ?></a><?php 414 } else { 415 echo $title; 416 } ?></strong>, 417 <?php echo get_the_time( __( 'Y/m/d' ) ); ?><br /> 418 <?php 419 if ( $user_can_edit ): 420 $detach_url = add_query_arg( array( 421 'parent_post_id' => $post->post_parent, 422 'media[]' => $post->ID, 423 '_wpnonce' => wp_create_nonce( 'bulk-' . $this->_args['plural'] ) 424 ), 'upload.php' ); ?> 425 <a class="hide-if-no-js detach-from-parent" href="<?php echo $detach_url ?>"><?php _e( 'Detach' ); ?></a> 426 <?php endif; 425 427 } else { 426 echo $title; 427 } ?></strong>, 428 <?php echo get_the_time( __( 'Y/m/d' ) ); ?><br /> 429 <?php 430 if ( $user_can_edit ): 431 $detach_url = add_query_arg( array( 432 'parent_post_id' => $post->post_parent, 433 'media[]' => $post->ID, 434 '_wpnonce' => wp_create_nonce( 'bulk-' . $this->_args['plural'] ) 435 ), 'upload.php' ); ?> 436 <a class="hide-if-no-js detach-from-parent" href="<?php echo $detach_url ?>"><?php _e( 'Detach' ); ?></a> 437 <?php endif; ?> 438 </td> 439 <?php 440 } else { 441 ?> 442 <td <?php echo $attributes ?>><?php _e( '(Unattached)' ); ?><br /> 443 <?php if ( $user_can_edit ) { ?> 444 <a class="hide-if-no-js" 445 onclick="findPosts.open( 'media[]','<?php echo $post->ID ?>' ); return false;" 446 href="#the-list"> 447 <?php _e( 'Attach' ); ?></a> 448 <?php } ?></td> 449 <?php 450 } 451 break; 452 453 case 'comments': 454 $attributes = 'class="comments column-comments num"' . $style; 455 ?> 456 <td <?php echo $attributes ?>> 457 <div class="post-com-count-wrapper"> 458 <?php 459 $pending_comments = get_pending_comments_num( $post->ID ); 460 461 $this->comments_bubble( $post->ID, $pending_comments ); 462 ?> 463 </div> 464 </td> 465 <?php 466 break; 467 468 default: 469 if ( 'categories' == $column_name ) 470 $taxonomy = 'category'; 471 elseif ( 'tags' == $column_name ) 472 $taxonomy = 'post_tag'; 473 elseif ( 0 === strpos( $column_name, 'taxonomy-' ) ) 474 $taxonomy = substr( $column_name, 9 ); 475 else 476 $taxonomy = false; 477 478 if ( $taxonomy ) { 479 echo '<td ' . $attributes . '>'; 480 if ( $terms = get_the_terms( $post->ID, $taxonomy ) ) { 481 $out = array(); 482 foreach ( $terms as $t ) { 483 $posts_in_term_qv = array(); 484 $posts_in_term_qv['taxonomy'] = $taxonomy; 485 $posts_in_term_qv['term'] = $t->slug; 486 487 $out[] = sprintf( '<a href="%s">%s</a>', 488 esc_url( add_query_arg( $posts_in_term_qv, 'upload.php' ) ), 489 esc_html( sanitize_term_field( 'name', $t->name, $t->term_id, $taxonomy, 'display' ) ) 490 ); 491 } 492 /* translators: used between list items, there is a space after the comma */ 493 echo join( __( ', ' ), $out ); 494 } else { 495 echo '—'; 496 } 497 echo '</td>'; 498 break; 499 } 500 ?> 501 <td <?php echo $attributes ?>><?php 502 /** 503 * Fires for each custom column in the Media list table. 504 * 505 * Custom columns are registered using the 'manage_media_columns' filter. 506 * 507 * @since 2.5.0 508 * 509 * @param string $column_name Name of the custom column. 510 * @param int $post_id Attachment ID. 511 */ 512 do_action( 'manage_media_custom_column', $column_name, $post->ID ); 513 ?></td> 514 <?php 515 break; 428 _e( '(Unattached)' ); ?><br /> 429 <?php if ( $user_can_edit ) { ?> 430 <a class="hide-if-no-js" 431 onclick="findPosts.open( 'media[]','<?php echo $post->ID ?>' ); return false;" 432 href="#the-list"> 433 <?php _e( 'Attach' ); ?></a> 434 <?php } 435 } 436 437 break; 438 439 case 'comments': 440 echo '<div class="post-com-count-wrapper">'; 441 442 $pending_comments = get_pending_comments_num( $post->ID ); 443 $this->comments_bubble( $post->ID, $pending_comments ); 444 445 echo '</div>'; 446 447 break; 448 449 default: 450 if ( 'categories' == $column_name ) 451 $taxonomy = 'category'; 452 elseif ( 'tags' == $column_name ) 453 $taxonomy = 'post_tag'; 454 elseif ( 0 === strpos( $column_name, 'taxonomy-' ) ) 455 $taxonomy = substr( $column_name, 9 ); 456 else 457 $taxonomy = false; 458 459 if ( $taxonomy ) { 460 if ( $terms = get_the_terms( $post->ID, $taxonomy ) ) { 461 $out = array(); 462 foreach ( $terms as $t ) { 463 $posts_in_term_qv = array(); 464 $posts_in_term_qv['taxonomy'] = $taxonomy; 465 $posts_in_term_qv['term'] = $t->slug; 466 467 $out[] = sprintf( '<a href="%s">%s</a>', 468 esc_url( add_query_arg( $posts_in_term_qv, 'upload.php' ) ), 469 esc_html( sanitize_term_field( 'name', $t->name, $t->term_id, $taxonomy, 'display' ) ) 470 ); 471 } 472 /* translators: used between list items, there is a space after the comma */ 473 echo join( __( ', ' ), $out ); 474 } else { 475 echo '—'; 476 } 477 478 break; 479 } 480 481 /** 482 * Fires for each custom column in the Media list table. 483 * 484 * Custom columns are registered using the 'manage_media_columns' filter. 485 * 486 * @since 2.5.0 487 * 488 * @param string $column_name Name of the custom column. 489 * @param int $post_id Attachment ID. 490 */ 491 do_action( 'manage_media_custom_column', $column_name, $post->ID ); 492 break; 493 } 494 495 if( $primary === $column_name ) { 496 echo $this->row_actions( $this->_get_row_actions( $post, $att_title ) ); 497 } 498 499 echo '</td>'; 516 500 } 517 501 } … … 519 503 </tr> 520 504 <?php endwhile; 505 } 506 507 /** 508 * Get name of default primary column 509 * 510 * @since 4.3.0 511 * @access protected 512 * 513 * @return string 514 */ 515 protected function get_default_primary_column_name() { 516 return 'title'; 521 517 } 522 518 -
trunk/src/wp-admin/includes/class-wp-ms-sites-list-table.php
r32642 r32644 247 247 $blogname = ( is_subdomain_install() ) ? str_replace( '.' . get_current_site()->domain, '', $blog['domain'] ) : $blog['path']; 248 248 249 list( $columns, $hidden ) = $this->get_column_info();249 list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); 250 250 251 251 foreach ( $columns as $column_name => $column_display_name ) { 252 $classes = "$column_name column-$column_name"; 253 if ( $primary === $column_name ) { 254 $classes .= ' has-row-actions column-primary'; 255 } 256 252 257 $style = ''; 253 if ( in_array( $column_name, $hidden ) ) 258 if ( in_array( $column_name, $hidden ) ) { 254 259 $style = ' style="display:none;"'; 255 256 switch ( $column_name ) { 257 case 'cb': ?> 258 <th scope="row" class="check-column"> 259 <?php if ( ! is_main_site( $blog['blog_id'] ) ) : ?> 260 <label class="screen-reader-text" for="blog_<?php echo $blog['blog_id']; ?>"><?php printf( __( 'Select %s' ), $blogname ); ?></label> 261 <input type="checkbox" id="blog_<?php echo $blog['blog_id'] ?>" name="allblogs[]" value="<?php echo esc_attr( $blog['blog_id'] ) ?>" /> 262 <?php endif; ?> 263 </th> 264 <?php 265 break; 266 267 case 'id':?> 268 <th scope="row"> 269 <?php echo $blog['blog_id'] ?> 270 </th> 271 <?php 272 break; 273 274 case 'blogname': 275 echo "<td class='column-$column_name $column_name'$style>"; ?> 260 } 261 262 $attributes = "class='$classes'$style"; 263 264 if ( 'cb' === $column_name ) { 265 ?> 266 <th scope="row" class="check-column"> 267 <?php if ( ! is_main_site( $blog['blog_id'] ) ) : ?> 268 <label class="screen-reader-text" for="blog_<?php echo $blog['blog_id']; ?>"><?php printf( __( 'Select %s' ), $blogname ); ?></label> 269 <input type="checkbox" id="blog_<?php echo $blog['blog_id'] ?>" name="allblogs[]" value="<?php echo esc_attr( $blog['blog_id'] ) ?>" /> 270 <?php endif; ?> 271 </th> 272 <?php 273 } elseif ( 'id' === $column_name ) { 274 ?> 275 <th scope="row"> 276 <?php echo $blog['blog_id'] ?> 277 </th> 278 <?php 279 } else { 280 echo "<td $attributes>"; 281 282 switch ( $column_name ) { 283 case 'blogname': 284 ?> 276 285 <a href="<?php echo esc_url( network_admin_url( 'site-info.php?id=' . $blog['blog_id'] ) ); ?>" class="edit"><?php echo $blogname . $blog_state; ?></a> 277 286 <?php … … 282 291 restore_current_blog(); 283 292 } 284 285 // Preordered. 286 $actions = array( 287 'edit' => '', 'backend' => '', 288 'activate' => '', 'deactivate' => '', 289 'archive' => '', 'unarchive' => '', 290 'spam' => '', 'unspam' => '', 291 'delete' => '', 292 'visit' => '', 293 ); 294 295 $actions['edit'] = '<span class="edit"><a href="' . esc_url( network_admin_url( 'site-info.php?id=' . $blog['blog_id'] ) ) . '">' . __( 'Edit' ) . '</a></span>'; 296 $actions['backend'] = "<span class='backend'><a href='" . esc_url( get_admin_url( $blog['blog_id'] ) ) . "' class='edit'>" . __( 'Dashboard' ) . '</a></span>'; 297 if ( get_current_site()->blog_id != $blog['blog_id'] ) { 298 if ( $blog['deleted'] == '1' ) { 299 $actions['activate'] = '<span class="activate"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=activateblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to activate the site %s' ), $blogname ) ) ), 'confirm' ) ) . '">' . __( 'Activate' ) . '</a></span>'; 300 } else { 301 $actions['deactivate'] = '<span class="activate"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=deactivateblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to deactivate the site %s' ), $blogname ) ) ), 'confirm' ) ) . '">' . __( 'Deactivate' ) . '</a></span>'; 302 } 303 304 if ( $blog['archived'] == '1' ) { 305 $actions['unarchive'] = '<span class="archive"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=unarchiveblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to unarchive the site %s.' ), $blogname ) ) ), 'confirm' ) ) . '">' . __( 'Unarchive' ) . '</a></span>'; 306 } else { 307 $actions['archive'] = '<span class="archive"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=archiveblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to archive the site %s.' ), $blogname ) ) ), 'confirm' ) ) . '">' . _x( 'Archive', 'verb; site' ) . '</a></span>'; 308 } 309 310 if ( $blog['spam'] == '1' ) { 311 $actions['unspam'] = '<span class="spam"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=unspamblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to unspam the site %s.' ), $blogname ) ) ), 'confirm' ) ) . '">' . _x( 'Not Spam', 'site' ) . '</a></span>'; 312 } else { 313 $actions['spam'] = '<span class="spam"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=spamblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to mark the site %s as spam.' ), $blogname ) ) ), 'confirm' ) ) . '">' . _x( 'Spam', 'site' ) . '</a></span>'; 314 } 315 316 if ( current_user_can( 'delete_site', $blog['blog_id'] ) ) { 317 $actions['delete'] = '<span class="delete"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=deleteblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to delete the site %s.' ), $blogname ) ) ), 'confirm' ) ) . '">' . __( 'Delete' ) . '</a></span>'; 318 } 293 break; 294 295 case 'lastupdated': 296 echo ( $blog['last_updated'] == '0000-00-00 00:00:00' ) ? __( 'Never' ) : mysql2date( $date, $blog['last_updated'] ); 297 break; 298 299 case 'registered': 300 if ( $blog['registered'] == '0000-00-00 00:00:00' ) { 301 echo '—'; 302 } else { 303 echo mysql2date( $date, $blog['registered'] ); 319 304 } 320 321 $actions['visit'] = "<span class='view'><a href='" . esc_url( get_home_url( $blog['blog_id'], '/' ) ) . "' rel='permalink'>" . __( 'Visit' ) . '</a></span>'; 322 323 /** 324 * Filter the action links displayed for each site in the Sites list table. 325 * 326 * The 'Edit', 'Dashboard', 'Delete', and 'Visit' links are displayed by 327 * default for each site. The site's status determines whether to show the 328 * 'Activate' or 'Deactivate' link, 'Unarchive' or 'Archive' links, and 329 * 'Not Spam' or 'Spam' link for each site. 330 * 331 * @since 3.1.0 332 * 333 * @param array $actions An array of action links to be displayed. 334 * @param int $blog_id The site ID. 335 * @param string $blogname Site path, formatted depending on whether it is a sub-domain 336 * or subdirectory multisite install. 337 */ 338 $actions = apply_filters( 'manage_sites_action_links', array_filter( $actions ), $blog['blog_id'], $blogname ); 339 echo $this->row_actions( $actions ); 340 ?> 341 </td> 342 <?php 343 break; 344 345 case 'lastupdated': 346 echo "<td class='$column_name column-$column_name'$style>"; 347 echo ( $blog['last_updated'] == '0000-00-00 00:00:00' ) ? __( 'Never' ) : mysql2date( $date, $blog['last_updated'] ); ?> 348 </td> 349 <?php 350 break; 351 case 'registered': 352 echo "<td class='$column_name column-$column_name'$style>"; 353 if ( $blog['registered'] == '0000-00-00 00:00:00' ) 354 echo '—'; 355 else 356 echo mysql2date( $date, $blog['registered'] ); 357 ?> 358 </td> 359 <?php 360 break; 361 case 'users': 362 echo "<td class='$column_name column-$column_name'$style>"; 305 break; 306 307 case 'users': 363 308 $blogusers = get_users( array( 'blog_id' => $blog['blog_id'], 'number' => 6) ); 364 309 if ( is_array( $blogusers ) ) { … … 377 322 echo '<strong>' . $blogusers_warning . '</strong><br />'; 378 323 } 379 ?> 380 </td> 381 <?php 382 break; 383 384 case 'plugins': ?> 385 <?php if ( has_filter( 'wpmublogsaction' ) ) { 386 echo "<td class='$column_name column-$column_name'$style>"; 387 /** 388 * Fires inside the auxiliary 'Actions' column of the Sites list table. 389 * 390 * By default this column is hidden unless something is hooked to the action. 391 * 392 * @since MU 393 * 394 * @param int $blog_id The site ID. 395 */ 396 do_action( 'wpmublogsaction', $blog['blog_id'] ); ?> 397 </td> 398 <?php } 399 break; 400 401 default: 402 echo "<td class='$column_name column-$column_name'$style>"; 403 /** 404 * Fires for each registered custom column in the Sites list table. 405 * 406 * @since 3.1.0 407 * 408 * @param string $column_name The name of the column to display. 409 * @param int $blog_id The site ID. 410 */ 411 do_action( 'manage_sites_custom_column', $column_name, $blog['blog_id'] ); 412 echo "</td>"; 413 break; 324 break; 325 326 case 'plugins': 327 if ( has_filter( 'wpmublogsaction' ) ) { 328 /** 329 * Fires inside the auxiliary 'Actions' column of the Sites list table. 330 * 331 * By default this column is hidden unless something is hooked to the action. 332 * 333 * @since MU 334 * 335 * @param int $blog_id The site ID. 336 */ 337 do_action( 'wpmublogsaction', $blog['blog_id'] ); 338 } 339 break; 340 341 default: 342 /** 343 * Fires for each registered custom column in the Sites list table. 344 * 345 * @since 3.1.0 346 * 347 * @param string $column_name The name of the column to display. 348 * @param int $blog_id The site ID. 349 */ 350 do_action( 'manage_sites_custom_column', $column_name, $blog['blog_id'] ); 351 break; 352 } 353 354 echo $this->handle_row_actions( $blog, $column_name, $primary ); 355 echo '</td>'; 414 356 } 415 357 } … … 419 361 } 420 362 } 363 364 /** 365 * Get name of default primary column 366 * 367 * @since 4.3.0 368 * @access protected 369 * 370 * @return string 371 */ 372 protected function get_default_primary_column_name() { 373 return 'blogname'; 374 } 375 376 /** 377 * Generate and display row actions links 378 * 379 * @since 4.3.0 380 * @access protected 381 * 382 * @param object $blog Blog being acted upon 383 * @param string $column_name Current column name 384 * @param string $primary Primary column name 385 * 386 * @return string 387 */ 388 protected function handle_row_actions( $blog, $column_name, $primary ) { 389 global $current_site; 390 391 if ( $primary === $column_name ) { 392 $blogname = ( is_subdomain_install() ) ? str_replace( '.'.$current_site->domain, '', $blog['domain'] ) : $blog['path']; 393 394 // Preordered. 395 $actions = array( 396 'edit' => '', 'backend' => '', 397 'activate' => '', 'deactivate' => '', 398 'archive' => '', 'unarchive' => '', 399 'spam' => '', 'unspam' => '', 400 'delete' => '', 401 'visit' => '', 402 ); 403 404 $actions['edit'] = '<span class="edit"><a href="' . esc_url( network_admin_url( 'site-info.php?id=' . $blog['blog_id'] ) ) . '">' . __( 'Edit' ) . '</a></span>'; 405 $actions['backend'] = "<span class='backend'><a href='" . esc_url( get_admin_url( $blog['blog_id'] ) ) . "' class='edit'>" . __( 'Dashboard' ) . '</a></span>'; 406 if ( get_current_site()->blog_id != $blog['blog_id'] ) { 407 if ( $blog['deleted'] == '1' ) { 408 $actions['activate'] = '<span class="activate"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=activateblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to activate the site %s' ), $blogname ) ) ), 'confirm' ) ) . '">' . __( 'Activate' ) . '</a></span>'; 409 } else { 410 $actions['deactivate'] = '<span class="activate"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=deactivateblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to deactivate the site %s' ), $blogname ) ) ), 'confirm' ) ) . '">' . __( 'Deactivate' ) . '</a></span>'; 411 } 412 413 if ( $blog['archived'] == '1' ) { 414 $actions['unarchive'] = '<span class="archive"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=unarchiveblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to unarchive the site %s.' ), $blogname ) ) ), 'confirm' ) ) . '">' . __( 'Unarchive' ) . '</a></span>'; 415 } else { 416 $actions['archive'] = '<span class="archive"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=archiveblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to archive the site %s.' ), $blogname ) ) ), 'confirm' ) ) . '">' . _x( 'Archive', 'verb; site' ) . '</a></span>'; 417 } 418 419 if ( $blog['spam'] == '1' ) { 420 $actions['unspam'] = '<span class="spam"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=unspamblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to unspam the site %s.' ), $blogname ) ) ), 'confirm' ) ) . '">' . _x( 'Not Spam', 'site' ) . '</a></span>'; 421 } else { 422 $actions['spam'] = '<span class="spam"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=spamblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to mark the site %s as spam.' ), $blogname ) ) ), 'confirm' ) ) . '">' . _x( 'Spam', 'site' ) . '</a></span>'; 423 } 424 425 if ( current_user_can( 'delete_site', $blog['blog_id'] ) ) { 426 $actions['delete'] = '<span class="delete"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=deleteblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to delete the site %s.' ), $blogname ) ) ), 'confirm' ) ) . '">' . __( 'Delete' ) . '</a></span>'; 427 } 428 } 429 430 $actions['visit'] = "<span class='view'><a href='" . esc_url( get_home_url( $blog['blog_id'], '/' ) ) . "' rel='permalink'>" . __( 'Visit' ) . '</a></span>'; 431 432 /** 433 * Filter the action links displayed for each site in the Sites list table. 434 * 435 * The 'Edit', 'Dashboard', 'Delete', and 'Visit' links are displayed by 436 * default for each site. The site's status determines whether to show the 437 * 'Activate' or 'Deactivate' link, 'Unarchive' or 'Archive' links, and 438 * 'Not Spam' or 'Spam' link for each site. 439 * 440 * @since 3.1.0 441 * 442 * @param array $actions An array of action links to be displayed. 443 * @param int $blog_id The site ID. 444 * @param string $blogname Site path, formatted depending on whether it is a sub-domain 445 * or subdirectory multisite install. 446 */ 447 $actions = apply_filters( 'manage_sites_action_links', array_filter( $actions ), $blog['blog_id'], $blogname ); 448 return $this->row_actions( $actions ); 449 } 450 } 421 451 } -
trunk/src/wp-admin/includes/class-wp-ms-themes-list-table.php
r32642 r32644 231 231 232 232 /** 233 * Get name of default primary column 234 * 235 * @since 4.3.0 236 * @access protected 237 * 238 * @return string 239 */ 240 protected function get_default_primary_column_name() { 241 return 'name'; 242 } 243 244 /** 233 245 * 234 246 * @global array $totals … … 401 413 echo "<tr id='$id' class='$class'>"; 402 414 403 list( $columns, $hidden ) = $this->get_column_info();415 list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); 404 416 405 417 foreach ( $columns as $column_name => $column_display_name ) { … … 414 426 case 'name': 415 427 echo "<td class='theme-title'$style><strong>" . $theme->display('Name') . "</strong>"; 416 echo $this->row_actions( $actions, true ); 428 if ( $primary === $column_name ) { 429 echo $this->row_actions($actions, true); 430 } 417 431 echo "</td>"; 418 432 break; … … 452 466 echo implode( ' | ', $theme_meta ); 453 467 454 echo "</div></td>"; 468 echo '</div>'; 469 if ( $primary === $column_name ) { 470 echo $this->row_actions($actions, true); 471 } 472 echo '</td>'; 455 473 break; 456 474 … … 468 486 */ 469 487 do_action( 'manage_themes_custom_column', $column_name, $stylesheet, $theme ); 488 489 if ( $primary === $column_name ) { 490 echo $this->row_actions($actions, true); 491 } 470 492 echo "</td>"; 471 493 } -
trunk/src/wp-admin/includes/class-wp-ms-users-list-table.php
r32642 r32644 181 181 <?php 182 182 183 list( $columns, $hidden ) = $this->get_column_info();183 list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); 184 184 185 185 foreach ( $columns as $column_name => $column_display_name ) : 186 $class = "class='$column_name column-$column_name'"; 186 $classes = "$column_name column-$column_name"; 187 if ( $primary === $column_name || 'blogs' === $column_name ) { 188 $classes .= ' has-row-actions'; 189 } 190 191 if ( $primary === $column_name ) { 192 $classes .= ' column-primary'; 193 } 187 194 188 195 $style = ''; 189 if ( in_array( $column_name, $hidden ) ) 196 if ( in_array( $column_name, $hidden ) ) { 190 197 $style = ' style="display:none;"'; 191 192 $attributes = "$class$style"; 193 194 switch ( $column_name ) { 195 case 'cb': ?> 196 <th scope="row" class="check-column"> 197 <label class="screen-reader-text" for="blog_<?php echo $user->ID; ?>"><?php echo sprintf( __( 'Select %s' ), $user->user_login ); ?></label> 198 <input type="checkbox" id="blog_<?php echo $user->ID ?>" name="allusers[]" value="<?php echo esc_attr( $user->ID ) ?>" /> 199 </th> 198 } 199 200 $attributes = "class='$classes'$style"; 201 202 if ( 'cb' === $column_name ){ 203 ?> 204 <th scope="row" class="check-column"> 205 <label class="screen-reader-text" for="blog_<?php echo $user->ID; ?>"><?php echo sprintf( __( 'Select %s' ), $user->user_login ); ?></label> 206 <input type="checkbox" id="blog_<?php echo $user->ID ?>" name="allusers[]" value="<?php echo esc_attr( $user->ID ) ?>" /> 207 </th> 200 208 <?php 201 break; 202 203 case 'username': 204 $avatar = get_avatar( $user->user_email, 32 ); 205 $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) ); 206 207 echo "<td $attributes>"; ?> 208 <?php echo $avatar; ?><strong><a href="<?php echo $edit_link; ?>" class="edit"><?php echo $user->user_login; ?></a><?php 209 } else { 210 echo "<td $attributes>"; 211 212 switch ( $column_name ) { 213 case 'username': 214 $avatar = get_avatar( $user->user_email, 32 ); 215 $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) ); 216 217 echo $avatar; ?><strong><a href="<?php echo $edit_link; ?>" class="edit"><?php echo $user->user_login; ?></a><?php 209 218 if ( in_array( $user->user_login, $super_admins ) ) 210 219 echo ' - ' . __( 'Super Admin' ); 211 220 ?></strong> 212 <br/> 213 <?php 214 $actions = array(); 215 $actions['edit'] = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>'; 216 217 if ( current_user_can( 'delete_user', $user->ID ) && ! in_array( $user->user_login, $super_admins ) ) { 218 $actions['delete'] = '<a href="' . $delete = esc_url( network_admin_url( add_query_arg( '_wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), wp_nonce_url( 'users.php', 'deleteuser' ) . '&action=deleteuser&id=' . $user->ID ) ) ) . '" class="delete">' . __( 'Delete' ) . '</a>'; 219 } 220 221 /** 222 * Filter the action links displayed under each user 223 * in the Network Admin Users list table. 224 * 225 * @since 3.2.0 226 * 227 * @param array $actions An array of action links to be displayed. 228 * Default 'Edit', 'Delete'. 229 * @param WP_User $user WP_User object. 230 */ 231 $actions = apply_filters( 'ms_user_row_actions', $actions, $user ); 232 echo $this->row_actions( $actions ); 233 ?> 234 </td> 235 <?php 236 break; 237 238 case 'name': 239 echo "<td $attributes>$user->first_name $user->last_name</td>"; 240 break; 241 242 case 'email': 243 echo "<td $attributes><a href='mailto:$user->user_email'>$user->user_email</a></td>"; 244 break; 245 246 case 'registered': 247 if ( 'list' == $mode ) 248 $date = __( 'Y/m/d' ); 249 else 250 $date = __( 'Y/m/d g:i:s a' ); 251 252 echo "<td $attributes>" . mysql2date( $date, $user->user_registered ) . "</td>"; 253 break; 254 255 case 'blogs': 256 $blogs = get_blogs_of_user( $user->ID, true ); 257 echo "<td $attributes>"; 221 <?php 222 break; 223 224 case 'name': 225 echo "$user->first_name $user->last_name"; 226 break; 227 228 case 'email': 229 echo "<a href='mailto:$user->user_email'>$user->user_email</a>"; 230 break; 231 232 case 'registered': 233 if ( 'list' == $mode ) 234 $date = __( 'Y/m/d' ); 235 else 236 $date = __( 'Y/m/d g:i:s a' ); 237 238 echo mysql2date( $date, $user->user_registered ); 239 break; 240 241 case 'blogs': 242 $blogs = get_blogs_of_user( $user->ID, true ); 258 243 if ( is_array( $blogs ) ) { 259 244 foreach ( (array) $blogs as $key => $val ) { … … 306 291 } 307 292 } 308 ?> 309 </td> 310 <?php 311 break; 312 313 default: 314 echo "<td $attributes>"; 315 /** This filter is documented in wp-admin/includes/class-wp-users-list-table.php */ 316 echo apply_filters( 'manage_users_custom_column', '', $column_name, $user->ID ); 317 echo "</td>"; 318 break; 293 break; 294 295 default: 296 /** This filter is documented in wp-admin/includes/class-wp-users-list-table.php */ 297 echo apply_filters( 'manage_users_custom_column', '', $column_name, $user->ID ); 298 break; 299 } 300 301 echo $this->handle_row_actions( $user, $column_name, $primary ); 302 echo '</td>'; 319 303 } 320 304 endforeach … … 324 308 } 325 309 } 310 311 /** 312 * Get name of default primary column 313 * 314 * @since 4.3.0 315 * @access protected 316 * 317 * @return string 318 */ 319 protected function get_default_primary_column_name() { 320 return 'username'; 321 } 322 323 /** 324 * Generate and display row actions links 325 * 326 * @since 4.3.0 327 * @access protected 328 * 329 * @param object $user User being acted upon 330 * @param string $column_name Current column name 331 * @param string $primary Primary column name 332 * 333 * @return string 334 */ 335 protected function handle_row_actions( $user, $column_name, $primary ) { 336 $super_admins = get_super_admins(); 337 $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) ); 338 339 if ( $primary === $column_name ) { 340 $actions = array(); 341 $actions['edit'] = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>'; 342 343 if ( current_user_can( 'delete_user', $user->ID ) && ! in_array( $user->user_login, $super_admins ) ) { 344 $actions['delete'] = '<a href="' . $delete = esc_url( network_admin_url( add_query_arg( '_wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), wp_nonce_url( 'users.php', 'deleteuser' ) . '&action=deleteuser&id=' . $user->ID ) ) ) . '" class="delete">' . __( 'Delete' ) . '</a>'; 345 } 346 347 /** 348 * Filter the action links displayed under each user 349 * in the Network Admin Users list table. 350 * 351 * @since 3.2.0 352 * 353 * @param array $actions An array of action links to be displayed. 354 * Default 'Edit', 'Delete'. 355 * @param WP_User $user WP_User object. 356 */ 357 $actions = apply_filters( 'ms_user_row_actions', $actions, $user ); 358 return $this->row_actions( $actions ); 359 } 360 } 326 361 } -
trunk/src/wp-admin/includes/class-wp-plugins-list-table.php
r32642 r32644 569 569 ); 570 570 571 list( $columns, $hidden ) = $this->get_column_info(); 571 list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); 572 573 $extra_class = ' has-row-actions column-primary'; 572 574 573 575 foreach ( $columns as $column_name => $column_display_name ) { 574 576 $style = ''; 575 if ( in_array( $column_name, $hidden ) ) 577 if ( in_array( $column_name, $hidden ) ) { 576 578 $style = ' style="display:none;"'; 579 } 577 580 578 581 switch ( $column_name ) { … … 581 584 break; 582 585 case 'name': 583 echo "<td class='plugin-title'$style><strong>$plugin_name</strong>"; 584 echo $this->row_actions( $actions, true ); 586 if ( $primary === $column_name || ! isset( $columns[ $primary ] ) ) { 587 echo "<td class='plugin-title $extra_class'$style><strong>$plugin_name</strong>"; 588 echo $this->row_actions( $actions, true ); 589 } else { 590 echo "<td class='plugin-title'$style><strong>$plugin_name</strong>"; 591 } 585 592 echo "</td>"; 586 593 break; 587 594 case 'description': 588 echo "<td class='column-description desc'$style> 595 $classes = 'column-description desc'; 596 if ( $primary === $column_name ) { 597 $classes .= " $extra_class"; 598 } 599 600 echo "<td class='$classes'$style> 589 601 <div class='plugin-description'>$description</div> 590 602 <div class='$class second plugin-version-author-uri'>"; … … 633 645 echo implode( ' | ', $plugin_meta ); 634 646 647 if ( $primary === $column_name ) { 648 echo $this->row_actions( $actions, true ); 649 } 635 650 echo "</div></td>"; 636 651 break; 637 652 default: 638 echo "<td class='$column_name column-$column_name'$style>"; 653 $classes = "$column_name column-$column_name$class"; 654 if ( $primary === $column_name ) { 655 $classes .= " $extra_class"; 656 } 657 658 echo "<td class='$classes'$style>"; 639 659 640 660 /** … … 648 668 */ 649 669 do_action( 'manage_plugins_custom_column', $column_name, $plugin_file, $plugin_data ); 670 671 if ( $primary === $column_name ) { 672 echo $this->row_actions( $actions, true ); 673 } 650 674 echo "</td>"; 651 675 } … … 683 707 do_action( "after_plugin_row_$plugin_file", $plugin_file, $plugin_data, $status ); 684 708 } 709 710 /** 711 * Get name of default primary column for this specific list table. 712 * 713 * @since 4.3.0 714 * @access protected 715 * 716 * @return string 717 */ 718 protected function get_default_primary_column_name() { 719 return 'plugin'; 720 } 685 721 } -
trunk/src/wp-admin/includes/class-wp-posts-list-table.php
r32642 r32644 685 685 <?php 686 686 687 list( $columns, $hidden ) = $this->get_column_info();687 list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); 688 688 689 689 foreach ( $columns as $column_name => $column_display_name ) { 690 $class = "class=\"$column_name column-$column_name\""; 690 $classes = "$column_name column-$column_name"; 691 if ( $primary === $column_name ) { 692 $classes .= ' has-row-actions column-primary'; 693 } 691 694 692 695 $style = ''; 693 if ( in_array( $column_name, $hidden ) ) 696 if ( in_array( $column_name, $hidden ) ) { 694 697 $style = ' style="display:none;"'; 695 696 $attributes = "$class$style"; 698 } 699 700 $attributes = "class='$classes'$style"; 697 701 698 702 switch ( $column_name ) { … … 716 720 717 721 case 'title': 718 $attributes = 'class="post-title page-title column-title"' . $style; 722 $classes .= ' page-title'; // Special addition for title column 723 $attributes = "class='$classes'$style"; 719 724 if ( $this->hierarchical_display ) { 720 725 if ( 0 == $level && (int) $post->post_parent > 0 ) { … … 773 778 the_excerpt(); 774 779 775 $actions = array(); 776 if ( $can_edit_post && 'trash' != $post->post_status ) { 777 $actions['edit'] = '<a href="' . get_edit_post_link( $post->ID ) . '" title="' . esc_attr__( 'Edit this item' ) . '">' . __( 'Edit' ) . '</a>'; 778 $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr__( 'Edit this item inline' ) . '">' . __( 'Quick Edit' ) . '</a>'; 779 } 780 if ( current_user_can( 'delete_post', $post->ID ) ) { 781 if ( 'trash' == $post->post_status ) 782 $actions['untrash'] = "<a title='" . esc_attr__( 'Restore this item from the Trash' ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $post->ID ) ), 'untrash-post_' . $post->ID ) . "'>" . __( 'Restore' ) . "</a>"; 783 elseif ( EMPTY_TRASH_DAYS ) 784 $actions['trash'] = "<a class='submitdelete' title='" . esc_attr__( 'Move this item to the Trash' ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash' ) . "</a>"; 785 if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS ) 786 $actions['delete'] = "<a class='submitdelete' title='" . esc_attr__( 'Delete this item permanently' ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently' ) . "</a>"; 787 } 788 if ( $post_type_object->public ) { 789 if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) { 790 if ( $can_edit_post ) { 791 $preview_link = set_url_scheme( get_permalink( $post->ID ) ); 792 /** This filter is documented in wp-admin/includes/meta-boxes.php */ 793 $preview_link = apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ), $post ); 794 $actions['view'] = '<a href="' . esc_url( $preview_link ) . '" title="' . esc_attr( sprintf( __( 'Preview “%s”' ), $title ) ) . '" rel="permalink">' . __( 'Preview' ) . '</a>'; 795 } 796 } elseif ( 'trash' != $post->post_status ) { 797 $actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View “%s”' ), $title ) ) . '" rel="permalink">' . __( 'View' ) . '</a>'; 798 } 799 } 800 801 if ( is_post_type_hierarchical( $post->post_type ) ) { 802 803 /** 804 * Filter the array of row action links on the Pages list table. 805 * 806 * The filter is evaluated only for hierarchical post types. 807 * 808 * @since 2.8.0 809 * 810 * @param array $actions An array of row action links. Defaults are 811 * 'Edit', 'Quick Edit', 'Restore, 'Trash', 812 * 'Delete Permanently', 'Preview', and 'View'. 813 * @param WP_Post $post The post object. 814 */ 815 $actions = apply_filters( 'page_row_actions', $actions, $post ); 816 } else { 817 818 /** 819 * Filter the array of row action links on the Posts list table. 820 * 821 * The filter is evaluated only for non-hierarchical post types. 822 * 823 * @since 2.8.0 824 * 825 * @param array $actions An array of row action links. Defaults are 826 * 'Edit', 'Quick Edit', 'Restore, 'Trash', 827 * 'Delete Permanently', 'Preview', and 'View'. 828 * @param WP_Post $post The post object. 829 */ 830 $actions = apply_filters( 'post_row_actions', $actions, $post ); 831 } 832 833 echo $this->row_actions( $actions ); 780 echo $this->handle_row_actions( $post, $column_name, $primary ); 834 781 835 782 get_inline_data( $post ); … … 888 835 _e( 'Last Modified' ); 889 836 } 837 echo $this->handle_row_actions( $post, $column_name, $primary ); 890 838 echo '</td>'; 891 839 break; … … 899 847 $this->comments_bubble( $post->ID, $pending_comments ); 900 848 ?> 901 </div>< /td>849 </div><?php echo $this->handle_row_actions( $post, $column_name, $primary ); ?></td> 902 850 <?php 903 851 break; … … 910 858 get_the_author() 911 859 ); 860 echo $this->handle_row_actions( $post, $column_name, $primary ); 912 861 ?></td> 913 862 <?php … … 950 899 echo '—'; 951 900 } 901 echo $this->handle_row_actions( $post, $column_name, $primary ); 952 902 echo '</td>'; 953 903 break; … … 996 946 */ 997 947 do_action( "manage_{$post->post_type}_posts_custom_column", $column_name, $post->ID ); 948 echo $this->handle_row_actions( $post, $column_name, $primary ); 998 949 ?></td> 999 950 <?php … … 1005 956 <?php 1006 957 $GLOBALS['post'] = $global_post; 958 } 959 960 /** 961 * Get name of default primary column 962 * 963 * @since 4.3.0 964 * @access protected 965 * 966 * @return string 967 */ 968 protected function get_default_primary_column_name() { 969 return( 'title' ); 970 } 971 972 /** 973 * Generate and display row actions links 974 * 975 * @since 4.3.0 976 * @access protected 977 * 978 * @param object $post Post being acted upon 979 * @param string $column_name Current column name 980 * @param string $primary Primary column name 981 * 982 * @return string 983 */ 984 protected function handle_row_actions( $post, $column_name, $primary ) { 985 $title = _draft_or_post_title(); 986 987 if ( $primary === $column_name ) { 988 $post_type_object = get_post_type_object( $post->post_type ); 989 $can_edit_post = current_user_can( 'edit_post', $post->ID ); 990 $actions = array(); 991 992 if ( $can_edit_post && 'trash' != $post->post_status ) { 993 $actions['edit'] = '<a href="' . get_edit_post_link( $post->ID ) . '" title="' . esc_attr__( 'Edit this item' ) . '">' . __( 'Edit' ) . '</a>'; 994 $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr__( 'Edit this item inline' ) . '">' . __( 'Quick Edit' ) . '</a>'; 995 } 996 997 if ( current_user_can( 'delete_post', $post->ID ) ) { 998 if ( 'trash' == $post->post_status ) 999 $actions['untrash'] = "<a title='" . esc_attr__( 'Restore this item from the Trash' ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $post->ID ) ), 'untrash-post_' . $post->ID ) . "'>" . __( 'Restore' ) . "</a>"; 1000 elseif ( EMPTY_TRASH_DAYS ) 1001 $actions['trash'] = "<a class='submitdelete' title='" . esc_attr__( 'Move this item to the Trash' ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash' ) . "</a>"; 1002 if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS ) 1003 $actions['delete'] = "<a class='submitdelete' title='" . esc_attr__( 'Delete this item permanently' ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently' ) . "</a>"; 1004 } 1005 1006 if ( $post_type_object->public ) { 1007 if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) { 1008 if ( $can_edit_post ) { 1009 $preview_link = set_url_scheme( get_permalink( $post->ID ) ); 1010 /** This filter is documented in wp-admin/includes/meta-boxes.php */ 1011 $preview_link = apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ), $post ); 1012 $actions['view'] = '<a href="' . esc_url( $preview_link ) . '" title="' . esc_attr( sprintf( __( 'Preview “%s”' ), $title ) ) . '" rel="permalink">' . __( 'Preview' ) . '</a>'; 1013 } 1014 } elseif ( 'trash' != $post->post_status ) { 1015 $actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View “%s”' ), $title ) ) . '" rel="permalink">' . __( 'View' ) . '</a>'; 1016 } 1017 } 1018 1019 if ( is_post_type_hierarchical( $post->post_type ) ) { 1020 1021 /** 1022 * Filter the array of row action links on the Pages list table. 1023 * 1024 * The filter is evaluated only for hierarchical post types. 1025 * 1026 * @since 2.8.0 1027 * 1028 * @param array $actions An array of row action links. Defaults are 1029 * 'Edit', 'Quick Edit', 'Restore, 'Trash', 1030 * 'Delete Permanently', 'Preview', and 'View'. 1031 * @param WP_Post $post The post object. 1032 */ 1033 $actions = apply_filters( 'page_row_actions', $actions, $post ); 1034 } else { 1035 1036 /** 1037 * Filter the array of row action links on the Posts list table. 1038 * 1039 * The filter is evaluated only for non-hierarchical post types. 1040 * 1041 * @since 2.8.0 1042 * 1043 * @param array $actions An array of row action links. Defaults are 1044 * 'Edit', 'Quick Edit', 'Restore, 'Trash', 1045 * 'Delete Permanently', 'Preview', and 'View'. 1046 * @param WP_Post $post The post object. 1047 */ 1048 $actions = apply_filters( 'post_row_actions', $actions, $post ); 1049 } 1050 1051 return $this->row_actions( $actions ); 1052 } 1007 1053 } 1008 1054 -
trunk/src/wp-admin/includes/class-wp-terms-list-table.php
r32642 r32644 308 308 public function column_name( $tag ) { 309 309 $taxonomy = $this->screen->taxonomy; 310 $tax = get_taxonomy( $taxonomy );311 312 $default_term = get_option( 'default_' . $taxonomy );313 310 314 311 $pad = str_repeat( '— ', max( 0, $this->level ) ); … … 334 331 $out = '<strong><a class="row-title" href="' . $edit_link . '" title="' . esc_attr( sprintf( __( 'Edit “%s”' ), $name ) ) . '">' . $name . '</a></strong><br />'; 335 332 336 $actions = array();337 if ( current_user_can( $tax->cap->edit_terms ) ) {338 $actions['edit'] = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>';339 $actions['inline hide-if-no-js'] = '<a href="#" class="editinline">' . __( 'Quick Edit' ) . '</a>';340 }341 if ( current_user_can( $tax->cap->delete_terms ) && $tag->term_id != $default_term )342 $actions['delete'] = "<a class='delete-tag' href='" . wp_nonce_url( "edit-tags.php?action=delete&taxonomy=$taxonomy&tag_ID=$tag->term_id", 'delete-tag_' . $tag->term_id ) . "'>" . __( 'Delete' ) . "</a>";343 if ( $tax->public )344 $actions['view'] = '<a href="' . get_term_link( $tag ) . '">' . __( 'View' ) . '</a>';345 346 /**347 * Filter the action links displayed for each term in the Tags list table.348 *349 * @since 2.8.0350 * @deprecated 3.0.0 Use {$taxonomy}_row_actions instead.351 *352 * @param array $actions An array of action links to be displayed. Default353 * 'Edit', 'Quick Edit', 'Delete', and 'View'.354 * @param object $tag Term object.355 */356 $actions = apply_filters( 'tag_row_actions', $actions, $tag );357 358 /**359 * Filter the action links displayed for each term in the terms list table.360 *361 * The dynamic portion of the hook name, `$taxonomy`, refers to the taxonomy slug.362 *363 * @since 3.0.0364 *365 * @param array $actions An array of action links to be displayed. Default366 * 'Edit', 'Quick Edit', 'Delete', and 'View'.367 * @param object $tag Term object.368 */369 $actions = apply_filters( "{$taxonomy}_row_actions", $actions, $tag );370 371 $out .= $this->row_actions( $actions );372 333 $out .= '<div class="hidden" id="inline_' . $qe_data->term_id . '">'; 373 334 $out .= '<div class="name">' . $qe_data->name . '</div>'; … … 378 339 379 340 return $out; 341 } 342 343 /** 344 * Get name of default primary column 345 * 346 * @since 4.3.0 347 * @access protected 348 * 349 * @return string 350 */ 351 protected function get_default_primary_column_name() { 352 return 'name'; 353 } 354 355 /** 356 * Generate and display row actions links 357 * 358 * @since 4.3.0 359 * @access protected 360 * 361 * @param object $tag Tag being acted upon 362 * @param string $column_name Current column name 363 * @param string $primary Primary column name 364 * 365 * @return string 366 */ 367 protected function handle_row_actions( $tag, $column_name, $primary ) { 368 $taxonomy = $this->screen->taxonomy; 369 $tax = get_taxonomy( $taxonomy ); 370 $default_term = get_option( 'default_' . $taxonomy ); 371 372 $edit_link = esc_url( get_edit_term_link( $tag->term_id, $taxonomy, $this->screen->post_type ) ); 373 374 if ( $primary === $column_name ) { 375 $actions = array(); 376 if ( current_user_can( $tax->cap->edit_terms ) ) { 377 $actions['edit'] = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>'; 378 $actions['inline hide-if-no-js'] = '<a href="#" class="editinline">' . __( 'Quick Edit' ) . '</a>'; 379 } 380 if ( current_user_can( $tax->cap->delete_terms ) && $tag->term_id != $default_term ) 381 $actions['delete'] = "<a class='delete-tag' href='" . wp_nonce_url( "edit-tags.php?action=delete&taxonomy=$taxonomy&tag_ID=$tag->term_id", 'delete-tag_' . $tag->term_id ) . "'>" . __( 'Delete' ) . "</a>"; 382 if ( $tax->public ) 383 $actions['view'] = '<a href="' . get_term_link( $tag ) . '">' . __( 'View' ) . '</a>'; 384 385 /** 386 * Filter the action links displayed for each term in the Tags list table. 387 * 388 * @since 2.8.0 389 * @deprecated 3.0.0 Use {$taxonomy}_row_actions instead. 390 * 391 * @param array $actions An array of action links to be displayed. Default 392 * 'Edit', 'Quick Edit', 'Delete', and 'View'. 393 * @param object $tag Term object. 394 */ 395 $actions = apply_filters( 'tag_row_actions', $actions, $tag ); 396 397 /** 398 * Filter the action links displayed for each term in the terms list table. 399 * 400 * The dynamic portion of the hook name, `$taxonomy`, refers to the taxonomy slug. 401 * 402 * @since 3.0.0 403 * 404 * @param array $actions An array of action links to be displayed. Default 405 * 'Edit', 'Quick Edit', 'Delete', and 'View'. 406 * @param object $tag Term object. 407 */ 408 $actions = apply_filters( "{$taxonomy}_row_actions", $actions, $tag ); 409 410 return $this->row_actions( $actions ); 411 } 380 412 } 381 413 -
trunk/src/wp-admin/includes/class-wp-users-list-table.php
r32642 r32644 390 390 */ 391 391 $actions = apply_filters( 'user_row_actions', $actions, $user_object ); 392 $edit .= $this->row_actions( $actions );393 392 394 393 // Set up the checkbox ( because the user is editable, otherwise it's empty ) … … 404 403 $r = "<tr id='user-$user_object->ID'>"; 405 404 406 list( $columns, $hidden ) = $this->get_column_info();405 list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); 407 406 408 407 foreach ( $columns as $column_name => $column_display_name ) { 409 $class = "class=\"$column_name column-$column_name\""; 408 $classes = "$column_name column-$column_name"; 409 if ( $primary === $column_name ) { 410 $classes .= ' has-row-actions column-primary'; 411 } 410 412 411 413 $style = ''; 412 if ( in_array( $column_name, $hidden ) ) 414 if ( in_array( $column_name, $hidden ) ) { 413 415 $style = ' style="display:none;"'; 414 415 $attributes = "$class$style"; 416 417 switch ( $column_name ) { 418 case 'cb': 419 $r .= "<th scope='row' class='check-column'>$checkbox</th>"; 420 break; 421 case 'username': 422 $r .= "<td $attributes>$avatar $edit</td>"; 423 break; 424 case 'name': 425 $r .= "<td $attributes>$user_object->first_name $user_object->last_name</td>"; 426 break; 427 case 'email': 428 $r .= "<td $attributes><a href='mailto:$email' title='" . esc_attr( sprintf( __( 'E-mail: %s' ), $email ) ) . "'>$email</a></td>"; 429 break; 430 case 'role': 431 $r .= "<td $attributes>$role_name</td>"; 432 break; 433 case 'posts': 434 $attributes = 'class="posts column-posts num"' . $style; 435 $r .= "<td $attributes>"; 436 if ( $numposts > 0 ) { 437 $r .= "<a href='edit.php?author=$user_object->ID' title='" . esc_attr__( 'View posts by this author' ) . "' class='edit'>"; 438 $r .= $numposts; 439 $r .= '</a>'; 440 } else { 441 $r .= 0; 442 } 443 $r .= "</td>"; 444 break; 445 default: 446 $r .= "<td $attributes>"; 447 448 /** 449 * Filter the display output of custom columns in the Users list table. 450 * 451 * @since 2.8.0 452 * 453 * @param string $output Custom column output. Default empty. 454 * @param string $column_name Column name. 455 * @param int $user_id ID of the currently-listed user. 456 */ 457 $r .= apply_filters( 'manage_users_custom_column', '', $column_name, $user_object->ID ); 458 $r .= "</td>"; 416 } 417 418 $attributes = "class='$classes'$style"; 419 420 if ( 'cb' === $column_name ) { 421 $r .= "<th scope='row' class='check-column'>$checkbox</th>"; 422 } else { 423 $r .= "<td $attributes>"; 424 switch ( $column_name ) { 425 case 'username': 426 $r .= "$avatar $edit"; 427 break; 428 case 'name': 429 $r .= "$user_object->first_name $user_object->last_name"; 430 break; 431 case 'email': 432 $r .= "<a href='mailto:$email' title='" . esc_attr( sprintf( __( 'E-mail: %s' ), $email ) ) . "'>$email</a>"; 433 break; 434 case 'role': 435 $r .= $role_name; 436 break; 437 case 'posts': 438 $attributes = 'class="posts column-posts num"' . $style; 439 $r .= ""; 440 if ( $numposts > 0 ) { 441 $r .= "<a href='edit.php?author=$user_object->ID' title='" . esc_attr__( 'View posts by this author' ) . "' class='edit'>"; 442 $r .= $numposts; 443 $r .= '</a>'; 444 } else { 445 $r .= 0; 446 } 447 break; 448 default: 449 /** 450 * Filter the display output of custom columns in the Users list table. 451 * 452 * @since 2.8.0 453 * 454 * @param string $output Custom column output. Default empty. 455 * @param string $column_name Column name. 456 * @param int $user_id ID of the currently-listed user. 457 */ 458 $r .= apply_filters( 'manage_users_custom_column', '', $column_name, $user_object->ID ); 459 } 460 461 if ( $primary === $column_name ) { 462 $r .= $this->row_actions( $actions ); 463 } 464 $r .= "</td>"; 459 465 } 460 466 } … … 463 469 return $r; 464 470 } 471 472 /** 473 * Get name of default primary column 474 * 475 * @since 4.3.0 476 * @access protected 477 * 478 * @return string 479 */ 480 protected function get_default_primary_column_name() { 481 return 'username'; 482 } 465 483 }
Note: See TracChangeset
for help on using the changeset viewer.