X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/6c8f14c09105d0afa4c1574215c59b5021040e76..53f4633144ed68c8b8fb5861f992b5489894a940:/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 2c2bf7c3..9c61fc28 100644
--- a/wp-admin/includes/class-wp-media-list-table.php
+++ b/wp-admin/includes/class-wp-media-list-table.php
@@ -9,8 +9,27 @@
*/
class WP_Media_List_Table extends WP_List_Table {
- function __construct( $args = array() ) {
- $this->detached = isset( $_REQUEST['detached'] ) || isset( $_REQUEST['find_detached'] );
+ private $detached;
+
+ private $is_trash;
+
+ /**
+ * 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() ) {
+ $this->detached = ( isset( $_REQUEST['attachment-filter'] ) && 'detached' === $_REQUEST['attachment-filter'] );
+
+ $this->modes = array(
+ 'list' => __( 'List View' ),
+ 'grid' => __( 'Grid View' )
+ );
parent::__construct( array(
'plural' => 'media',
@@ -18,21 +37,29 @@ class WP_Media_List_Table extends WP_List_Table {
) );
}
- function ajax_user_can() {
+ /**
+ *
+ * @return bool
+ */
+ public function ajax_user_can() {
return current_user_can('upload_files');
}
- function prepare_items() {
- global $lost, $wpdb, $wp_query, $post_mime_types, $avail_post_mime_types;
-
- $q = $_REQUEST;
+ /**
+ *
+ * @global WP_Query $wp_query
+ * @global array $post_mime_types
+ * @global array $avail_post_mime_types
+ * @global string $mode
+ */
+ public function prepare_items() {
+ global $wp_query, $post_mime_types, $avail_post_mime_types, $mode;
- if ( !empty( $lost ) )
- $q['post__in'] = implode( ',', $lost );
+ list( $post_mime_types, $avail_post_mime_types ) = wp_edit_attachments_query( $_REQUEST );
- list( $post_mime_types, $avail_post_mime_types ) = wp_edit_attachments_query( $q );
+ $this->is_trash = isset( $_REQUEST['attachment-filter'] ) && 'trash' == $_REQUEST['attachment-filter'];
- $this->is_trash = isset( $_REQUEST['status'] ) && 'trash' == $_REQUEST['status'];
+ $mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode'];
$this->set_pagination_args( array(
'total_items' => $wp_query->found_posts,
@@ -41,103 +68,200 @@ class WP_Media_List_Table extends WP_List_Table {
) );
}
- function get_views() {
+ /**
+ *
+ * @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;
$type_links = array();
$_num_posts = (array) wp_count_attachments();
$_total_posts = array_sum($_num_posts) - $_num_posts['trash'];
- if ( !isset( $total_orphans ) )
- $total_orphans = $wpdb->get_var( "SELECT COUNT( * ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent < 1" );
+ $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));
- foreach ( $matches as $type => $reals )
- foreach ( $reals as $real )
+ $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];
-
- $class = ( empty($_GET['post_mime_type']) && !$this->detached && !isset($_GET['status']) ) ? ' class="current"' : '';
- $type_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $_total_posts, 'uploaded files' ), number_format_i18n( $_total_posts ) ) . '';
+ }
+ }
+ $selected = empty( $_GET['attachment-filter'] ) ? ' selected="selected"' : '';
+ $type_links['all'] = "';
foreach ( $post_mime_types as $mime_type => $label ) {
- $class = '';
-
if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) )
continue;
- if ( !empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) )
- $class = ' class="current"';
+ $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] = "" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), number_format_i18n( $num_posts[$mime_type] )) . '';
+ $type_links[$mime_type] = '';
}
- $type_links['detached'] = 'detached ? ' class="current"' : '' ) . '>' . sprintf( _nx( 'Unattached (%s)', 'Unattached (%s)', $total_orphans, 'detached files' ), number_format_i18n( $total_orphans ) ) . '';
+ $type_links['detached'] = '';
if ( !empty($_num_posts['trash']) )
- $type_links['trash'] = '' . sprintf( _nx( 'Trash (%s)', 'Trash (%s)', $_num_posts['trash'], 'uploaded files' ), number_format_i18n( $_num_posts['trash'] ) ) . '';
+ $type_links['trash'] = '';
return $type_links;
}
- function get_bulk_actions() {
+ /**
+ *
+ * @return array
+ */
+ protected function get_bulk_actions() {
$actions = array();
- $actions['delete'] = __( 'Delete Permanently' );
+ if ( MEDIA_TRASH ) {
+ if ( $this->is_trash ) {
+ $actions['untrash'] = __( 'Restore' );
+ $actions['delete'] = __( 'Delete Permanently' );
+ } else {
+ $actions['trash'] = __( 'Trash' );
+ }
+ } else {
+ $actions['delete'] = __( 'Delete Permanently' );
+ }
+
if ( $this->detached )
$actions['attach'] = __( 'Attach to a post' );
return $actions;
}
- function extra_tablenav( $which ) {
+ /**
+ * @param string $which
+ */
+ protected function extra_tablenav( $which ) {
+ if ( 'bar' !== $which ) {
+ return;
+ }
?>
-
+
detached && !$this->is_trash ) {
- $this->months_dropdown( 'attachment' );
+ if ( ! is_singular() ) {
+ if ( ! $this->is_trash ) {
+ $this->months_dropdown( 'attachment' );
+ }
+ /** This action is documented in wp-admin/includes/class-wp-posts-list-table.php */
do_action( 'restrict_manage_posts' );
- submit_button( __( 'Filter' ), 'button', false, false, array( 'id' => 'post-query-submit' ) );
+ submit_button( __( 'Filter' ), 'button', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
}
- if ( $this->detached ) {
- submit_button( __( 'Scan for lost attachments' ), 'secondary', 'find_detached', false );
- } elseif ( $this->is_trash && current_user_can( 'edit_others_posts' ) ) {
+ if ( $this->is_trash && current_user_can( 'edit_others_posts' ) ) {
submit_button( __( 'Empty Trash' ), 'apply', 'delete_all', false );
} ?>
get_views();
+?>
+
+
+ view_switcher( $mode ); ?>
+
+
+
+
+extra_tablenav( 'bar' );
+
+ /** This filter is documented in wp-admin/inclues/class-wp-list-table.php */
+ $views = apply_filters( "views_{$this->screen->id}", array() );
+
+ // Back compat for pre-4.0 view links.
+ if ( ! empty( $views ) ) {
+ echo '
';
+ foreach ( $views as $class => $view ) {
+ echo "- $view
";
+ }
+ echo '
';
+ }
+?>
+
+
+
+
+
+
+ ';
- $posts_columns['icon'] = '';
/* translators: column name */
$posts_columns['title'] = _x( 'File', 'column name' );
$posts_columns['author'] = __( 'Author' );
- $taxonomies = array();
-
$taxonomies = get_taxonomies_for_attachments( 'objects' );
$taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' );
+ /**
+ * Filter the taxonomy columns for attachments in the Media list table.
+ *
+ * @since 3.5.0
+ *
+ * @param array $taxonomies An array of registered taxonomies to show for attachments.
+ * @param string $post_type The post type. Default 'attachment'.
+ */
$taxonomies = apply_filters( 'manage_taxonomies_for_attachment_columns', $taxonomies, 'attachment' );
$taxonomies = array_filter( $taxonomies, 'taxonomy_exists' );
@@ -156,16 +280,27 @@ class WP_Media_List_Table extends WP_List_Table {
if ( !$this->detached ) {
$posts_columns['parent'] = _x( 'Uploaded to', 'column name' );
if ( post_type_supports( 'attachment', 'comments' ) )
- $posts_columns['comments'] = '
';
+ $posts_columns['comments'] = '';
}
/* translators: column name */
$posts_columns['date'] = _x( 'Date', 'column name' );
- $posts_columns = apply_filters( 'manage_media_columns', $posts_columns, $this->detached );
-
- return $posts_columns;
+ /**
+ * Filter the Media list table columns.
+ *
+ * @since 2.5.0
+ *
+ * @param array $posts_columns An array of columns displayed in the Media list table.
+ * @param bool $detached Whether the list table contains media not attached
+ * to any posts. Default true.
+ */
+ return apply_filters( 'manage_media_columns', $posts_columns, $this->detached );
}
- function get_sortable_columns() {
+ /**
+ *
+ * @return array
+ */
+ protected function get_sortable_columns() {
return array(
'title' => 'title',
'author' => 'author',
@@ -175,185 +310,205 @@ class WP_Media_List_Table extends WP_List_Table {
);
}
- function display_rows() {
- global $post, $id;
-
- add_filter( 'the_title','esc_html' );
- $alt = '';
-
- while ( have_posts() ) : the_post();
- $user_can_edit = current_user_can( 'edit_post', $post->ID );
-
- if ( $this->is_trash && $post->post_status != 'trash'
- || !$this->is_trash && $post->post_status == 'trash' )
- continue;
-
- $alt = ( 'alternate' == $alt ) ? '' : 'alternate';
- $post_owner = ( get_current_user_id() == $post->post_author ) ? 'self' : 'other';
- $att_title = _draft_or_post_title();
-?>
-
post_status ); ?>' valign="top">
-get_column_info();
-foreach ( $columns as $column_name => $column_display_name ) {
- $class = "class='$column_name column-$column_name'";
-
- $style = '';
- if ( in_array( $column_name, $hidden ) )
- $style = ' style="display:none;"';
-
- $attributes = $class . $style;
-
- switch ( $column_name ) {
-
- case 'cb':
-?>
-
-
-
-
-
- |
-
- >ID, array( 80, 60 ), true ) ) {
- if ( $this->is_trash || ! $user_can_edit ) {
- echo $thumb;
- } else {
-?>
-
-
-
+ /**
+ * Handles the checkbox column output.
+ *
+ * @since 4.3.0
+ * @access public
+ *
+ * @param WP_Post $post The current WP_Post object.
+ */
+ public function column_cb( $post ) {
+ if ( current_user_can( 'edit_post', $post->ID ) ) { ?>
+
+
+
- |
-post_mime_type );
+
+ $title = _draft_or_post_title();
+ $thumb = wp_get_attachment_image( $post->ID, array( 60, 60 ), true, array( 'alt' => '' ) );
+ $link_start = $link_end = '';
+
+ if ( current_user_can( 'edit_post', $post->ID ) && ! $this->is_trash ) {
+ $link_start = '';
+ $link_end = '';
+ }
- case 'title':
-?>
- >
- is_trash || ! $user_can_edit ) {
- echo $att_title;
- } else { ?>
-
-
-
-
-ID ), $matches ) )
- echo esc_html( strtoupper( $matches[1] ) );
- else
- echo strtoupper( str_replace( 'image/', '', get_post_mime_type() ) );
-?>
-
-row_actions( $this->_get_row_actions( $post, $att_title ) );
-?>
- |
-
+ >
+
+
+
+
+
+
+
+
+
+
+ guid ); ?>
+
- > |
-%s',
+ esc_url( add_query_arg( array( 'author' => get_the_author_meta('ID') ), 'upload.php' ) ),
+ get_the_author()
+ );
+ }
- case 'desc':
-?>
- >post_excerpt : ''; ?> |
-post_excerpt : '';
+ }
- case 'date':
+ /**
+ * Handles the date column output.
+ *
+ * @since 4.3.0
+ * @access public
+ *
+ * @param WP_Post $post The current WP_Post object.
+ */
+ public function column_date( $post ) {
if ( '0000-00-00 00:00:00' == $post->post_date ) {
$h_time = __( 'Unpublished' );
} else {
$m_time = $post->post_date;
$time = get_post_time( 'G', true, $post, false );
if ( ( abs( $t_diff = time() - $time ) ) < DAY_IN_SECONDS ) {
- if ( $t_diff < 0 )
+ if ( $t_diff < 0 ) {
$h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) );
- else
+ } else {
$h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) );
+ }
} else {
$h_time = mysql2date( __( 'Y/m/d' ), $m_time );
}
}
-?>
- > |
-ID );
+
if ( $post->post_parent > 0 ) {
- if ( get_post( $post->post_parent ) ) {
- $title =_draft_or_post_title( $post->post_parent );
- }
-?>
- >
- post_parent ) ) { ?>
-
- ,
-
- |
-post_parent );
} else {
+ $parent = false;
+ }
+
+ if ( $parent ) {
+ $title = _draft_or_post_title( $post->post_parent );
+ $parent_type = get_post_type_object( $parent->post_type );
?>
- >
-
+
+ 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' ); ?>
+
+
+
- |
-
- >
-
-ID );
+ /**
+ * Handles the comments column output.
+ *
+ * @since 4.3.0
+ * @access public
+ *
+ * @param WP_Post $post The current WP_Post object.
+ */
+ public function column_comments( $post ) {
+ echo ' ';
+ $pending_comments = get_pending_comments_num( $post->ID );
$this->comments_bubble( $post->ID, $pending_comments );
-?>
-
- |
-';
+ }
+
+ /**
+ * Handles output for the default column.
+ *
+ * @since 4.3.0
+ * @access public
+ *
+ * @param WP_Post $post The current WP_Post object.
+ * @param string $column_name Current column name.
+ */
+ public function column_default( $post, $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-' ) )
+ } elseif ( 0 === strpos( $column_name, 'taxonomy-' ) ) {
$taxonomy = substr( $column_name, 9 );
- else
+ } else {
$taxonomy = false;
+ }
if ( $taxonomy ) {
- $taxonomy_object = get_taxonomy( $taxonomy );
- echo '';
- if ( $terms = get_the_terms( $post->ID, $taxonomy ) ) {
+ $terms = get_the_terms( $post->ID, $taxonomy );
+ if ( is_array( $terms ) ) {
$out = array();
foreach ( $terms as $t ) {
$posts_in_term_qv = array();
@@ -368,30 +523,74 @@ foreach ( $columns as $column_name => $column_display_name ) {
/* translators: used between list items, there is a space after the comma */
echo join( __( ', ' ), $out );
} else {
- echo '—';
+ echo '—' . get_taxonomy( $taxonomy )->labels->no_terms . '';
}
- echo ' | ';
- break;
+
+ return;
}
-?>
- >
-
- |
-ID );
}
-}
-?>
-
-is_trash && $post->post_status != 'trash' )
+ || ( ! $this->is_trash && $post->post_status == 'trash' )
+ ) {
+ continue;
+ }
+ $post_owner = ( get_current_user_id() == $post->post_author ) ? 'self' : 'other';
+ ?>
+
+ single_row_columns( $post ); ?>
+
+ detached ) {
if ( current_user_can( 'edit_post', $post->ID ) )
- $actions['edit'] = '
' . __( 'Edit' ) . '';
+ $actions['edit'] = '
' . __( 'Edit' ) . '';
if ( current_user_can( 'delete_post', $post->ID ) )
if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) {
$actions['trash'] = "
ID ) . "'>" . __( 'Trash' ) . "";
@@ -405,7 +604,7 @@ foreach ( $columns as $column_name => $column_display_name ) {
}
else {
if ( current_user_can( 'edit_post', $post->ID ) && !$this->is_trash )
- $actions['edit'] = '
' . __( 'Edit' ) . '';
+ $actions['edit'] = '
' . __( 'Edit' ) . '';
if ( current_user_can( 'delete_post', $post->ID ) ) {
if ( $this->is_trash )
$actions['untrash'] = "
ID ) . "'>" . __( 'Restore' ) . "";
@@ -422,8 +621,37 @@ foreach ( $columns as $column_name => $column_display_name ) {
}
}
- $actions = apply_filters( 'media_row_actions', $actions, $post, $this->detached );
+ /**
+ * Filter the action links for each attachment in the Media list table.
+ *
+ * @since 2.8.0
+ *
+ * @param array $actions An array of action links for each attachment.
+ * Default 'Edit', 'Delete Permanently', 'View'.
+ * @param WP_Post $post WP_Post object for the current attachment.
+ * @param bool $detached Whether the list table contains media not attached
+ * to any posts. Default true.
+ */
+ return apply_filters( 'media_row_actions', $actions, $post, $this->detached );
+ }
- return $actions;
+ /**
+ * Generates and displays row action links.
+ *
+ * @since 4.3.0
+ * @access protected
+ *
+ * @param object $post Attachment being acted upon.
+ * @param string $column_name Current column name.
+ * @param string $primary Primary column name.
+ * @return string Row actions output for media attachments.
+ */
+ protected function handle_row_actions( $post, $column_name, $primary ) {
+ if ( $primary !== $column_name ) {
+ return '';
+ }
+
+ $att_title = _draft_or_post_title();
+ return $this->row_actions( $this->_get_row_actions( $post, $att_title ) );
}
}