X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/53f4633144ed68c8b8fb5861f992b5489894a940..refs/tags/wordpress-4.6.1:/wp-admin/includes/class-wp-media-list-table.php diff --git a/wp-admin/includes/class-wp-media-list-table.php b/wp-admin/includes/class-wp-media-list-table.php index 9c61fc28..170ec5a2 100644 --- a/wp-admin/includes/class-wp-media-list-table.php +++ b/wp-admin/includes/class-wp-media-list-table.php @@ -1,13 +1,29 @@ is_trash = isset( $_REQUEST['attachment-filter'] ) && 'trash' == $_REQUEST['attachment-filter']; + $this->is_trash = isset( $_REQUEST['attachment-filter'] ) && 'trash' === $_REQUEST['attachment-filter']; $mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode']; @@ -69,43 +85,51 @@ class WP_Media_List_Table extends WP_List_Table { } /** - * - * @global wpdb $wpdb * @global array $post_mime_types * @global array $avail_post_mime_types * @return array */ protected function get_views() { - global $wpdb, $post_mime_types, $avail_post_mime_types; + global $post_mime_types, $avail_post_mime_types; $type_links = array(); - $_num_posts = (array) wp_count_attachments(); - $_total_posts = array_sum($_num_posts) - $_num_posts['trash']; - $total_orphans = $wpdb->get_var( "SELECT COUNT( * ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent < 1" ); - $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts)); - $num_posts = array(); - foreach ( $matches as $type => $reals ) { - foreach ( $reals as $real ) { - $num_posts[$type] = ( isset( $num_posts[$type] ) ) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real]; - } - } - $selected = empty( $_GET['attachment-filter'] ) ? ' selected="selected"' : ''; - $type_links['all'] = "'; + + $filter = empty( $_GET['attachment-filter'] ) ? '' : $_GET['attachment-filter']; + + $type_links['all'] = sprintf( + '', + selected( $filter, true, false ), + __( 'All media items' ) + ); + foreach ( $post_mime_types as $mime_type => $label ) { - if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) ) + if ( ! wp_match_mime_types( $mime_type, $avail_post_mime_types ) ) { continue; + } - $selected = ''; - if ( !empty( $_GET['attachment-filter'] ) && strpos( $_GET['attachment-filter'], 'post_mime_type:' ) === 0 && wp_match_mime_types( $mime_type, str_replace( 'post_mime_type:', '', $_GET['attachment-filter'] ) ) ) - $selected = ' selected="selected"'; - if ( !empty( $num_posts[$mime_type] ) ) - $type_links[$mime_type] = ''; + $selected = selected( + $filter && 0 === strpos( $filter, 'post_mime_type:' ) && + wp_match_mime_types( $mime_type, str_replace( 'post_mime_type:', '', $filter ) ), + true, + false + ); + + $type_links[$mime_type] = sprintf( + '', + esc_attr( $mime_type ), + $selected, + $label[0] + ); + } + $type_links['detached'] = ''; + + if ( $this->is_trash || ( defined( 'MEDIA_TRASH') && MEDIA_TRASH ) ) { + $type_links['trash'] = sprintf( + '', + selected( 'trash' === $filter, true, false ), + _x( 'Trash', 'attachment filter' ) + ); } - $type_links['detached'] = ''; - - if ( !empty($_num_posts['trash']) ) - $type_links['trash'] = ''; - return $type_links; } @@ -120,14 +144,14 @@ class WP_Media_List_Table extends WP_List_Table { $actions['untrash'] = __( 'Restore' ); $actions['delete'] = __( 'Delete Permanently' ); } else { - $actions['trash'] = __( 'Trash' ); + $actions['trash'] = _x( 'Trash', 'verb' ); } } else { $actions['delete'] = __( 'Delete Permanently' ); } if ( $this->detached ) - $actions['attach'] = __( 'Attach to a post' ); + $actions['attach'] = __( 'Attach' ); return $actions; } @@ -148,7 +172,8 @@ class WP_Media_List_Table extends WP_List_Table { } /** This action is documented in wp-admin/includes/class-wp-posts-list-table.php */ - do_action( 'restrict_manage_posts' ); + do_action( 'restrict_manage_posts', $this->screen->post_type ); + submit_button( __( 'Filter' ), 'button', 'filter_action', false, array( 'id' => 'post-query-submit' ) ); } @@ -188,7 +213,7 @@ class WP_Media_List_Table extends WP_List_Table { * @access public */ public function no_items() { - _e( 'No media attachments found.' ); + _e( 'No media files found.' ); } /** @@ -200,6 +225,8 @@ class WP_Media_List_Table extends WP_List_Table { global $mode; $views = $this->get_views(); + + $this->screen->render_screen_reader_content( 'heading_views' ); ?>
@@ -255,7 +282,7 @@ class WP_Media_List_Table extends WP_List_Table { $taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' ); /** - * Filter the taxonomy columns for attachments in the Media list table. + * Filters the taxonomy columns for attachments in the Media list table. * * @since 3.5.0 * @@ -266,13 +293,13 @@ class WP_Media_List_Table extends WP_List_Table { $taxonomies = array_filter( $taxonomies, 'taxonomy_exists' ); foreach ( $taxonomies as $taxonomy ) { - if ( 'category' == $taxonomy ) + if ( 'category' === $taxonomy ) { $column_key = 'categories'; - elseif ( 'post_tag' == $taxonomy ) + } elseif ( 'post_tag' === $taxonomy ) { $column_key = 'tags'; - else + } else { $column_key = 'taxonomy-' . $taxonomy; - + } $posts_columns[ $column_key ] = get_taxonomy( $taxonomy )->labels->name; } @@ -285,7 +312,7 @@ class WP_Media_List_Table extends WP_List_Table { /* translators: column name */ $posts_columns['date'] = _x( 'Date', 'column name' ); /** - * Filter the Media list table columns. + * Filters the Media list table columns. * * @since 2.5.0 * @@ -343,25 +370,34 @@ class WP_Media_List_Table extends WP_List_Table { $link_start = $link_end = ''; if ( current_user_can( 'edit_post', $post->ID ) && ! $this->is_trash ) { - $link_start = ''; + $link_start = sprintf( + '', + get_edit_post_link( $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( '“%s” (Edit)' ), $title ) ) + ); $link_end = ''; } $class = $thumb ? ' class="has-media-icon"' : ''; - ?> > - - + - - - - - - + -

guid ); ?>

+

+ + ID ); + echo esc_html( wp_basename( $file ) ); + ?> +

post_date ) { + if ( '0000-00-00 00:00:00' === $post->post_date ) { $h_time = __( 'Unpublished' ); } else { $m_time = $post->post_date; @@ -440,32 +476,44 @@ class WP_Media_List_Table extends WP_List_Table { if ( $parent ) { $title = _draft_or_post_title( $post->post_parent ); $parent_type = get_post_type_object( $parent->post_type ); + + if ( $parent_type && $parent_type->show_ui && current_user_can( 'edit_post', $post->post_parent ) ) { +?> + + post_parent ) ) { ?> - - show_ui && current_user_can( 'edit_post', $post->post_parent ) ) { ?> - - , -
- $post->post_parent, 'media[]' => $post->ID, '_wpnonce' => wp_create_nonce( 'bulk-' . $this->_args['plural'] ) - ), 'upload.php' ); ?> - - %s', + $detach_url, + /* translators: %s: title of the post the attachment is attached to */ + esc_attr( sprintf( __( 'Detach from “%s”' ), $title ) ), + __( 'Detach' ) + ); + endif; } else { - _e( '(Unattached)' ); ?>
- - - - + post_parent ); + printf( + '
%s', + $post->ID, + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Attach “%s” to existing content' ), $title ) ), + __( 'Attach' ) + ); + } } } @@ -480,7 +528,12 @@ class WP_Media_List_Table extends WP_List_Table { public function column_comments( $post ) { echo '
'; - $pending_comments = get_pending_comments_num( $post->ID ); + if ( isset( $this->comment_pending_count[ $post->ID ] ) ) { + $pending_comments = $this->comment_pending_count[ $post->ID ]; + } else { + $pending_comments = get_pending_comments_num( $post->ID ); + } + $this->comments_bubble( $post->ID, $pending_comments ); echo '
'; @@ -496,9 +549,9 @@ class WP_Media_List_Table extends WP_List_Table { * @param string $column_name Current column name. */ public function column_default( $post, $column_name ) { - if ( 'categories' == $column_name ) { + if ( 'categories' === $column_name ) { $taxonomy = 'category'; - } elseif ( 'tags' == $column_name ) { + } elseif ( 'tags' === $column_name ) { $taxonomy = 'post_tag'; } elseif ( 0 === strpos( $column_name, 'taxonomy-' ) ) { $taxonomy = substr( $column_name, 9 ); @@ -547,14 +600,19 @@ class WP_Media_List_Table extends WP_List_Table { * @global WP_Post $post */ public function display_rows() { - global $post; + global $post, $wp_query; + + $post_ids = wp_list_pluck( $wp_query->posts, 'ID' ); + reset( $wp_query->posts ); + + $this->comment_pending_count = get_pending_comments_num( $post_ids ); add_filter( 'the_title','esc_html' ); while ( have_posts() ) : the_post(); if ( ( $this->is_trash && $post->post_status != 'trash' ) - || ( ! $this->is_trash && $post->post_status == 'trash' ) + || ( ! $this->is_trash && $post->post_status === 'trash' ) ) { continue; } @@ -589,40 +647,107 @@ class WP_Media_List_Table extends WP_List_Table { $actions = array(); if ( $this->detached ) { - if ( current_user_can( 'edit_post', $post->ID ) ) - $actions['edit'] = '' . __( 'Edit' ) . ''; - if ( current_user_can( 'delete_post', $post->ID ) ) + if ( current_user_can( 'edit_post', $post->ID ) ) { + $actions['edit'] = sprintf( + '%s', + get_edit_post_link( $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Edit “%s”' ), $att_title ) ), + __( 'Edit' ) + ); + } + if ( current_user_can( 'delete_post', $post->ID ) ) { if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) { - $actions['trash'] = "ID ) . "'>" . __( 'Trash' ) . ""; + $actions['trash'] = sprintf( + '%s', + wp_nonce_url( "post.php?action=trash&post=$post->ID", 'trash-post_' . $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Move “%s” to the Trash' ), $att_title ) ), + _x( 'Trash', 'verb' ) + ); } else { - $delete_ays = !MEDIA_TRASH ? " onclick='return showNotice.warn();'" : ''; - $actions['delete'] = "ID ) . "'>" . __( 'Delete Permanently' ) . ""; + $delete_ays = ! MEDIA_TRASH ? " onclick='return showNotice.warn();'" : ''; + $actions['delete'] = sprintf( + '%s', + wp_nonce_url( "post.php?action=delete&post=$post->ID", 'delete-post_' . $post->ID ), + $delete_ays, + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Delete “%s” permanently' ), $att_title ) ), + __( 'Delete Permanently' ) + ); } - $actions['view'] = '' . __( 'View' ) . ''; - if ( current_user_can( 'edit_post', $post->ID ) ) - $actions['attach'] = ''.__( 'Attach' ).''; + } + $actions['view'] = sprintf( + '%s', + get_permalink( $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'View “%s”' ), $att_title ) ), + __( 'View' ) + ); + + if ( current_user_can( 'edit_post', $post->ID ) ) { + $actions['attach'] = sprintf( + '%s', + $post->ID, + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Attach “%s” to existing content' ), $att_title ) ), + __( 'Attach' ) + ); + } } else { - if ( current_user_can( 'edit_post', $post->ID ) && !$this->is_trash ) - $actions['edit'] = '' . __( 'Edit' ) . ''; + if ( current_user_can( 'edit_post', $post->ID ) && !$this->is_trash ) { + $actions['edit'] = sprintf( + '%s', + get_edit_post_link( $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Edit “%s”' ), $att_title ) ), + __( 'Edit' ) + ); + } if ( current_user_can( 'delete_post', $post->ID ) ) { - if ( $this->is_trash ) - $actions['untrash'] = "ID ) . "'>" . __( 'Restore' ) . ""; - elseif ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) - $actions['trash'] = "ID ) . "'>" . __( 'Trash' ) . ""; - if ( $this->is_trash || !EMPTY_TRASH_DAYS || !MEDIA_TRASH ) { + if ( $this->is_trash ) { + $actions['untrash'] = sprintf( + '%s', + wp_nonce_url( "post.php?action=untrash&post=$post->ID", 'untrash-post_' . $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Restore “%s” from the Trash' ), $att_title ) ), + __( 'Restore' ) + ); + } elseif ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) { + $actions['trash'] = sprintf( + '%s', + wp_nonce_url( "post.php?action=trash&post=$post->ID", 'trash-post_' . $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Move “%s” to the Trash' ), $att_title ) ), + _x( 'Trash', 'verb' ) + ); + } + if ( $this->is_trash || ! EMPTY_TRASH_DAYS || ! MEDIA_TRASH ) { $delete_ays = ( !$this->is_trash && !MEDIA_TRASH ) ? " onclick='return showNotice.warn();'" : ''; - $actions['delete'] = "ID ) . "'>" . __( 'Delete Permanently' ) . ""; + $actions['delete'] = sprintf( + '%s', + wp_nonce_url( "post.php?action=delete&post=$post->ID", 'delete-post_' . $post->ID ), + $delete_ays, + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'Delete “%s” permanently' ), $att_title ) ), + __( 'Delete Permanently' ) + ); } } - if ( !$this->is_trash ) { - $title =_draft_or_post_title( $post->post_parent ); - $actions['view'] = '' . __( 'View' ) . ''; + if ( ! $this->is_trash ) { + $actions['view'] = sprintf( + '%s', + get_permalink( $post->ID ), + /* translators: %s: attachment title */ + esc_attr( sprintf( __( 'View “%s”' ), $att_title ) ), + __( 'View' ) + ); } } /** - * Filter the action links for each attachment in the Media list table. + * Filters the action links for each attachment in the Media list table. * * @since 2.8.0 *