diff -r 2f6f6f7551ca -r 32102edaa81b web/wp-admin/includes/class-wp-posts-list-table.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-admin/includes/class-wp-posts-list-table.php Mon Nov 19 18:26:13 2012 +0100
@@ -0,0 +1,1056 @@
+post_type;
+ $post_type_object = get_post_type_object( $post_type );
+
+ if ( !current_user_can( $post_type_object->cap->edit_others_posts ) ) {
+ $this->user_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 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 != 'trash' AND ID IN ($sticky_posts)", $post_type ) );
+ }
+
+ parent::__construct( array(
+ 'plural' => 'posts',
+ ) );
+ }
+
+ function ajax_user_can() {
+ global $post_type_object;
+
+ return current_user_can( $post_type_object->cap->edit_posts );
+ }
+
+ function prepare_items() {
+ global $post_type_object, $avail_post_stati, $wp_query, $per_page, $mode;
+
+ $avail_post_stati = wp_edit_posts_query();
+
+ $this->hierarchical_display = ( $post_type_object->hierarchical && 'menu_order title' == $wp_query->query['orderby'] );
+
+ $total_items = $this->hierarchical_display ? $wp_query->post_count : $wp_query->found_posts;
+
+ $post_type = $post_type_object->name;
+ $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() {
+ global $post_type_object;
+
+ if ( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] )
+ echo $post_type_object->labels->not_found_in_trash;
+ else
+ echo $post_type_object->labels->not_found;
+ }
+
+ function get_views() {
+ global $post_type_object, $locked_post_status, $avail_post_stati;
+
+ $post_type = $post_type_object->name;
+
+ 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 $post_type_object, $cat;
+?>
+
+months_dropdown( $post_type_object->name );
+
+ if ( is_object_in_taxonomy( $post_type_object->name, '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' ), 'secondary', false, false, array( 'id' => 'post-query-submit' ) );
+ }
+
+ if ( $this->is_trash && current_user_can( $post_type_object->cap->edit_others_posts ) ) {
+ submit_button( __( 'Empty Trash' ), 'button-secondary apply', 'delete_all', false );
+ }
+?>
+
+hierarchical )
+ $this->view_switcher( $mode );
+ }
+
+ function get_table_classes() {
+ global $post_type_object;
+
+ return array( 'widefat', 'fixed', $post_type_object->hierarchical ? 'pages' : 'posts' );
+ }
+
+ function get_columns() {
+ $screen = get_current_screen();
+
+ if ( empty( $screen ) )
+ $post_type = 'post';
+ else
+ $post_type = $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 ) {
+ $attributes = 'class="post-title page-title column-title"' . $style;
+
+ 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_page( $find_main_page );
+
+ if ( is_null( $parent ) )
+ break;
+
+ $level++;
+ $find_main_page = (int) $parent->post_parent;
+
+ if ( !isset( $parent_name ) )
+ $parent_name = apply_filters( 'the_title', $parent->post_title, $parent->ID );
+ }
+ }
+
+ $pad = str_repeat( '— ', $level );
+?>
+ >post_status != 'trash' ) { ?>labels->parent_item_colon . ' ' . esc_html( $parent_name ) : ''; ?>
+
+ | >post_status != 'trash' ) { ?>
+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( $post_type_object->cap->delete_post, $post->ID ) ) {
+ if ( 'trash' == $post->post_status )
+ $actions['untrash'] = "ID ) ), 'untrash-' . $post->post_type . '_' . $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 && 'date' == $column_name ) {
+ $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 < 24*60*60 )
+ $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 'categories':
+ ?>
+ >%s',
+ esc_url( add_query_arg( array( 'post_type' => $post->post_type, 'category_name' => $c->slug ), 'edit.php' ) ),
+ esc_html( sanitize_term_field( 'name', $c->name, $c->term_id, 'category', 'display' ) )
+ );
+ }
+ /* translators: used between list items, there is a space after the comma */
+ echo join( __( ', ' ), $out );
+ } else {
+ _e( 'Uncategorized' );
+ }
+ ?> |
+
+ >ID );
+ if ( !empty( $tags ) ) {
+ $out = array();
+ foreach ( $tags as $c ) {
+ $out[] = sprintf( '%s',
+ esc_url( add_query_arg( array( 'post_type' => $post->post_type, 'tag' => $c->slug ), 'edit.php' ) ),
+ esc_html( sanitize_term_field( 'name', $c->name, $c->term_id, 'tag', 'display' ) )
+ );
+ }
+ /* translators: used between list items, there is a space after the comma */
+ echo join( __( ', ' ), $out );
+ } else {
+ _e( 'No Tags' );
+ }
+ ?> |
+
+ >
+ 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()
+ );
+ ?> |
+
+ >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 );
+ ?> |
+
+
+ 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 );
+
+ ?>
+
+