diff -r 000000000000 -r d970ebf37754 wp/wp-admin/includes/class-wp-posts-list-table.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wp/wp-admin/includes/class-wp-posts-list-table.php Wed Nov 06 03:21:17 2013 +0000
@@ -0,0 +1,1104 @@
+ 'posts',
+ 'screen' => isset( $args['screen'] ) ? $args['screen'] : null,
+ ) );
+
+ $post_type = $this->screen->post_type;
+ $post_type_object = get_post_type_object( $post_type );
+
+ if ( !current_user_can( $post_type_object->cap->edit_others_posts ) ) {
+ $exclude_states = get_post_stati( array( 'show_in_admin_all_list' => false ) );
+ $this->user_posts_count = $wpdb->get_var( $wpdb->prepare( "
+ SELECT COUNT( 1 ) FROM $wpdb->posts
+ WHERE post_type = %s AND post_status NOT IN ( '" . implode( "','", $exclude_states ) . "' )
+ AND post_author = %d
+ ", $post_type, get_current_user_id() ) );
+
+ if ( $this->user_posts_count && empty( $_REQUEST['post_status'] ) && empty( $_REQUEST['all_posts'] ) && empty( $_REQUEST['author'] ) && empty( $_REQUEST['show_sticky'] ) )
+ $_GET['author'] = get_current_user_id();
+ }
+
+ if ( 'post' == $post_type && $sticky_posts = get_option( 'sticky_posts' ) ) {
+ $sticky_posts = implode( ', ', array_map( 'absint', (array) $sticky_posts ) );
+ $this->sticky_posts_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( 1 ) FROM $wpdb->posts WHERE post_type = %s AND post_status NOT IN ('trash', 'auto-draft') AND ID IN ($sticky_posts)", $post_type ) );
+ }
+ }
+
+ function ajax_user_can() {
+ return current_user_can( get_post_type_object( $this->screen->post_type )->cap->edit_posts );
+ }
+
+ function prepare_items() {
+ global $avail_post_stati, $wp_query, $per_page, $mode;
+
+ $avail_post_stati = wp_edit_posts_query();
+
+ $this->hierarchical_display = ( is_post_type_hierarchical( $this->screen->post_type ) && 'menu_order title' == $wp_query->query['orderby'] );
+
+ $total_items = $this->hierarchical_display ? $wp_query->post_count : $wp_query->found_posts;
+
+ $post_type = $this->screen->post_type;
+ $per_page = $this->get_items_per_page( 'edit_' . $post_type . '_per_page' );
+ $per_page = apply_filters( 'edit_posts_per_page', $per_page, $post_type );
+
+ if ( $this->hierarchical_display )
+ $total_pages = ceil( $total_items / $per_page );
+ else
+ $total_pages = $wp_query->max_num_pages;
+
+ $mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode'];
+
+ $this->is_trash = isset( $_REQUEST['post_status'] ) && $_REQUEST['post_status'] == 'trash';
+
+ $this->set_pagination_args( array(
+ 'total_items' => $total_items,
+ 'total_pages' => $total_pages,
+ 'per_page' => $per_page
+ ) );
+ }
+
+ function has_items() {
+ return have_posts();
+ }
+
+ function no_items() {
+ if ( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] )
+ echo get_post_type_object( $this->screen->post_type )->labels->not_found_in_trash;
+ else
+ echo get_post_type_object( $this->screen->post_type )->labels->not_found;
+ }
+
+ function get_views() {
+ global $locked_post_status, $avail_post_stati;
+
+ $post_type = $this->screen->post_type;
+
+ if ( !empty($locked_post_status) )
+ return array();
+
+ $status_links = array();
+ $num_posts = wp_count_posts( $post_type, 'readable' );
+ $class = '';
+ $allposts = '';
+
+ $current_user_id = get_current_user_id();
+
+ if ( $this->user_posts_count ) {
+ if ( isset( $_GET['author'] ) && ( $_GET['author'] == $current_user_id ) )
+ $class = ' class="current"';
+ $status_links['mine'] = "" . sprintf( _nx( 'Mine (%s)', 'Mine (%s)', $this->user_posts_count, 'posts' ), number_format_i18n( $this->user_posts_count ) ) . '';
+ $allposts = '&all_posts=1';
+ }
+
+ $total_posts = array_sum( (array) $num_posts );
+
+ // Subtract post types that are not included in the admin all list.
+ foreach ( get_post_stati( array('show_in_admin_all_list' => false) ) as $state )
+ $total_posts -= $num_posts->$state;
+
+ $class = empty( $class ) && empty( $_REQUEST['post_status'] ) && empty( $_REQUEST['show_sticky'] ) ? ' class="current"' : '';
+ $status_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_posts, 'posts' ), number_format_i18n( $total_posts ) ) . '';
+
+ foreach ( get_post_stati(array('show_in_admin_status_list' => true), 'objects') as $status ) {
+ $class = '';
+
+ $status_name = $status->name;
+
+ if ( !in_array( $status_name, $avail_post_stati ) )
+ continue;
+
+ if ( empty( $num_posts->$status_name ) )
+ continue;
+
+ if ( isset($_REQUEST['post_status']) && $status_name == $_REQUEST['post_status'] )
+ $class = ' class="current"';
+
+ $status_links[$status_name] = "" . sprintf( translate_nooped_plural( $status->label_count, $num_posts->$status_name ), number_format_i18n( $num_posts->$status_name ) ) . '';
+ }
+
+ if ( ! empty( $this->sticky_posts_count ) ) {
+ $class = ! empty( $_REQUEST['show_sticky'] ) ? ' class="current"' : '';
+
+ $sticky_link = array( 'sticky' => "" . sprintf( _nx( 'Sticky (%s)', 'Sticky (%s)', $this->sticky_posts_count, 'posts' ), number_format_i18n( $this->sticky_posts_count ) ) . '' );
+
+ // Sticky comes after Publish, or if not listed, after All.
+ $split = 1 + array_search( ( isset( $status_links['publish'] ) ? 'publish' : 'all' ), array_keys( $status_links ) );
+ $status_links = array_merge( array_slice( $status_links, 0, $split ), $sticky_link, array_slice( $status_links, $split ) );
+ }
+
+ return $status_links;
+ }
+
+ function get_bulk_actions() {
+ $actions = array();
+
+ if ( $this->is_trash )
+ $actions['untrash'] = __( 'Restore' );
+ else
+ $actions['edit'] = __( 'Edit' );
+
+ if ( $this->is_trash || !EMPTY_TRASH_DAYS )
+ $actions['delete'] = __( 'Delete Permanently' );
+ else
+ $actions['trash'] = __( 'Move to Trash' );
+
+ return $actions;
+ }
+
+ function extra_tablenav( $which ) {
+ global $cat;
+?>
+
+months_dropdown( $this->screen->post_type );
+
+ if ( is_object_in_taxonomy( $this->screen->post_type, 'category' ) ) {
+ $dropdown_options = array(
+ 'show_option_all' => __( 'View all categories' ),
+ 'hide_empty' => 0,
+ 'hierarchical' => 1,
+ 'show_count' => 0,
+ 'orderby' => 'name',
+ 'selected' => $cat
+ );
+ wp_dropdown_categories( $dropdown_options );
+ }
+ do_action( 'restrict_manage_posts' );
+ submit_button( __( 'Filter' ), 'button', false, false, array( 'id' => 'post-query-submit' ) );
+ }
+
+ if ( $this->is_trash && current_user_can( get_post_type_object( $this->screen->post_type )->cap->edit_others_posts ) ) {
+ submit_button( __( 'Empty Trash' ), 'apply', 'delete_all', false );
+ }
+?>
+
+screen->post_type ) )
+ $this->view_switcher( $mode );
+ }
+
+ function get_table_classes() {
+ return array( 'widefat', 'fixed', is_post_type_hierarchical( $this->screen->post_type ) ? 'pages' : 'posts' );
+ }
+
+ function get_columns() {
+ $post_type = $this->screen->post_type;
+
+ $posts_columns = array();
+
+ $posts_columns['cb'] = '
+ 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':
+ ?>
+
+
+
+
+
+
+ |
+ hierarchical_display ) {
+ if ( 0 == $level && (int) $post->post_parent > 0 ) {
+ //sent level 0 by accident, by default, or because we don't know the actual level
+ $find_main_page = (int) $post->post_parent;
+ while ( $find_main_page > 0 ) {
+ $parent = get_post( $find_main_page );
+
+ if ( is_null( $parent ) )
+ break;
+
+ $level++;
+ $find_main_page = (int) $parent->post_parent;
+
+ if ( !isset( $parent_name ) ) {
+ /** This filter is documented in wp-includes/post-template.php */
+ $parent_name = apply_filters( 'the_title', $parent->post_title, $parent->ID );
+ }
+ }
+ }
+ }
+
+ $pad = str_repeat( '— ', $level );
+ echo "";
+
+ if ( $format = get_post_format( $post->ID ) ) {
+ $label = get_post_format_string( $format );
+
+ echo '' . $label . ": ";
+ }
+
+ if ( $can_edit_post && $post->post_status != 'trash' ) {
+ echo '' . $pad . $title . '';
+ } else {
+ echo $pad . $title;
+ }
+ _post_states( $post );
+
+ if ( isset( $parent_name ) )
+ echo ' | ' . $post_type_object->labels->parent_item_colon . ' ' . esc_html( $parent_name );
+
+ echo "\n";
+
+ if ( $can_edit_post && $post->post_status != 'trash' ) {
+ if ( $lock_holder ) {
+ $locked_avatar = get_avatar( $lock_holder->ID, 18 );
+ $locked_text = esc_html( sprintf( __( '%s is currently editing' ), $lock_holder->display_name ) );
+ } else {
+ $locked_avatar = $locked_text = '';
+ }
+
+ echo ' ' . $locked_avatar . ' ' . $locked_text . " \n";
+ }
+
+ if ( ! $this->hierarchical_display && 'excerpt' == $mode && current_user_can( 'read_post', $post->ID ) )
+ the_excerpt();
+
+ $actions = array();
+ if ( $can_edit_post && 'trash' != $post->post_status ) {
+ $actions['edit'] = '' . __( 'Edit' ) . '';
+ $actions['inline hide-if-no-js'] = '' . __( 'Quick Edit' ) . '';
+ }
+ if ( current_user_can( 'delete_post', $post->ID ) ) {
+ if ( 'trash' == $post->post_status )
+ $actions['untrash'] = "ID ) ), 'untrash-post_' . $post->ID ) . "'>" . __( 'Restore' ) . "";
+ elseif ( EMPTY_TRASH_DAYS )
+ $actions['trash'] = "" . __( 'Trash' ) . "";
+ if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS )
+ $actions['delete'] = "" . __( 'Delete Permanently' ) . "";
+ }
+ if ( $post_type_object->public ) {
+ if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) {
+ if ( $can_edit_post )
+ $actions['view'] = '' . __( 'Preview' ) . '';
+ } elseif ( 'trash' != $post->post_status ) {
+ $actions['view'] = '' . __( 'View' ) . '';
+ }
+ }
+
+ $actions = apply_filters( is_post_type_hierarchical( $post->post_type ) ? 'page_row_actions' : 'post_row_actions', $actions, $post );
+ echo $this->row_actions( $actions );
+
+ get_inline_data( $post );
+ echo ' | ';
+ break;
+
+ case 'date':
+ if ( '0000-00-00 00:00:00' == $post->post_date ) {
+ $t_time = $h_time = __( 'Unpublished' );
+ $time_diff = 0;
+ } else {
+ $t_time = get_the_time( __( 'Y/m/d g:i:s A' ) );
+ $m_time = $post->post_date;
+ $time = get_post_time( 'G', true, $post );
+
+ $time_diff = time() - $time;
+
+ if ( $time_diff > 0 && $time_diff < DAY_IN_SECONDS )
+ $h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) );
+ else
+ $h_time = mysql2date( __( 'Y/m/d' ), $m_time );
+ }
+
+ echo '';
+ if ( 'excerpt' == $mode )
+ echo apply_filters( 'post_date_column_time', $t_time, $post, $column_name, $mode );
+ else
+ echo '' . apply_filters( 'post_date_column_time', $h_time, $post, $column_name, $mode ) . '';
+ echo ' ';
+ if ( 'publish' == $post->post_status ) {
+ _e( 'Published' );
+ } elseif ( 'future' == $post->post_status ) {
+ if ( $time_diff > 0 )
+ echo '' . __( 'Missed schedule' ) . '';
+ else
+ _e( 'Scheduled' );
+ } else {
+ _e( 'Last Modified' );
+ }
+ echo ' | ';
+ break;
+
+ case 'comments':
+ ?>
+ >
+ comment_pending_count[$post->ID] ) ? $this->comment_pending_count[$post->ID] : 0;
+
+ $this->comments_bubble( $post->ID, $pending_comments );
+ ?>
+ |
+
+ >%s',
+ esc_url( add_query_arg( array( 'post_type' => $post->post_type, 'author' => get_the_author_meta( 'ID' ) ), 'edit.php' )),
+ get_the_author()
+ );
+ ?> |
+ ';
+ if ( $terms = get_the_terms( $post->ID, $taxonomy ) ) {
+ $out = array();
+ foreach ( $terms as $t ) {
+ $posts_in_term_qv = array();
+ if ( 'post' != $post->post_type )
+ $posts_in_term_qv['post_type'] = $post->post_type;
+ if ( $taxonomy_object->query_var ) {
+ $posts_in_term_qv[ $taxonomy_object->query_var ] = $t->slug;
+ } else {
+ $posts_in_term_qv['taxonomy'] = $taxonomy;
+ $posts_in_term_qv['term'] = $t->slug;
+ }
+
+ $out[] = sprintf( '%s',
+ esc_url( add_query_arg( $posts_in_term_qv, 'edit.php' ) ),
+ esc_html( sanitize_term_field( 'name', $t->name, $t->term_id, $taxonomy, 'display' ) )
+ );
+ }
+ /* translators: used between list items, there is a space after the comma */
+ echo join( __( ', ' ), $out );
+ } else {
+ echo '—';
+ }
+ echo '';
+ break;
+ }
+ ?>
+ >post_type ) )
+ do_action( 'manage_pages_custom_column', $column_name, $post->ID );
+ else
+ do_action( 'manage_posts_custom_column', $column_name, $post->ID );
+ do_action( "manage_{$post->post_type}_posts_custom_column", $column_name, $post->ID );
+ ?> |
+
+
+ screen;
+
+ $post = get_default_post_to_edit( $screen->post_type );
+ $post_type_object = get_post_type_object( $screen->post_type );
+
+ $taxonomy_names = get_object_taxonomies( $screen->post_type );
+ $hierarchical_taxonomies = array();
+ $flat_taxonomies = array();
+ foreach ( $taxonomy_names as $taxonomy_name ) {
+ $taxonomy = get_taxonomy( $taxonomy_name );
+
+ if ( !$taxonomy->show_ui )
+ continue;
+
+ if ( $taxonomy->hierarchical )
+ $hierarchical_taxonomies[] = $taxonomy;
+ else
+ $flat_taxonomies[] = $taxonomy;
+ }
+
+ $m = ( isset( $mode ) && 'excerpt' == $mode ) ? 'excerpt' : 'list';
+ $can_publish = current_user_can( $post_type_object->cap->publish_posts );
+ $core_columns = array( 'cb' => true, 'date' => true, 'title' => true, 'categories' => true, 'tags' => true, 'comments' => true, 'author' => true );
+
+ ?>
+
+