<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; }
#msg ul, pre { overflow: auto; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<title>[15954] trunk/wp-admin: Shuffle list-table files.</title>
</head>
<body>
<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.wordpress.org/changeset/15954">15954</a></dd>
<dt>Author</dt> <dd>nacin</dd>
<dt>Date</dt> <dd>2010-10-25 00:12:41 +0000 (Mon, 25 Oct 2010)</dd>
</dl>
<h3>Log Message</h3>
<pre>Shuffle list-table files. First pass. see <a href="http://trac.wordpress.org/ticket/14579">#14579</a>.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkwpadminadminajaxphp">trunk/wp-admin/admin-ajax.php</a></li>
<li><a href="#trunkwpadminincludesadminphp">trunk/wp-admin/includes/admin.php</a></li>
<li><a href="#trunkwpadminincludesdefaultlisttablesphp">trunk/wp-admin/includes/default-list-tables.php</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkwpadminincludesclasswplisttablephp">trunk/wp-admin/includes/class-wp-list-table.php</a></li>
<li><a href="#trunkwpadminincludeslisttablepostsphp">trunk/wp-admin/includes/list-table-posts.php</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkwpadminincludeslisttablephp">trunk/wp-admin/includes/list-table.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkwpadminadminajaxphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/admin-ajax.php (15953 => 15954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/admin-ajax.php        2010-10-24 21:45:35 UTC (rev 15953)
+++ trunk/wp-admin/admin-ajax.php        2010-10-25 00:12:41 UTC (rev 15954)
</span><span class="lines">@@ -52,6 +52,8 @@
</span><span class="cx"> switch ( $action = $_GET['action'] ) :
</span><span class="cx"> case 'fetch-list' :
</span><span class="cx">         require_once( ABSPATH . '/wp-admin/includes/default-list-tables.php' );
</span><ins>+        // Temp
+        require_once( ABSPATH . '/wp-admin/includes/list-table-posts.php' );
</ins><span class="cx">
</span><span class="cx">         $class = $_GET['list_args']['class'];
</span><span class="cx">
</span></span></pre></div>
<a id="trunkwpadminincludesadminphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/admin.php (15953 => 15954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/admin.php        2010-10-24 21:45:35 UTC (rev 15953)
+++ trunk/wp-admin/includes/admin.php        2010-10-25 00:12:41 UTC (rev 15954)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> require_once(ABSPATH . 'wp-admin/includes/template.php');
</span><span class="cx">
</span><span class="cx"> /** WordPress List Table Administration API */
</span><del>-require_once(ABSPATH . 'wp-admin/includes/list-table.php');
</del><ins>+require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php');
</ins><span class="cx">
</span><span class="cx"> /** WordPress Theme Administration API */
</span><span class="cx"> require_once(ABSPATH . 'wp-admin/includes/theme.php');
</span></span></pre></div>
<a id="trunkwpadminincludesclasswplisttablephpfromrev15953trunkwpadminincludeslisttablephp"></a>
<div class="copfile"><h4>Copied: trunk/wp-admin/includes/class-wp-list-table.php (from rev 15953, trunk/wp-admin/includes/list-table.php) (0 => 15954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/class-wp-list-table.php         (rev 0)
+++ trunk/wp-admin/includes/class-wp-list-table.php        2010-10-25 00:12:41 UTC (rev 15954)
</span><span class="lines">@@ -0,0 +1,831 @@
</span><ins>+<?php
+
+/**
+ * Base class for displaying a list of items as an ajaxified html table
+ *
+ * @package WordPress
+ * @since 3.1.0
+ */
+class WP_List_Table {
+
+        /**
+         * The current list of items
+         *
+         * @since 3.1.0
+         * @var array
+         * @access protected
+         */
+        var $items;
+
+        /**
+         * Various information about the current table
+         *
+         * @since 3.1.0
+         * @var array
+         * @access private
+         */
+        var $_args;
+
+        /**
+         * Various information needed for displaying the pagination
+         *
+         * @since 3.1.0
+         * @var array
+         * @access private
+         */
+        var $_pagination_args = array();
+
+        /**
+         * The current screen
+         *
+         * @since 3.1.0
+         * @var object
+         * @access private
+         */
+        var $_screen;
+
+        /**
+         * Cached bulk actions
+         *
+         * @since 3.1.0
+         * @var array
+         * @access private
+         */
+        var $_actions;
+
+        /**
+         * Cached pagination output
+         *
+         * @since 3.1.0
+         * @var string
+         * @access private
+         */
+        var $_pagination;
+
+        /**
+         * Constructor. The child class should call this constructor from it's own constructor
+         *
+         * @param array $args An associative array with information about the current table
+         * @access protected
+         */
+        function WP_List_Table( $args ) {
+                $args = wp_parse_args( $args, array(
+                        'screen' => '',
+                        'plural' => '',
+                        'singular' => '',
+                        'ajax' => true
+                ) );
+
+                $this->_screen = $args['screen'];
+
+                if ( is_string( $this->_screen ) )
+                        $this->_screen = convert_to_screen( $this->_screen );
+
+                add_filter( 'manage_' . $this->_screen->id . '_columns', array( $this, 'get_columns' ), 0 );
+
+                if ( !$args['plural'] )
+                        $args['plural'] = $this->_screen->base;
+
+                $this->_args = $args;
+
+                if ( $args['ajax'] ) {
+                        wp_enqueue_script( 'list-table' );
+                        add_action( 'admin_footer', array( $this, '_js_vars' ) );
+                }
+        }
+
+        /**
+         * Checks the current user's permissions
+         * @uses wp_die()
+         *
+         * @since 3.1.0
+         * @access public
+         */
+        function check_permissions() {
+                die( 'function WP_List_Table::check_permissions() must be over-ridden in a sub-class.' );
+        }
+
+        /**
+         * Prepares the list of items for displaying.
+         * @uses WP_List_Table::set_pagination_args()
+         *
+         * @since 3.1.0
+         * @access public
+         */
+        function prepare_items() {
+                die( 'function WP_List_Table::prepare_items() must be over-ridden in a sub-class.' );
+        }
+
+        /**
+         * An internal method that sets all the necessary pagination arguments
+         *
+         * @param array $args An associative array with information about the pagination
+         * @access protected
+         */
+        function set_pagination_args( $args ) {
+                $args = wp_parse_args( $args, array(
+                        'query_var' => 'paged',
+                        'total_items' => 0,
+                        'total_pages' => 0,
+                        'per_page' => 0,
+                ) );
+
+                if ( !$args['total_pages'] && $args['per_page'] > 0 )
+                        $args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] );
+
+                $this->_pagination_args = $args;
+        }
+
+        /**
+         * Access the pagination args
+         *
+         * @since 3.1.0
+         * @access public
+         *
+         * @param string $key
+         * @return array
+         */
+        function get_pagination_arg( $key ) {
+                if ( 'page' == $key )
+                        return $this->get_pagenum();
+
+                if ( isset( $this->_pagination_args[$key] ) )
+                        return $this->_pagination_args[$key];
+        }
+
+        /**
+         * Whether the table has items to display or not
+         *
+         * @since 3.1.0
+         * @access public
+         *
+         * @return bool
+         */
+        function has_items() {
+                return !empty( $this->items );
+        }
+
+        /**
+         * Message to be displayed when there are no items
+         *
+         * @since 3.1.0
+         * @access public
+         */
+        function no_items() {
+                _e( 'No items found.' );
+        }
+
+        /**
+         * Get an associative array ( id => link ) with the list
+         * of views available on this table.
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @return array
+         */
+        function get_views() {
+                return array();
+        }
+
+        /**
+         * Display the bulk actions dropdown.
+         *
+         * @since 3.1.0
+         * @access public
+         */
+        function views() {
+                $views = $this->get_views();
+                $views = apply_filters( 'views_' . $this->_screen->base, $views );
+
+                if ( empty( $views ) )
+                        return;
+
+                echo "<ul class='subsubsub'>\n";
+                echo implode( " |</li>\n", $views ) . "</li>\n";
+                echo "</ul>";
+        }
+
+        /**
+         * Get an associative array ( option_name => option_title ) with the list
+         * of bulk actions available on this table.
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @return array
+         */
+        function get_bulk_actions() {
+                return array();
+        }
+
+        /**
+         * Display the bulk actions dropdown.
+         *
+         * @since 3.1.0
+         * @access public
+         */
+        function bulk_actions() {
+
+                if ( is_null( $this->_actions ) ) {
+                        $this->_actions = $this->get_bulk_actions();
+                        $this->_actions = apply_filters( 'bulk_actions-' . $this->_screen->base, $this->_actions );
+                        $two = '';
+                }
+                else {
+                        $two = '2';
+                }
+
+                if ( empty( $this->_actions ) )
+                        return;
+
+                echo "<select name='action$two'>\n";
+                echo "<option value='-1' selected='selected'>" . __( 'Bulk Actions' ) . "</option>\n";
+                foreach ( $this->_actions as $name => $title )
+                        echo "\t<option value='$name'>$title</option>\n";
+                echo "</select>\n";
+
+                echo "<input type='submit' value='" . esc_attr__( 'Apply' ) . "' name='doaction$two' id='doaction$two' class='button-secondary action' />\n";
+        }
+
+        /**
+         * Get the current action selected from the bulk actions dropdown.
+         *
+         * @since 3.1.0
+         * @access public
+         *
+         * @return string|bool The action name or False if no action was selected
+         */
+        function current_action() {
+                if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] )
+                        return $_REQUEST['action'];
+
+                if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] )
+                        return $_REQUEST['action2'];
+
+                return false;
+        }
+
+        /**
+         * Generate row actions div
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @param array $actions The list of actions
+         * @param bool $always_visible Wether the actions should be always visible
+         * @return string
+         */
+        function row_actions( $actions, $always_visible = false ) {
+                $action_count = count( $actions );
+                $i = 0;
+
+                if ( !$action_count )
+                        return '';
+
+                $out = '<div class="' . ( $always_visible ? 'row-actions-visible' : 'row-actions' ) . '">';
+                foreach ( $actions as $action => $link ) {
+                        ++$i;
+                        ( $i == $action_count ) ? $sep = '' : $sep = ' | ';
+                        $out .= "<span class='$action'>$link$sep</span>";
+                }
+                $out .= '</div>';
+
+                return $out;
+        }
+
+        /**
+         * Display a monthly dropdown for filtering items
+         *
+         * @since 3.1.0
+         * @access protected
+         */
+        function months_dropdown( $post_type ) {
+                global $wpdb, $wp_locale;
+
+                $months = $wpdb->get_results( $wpdb->prepare( "
+                        SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
+                        FROM $wpdb->posts
+                        WHERE post_type = %s
+                        ORDER BY post_date DESC
+                ", $post_type ) );
+
+                $month_count = count( $months );
+
+                if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) )
+                        return;
+
+                $m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0;
+?>
+                <select name='m'>
+                        <option<?php selected( $m, 0 ); ?> value='0'><?php _e( 'Show all dates' ); ?></option>
+<?php
+                foreach ( $months as $arc_row ) {
+                        if ( 0 == $arc_row->year )
+                                continue;
+
+                        $month = zeroise( $arc_row->month, 2 );
+                        $year = $arc_row->year;
+
+                        printf( "<option %s value='%s'>%s</option>\n",
+                                selected( $m, $year . $month, false ),
+                                esc_attr( $arc_row->year . $month ),
+                                $wp_locale->get_month( $month ) . " $year"
+                        );
+                }
+?>
+                </select>
+<?php
+        }
+
+        /**
+         * Display a view switcher
+         *
+         * @since 3.1.0
+         * @access protected
+         */
+        function view_switcher( $current_mode ) {
+                $modes = array(
+                        'list' => __( 'List View' ),
+                        'excerpt' => __( 'Excerpt View' )
+                );
+
+?>
+                <input type="hidden" name="mode" value="<?php echo esc_attr( $current_mode ); ?>" />
+                <div class="view-switch">
+<?php
+                        foreach ( $modes as $mode => $title ) {
+                                $class = ( $current_mode == $mode ) ? 'class="current"' : '';
+                                echo "<a href='" . esc_url( add_query_arg( 'mode', $mode, $_SERVER['REQUEST_URI'] ) ) . "' $class><img id='view-switch-$mode' src='" . esc_url( includes_url( 'images/blank.gif' ) ) . "' width='20' height='20' title='$title' alt='$title' /></a>\n";
+                        }
+                ?>
+                </div>
+<?php
+        }
+
+        /**
+         * Display a comment count bubble
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @param int $post_id
+         * @param int $pending_comments
+         */
+        function comments_bubble( $post_id, $pending_comments ) {
+                $pending_phrase = sprintf( __( '%s pending' ), number_format( $pending_comments ) );
+
+                if ( $pending_comments )
+                        echo '<strong>';
+
+                $link = "<a href='" . add_query_arg( 'p', $post_id, admin_url('edit-comments.php') ) . "' title='$pending_phrase' class='post-com-count'><span class='comment-count'>%s</span></a>";
+
+                comments_number(
+                        sprintf( $link, /* translators: comment count link */ _x( '0', 'comment count' ) ),
+                        sprintf( $link, /* translators: comment count link */ _x( '1', 'comment count' ) ),
+                        sprintf( $link, /* translators: comment count link: % will be substituted by comment count */ _x( '%', 'comment count' ) )
+                );
+
+                if ( $pending_comments )
+                        echo '</strong>';
+        }
+
+        /**
+         * Get the current page number
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @return int
+         */
+        function get_pagenum( $query_var = 'paged' ) {
+                $pagenum = isset( $_REQUEST[$query_var] ) ? absint( $_REQUEST[$query_var] ) : 0;
+
+                return max( 1, $pagenum );
+        }
+
+        /**
+         * Get number of items to display on a single page
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @return int
+         */
+        function get_items_per_page( $option, $default = 20 ) {
+                $per_page = (int) get_user_option( $option );
+                if ( empty( $per_page ) || $per_page < 1 )
+                        $per_page = $default;
+
+                return (int) apply_filters( $option, $per_page );
+        }
+
+        /**
+         * Display the pagination.
+         *
+         * @since 3.1.0
+         * @access protected
+         */
+        function pagination() {
+                if ( $this->_pagination ) {
+                        echo $this->_pagination;
+                        return;
+                }
+
+                if ( empty( $this->_pagination_args ) )
+                        return;
+
+                extract( $this->_pagination_args );
+
+                if ( $total_pages < 2 )
+                        return;
+
+                $output = '<span class="displaying-num">' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '</span>';
+
+                $current = $this->get_pagenum( $query_var );
+
+                $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+
+                $page_links = array();
+
+                $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+                        'first-page',
+                        esc_attr__( 'Go to the first page' ),
+                        esc_url( remove_query_arg( $query_var, $current_url ) ),
+                        '&laquo;&laquo;'
+                );
+
+                $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+                        'prev-page',
+                        esc_attr__( 'Go to the previous page' ),
+                        esc_url( add_query_arg( $query_var, max( 1, $current-1 ), $current_url ) ),
+                        '&laquo;'
+                );
+
+                $html_current_page = sprintf( "<input class='current-page' title='%s' type='text' name='%s' value='%s' size='%d' />",
+                        esc_attr__( 'Current page' ),
+                        esc_attr( $query_var ),
+                        number_format_i18n( $current ),
+                        strlen( $total_pages )
+                );
+                $html_total_pages = sprintf( "<span class='total-pages'>%s</span>", number_format_i18n( $total_pages ) );
+                $page_links[] = sprintf( _x( '%s of %s', 'paging' ), $html_current_page, $html_total_pages );
+
+                $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+                        'next-page',
+                        esc_attr__( 'Go to the next page' ),
+                        esc_url( add_query_arg( $query_var, min( $total_pages, $current+1 ), $current_url ) ),
+                        '&raquo;'
+                );
+
+                $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+                        'last-page',
+                        esc_attr__( 'Go to the last page' ),
+                        esc_url( add_query_arg( $query_var, $total_pages, $current_url ) ),
+                        '&raquo;&raquo;'
+                );
+
+                $output .= join( "\n", $page_links );
+
+                $this->_pagination = "<div class='tablenav-pages'>$output</div>";
+
+                echo $this->_pagination;
+        }
+
+        /**
+         * Get a list of columns. The format is internal_name => title
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @return array
+         */
+        function get_columns() {
+                die( 'function WP_List_Table::get_columns() must be over-ridden in a sub-class.' );
+        }
+
+        /**
+         * Get a list of sortable columns. The format is internal_name => orderby
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @return array
+         */
+        function get_sortable_columns() {
+                return array();
+        }
+
+        /**
+         * Get a list of all, hidden and sortable columns, with filter applied
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @return array
+         */
+        function get_column_info() {
+                if ( !isset( $this->_column_headers ) ) {
+                        $columns = get_column_headers( $this->_screen );
+                        $hidden = get_hidden_columns( $this->_screen );
+                        $sortable = apply_filters( 'manage_' . $this->_screen->id . '_sortable_columns', $this->get_sortable_columns() );
+
+                        $this->_column_headers = array( $columns, $hidden, $sortable );
+                }
+
+                return $this->_column_headers;
+        }
+
+        /**
+         * Print column headers, accounting for hidden and sortable columns.
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @param bool $with_id Whether to set the id attribute or not
+         */
+        function print_column_headers( $with_id = true ) {
+                $screen = $this->_screen;
+
+                list( $columns, $hidden, $sortable ) = $this->get_column_info();
+
+                $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+
+                if ( isset( $_GET['orderby'] ) )
+                        $current_orderby = $_GET['orderby'];
+                else
+                        $current_orderby = '';
+
+                if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] )
+                        $current_order = 'desc';
+                else
+                        $current_order = 'asc';
+
+                foreach ( $columns as $column_key => $column_display_name ) {
+                        $class = array( 'manage-column', "column-$column_key" );
+
+                        $style = '';
+                        if ( in_array( $column_key, $hidden ) )
+                                $style = 'display:none;';
+
+                        $style = ' style="' . $style . '"';
+
+                        if ( 'cb' == $column_key )
+                                $class[] = 'check-column';
+                        elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) )
+                                $class[] = 'num';
+
+                        if ( isset( $sortable[$column_key] ) ) {
+                                $orderby = $sortable[$column_key];
+                                if ( $current_orderby == $orderby ) {
+                                        $order = 'asc' == $current_order ? 'desc' : 'asc';
+                                        $class[] = "sorted-$current_order";
+                                } else {
+                                        $order = 'asc';
+                                        $class[] = 'sortable';
+                                }
+                                $column_display_name = '<a href="' . esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ) . '">' . $column_display_name . '</a>';
+                                $column_display_name .= '<div class="sorting-indicator"></div>';
+                        }
+
+                        $id = $with_id ? "id='$column_key'" : '';
+
+                        if ( !empty( $class ) )
+                                $class = "class='" . join( ' ', $class ) . "'";
+
+                        echo "<th scope='col' $id $class $style>$column_display_name</th>";
+                }
+        }
+
+        /**
+         * Display the table or a message if there are no items
+         *
+         * @since 3.1.0
+         * @access public
+         */
+        function display() {
+                if ( $this->has_items() ) {
+                        $this->display_table();
+                } else {
+                        echo '<br class="clear">';
+                        $this->extra_tablenav( 'top' );
+                        echo '<br class="clear">';
+                        echo '<p>';
+                        $this->no_items();
+                        echo '</p>';
+                }
+        }
+
+        /**
+         * Get a list of CSS classes for the <table> tag
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @return array
+         */
+        function get_table_classes() {
+                extract( $this->_args );
+
+                return array( 'widefat', 'fixed', $plural );
+        }
+
+        /**
+         * Display the full table
+         *
+         * @since 3.1.0
+         * @access public
+         */
+        function display_table() {
+                extract( $this->_args );
+
+                $this->display_tablenav( 'top' );
+
+?>
+<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
+        <thead>
+        <tr>
+                <?php $this->print_column_headers(); ?>
+        </tr>
+        </thead>
+
+        <tfoot>
+        <tr>
+                <?php $this->print_column_headers( false ); ?>
+        </tr>
+        </tfoot>
+
+        <tbody id="the-list"<?php if ( $singular ) echo " class='list:$singular'"; ?>>
+                <?php $this->display_rows(); ?>
+        </tbody>
+</table>
+<?php
+
+                $this->display_tablenav( 'bottom' );
+        }
+
+        /**
+         * Generate the table navigation above or below the table
+         *
+         * @since 3.1.0
+         * @access protected
+         */
+        function display_tablenav( $which ) {
+                if ( 'top' == $which )
+                        wp_nonce_field( 'bulk-' . $this->_args['plural'] );
+?>
+        <div class="tablenav">
+
+                <div class="alignleft actions">
+                        <?php $this->bulk_actions( $which ); ?>
+                </div>
+
+        <?php
+                $this->extra_tablenav( $which );
+                $this->pagination( $which );
+        ?>
+
+                <br class="clear">
+        </div>
+
+        <br class="clear">
+<?php
+        }
+
+        /**
+         * Extra controls to be displayed between bulk actions and pagination
+         *
+         * @since 3.1.0
+         * @access protected
+         */
+        function extra_tablenav( $which ) {}
+
+        /**
+         * Generate the <tbody> part of the table
+         *
+         * @since 3.1.0
+         * @access protected
+         */
+        function display_rows() {
+                foreach ( $this->items as $item )
+                        $this->single_row( $item );
+        }
+
+        /**
+         * Generates content for a single row of the table
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @param $object $item The current item
+         */
+        function single_row( $item ) {
+                static $row_class = '';
+                $row_class = ( $row_class == '' ? ' class="alternate"' : '' );
+
+                echo '<tr' . $row_class . '>';
+                echo $this->single_row_columns( $item );
+                echo '</tr>';
+        }
+
+        /**
+         * Generates the columns for a single row of the table
+         *
+         * @since 3.1.0
+         * @access protected
+         *
+         * @param $object $item The current item
+         */
+        function single_row_columns( $item ) {
+                list( $columns, $hidden ) = $this->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";
+
+                        if ( 'cb' == $column_name ) {
+                                echo '<th scope="row" class="check-column">';
+                                echo $this->column_cb( $item );
+                                echo '</th>';
+                        }
+                        elseif ( method_exists( $this, 'column_' . $column_name ) ) {
+                                echo "<td $attributes>";
+                                echo call_user_func( array( $this, 'column_' . $column_name ), $item );
+                                echo "</td>";
+                        }
+                        else {
+                                echo "<td $attributes>";
+                                echo $this->column_default( $item, $column_name );
+                                echo "</td>";
+                        }
+                }
+        }
+
+        /**
+         * Handle an incoming ajax request (called from admin-ajax.php)
+         *
+         * @since 3.1.0
+         * @access public
+         */
+        function ajax_response() {
+                $this->check_permissions();
+                $this->prepare_items();
+
+                extract( $this->_args );
+                extract( $this->_pagination_args );
+
+                ob_start();
+                $this->display_rows();
+                $rows = ob_get_clean();
+
+                $response = array( 'rows' => $rows );
+
+                if ( isset( $total_items ) )
+                        $response['total_items'] = sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) );
+
+                if ( isset( $total_pages ) )
+                        $response['total_pages'] = $total_pages;
+
+                die( json_encode( $response ) );
+        }
+
+        /**
+         * Send required variables to JavaScript land
+         *
+         * @access private
+         */
+        function _js_vars() {
+                extract( $this->_args );
+
+                $class = get_class( $this );
+
+                printf( "<script type='text/javascript'>list_args = %s;</script>\n",
+                        json_encode( compact( 'screen', 'class' ) )
+                );
+        }
+}
+
+/**
+ * Fetch an instance of a WP_List_Table class
+ *
+ * @since 3.1.0
+ *
+ * @param string $type The type of the list table
+ * @return object
+ */
+function get_list_table( $type ) {
+        require_once( ABSPATH . '/wp-admin/includes/default-list-tables.php' );
+        // Temp
+        require_once( ABSPATH . '/wp-admin/includes/list-table-posts.php' );
+
+        $class = 'WP_' . strtr( ucwords( strtr( $type, '-', ' ') ), ' ', '_' ) . '_Table';
+        $class = apply_filters( "get_list_table_$type", $class );
+
+        return new $class;
+}
+
</ins></span></pre></div>
<a id="trunkwpadminincludesdefaultlisttablesphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/default-list-tables.php (15953 => 15954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/default-list-tables.php        2010-10-24 21:45:35 UTC (rev 15953)
+++ trunk/wp-admin/includes/default-list-tables.php        2010-10-25 00:12:41 UTC (rev 15954)
</span><span class="lines">@@ -9,979 +9,6 @@
</span><span class="cx"> * @subpackage Administration
</span><span class="cx"> */
</span><span class="cx">
</span><del>-class WP_Posts_Table extends WP_List_Table {
-
-        /**
-         * Whether the items should be displayed hierarchically or linearly
-         *
-         * @since 3.1.0
-         * @var bool
-         * @access protected
-         */
-        var $hierarchical_display;
-
-        /**
-         * Holds the number of pending comments for each post
-         *
-         * @since 3.1.0
-         * @var bool
-         * @access protected
-         */
-        var $comment_pending_count;
-
-        /**
-         * Holds the number of posts for this user
-         *
-         * @since 3.1.0
-         * @var bool
-         * @access private
-         */
-        var $user_posts_count;
-
-        function WP_Posts_Table() {
-                global $post_type_object, $post_type, $current_screen, $wpdb;
-
-                if ( !isset( $_REQUEST['post_type'] ) )
-                        $post_type = 'post';
-                elseif ( in_array( $_REQUEST['post_type'], get_post_types( array( 'show_ui' => true ) ) ) )
-                        $post_type = $_REQUEST['post_type'];
-                else
-                        wp_die( __( 'Invalid post type' ) );
-                $_REQUEST['post_type'] = $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'] ) )
-                                $_GET['author'] = get_current_user_id();
-                }
-
-                parent::WP_List_Table( array(
-                        'screen' => $current_screen,
-                        'plural' => 'posts',
-                ) );
-        }
-
-        function check_permissions() {
-                global $post_type_object;
-
-                if ( !current_user_can( $post_type_object->cap->edit_posts ) )
-                        wp_die( __( 'Cheatin&#8217; uh?' ) );
-        }
-
-        function prepare_items() {
-                global $post_type_object, $post_type, $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;
-
-                $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, $post_type_object, $locked_post_status, $avail_post_stati;
-
-                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'] = "<li><a href='edit.php?post_type=$post_type&author=$current_user_id'$class>" . sprintf( _nx( 'Mine <span class="count">(%s)</span>', 'Mine <span class="count">(%s)</span>', $this->user_posts_count, 'posts' ), number_format_i18n( $this->user_posts_count ) ) . '</a>';
-                        $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']) ? ' class="current"' : '';
-                $status_links['all'] = "<li><a href='edit.php?post_type=$post_type{$allposts}'$class>" . sprintf( _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_posts, 'posts' ), number_format_i18n( $total_posts ) ) . '</a>';
-
-                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] = "<li><a href='edit.php?post_status=$status_name&amp;post_type=$post_type'$class>" . sprintf( _n( $status->label_count[0], $status->label_count[1], $num_posts->$status_name ), number_format_i18n( $num_posts->$status_name ) ) . '</a>';
-                }
-
-                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, $post_type_object, $cat;
-
-                if ( 'top' == $which && !is_singular() ) {
-?>
-                <div class="alignleft actions">
-<?php
-                        $this->months_dropdown( $post_type );
-
-                        if ( is_object_in_taxonomy( $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' );
-?>
-                        <input type="submit" id="post-query-submit" value="<?php esc_attr_e( 'Filter' ); ?>" class="button-secondary" />
-                </div>
-<?php
-                }
-
-                if ( $this->is_trash && current_user_can( $post_type_object->cap->edit_others_posts ) ) {
-?>
-                <input type="submit" name="delete_all" id="delete_all" value="<?php esc_attr_e( 'Empty Trash' ); ?>" class="button-secondary apply" />
-<?php
-                }
-        }
-
-        function current_action() {
-                if ( isset( $_REQUEST['delete_all'] ) || isset( $_REQUEST['delete_all2'] ) )
-                        return 'delete_all';
-
-                return parent::current_action();
-        }
-
-        function pagination( $which ) {
-                global $post_type_object, $mode;
-
-                parent::pagination( $which );
-
-                if ( 'top' == $which && !$post_type_object->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 = $this->_screen;
-
-                if ( empty( $screen ) )
-                        $post_type = 'post';
-                else
-                        $post_type = $screen->post_type;
-
-                $posts_columns = array();
-                $posts_columns['cb'] = '<input type="checkbox" />';
-                /* translators: manage posts column name */
-                $posts_columns['title'] = _x( 'Title', 'column name' );
-                $posts_columns['author'] = __( 'Author' );
-                if ( empty( $post_type ) || is_object_in_taxonomy( $post_type, 'category' ) )
-                        $posts_columns['categories'] = __( 'Categories' );
-                if ( empty( $post_type ) || is_object_in_taxonomy( $post_type, 'post_tag' ) )
-                        $posts_columns['tags'] = __( 'Tags' );
-                $post_status = !empty( $_REQUEST['post_status'] ) ? $_REQUEST['post_status'] : 'all';
-                if ( !in_array( $post_status, array( 'pending', 'draft', 'future' ) ) && ( empty( $post_type ) || post_type_supports( $post_type, 'comments' ) ) )
-                        $posts_columns['comments'] = '<div class="vers"><img alt="Comments" src="' . esc_url( admin_url( 'images/comment-grey-bubble.png' ) ) . '" /></div>';
-                $posts_columns['date'] = __( 'Date' );
-
-                if ( 'page' == $post_type )
-                        $posts_columns = apply_filters( 'manage_pages_columns', $posts_columns );
-                else
-                        $posts_columns = apply_filters( 'manage_posts_columns', $posts_columns, $post_type );
-                $posts_columns = apply_filters( "manage_{$post_type}_posts_columns", $posts_columns );
-
-                return $posts_columns;
-        }
-
-        function get_sortable_columns() {
-                return array(
-                        'title' => 'title',
-                        'author' => 'author',
-                        'parent' => 'parent',
-                        'comments' => 'comment_count',
-                        'date' => 'date',
-                );
-        }
-
-        function display_rows( $posts = array() ) {
-                global $wp_query, $post_type_object, $per_page;
-
-                if ( empty( $posts ) )
-                        $posts = $wp_query->posts;
-
-                if ( $this->hierarchical_display ) {
-                        $this->_display_rows_hierarchical( $posts, $this->get_pagenum(), $per_page );
-                } else {
-                        $this->_display_rows( $posts );
-                }
-        }
-
-        function _display_rows( $posts ) {
-                global $post, $mode;
-
-                add_filter( 'the_title','esc_html' );
-
-                // Create array of post IDs.
-                $post_ids = array();
-
-                foreach ( $posts as $a_post )
-                        $post_ids[] = $a_post->ID;
-
-                $this->comment_pending_count = get_pending_comments_num( $post_ids );
-
-                foreach ( $posts as $post )
-                        $this->single_row( $post );
-        }
-
-        function _display_rows_hierarchical( $pages, $pagenum = 1, $per_page = 20 ) {
-                global $wpdb;
-
-                $level = 0;
-
-                if ( ! $pages ) {
-                        $pages = get_pages( array( 'sort_column' => 'menu_order' ) );
-
-                        if ( ! $pages )
-                                return false;
-                }
-
-                /*
-                 * arrange pages into two parts: top level pages and children_pages
-                 * children_pages is two dimensional array, eg.
-                 * children_pages[10][] contains all sub-pages whose parent is 10.
-                 * It only takes O( N ) to arrange this and it takes O( 1 ) for subsequent lookup operations
-                 * If searching, ignore hierarchy and treat everything as top level
-                 */
-                if ( empty( $_REQUEST['s'] ) ) {
-
-                        $top_level_pages = array();
-                        $children_pages = array();
-
-                        foreach ( $pages as $page ) {
-
-                                // catch and repair bad pages
-                                if ( $page->post_parent == $page->ID ) {
-                                        $page->post_parent = 0;
-                                        $wpdb->update( $wpdb->posts, array( 'post_parent' => 0 ), array( 'ID' => $page->ID ) );
-                                        clean_page_cache( $page->ID );
-                                }
-
-                                if ( 0 == $page->post_parent )
-                                        $top_level_pages[] = $page;
-                                else
-                                        $children_pages[ $page->post_parent ][] = $page;
-                        }
-
-                        $pages = &$top_level_pages;
-                }
-
-                $count = 0;
-                $start = ( $pagenum - 1 ) * $per_page;
-                $end = $start + $per_page;
-
-                foreach ( $pages as $page ) {
-                        if ( $count >= $end )
-                                break;
-
-                        if ( $count >= $start )
-                                echo "\t" . $this->single_row( $page, $level );
-
-                        $count++;
-
-                        if ( isset( $children_pages ) )
-                                $this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page );
-                }
-
-                // if it is the last pagenum and there are orphaned pages, display them with paging as well
-                if ( isset( $children_pages ) && $count < $end ){
-                        foreach ( $children_pages as $orphans ){
-                                foreach ( $orphans as $op ) {
-                                        if ( $count >= $end )
-                                                break;
-                                        if ( $count >= $start )
-                                                echo "\t" . $this->single_row( $op, 0 );
-                                        $count++;
-                                }
-                        }
-                }
-        }
-
-        /**
-         * Given a top level page ID, display the nested hierarchy of sub-pages
-         * together with paging support
-         *
-         * @since unknown
-         *
-         * @param unknown_type $children_pages
-         * @param unknown_type $count
-         * @param unknown_type $parent
-         * @param unknown_type $level
-         * @param unknown_type $pagenum
-         * @param unknown_type $per_page
-         */
-        function _page_rows( &$children_pages, &$count, $parent, $level, $pagenum, $per_page ) {
-
-                if ( ! isset( $children_pages[$parent] ) )
-                        return;
-
-                $start = ( $pagenum - 1 ) * $per_page;
-                $end = $start + $per_page;
-
-                foreach ( $children_pages[$parent] as $page ) {
-
-                        if ( $count >= $end )
-                                break;
-
-                        // If the page starts in a subtree, print the parents.
-                        if ( $count == $start && $page->post_parent > 0 ) {
-                                $my_parents = array();
-                                $my_parent = $page->post_parent;
-                                while ( $my_parent ) {
-                                        $my_parent = get_post( $my_parent );
-                                        $my_parents[] = $my_parent;
-                                        if ( !$my_parent->post_parent )
-                                                break;
-                                        $my_parent = $my_parent->post_parent;
-                                }
-                                $num_parents = count( $my_parents );
-                                while ( $my_parent = array_pop( $my_parents ) ) {
-                                        echo "\t" . $this->single_row( $my_parent, $level - $num_parents );
-                                        $num_parents--;
-                                }
-                        }
-
-                        if ( $count >= $start )
-                                echo "\t" . $this->single_row( $page, $level );
-
-                        $count++;
-
-                        $this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page );
-                }
-
-                unset( $children_pages[$parent] ); //required in order to keep track of orphans
-        }
-
-        function single_row( $a_post, $level = 0 ) {
-                global $post, $current_screen, $mode;
-                static $rowclass;
-
-                $global_post = $post;
-                $post = $a_post;
-                setup_postdata( $post );
-
-                $rowclass = 'alternate' == $rowclass ? '' : 'alternate';
-                $post_owner = ( get_current_user_id() == $post->post_author ? 'self' : 'other' );
-                $edit_link = get_edit_post_link( $post->ID );
-                $title = _draft_or_post_title();
-                $post_type_object = get_post_type_object( $post->post_type );
-                $can_edit_post = current_user_can( 'edit_post', $post->ID );
-        ?>
-                <tr id='post-<?php echo $post->ID; ?>' class='<?php echo trim( $rowclass . ' author-' . $post_owner . ' status-' . $post->post_status ); ?> iedit' valign="top">
-        <?php
-
-                list( $columns, $hidden ) = $this->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':
-                        ?>
-                        <th scope="row" class="check-column"><?php if ( $can_edit_post ) { ?><input type="checkbox" name="post[]" value="<?php the_ID(); ?>" /><?php } ?></th>
-                        <?php
-                        break;
-
-                        case 'title':
-                                if ( $this->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 = $parent->post_title;
-                                                }
-                                        }
-
-                                        $post->post_title = esc_html( $post->post_title );
-                                        $pad = str_repeat( '&#8212; ', $level );
-?>
-                        <td <?php echo $attributes ?>><strong><?php if ( $can_edit_post && $post->post_status != 'trash' ) { ?><a class="row-title" href="<?php echo $edit_link; ?>" title="<?php echo esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;' ), $title ) ); ?>"><?php echo $pad; echo $title ?></a><?php } else { echo $pad; echo $title; }; _post_states( $post ); echo isset( $parent_name ) ? ' | ' . $post_type_object->labels->parent_item_colon . ' ' . esc_html( $parent_name ) : ''; ?></strong>
-<?php
-                                }
-                                else {
-                                        $attributes = 'class="post-title page-title column-title"' . $style;
-?>
-                        <td <?php echo $attributes ?>><strong><?php if ( $can_edit_post && $post->post_status != 'trash' ) { ?><a class="row-title" href="<?php echo $edit_link; ?>" title="<?php echo esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;' ), $title ) ); ?>"><?php echo $title ?></a><?php } else { echo $title; }; _post_states( $post ); ?></strong>
-<?php
-                                        if ( 'excerpt' == $mode ) {
-                                                the_excerpt();
-                                        }
-                                }
-
-                                $actions = array();
-                                if ( $can_edit_post && 'trash' != $post->post_status ) {
-                                        $actions['edit'] = '<a href="' . get_edit_post_link( $post->ID, true ) . '" title="' . esc_attr( __( 'Edit this item' ) ) . '">' . __( 'Edit' ) . '</a>';
-                                        $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr( __( 'Edit this item inline' ) ) . '">' . __( 'Quick&nbsp;Edit' ) . '</a>';
-                                }
-                                if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) {
-                                        if ( 'trash' == $post->post_status )
-                                                $actions['untrash'] = "<a title='" . esc_attr( __( 'Restore this item from the Trash' ) ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&amp;action=untrash', $post->ID ) ), 'untrash-' . $post->post_type . '_' . $post->ID ) . "'>" . __( 'Restore' ) . "</a>";
-                                        elseif ( EMPTY_TRASH_DAYS )
-                                                $actions['trash'] = "<a class='submitdelete' title='" . esc_attr( __( 'Move this item to the Trash' ) ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash' ) . "</a>";
-                                        if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS )
-                                                $actions['delete'] = "<a class='submitdelete' title='" . esc_attr( __( 'Delete this item permanently' ) ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently' ) . "</a>";
-                                }
-                                if ( in_array( $post->post_status, array( 'pending', 'draft' ) ) ) {
-                                        if ( $can_edit_post )
-                                                $actions['view'] = '<a href="' . esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) . '" title="' . esc_attr( sprintf( __( 'Preview &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'Preview' ) . '</a>';
-                                } elseif ( 'trash' != $post->post_status ) {
-                                        $actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'View' ) . '</a>';
-                                }
-
-                                $actions = apply_filters( $this->hierarchical_display ? 'page_row_actions' : 'post_row_actions', $actions, $post );
-                                echo $this->row_actions( $actions );
-
-                                get_inline_data( $post );
-                        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 '<td ' . $attributes . '>';
-                                if ( 'excerpt' == $mode )
-                                        echo apply_filters( 'post_date_column_time', $t_time, $post, $column_name, $mode );
-                                else
-                                        echo '<abbr title="' . $t_time . '">' . apply_filters( 'post_date_column_time', $h_time, $post, $column_name, $mode ) . '</abbr>';
-                                echo '<br />';
-                                if ( 'publish' == $post->post_status ) {
-                                        _e( 'Published' );
-                                } elseif ( 'future' == $post->post_status ) {
-                                        if ( $time_diff > 0 )
-                                                echo '<strong class="attention">' . __( 'Missed schedule' ) . '</strong>';
-                                        else
-                                                _e( 'Scheduled' );
-                                } else {
-                                        _e( 'Last Modified' );
-                                }
-                                echo '</td>';
-                        break;
-
-                        case 'categories':
-                        ?>
-                        <td <?php echo $attributes ?>><?php
-                                $categories = get_the_category();
-                                if ( !empty( $categories ) ) {
-                                        $out = array();
-                                        foreach ( $categories as $c ) {
-                                                $out[] = sprintf( '<a href="%s">%s</a>',
-                                                        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' ) )
-                                                );
-                                        }
-                                        echo join( ', ', $out );
-                                } else {
-                                        _e( 'Uncategorized' );
-                                }
-                        ?></td>
-                        <?php
-                        break;
-
-                        case 'tags':
-                        ?>
-                        <td <?php echo $attributes ?>><?php
-                                $tags = get_the_tags( $post->ID );
-                                if ( !empty( $tags ) ) {
-                                        $out = array();
-                                        foreach ( $tags as $c ) {
-                                                $out[] = sprintf( '<a href="%s">%s</a>',
-                                                        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' ) )
-                                                );
-                                        }
-                                        echo join( ', ', $out );
-                                } else {
-                                        _e( 'No Tags' );
-                                }
-                        ?></td>
-                        <?php
-                        break;
-
-                        case 'comments':
-                        ?>
-                        <td <?php echo $attributes ?>><div class="post-com-count-wrapper">
-                        <?php
-                                $pending_comments = isset( $this->comment_pending_count[$post->ID] ) ? $this->comment_pending_count[$post->ID] : 0;
-
-                                $this->comments_bubble( $post->ID, $pending_comments );
-                        ?>
-                        </div></td>
-                        <?php
-                        break;
-
-                        case 'author':
-                        ?>
-                        <td <?php echo $attributes ?>><?php
-                                printf( '<a href="%s">%s</a>',
-                                        add_query_arg( array( 'post_type' => $post->post_type, 'author' => get_the_author_meta( 'ID' ) ), 'edit.php' ),
-                                        get_the_author()
-                                );
-                        ?></td>
-                        <?php
-                        break;
-
-                        default:
-                        ?>
-                        <td <?php echo $attributes ?>><?php do_action( 'manage_posts_custom_column', $column_name, $post->ID ); ?></td>
-                        <?php
-                        break;
-                }
-        }
-        ?>
-                </tr>
-        <?php
-                $post = $global_post;
-        }
-
-        /**
-         * Outputs the hidden row displayed when inline editing
-         *
-         * @since 3.1.0
-         */
-        function inline_edit() {
-                global $mode;
-
-                $screen = $this->_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;
-                }
-
-                list( $columns, $hidden ) = $this->get_column_info();
-
-                $col_count = count( $columns ) - count( $hidden );
-                $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 );
-
-        ?>
-
-        <form method="get" action=""><table style="display: none"><tbody id="inlineedit">
-                <?php
-                $hclass = count( $hierarchical_taxonomies ) ? 'post' : 'page';
-                $bulk = 0;
-                while ( $bulk < 2 ) { ?>
-
-                <tr id="<?php echo $bulk ? 'bulk-edit' : 'inline-edit'; ?>" class="inline-edit-row inline-edit-row-<?php echo "$hclass inline-edit-$screen->post_type ";
-                        echo $bulk ? "bulk-edit-row bulk-edit-row-$hclass bulk-edit-$screen->post_type" : "quick-edit-row quick-edit-row-$hclass inline-edit-$screen->post_type";
-                ?>" style="display: none"><td colspan="<?php echo $col_count; ?>">
-
-                <fieldset class="inline-edit-col-left"><div class="inline-edit-col">
-                        <h4><?php echo $bulk ? __( 'Bulk Edit' ) : __( 'Quick Edit' ); ?></h4>
-
-
-        <?php
-
-        if ( post_type_supports( $screen->post_type, 'title' ) ) :
-                if ( $bulk ) : ?>
-                        <div id="bulk-title-div">
-                                <div id="bulk-titles"></div>
-                        </div>
-
-        <?php else : // $bulk ?>
-
-                        <label>
-                                <span class="title"><?php _e( 'Title' ); ?></span>
-                                <span class="input-text-wrap"><input type="text" name="post_title" class="ptitle" value="" /></span>
-                        </label>
-
-                        <label>
-                                <span class="title"><?php _e( 'Slug' ); ?></span>
-                                <span class="input-text-wrap"><input type="text" name="post_name" value="" /></span>
-                        </label>
-
-        <?php endif; // $bulk
-        endif; // post_type_supports title ?>
-
-        <?php if ( !$bulk ) : ?>
-                        <label><span class="title"><?php _e( 'Date' ); ?></span></label>
-                        <div class="inline-edit-date">
-                                <?php touch_time( 1, 1, 4, 1 ); ?>
-                        </div>
-                        <br class="clear" />
-
-        <?php endif; // $bulk
-
-                if ( post_type_supports( $screen->post_type, 'author' ) ) :
-                        $authors_dropdown = '';
-
-                        if ( is_super_admin() || current_user_can( $post_type_object->cap->edit_others_posts ) ) :
-                                $users_opt = array(
-                                        'name' => 'post_author',
-                                        'class'=> 'authors',
-                                        'multi' => 1,
-                                        'echo' => 0
-                                );
-                                if ( $bulk )
-                                        $users_opt['show_option_none'] = __( '&mdash; No Change &mdash;' );
-                                $authors_dropdown = '<label>';
-                                $authors_dropdown .= '<span class="title">' . __( 'Author' ) . '</span>';
-                                $authors_dropdown .= wp_dropdown_users( $users_opt );
-                                $authors_dropdown .= '</label>';
-                        endif; // authors
-        ?>
-
-        <?php if ( !$bulk ) echo $authors_dropdown;
-        endif; // post_type_supports author
-
-        if ( !$bulk ) :
-        ?>
-
-                        <div class="inline-edit-group">
-                                <label class="alignleft">
-                                        <span class="title"><?php _e( 'Password' ); ?></span>
-                                        <span class="input-text-wrap"><input type="text" name="post_password" class="inline-edit-password-input" value="" /></span>
-                                </label>
-
-                                <em style="margin:5px 10px 0 0" class="alignleft">
-                                        <?php
-                                        /* translators: Between password field and private checkbox on post quick edit interface */
-                                        echo __( '&ndash;OR&ndash;' );
-                                        ?>
-                                </em>
-                                <label class="alignleft inline-edit-private">
-                                        <input type="checkbox" name="keep_private" value="private" />
-                                        <span class="checkbox-title"><?php echo __( 'Private' ); ?></span>
-                                </label>
-                        </div>
-
-        <?php endif; ?>
-
-                </div></fieldset>
-
-        <?php if ( count( $hierarchical_taxonomies ) && !$bulk ) : ?>
-
-                <fieldset class="inline-edit-col-center inline-edit-categories"><div class="inline-edit-col">
-
-        <?php foreach ( $hierarchical_taxonomies as $taxonomy ) : ?>
-
-                        <span class="title inline-edit-categories-label"><?php echo esc_html( $taxonomy->labels->name ) ?>
-                                <span class="catshow"><?php _e( '[more]' ); ?></span>
-                                <span class="cathide" style="display:none;"><?php _e( '[less]' ); ?></span>
-                        </span>
-                        <input type="hidden" name="<?php echo ( $taxonomy->name == 'category' ) ? 'post_category[]' : 'tax_input[' . esc_attr( $taxonomy->name ) . '][]'; ?>" value="0" />
-                        <ul class="cat-checklist <?php echo esc_attr( $taxonomy->name )?>-checklist">
-                                <?php wp_terms_checklist( null, array( 'taxonomy' => $taxonomy->name ) ) ?>
-                        </ul>
-
-        <?php endforeach; //$hierarchical_taxonomies as $taxonomy ?>
-
-                </div></fieldset>
-
-        <?php endif; // count( $hierarchical_taxonomies ) && !$bulk ?>
-
-                <fieldset class="inline-edit-col-right"><div class="inline-edit-col">
-
-        <?php
-                if ( post_type_supports( $screen->post_type, 'author' ) && $bulk )
-                        echo $authors_dropdown;
-        ?>
-
-        <?php if ( $post_type_object->hierarchical ) : ?>
-
-                        <label>
-                                <span class="title"><?php _e( 'Parent' ); ?></span>
-        <?php
-                $dropdown_args = array( 'post_type' => $post_type_object->name, 'selected' => $post->post_parent, 'name' => 'post_parent', 'show_option_none' => __( 'Main Page ( no parent )' ), 'option_none_value' => 0, 'sort_column'=> 'menu_order, post_title' );
-                if ( $bulk )
-                        $dropdown_args['show_option_no_change'] = __( '&mdash; No Change &mdash;' );
-                $dropdown_args = apply_filters( 'quick_edit_dropdown_pages_args', $dropdown_args );
-                wp_dropdown_pages( $dropdown_args );
-        ?>
-                        </label>
-
-        <?php if ( post_type_supports( $screen->post_type, 'page-attributes' ) ) :
-                        if ( !$bulk ) : ?>
-
-                        <label>
-                                <span class="title"><?php _e( 'Order' ); ?></span>
-                                <span class="input-text-wrap"><input type="text" name="menu_order" class="inline-edit-menu-order-input" value="<?php echo $post->menu_order ?>" /></span>
-                        </label>
-
-        <?php        endif; // !$bulk ?>
-
-                        <label>
-                                <span class="title"><?php _e( 'Template' ); ?></span>
-                                <select name="page_template">
-        <?php        if ( $bulk ) : ?>
-                                        <option value="-1"><?php _e( '&mdash; No Change &mdash;' ); ?></option>
-        <?php        endif; // $bulk ?>
-                                        <option value="default"><?php _e( 'Default Template' ); ?></option>
-                                        <?php page_template_dropdown() ?>
-                                </select>
-                        </label>
-
-        <?php
-                endif; // post_type_supports page-attributes
-        endif; // $post_type_object->hierarchical ?>
-
-        <?php if ( count( $flat_taxonomies ) && !$bulk ) : ?>
-
-        <?php foreach ( $flat_taxonomies as $taxonomy ) : ?>
-
-                        <label class="inline-edit-tags">
-                                <span class="title"><?php echo esc_html( $taxonomy->labels->name ) ?></span>
-                                <textarea cols="22" rows="1" name="tax_input[<?php echo esc_attr( $taxonomy->name )?>]" class="tax_input_<?php echo esc_attr( $taxonomy->name )?>"></textarea>
-                        </label>
-
-        <?php endforeach; //$flat_taxonomies as $taxonomy ?>
-
-        <?php endif; // count( $flat_taxonomies ) && !$bulk ?>
-
-        <?php if ( post_type_supports( $screen->post_type, 'comments' ) || post_type_supports( $screen->post_type, 'trackbacks' ) ) :
-                if ( $bulk ) : ?>
-
-                        <div class="inline-edit-group">
-                <?php if ( post_type_supports( $screen->post_type, 'comments' ) ) : ?>
-                        <label class="alignleft">
-                                <span class="title"><?php _e( 'Comments' ); ?></span>
-                                <select name="comment_status">
-                                        <option value=""><?php _e( '&mdash; No Change &mdash;' ); ?></option>
-                                        <option value="open"><?php _e( 'Allow' ); ?></option>
-                                        <option value="closed"><?php _e( 'Do not allow' ); ?></option>
-                                </select>
-                        </label>
-                <?php endif; if ( post_type_supports( $screen->post_type, 'trackbacks' ) ) : ?>
-                        <label class="alignright">
-                                <span class="title"><?php _e( 'Pings' ); ?></span>
-                                <select name="ping_status">
-                                        <option value=""><?php _e( '&mdash; No Change &mdash;' ); ?></option>
-                                        <option value="open"><?php _e( 'Allow' ); ?></option>
-                                        <option value="closed"><?php _e( 'Do not allow' ); ?></option>
-                                </select>
-                        </label>
-                <?php endif; ?>
-                        </div>
-
-        <?php else : // $bulk ?>
-
-                        <div class="inline-edit-group">
-                        <?php if ( post_type_supports( $screen->post_type, 'comments' ) ) : ?>
-                                <label class="alignleft">
-                                        <input type="checkbox" name="comment_status" value="open" />
-                                        <span class="checkbox-title"><?php _e( 'Allow Comments' ); ?></span>
-                                </label>
-                        <?php endif; if ( post_type_supports( $screen->post_type, 'trackbacks' ) ) : ?>
-                                <label class="alignleft">
-                                        <input type="checkbox" name="ping_status" value="open" />
-                                        <span class="checkbox-title"><?php _e( 'Allow Pings' ); ?></span>
-                                </label>
-                        <?php endif; ?>
-                        </div>
-
-        <?php endif; // $bulk
-        endif; // post_type_supports comments or pings ?>
-
-                        <div class="inline-edit-group">
-                                <label class="inline-edit-status alignleft">
-                                        <span class="title"><?php _e( 'Status' ); ?></span>
-                                        <select name="_status">
-        <?php if ( $bulk ) : ?>
-                                                <option value="-1"><?php _e( '&mdash; No Change &mdash;' ); ?></option>
-        <?php endif; // $bulk ?>
-                                        <?php if ( $can_publish ) : // Contributors only get "Unpublished" and "Pending Review" ?>
-                                                <option value="publish"><?php _e( 'Published' ); ?></option>
-                                                <option value="future"><?php _e( 'Scheduled' ); ?></option>
-        <?php if ( $bulk ) : ?>
-                                                <option value="private"><?php _e( 'Private' ) ?></option>
-        <?php endif; // $bulk ?>
-                                        <?php endif; ?>
-                                                <option value="pending"><?php _e( 'Pending Review' ); ?></option>
-                                                <option value="draft"><?php _e( 'Draft' ); ?></option>
-                                        </select>
-                                </label>
-
-        <?php if ( post_type_supports( $screen->post_type, 'sticky' ) && $can_publish && current_user_can( $post_type_object->cap->edit_others_posts ) ) : ?>
-
-        <?php        if ( $bulk ) : ?>
-
-                                <label class="alignright">
-                                        <span class="title"><?php _e( 'Sticky' ); ?></span>
-                                        <select name="sticky">
-                                                <option value="-1"><?php _e( '&mdash; No Change &mdash;' ); ?></option>
-                                                <option value="sticky"><?php _e( 'Sticky' ); ?></option>
-                                                <option value="unsticky"><?php _e( 'Not Sticky' ); ?></option>
-                                        </select>
-                                </label>
-
-        <?php        else : // $bulk ?>
-
-                                <label class="alignleft">
-                                        <input type="checkbox" name="sticky" value="sticky" />
-                                        <span class="checkbox-title"><?php _e( 'Make this sticky' ); ?></span>
-                                </label>
-
-        <?php        endif; // $bulk ?>
-
-        <?php endif; // post_type_supports(sticky) && $can_publish && current_user_can( 'edit_others_cap' ) ?>
-
-                        </div>
-
-                </div></fieldset>
-
-        <?php
-                foreach ( $columns as $column_name => $column_display_name ) {
-                        if ( isset( $core_columns[$column_name] ) )
-                                continue;
-                        do_action( $bulk ? 'bulk_edit_custom_box' : 'quick_edit_custom_box', $column_name, $screen->post_type );
-                }
-        ?>
-                <p class="submit inline-edit-save">
-                        <a accesskey="c" href="#inline-edit" title="<?php _e( 'Cancel' ); ?>" class="button-secondary cancel alignleft"><?php _e( 'Cancel' ); ?></a>
-                        <?php if ( ! $bulk ) {
-                                wp_nonce_field( 'inlineeditnonce', '_inline_edit', false );
-                                $update_text = __( 'Update' );
-                                ?>
-                                <a accesskey="s" href="#inline-edit" title="<?php _e( 'Update' ); ?>" class="button-primary save alignright"><?php echo esc_attr( $update_text ); ?></a>
-                                <img class="waiting" style="display:none;" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
-                        <?php } else {
-                                $update_text = __( 'Update' );
-                        ?>
-                                <input accesskey="s" class="button-primary alignright" type="submit" name="bulk_edit" value="<?php echo esc_attr( $update_text ); ?>" />
-                        <?php } ?>
-                        <input type="hidden" name="post_view" value="<?php echo esc_attr( $m ); ?>" />
-                        <input type="hidden" name="screen" value="<?php echo esc_attr( $screen->id ); ?>" />
-                        <br class="clear" />
-                </p>
-                </td></tr>
-        <?php
-                $bulk++;
-                }
-?>
-                </tbody></table></form>
-<?php
-        }
-}
-
</del><span class="cx"> class WP_Media_Table extends WP_List_Table {
</span><span class="cx">
</span><span class="cx">         function WP_Media_Table() {
</span></span></pre></div>
<a id="trunkwpadminincludeslisttablepostsphpfromrev15953trunkwpadminincludesdefaultlisttablesphp"></a>
<div class="copfile"><h4>Copied: trunk/wp-admin/includes/list-table-posts.php (from rev 15953, trunk/wp-admin/includes/default-list-tables.php) (0 => 15954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/list-table-posts.php         (rev 0)
+++ trunk/wp-admin/includes/list-table-posts.php        2010-10-25 00:12:41 UTC (rev 15954)
</span><span class="lines">@@ -0,0 +1,984 @@
</span><ins>+<?php
+/**
+ * List table classes
+ *
+ * Each list-type admin screen has a class that handles the rendering of the list table.
+ *
+ * @package WordPress
+ * @subpackage Administration
+ */
+
+class WP_Posts_Table extends WP_List_Table {
+
+        /**
+         * Whether the items should be displayed hierarchically or linearly
+         *
+         * @since 3.1.0
+         * @var bool
+         * @access protected
+         */
+        var $hierarchical_display;
+
+        /**
+         * Holds the number of pending comments for each post
+         *
+         * @since 3.1.0
+         * @var bool
+         * @access protected
+         */
+        var $comment_pending_count;
+
+        /**
+         * Holds the number of posts for this user
+         *
+         * @since 3.1.0
+         * @var bool
+         * @access private
+         */
+        var $user_posts_count;
+
+        function WP_Posts_Table() {
+                global $post_type_object, $post_type, $current_screen, $wpdb;
+
+                if ( !isset( $_REQUEST['post_type'] ) )
+                        $post_type = 'post';
+                elseif ( in_array( $_REQUEST['post_type'], get_post_types( array( 'show_ui' => true ) ) ) )
+                        $post_type = $_REQUEST['post_type'];
+                else
+                        wp_die( __( 'Invalid post type' ) );
+                $_REQUEST['post_type'] = $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'] ) )
+                                $_GET['author'] = get_current_user_id();
+                }
+
+                parent::WP_List_Table( array(
+                        'screen' => $current_screen,
+                        'plural' => 'posts',
+                ) );
+        }
+
+        function check_permissions() {
+                global $post_type_object;
+
+                if ( !current_user_can( $post_type_object->cap->edit_posts ) )
+                        wp_die( __( 'Cheatin&#8217; uh?' ) );
+        }
+
+        function prepare_items() {
+                global $post_type_object, $post_type, $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;
+
+                $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, $post_type_object, $locked_post_status, $avail_post_stati;
+
+                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'] = "<li><a href='edit.php?post_type=$post_type&author=$current_user_id'$class>" . sprintf( _nx( 'Mine <span class="count">(%s)</span>', 'Mine <span class="count">(%s)</span>', $this->user_posts_count, 'posts' ), number_format_i18n( $this->user_posts_count ) ) . '</a>';
+                        $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']) ? ' class="current"' : '';
+                $status_links['all'] = "<li><a href='edit.php?post_type=$post_type{$allposts}'$class>" . sprintf( _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_posts, 'posts' ), number_format_i18n( $total_posts ) ) . '</a>';
+
+                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] = "<li><a href='edit.php?post_status=$status_name&amp;post_type=$post_type'$class>" . sprintf( _n( $status->label_count[0], $status->label_count[1], $num_posts->$status_name ), number_format_i18n( $num_posts->$status_name ) ) . '</a>';
+                }
+
+                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, $post_type_object, $cat;
+
+                if ( 'top' == $which && !is_singular() ) {
+?>
+                <div class="alignleft actions">
+<?php
+                        $this->months_dropdown( $post_type );
+
+                        if ( is_object_in_taxonomy( $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' );
+?>
+                        <input type="submit" id="post-query-submit" value="<?php esc_attr_e( 'Filter' ); ?>" class="button-secondary" />
+                </div>
+<?php
+                }
+
+                if ( $this->is_trash && current_user_can( $post_type_object->cap->edit_others_posts ) ) {
+?>
+                <input type="submit" name="delete_all" id="delete_all" value="<?php esc_attr_e( 'Empty Trash' ); ?>" class="button-secondary apply" />
+<?php
+                }
+        }
+
+        function current_action() {
+                if ( isset( $_REQUEST['delete_all'] ) || isset( $_REQUEST['delete_all2'] ) )
+                        return 'delete_all';
+
+                return parent::current_action();
+        }
+
+        function pagination( $which ) {
+                global $post_type_object, $mode;
+
+                parent::pagination( $which );
+
+                if ( 'top' == $which && !$post_type_object->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 = $this->_screen;
+
+                if ( empty( $screen ) )
+                        $post_type = 'post';
+                else
+                        $post_type = $screen->post_type;
+
+                $posts_columns = array();
+                $posts_columns['cb'] = '<input type="checkbox" />';
+                /* translators: manage posts column name */
+                $posts_columns['title'] = _x( 'Title', 'column name' );
+                $posts_columns['author'] = __( 'Author' );
+                if ( empty( $post_type ) || is_object_in_taxonomy( $post_type, 'category' ) )
+                        $posts_columns['categories'] = __( 'Categories' );
+                if ( empty( $post_type ) || is_object_in_taxonomy( $post_type, 'post_tag' ) )
+                        $posts_columns['tags'] = __( 'Tags' );
+                $post_status = !empty( $_REQUEST['post_status'] ) ? $_REQUEST['post_status'] : 'all';
+                if ( !in_array( $post_status, array( 'pending', 'draft', 'future' ) ) && ( empty( $post_type ) || post_type_supports( $post_type, 'comments' ) ) )
+                        $posts_columns['comments'] = '<div class="vers"><img alt="Comments" src="' . esc_url( admin_url( 'images/comment-grey-bubble.png' ) ) . '" /></div>';
+                $posts_columns['date'] = __( 'Date' );
+
+                if ( 'page' == $post_type )
+                        $posts_columns = apply_filters( 'manage_pages_columns', $posts_columns );
+                else
+                        $posts_columns = apply_filters( 'manage_posts_columns', $posts_columns, $post_type );
+                $posts_columns = apply_filters( "manage_{$post_type}_posts_columns", $posts_columns );
+
+                return $posts_columns;
+        }
+
+        function get_sortable_columns() {
+                return array(
+                        'title' => 'title',
+                        'author' => 'author',
+                        'parent' => 'parent',
+                        'comments' => 'comment_count',
+                        'date' => 'date',
+                );
+        }
+
+        function display_rows( $posts = array() ) {
+                global $wp_query, $post_type_object, $per_page;
+
+                if ( empty( $posts ) )
+                        $posts = $wp_query->posts;
+
+                if ( $this->hierarchical_display ) {
+                        $this->_display_rows_hierarchical( $posts, $this->get_pagenum(), $per_page );
+                } else {
+                        $this->_display_rows( $posts );
+                }
+        }
+
+        function _display_rows( $posts ) {
+                global $post, $mode;
+
+                add_filter( 'the_title','esc_html' );
+
+                // Create array of post IDs.
+                $post_ids = array();
+
+                foreach ( $posts as $a_post )
+                        $post_ids[] = $a_post->ID;
+
+                $this->comment_pending_count = get_pending_comments_num( $post_ids );
+
+                foreach ( $posts as $post )
+                        $this->single_row( $post );
+        }
+
+        function _display_rows_hierarchical( $pages, $pagenum = 1, $per_page = 20 ) {
+                global $wpdb;
+
+                $level = 0;
+
+                if ( ! $pages ) {
+                        $pages = get_pages( array( 'sort_column' => 'menu_order' ) );
+
+                        if ( ! $pages )
+                                return false;
+                }
+
+                /*
+                 * arrange pages into two parts: top level pages and children_pages
+                 * children_pages is two dimensional array, eg.
+                 * children_pages[10][] contains all sub-pages whose parent is 10.
+                 * It only takes O( N ) to arrange this and it takes O( 1 ) for subsequent lookup operations
+                 * If searching, ignore hierarchy and treat everything as top level
+                 */
+                if ( empty( $_REQUEST['s'] ) ) {
+
+                        $top_level_pages = array();
+                        $children_pages = array();
+
+                        foreach ( $pages as $page ) {
+
+                                // catch and repair bad pages
+                                if ( $page->post_parent == $page->ID ) {
+                                        $page->post_parent = 0;
+                                        $wpdb->update( $wpdb->posts, array( 'post_parent' => 0 ), array( 'ID' => $page->ID ) );
+                                        clean_page_cache( $page->ID );
+                                }
+
+                                if ( 0 == $page->post_parent )
+                                        $top_level_pages[] = $page;
+                                else
+                                        $children_pages[ $page->post_parent ][] = $page;
+                        }
+
+                        $pages = &$top_level_pages;
+                }
+
+                $count = 0;
+                $start = ( $pagenum - 1 ) * $per_page;
+                $end = $start + $per_page;
+
+                foreach ( $pages as $page ) {
+                        if ( $count >= $end )
+                                break;
+
+                        if ( $count >= $start )
+                                echo "\t" . $this->single_row( $page, $level );
+
+                        $count++;
+
+                        if ( isset( $children_pages ) )
+                                $this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page );
+                }
+
+                // if it is the last pagenum and there are orphaned pages, display them with paging as well
+                if ( isset( $children_pages ) && $count < $end ){
+                        foreach ( $children_pages as $orphans ){
+                                foreach ( $orphans as $op ) {
+                                        if ( $count >= $end )
+                                                break;
+                                        if ( $count >= $start )
+                                                echo "\t" . $this->single_row( $op, 0 );
+                                        $count++;
+                                }
+                        }
+                }
+        }
+
+        /**
+         * Given a top level page ID, display the nested hierarchy of sub-pages
+         * together with paging support
+         *
+         * @since unknown
+         *
+         * @param unknown_type $children_pages
+         * @param unknown_type $count
+         * @param unknown_type $parent
+         * @param unknown_type $level
+         * @param unknown_type $pagenum
+         * @param unknown_type $per_page
+         */
+        function _page_rows( &$children_pages, &$count, $parent, $level, $pagenum, $per_page ) {
+
+                if ( ! isset( $children_pages[$parent] ) )
+                        return;
+
+                $start = ( $pagenum - 1 ) * $per_page;
+                $end = $start + $per_page;
+
+                foreach ( $children_pages[$parent] as $page ) {
+
+                        if ( $count >= $end )
+                                break;
+
+                        // If the page starts in a subtree, print the parents.
+                        if ( $count == $start && $page->post_parent > 0 ) {
+                                $my_parents = array();
+                                $my_parent = $page->post_parent;
+                                while ( $my_parent ) {
+                                        $my_parent = get_post( $my_parent );
+                                        $my_parents[] = $my_parent;
+                                        if ( !$my_parent->post_parent )
+                                                break;
+                                        $my_parent = $my_parent->post_parent;
+                                }
+                                $num_parents = count( $my_parents );
+                                while ( $my_parent = array_pop( $my_parents ) ) {
+                                        echo "\t" . $this->single_row( $my_parent, $level - $num_parents );
+                                        $num_parents--;
+                                }
+                        }
+
+                        if ( $count >= $start )
+                                echo "\t" . $this->single_row( $page, $level );
+
+                        $count++;
+
+                        $this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page );
+                }
+
+                unset( $children_pages[$parent] ); //required in order to keep track of orphans
+        }
+
+        function single_row( $a_post, $level = 0 ) {
+                global $post, $current_screen, $mode;
+                static $rowclass;
+
+                $global_post = $post;
+                $post = $a_post;
+                setup_postdata( $post );
+
+                $rowclass = 'alternate' == $rowclass ? '' : 'alternate';
+                $post_owner = ( get_current_user_id() == $post->post_author ? 'self' : 'other' );
+                $edit_link = get_edit_post_link( $post->ID );
+                $title = _draft_or_post_title();
+                $post_type_object = get_post_type_object( $post->post_type );
+                $can_edit_post = current_user_can( 'edit_post', $post->ID );
+        ?>
+                <tr id='post-<?php echo $post->ID; ?>' class='<?php echo trim( $rowclass . ' author-' . $post_owner . ' status-' . $post->post_status ); ?> iedit' valign="top">
+        <?php
+
+                list( $columns, $hidden ) = $this->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':
+                        ?>
+                        <th scope="row" class="check-column"><?php if ( $can_edit_post ) { ?><input type="checkbox" name="post[]" value="<?php the_ID(); ?>" /><?php } ?></th>
+                        <?php
+                        break;
+
+                        case 'title':
+                                if ( $this->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 = $parent->post_title;
+                                                }
+                                        }
+
+                                        $post->post_title = esc_html( $post->post_title );
+                                        $pad = str_repeat( '&#8212; ', $level );
+?>
+                        <td <?php echo $attributes ?>><strong><?php if ( $can_edit_post && $post->post_status != 'trash' ) { ?><a class="row-title" href="<?php echo $edit_link; ?>" title="<?php echo esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;' ), $title ) ); ?>"><?php echo $pad; echo $title ?></a><?php } else { echo $pad; echo $title; }; _post_states( $post ); echo isset( $parent_name ) ? ' | ' . $post_type_object->labels->parent_item_colon . ' ' . esc_html( $parent_name ) : ''; ?></strong>
+<?php
+                                }
+                                else {
+                                        $attributes = 'class="post-title page-title column-title"' . $style;
+?>
+                        <td <?php echo $attributes ?>><strong><?php if ( $can_edit_post && $post->post_status != 'trash' ) { ?><a class="row-title" href="<?php echo $edit_link; ?>" title="<?php echo esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;' ), $title ) ); ?>"><?php echo $title ?></a><?php } else { echo $title; }; _post_states( $post ); ?></strong>
+<?php
+                                        if ( 'excerpt' == $mode ) {
+                                                the_excerpt();
+                                        }
+                                }
+
+                                $actions = array();
+                                if ( $can_edit_post && 'trash' != $post->post_status ) {
+                                        $actions['edit'] = '<a href="' . get_edit_post_link( $post->ID, true ) . '" title="' . esc_attr( __( 'Edit this item' ) ) . '">' . __( 'Edit' ) . '</a>';
+                                        $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr( __( 'Edit this item inline' ) ) . '">' . __( 'Quick&nbsp;Edit' ) . '</a>';
+                                }
+                                if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) {
+                                        if ( 'trash' == $post->post_status )
+                                                $actions['untrash'] = "<a title='" . esc_attr( __( 'Restore this item from the Trash' ) ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&amp;action=untrash', $post->ID ) ), 'untrash-' . $post->post_type . '_' . $post->ID ) . "'>" . __( 'Restore' ) . "</a>";
+                                        elseif ( EMPTY_TRASH_DAYS )
+                                                $actions['trash'] = "<a class='submitdelete' title='" . esc_attr( __( 'Move this item to the Trash' ) ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash' ) . "</a>";
+                                        if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS )
+                                                $actions['delete'] = "<a class='submitdelete' title='" . esc_attr( __( 'Delete this item permanently' ) ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently' ) . "</a>";
+                                }
+                                if ( in_array( $post->post_status, array( 'pending', 'draft' ) ) ) {
+                                        if ( $can_edit_post )
+                                                $actions['view'] = '<a href="' . esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) . '" title="' . esc_attr( sprintf( __( 'Preview &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'Preview' ) . '</a>';
+                                } elseif ( 'trash' != $post->post_status ) {
+                                        $actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'View' ) . '</a>';
+                                }
+
+                                $actions = apply_filters( $this->hierarchical_display ? 'page_row_actions' : 'post_row_actions', $actions, $post );
+                                echo $this->row_actions( $actions );
+
+                                get_inline_data( $post );
+                        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 '<td ' . $attributes . '>';
+                                if ( 'excerpt' == $mode )
+                                        echo apply_filters( 'post_date_column_time', $t_time, $post, $column_name, $mode );
+                                else
+                                        echo '<abbr title="' . $t_time . '">' . apply_filters( 'post_date_column_time', $h_time, $post, $column_name, $mode ) . '</abbr>';
+                                echo '<br />';
+                                if ( 'publish' == $post->post_status ) {
+                                        _e( 'Published' );
+                                } elseif ( 'future' == $post->post_status ) {
+                                        if ( $time_diff > 0 )
+                                                echo '<strong class="attention">' . __( 'Missed schedule' ) . '</strong>';
+                                        else
+                                                _e( 'Scheduled' );
+                                } else {
+                                        _e( 'Last Modified' );
+                                }
+                                echo '</td>';
+                        break;
+
+                        case 'categories':
+                        ?>
+                        <td <?php echo $attributes ?>><?php
+                                $categories = get_the_category();
+                                if ( !empty( $categories ) ) {
+                                        $out = array();
+                                        foreach ( $categories as $c ) {
+                                                $out[] = sprintf( '<a href="%s">%s</a>',
+                                                        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' ) )
+                                                );
+                                        }
+                                        echo join( ', ', $out );
+                                } else {
+                                        _e( 'Uncategorized' );
+                                }
+                        ?></td>
+                        <?php
+                        break;
+
+                        case 'tags':
+                        ?>
+                        <td <?php echo $attributes ?>><?php
+                                $tags = get_the_tags( $post->ID );
+                                if ( !empty( $tags ) ) {
+                                        $out = array();
+                                        foreach ( $tags as $c ) {
+                                                $out[] = sprintf( '<a href="%s">%s</a>',
+                                                        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' ) )
+                                                );
+                                        }
+                                        echo join( ', ', $out );
+                                } else {
+                                        _e( 'No Tags' );
+                                }
+                        ?></td>
+                        <?php
+                        break;
+
+                        case 'comments':
+                        ?>
+                        <td <?php echo $attributes ?>><div class="post-com-count-wrapper">
+                        <?php
+                                $pending_comments = isset( $this->comment_pending_count[$post->ID] ) ? $this->comment_pending_count[$post->ID] : 0;
+
+                                $this->comments_bubble( $post->ID, $pending_comments );
+                        ?>
+                        </div></td>
+                        <?php
+                        break;
+
+                        case 'author':
+                        ?>
+                        <td <?php echo $attributes ?>><?php
+                                printf( '<a href="%s">%s</a>',
+                                        add_query_arg( array( 'post_type' => $post->post_type, 'author' => get_the_author_meta( 'ID' ) ), 'edit.php' ),
+                                        get_the_author()
+                                );
+                        ?></td>
+                        <?php
+                        break;
+
+                        default:
+                        ?>
+                        <td <?php echo $attributes ?>><?php do_action( 'manage_posts_custom_column', $column_name, $post->ID ); ?></td>
+                        <?php
+                        break;
+                }
+        }
+        ?>
+                </tr>
+        <?php
+                $post = $global_post;
+        }
+
+        /**
+         * Outputs the hidden row displayed when inline editing
+         *
+         * @since 3.1.0
+         */
+        function inline_edit() {
+                global $mode;
+
+                $screen = $this->_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;
+                }
+
+                list( $columns, $hidden ) = $this->get_column_info();
+
+                $col_count = count( $columns ) - count( $hidden );
+                $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 );
+
+        ?>
+
+        <form method="get" action=""><table style="display: none"><tbody id="inlineedit">
+                <?php
+                $hclass = count( $hierarchical_taxonomies ) ? 'post' : 'page';
+                $bulk = 0;
+                while ( $bulk < 2 ) { ?>
+
+                <tr id="<?php echo $bulk ? 'bulk-edit' : 'inline-edit'; ?>" class="inline-edit-row inline-edit-row-<?php echo "$hclass inline-edit-$screen->post_type ";
+                        echo $bulk ? "bulk-edit-row bulk-edit-row-$hclass bulk-edit-$screen->post_type" : "quick-edit-row quick-edit-row-$hclass inline-edit-$screen->post_type";
+                ?>" style="display: none"><td colspan="<?php echo $col_count; ?>">
+
+                <fieldset class="inline-edit-col-left"><div class="inline-edit-col">
+                        <h4><?php echo $bulk ? __( 'Bulk Edit' ) : __( 'Quick Edit' ); ?></h4>
+
+
+        <?php
+
+        if ( post_type_supports( $screen->post_type, 'title' ) ) :
+                if ( $bulk ) : ?>
+                        <div id="bulk-title-div">
+                                <div id="bulk-titles"></div>
+                        </div>
+
+        <?php else : // $bulk ?>
+
+                        <label>
+                                <span class="title"><?php _e( 'Title' ); ?></span>
+                                <span class="input-text-wrap"><input type="text" name="post_title" class="ptitle" value="" /></span>
+                        </label>
+
+                        <label>
+                                <span class="title"><?php _e( 'Slug' ); ?></span>
+                                <span class="input-text-wrap"><input type="text" name="post_name" value="" /></span>
+                        </label>
+
+        <?php endif; // $bulk
+        endif; // post_type_supports title ?>
+
+        <?php if ( !$bulk ) : ?>
+                        <label><span class="title"><?php _e( 'Date' ); ?></span></label>
+                        <div class="inline-edit-date">
+                                <?php touch_time( 1, 1, 4, 1 ); ?>
+                        </div>
+                        <br class="clear" />
+
+        <?php endif; // $bulk
+
+                if ( post_type_supports( $screen->post_type, 'author' ) ) :
+                        $authors_dropdown = '';
+
+                        if ( is_super_admin() || current_user_can( $post_type_object->cap->edit_others_posts ) ) :
+                                $users_opt = array(
+                                        'name' => 'post_author',
+                                        'class'=> 'authors',
+                                        'multi' => 1,
+                                        'echo' => 0
+                                );
+                                if ( $bulk )
+                                        $users_opt['show_option_none'] = __( '&mdash; No Change &mdash;' );
+                                $authors_dropdown = '<label>';
+                                $authors_dropdown .= '<span class="title">' . __( 'Author' ) . '</span>';
+                                $authors_dropdown .= wp_dropdown_users( $users_opt );
+                                $authors_dropdown .= '</label>';
+                        endif; // authors
+        ?>
+
+        <?php if ( !$bulk ) echo $authors_dropdown;
+        endif; // post_type_supports author
+
+        if ( !$bulk ) :
+        ?>
+
+                        <div class="inline-edit-group">
+                                <label class="alignleft">
+                                        <span class="title"><?php _e( 'Password' ); ?></span>
+                                        <span class="input-text-wrap"><input type="text" name="post_password" class="inline-edit-password-input" value="" /></span>
+                                </label>
+
+                                <em style="margin:5px 10px 0 0" class="alignleft">
+                                        <?php
+                                        /* translators: Between password field and private checkbox on post quick edit interface */
+                                        echo __( '&ndash;OR&ndash;' );
+                                        ?>
+                                </em>
+                                <label class="alignleft inline-edit-private">
+                                        <input type="checkbox" name="keep_private" value="private" />
+                                        <span class="checkbox-title"><?php echo __( 'Private' ); ?></span>
+                                </label>
+                        </div>
+
+        <?php endif; ?>
+
+                </div></fieldset>
+
+        <?php if ( count( $hierarchical_taxonomies ) && !$bulk ) : ?>
+
+                <fieldset class="inline-edit-col-center inline-edit-categories"><div class="inline-edit-col">
+
+        <?php foreach ( $hierarchical_taxonomies as $taxonomy ) : ?>
+
+                        <span class="title inline-edit-categories-label"><?php echo esc_html( $taxonomy->labels->name ) ?>
+                                <span class="catshow"><?php _e( '[more]' ); ?></span>
+                                <span class="cathide" style="display:none;"><?php _e( '[less]' ); ?></span>
+                        </span>
+                        <input type="hidden" name="<?php echo ( $taxonomy->name == 'category' ) ? 'post_category[]' : 'tax_input[' . esc_attr( $taxonomy->name ) . '][]'; ?>" value="0" />
+                        <ul class="cat-checklist <?php echo esc_attr( $taxonomy->name )?>-checklist">
+                                <?php wp_terms_checklist( null, array( 'taxonomy' => $taxonomy->name ) ) ?>
+                        </ul>
+
+        <?php endforeach; //$hierarchical_taxonomies as $taxonomy ?>
+
+                </div></fieldset>
+
+        <?php endif; // count( $hierarchical_taxonomies ) && !$bulk ?>
+
+                <fieldset class="inline-edit-col-right"><div class="inline-edit-col">
+
+        <?php
+                if ( post_type_supports( $screen->post_type, 'author' ) && $bulk )
+                        echo $authors_dropdown;
+        ?>
+
+        <?php if ( $post_type_object->hierarchical ) : ?>
+
+                        <label>
+                                <span class="title"><?php _e( 'Parent' ); ?></span>
+        <?php
+                $dropdown_args = array( 'post_type' => $post_type_object->name, 'selected' => $post->post_parent, 'name' => 'post_parent', 'show_option_none' => __( 'Main Page ( no parent )' ), 'option_none_value' => 0, 'sort_column'=> 'menu_order, post_title' );
+                if ( $bulk )
+                        $dropdown_args['show_option_no_change'] = __( '&mdash; No Change &mdash;' );
+                $dropdown_args = apply_filters( 'quick_edit_dropdown_pages_args', $dropdown_args );
+                wp_dropdown_pages( $dropdown_args );
+        ?>
+                        </label>
+
+        <?php if ( post_type_supports( $screen->post_type, 'page-attributes' ) ) :
+                        if ( !$bulk ) : ?>
+
+                        <label>
+                                <span class="title"><?php _e( 'Order' ); ?></span>
+                                <span class="input-text-wrap"><input type="text" name="menu_order" class="inline-edit-menu-order-input" value="<?php echo $post->menu_order ?>" /></span>
+                        </label>
+
+        <?php        endif; // !$bulk ?>
+
+                        <label>
+                                <span class="title"><?php _e( 'Template' ); ?></span>
+                                <select name="page_template">
+        <?php        if ( $bulk ) : ?>
+                                        <option value="-1"><?php _e( '&mdash; No Change &mdash;' ); ?></option>
+        <?php        endif; // $bulk ?>
+                                        <option value="default"><?php _e( 'Default Template' ); ?></option>
+                                        <?php page_template_dropdown() ?>
+                                </select>
+                        </label>
+
+        <?php
+                endif; // post_type_supports page-attributes
+        endif; // $post_type_object->hierarchical ?>
+
+        <?php if ( count( $flat_taxonomies ) && !$bulk ) : ?>
+
+        <?php foreach ( $flat_taxonomies as $taxonomy ) : ?>
+
+                        <label class="inline-edit-tags">
+                                <span class="title"><?php echo esc_html( $taxonomy->labels->name ) ?></span>
+                                <textarea cols="22" rows="1" name="tax_input[<?php echo esc_attr( $taxonomy->name )?>]" class="tax_input_<?php echo esc_attr( $taxonomy->name )?>"></textarea>
+                        </label>
+
+        <?php endforeach; //$flat_taxonomies as $taxonomy ?>
+
+        <?php endif; // count( $flat_taxonomies ) && !$bulk ?>
+
+        <?php if ( post_type_supports( $screen->post_type, 'comments' ) || post_type_supports( $screen->post_type, 'trackbacks' ) ) :
+                if ( $bulk ) : ?>
+
+                        <div class="inline-edit-group">
+                <?php if ( post_type_supports( $screen->post_type, 'comments' ) ) : ?>
+                        <label class="alignleft">
+                                <span class="title"><?php _e( 'Comments' ); ?></span>
+                                <select name="comment_status">
+                                        <option value=""><?php _e( '&mdash; No Change &mdash;' ); ?></option>
+                                        <option value="open"><?php _e( 'Allow' ); ?></option>
+                                        <option value="closed"><?php _e( 'Do not allow' ); ?></option>
+                                </select>
+                        </label>
+                <?php endif; if ( post_type_supports( $screen->post_type, 'trackbacks' ) ) : ?>
+                        <label class="alignright">
+                                <span class="title"><?php _e( 'Pings' ); ?></span>
+                                <select name="ping_status">
+                                        <option value=""><?php _e( '&mdash; No Change &mdash;' ); ?></option>
+                                        <option value="open"><?php _e( 'Allow' ); ?></option>
+                                        <option value="closed"><?php _e( 'Do not allow' ); ?></option>
+                                </select>
+                        </label>
+                <?php endif; ?>
+                        </div>
+
+        <?php else : // $bulk ?>
+
+                        <div class="inline-edit-group">
+                        <?php if ( post_type_supports( $screen->post_type, 'comments' ) ) : ?>
+                                <label class="alignleft">
+                                        <input type="checkbox" name="comment_status" value="open" />
+                                        <span class="checkbox-title"><?php _e( 'Allow Comments' ); ?></span>
+                                </label>
+                        <?php endif; if ( post_type_supports( $screen->post_type, 'trackbacks' ) ) : ?>
+                                <label class="alignleft">
+                                        <input type="checkbox" name="ping_status" value="open" />
+                                        <span class="checkbox-title"><?php _e( 'Allow Pings' ); ?></span>
+                                </label>
+                        <?php endif; ?>
+                        </div>
+
+        <?php endif; // $bulk
+        endif; // post_type_supports comments or pings ?>
+
+                        <div class="inline-edit-group">
+                                <label class="inline-edit-status alignleft">
+                                        <span class="title"><?php _e( 'Status' ); ?></span>
+                                        <select name="_status">
+        <?php if ( $bulk ) : ?>
+                                                <option value="-1"><?php _e( '&mdash; No Change &mdash;' ); ?></option>
+        <?php endif; // $bulk ?>
+                                        <?php if ( $can_publish ) : // Contributors only get "Unpublished" and "Pending Review" ?>
+                                                <option value="publish"><?php _e( 'Published' ); ?></option>
+                                                <option value="future"><?php _e( 'Scheduled' ); ?></option>
+        <?php if ( $bulk ) : ?>
+                                                <option value="private"><?php _e( 'Private' ) ?></option>
+        <?php endif; // $bulk ?>
+                                        <?php endif; ?>
+                                                <option value="pending"><?php _e( 'Pending Review' ); ?></option>
+                                                <option value="draft"><?php _e( 'Draft' ); ?></option>
+                                        </select>
+                                </label>
+
+        <?php if ( post_type_supports( $screen->post_type, 'sticky' ) && $can_publish && current_user_can( $post_type_object->cap->edit_others_posts ) ) : ?>
+
+        <?php        if ( $bulk ) : ?>
+
+                                <label class="alignright">
+                                        <span class="title"><?php _e( 'Sticky' ); ?></span>
+                                        <select name="sticky">
+                                                <option value="-1"><?php _e( '&mdash; No Change &mdash;' ); ?></option>
+                                                <option value="sticky"><?php _e( 'Sticky' ); ?></option>
+                                                <option value="unsticky"><?php _e( 'Not Sticky' ); ?></option>
+                                        </select>
+                                </label>
+
+        <?php        else : // $bulk ?>
+
+                                <label class="alignleft">
+                                        <input type="checkbox" name="sticky" value="sticky" />
+                                        <span class="checkbox-title"><?php _e( 'Make this sticky' ); ?></span>
+                                </label>
+
+        <?php        endif; // $bulk ?>
+
+        <?php endif; // post_type_supports(sticky) && $can_publish && current_user_can( 'edit_others_cap' ) ?>
+
+                        </div>
+
+                </div></fieldset>
+
+        <?php
+                foreach ( $columns as $column_name => $column_display_name ) {
+                        if ( isset( $core_columns[$column_name] ) )
+                                continue;
+                        do_action( $bulk ? 'bulk_edit_custom_box' : 'quick_edit_custom_box', $column_name, $screen->post_type );
+                }
+        ?>
+                <p class="submit inline-edit-save">
+                        <a accesskey="c" href="#inline-edit" title="<?php _e( 'Cancel' ); ?>" class="button-secondary cancel alignleft"><?php _e( 'Cancel' ); ?></a>
+                        <?php if ( ! $bulk ) {
+                                wp_nonce_field( 'inlineeditnonce', '_inline_edit', false );
+                                $update_text = __( 'Update' );
+                                ?>
+                                <a accesskey="s" href="#inline-edit" title="<?php _e( 'Update' ); ?>" class="button-primary save alignright"><?php echo esc_attr( $update_text ); ?></a>
+                                <img class="waiting" style="display:none;" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
+                        <?php } else {
+                                $update_text = __( 'Update' );
+                        ?>
+                                <input accesskey="s" class="button-primary alignright" type="submit" name="bulk_edit" value="<?php echo esc_attr( $update_text ); ?>" />
+                        <?php } ?>
+                        <input type="hidden" name="post_view" value="<?php echo esc_attr( $m ); ?>" />
+                        <input type="hidden" name="screen" value="<?php echo esc_attr( $screen->id ); ?>" />
+                        <br class="clear" />
+                </p>
+                </td></tr>
+        <?php
+                $bulk++;
+                }
+?>
+                </tbody></table></form>
+<?php
+        }
+}
+
+?>
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkwpadminincludeslisttablephp"></a>
<div class="delfile"><h4>Deleted: trunk/wp-admin/includes/list-table.php (15953 => 15954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/list-table.php        2010-10-24 21:45:35 UTC (rev 15953)
+++ trunk/wp-admin/includes/list-table.php        2010-10-25 00:12:41 UTC (rev 15954)
</span><span class="lines">@@ -1,829 +0,0 @@
</span><del>-<?php
-
-/**
- * Base class for displaying a list of items as an ajaxified html table
- *
- * @package WordPress
- * @since 3.1.0
- */
-class WP_List_Table {
-
-        /**
-         * The current list of items
-         *
-         * @since 3.1.0
-         * @var array
-         * @access protected
-         */
-        var $items;
-
-        /**
-         * Various information about the current table
-         *
-         * @since 3.1.0
-         * @var array
-         * @access private
-         */
-        var $_args;
-
-        /**
-         * Various information needed for displaying the pagination
-         *
-         * @since 3.1.0
-         * @var array
-         * @access private
-         */
-        var $_pagination_args = array();
-
-        /**
-         * The current screen
-         *
-         * @since 3.1.0
-         * @var object
-         * @access private
-         */
-        var $_screen;
-
-        /**
-         * Cached bulk actions
-         *
-         * @since 3.1.0
-         * @var array
-         * @access private
-         */
-        var $_actions;
-
-        /**
-         * Cached pagination output
-         *
-         * @since 3.1.0
-         * @var string
-         * @access private
-         */
-        var $_pagination;
-
-        /**
-         * Constructor. The child class should call this constructor from it's own constructor
-         *
-         * @param array $args An associative array with information about the current table
-         * @access protected
-         */
-        function WP_List_Table( $args ) {
-                $args = wp_parse_args( $args, array(
-                        'screen' => '',
-                        'plural' => '',
-                        'singular' => '',
-                        'ajax' => true
-                ) );
-
-                $this->_screen = $args['screen'];
-
-                if ( is_string( $this->_screen ) )
-                        $this->_screen = convert_to_screen( $this->_screen );
-
-                add_filter( 'manage_' . $this->_screen->id . '_columns', array( $this, 'get_columns' ), 0 );
-
-                if ( !$args['plural'] )
-                        $args['plural'] = $this->_screen->base;
-
-                $this->_args = $args;
-
-                if ( $args['ajax'] ) {
-                        wp_enqueue_script( 'list-table' );
-                        add_action( 'admin_footer', array( $this, '_js_vars' ) );
-                }
-        }
-
-        /**
-         * Checks the current user's permissions
-         * @uses wp_die()
-         *
-         * @since 3.1.0
-         * @access public
-         */
-        function check_permissions() {
-                die( 'function WP_List_Table::check_permissions() must be over-ridden in a sub-class.' );
-        }
-
-        /**
-         * Prepares the list of items for displaying.
-         * @uses WP_List_Table::set_pagination_args()
-         *
-         * @since 3.1.0
-         * @access public
-         */
-        function prepare_items() {
-                die( 'function WP_List_Table::prepare_items() must be over-ridden in a sub-class.' );
-        }
-
-        /**
-         * An internal method that sets all the necessary pagination arguments
-         *
-         * @param array $args An associative array with information about the pagination
-         * @access protected
-         */
-        function set_pagination_args( $args ) {
-                $args = wp_parse_args( $args, array(
-                        'query_var' => 'paged',
-                        'total_items' => 0,
-                        'total_pages' => 0,
-                        'per_page' => 0,
-                ) );
-
-                if ( !$args['total_pages'] && $args['per_page'] > 0 )
-                        $args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] );
-
-                $this->_pagination_args = $args;
-        }
-
-        /**
-         * Access the pagination args
-         *
-         * @since 3.1.0
-         * @access public
-         *
-         * @param string $key
-         * @return array
-         */
-        function get_pagination_arg( $key ) {
-                if ( 'page' == $key )
-                        return $this->get_pagenum();
-
-                if ( isset( $this->_pagination_args[$key] ) )
-                        return $this->_pagination_args[$key];
-        }
-
-        /**
-         * Whether the table has items to display or not
-         *
-         * @since 3.1.0
-         * @access public
-         *
-         * @return bool
-         */
-        function has_items() {
-                return !empty( $this->items );
-        }
-
-        /**
-         * Message to be displayed when there are no items
-         *
-         * @since 3.1.0
-         * @access public
-         */
-        function no_items() {
-                _e( 'No items found.' );
-        }
-
-        /**
-         * Get an associative array ( id => link ) with the list
-         * of views available on this table.
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @return array
-         */
-        function get_views() {
-                return array();
-        }
-
-        /**
-         * Display the bulk actions dropdown.
-         *
-         * @since 3.1.0
-         * @access public
-         */
-        function views() {
-                $views = $this->get_views();
-                $views = apply_filters( 'views_' . $this->_screen->base, $views );
-
-                if ( empty( $views ) )
-                        return;
-
-                echo "<ul class='subsubsub'>\n";
-                echo implode( " |</li>\n", $views ) . "</li>\n";
-                echo "</ul>";
-        }
-
-        /**
-         * Get an associative array ( option_name => option_title ) with the list
-         * of bulk actions available on this table.
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @return array
-         */
-        function get_bulk_actions() {
-                return array();
-        }
-
-        /**
-         * Display the bulk actions dropdown.
-         *
-         * @since 3.1.0
-         * @access public
-         */
-        function bulk_actions() {
-
-                if ( is_null( $this->_actions ) ) {
-                        $this->_actions = $this->get_bulk_actions();
-                        $this->_actions = apply_filters( 'bulk_actions-' . $this->_screen->base, $this->_actions );
-                        $two = '';
-                }
-                else {
-                        $two = '2';
-                }
-
-                if ( empty( $this->_actions ) )
-                        return;
-
-                echo "<select name='action$two'>\n";
-                echo "<option value='-1' selected='selected'>" . __( 'Bulk Actions' ) . "</option>\n";
-                foreach ( $this->_actions as $name => $title )
-                        echo "\t<option value='$name'>$title</option>\n";
-                echo "</select>\n";
-
-                echo "<input type='submit' value='" . esc_attr__( 'Apply' ) . "' name='doaction$two' id='doaction$two' class='button-secondary action' />\n";
-        }
-
-        /**
-         * Get the current action selected from the bulk actions dropdown.
-         *
-         * @since 3.1.0
-         * @access public
-         *
-         * @return string|bool The action name or False if no action was selected
-         */
-        function current_action() {
-                if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] )
-                        return $_REQUEST['action'];
-
-                if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] )
-                        return $_REQUEST['action2'];
-
-                return false;
-        }
-
-        /**
-         * Generate row actions div
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @param array $actions The list of actions
-         * @param bool $always_visible Wether the actions should be always visible
-         * @return string
-         */
-        function row_actions( $actions, $always_visible = false ) {
-                $action_count = count( $actions );
-                $i = 0;
-
-                if ( !$action_count )
-                        return '';
-
-                $out = '<div class="' . ( $always_visible ? 'row-actions-visible' : 'row-actions' ) . '">';
-                foreach ( $actions as $action => $link ) {
-                        ++$i;
-                        ( $i == $action_count ) ? $sep = '' : $sep = ' | ';
-                        $out .= "<span class='$action'>$link$sep</span>";
-                }
-                $out .= '</div>';
-
-                return $out;
-        }
-
-        /**
-         * Display a monthly dropdown for filtering items
-         *
-         * @since 3.1.0
-         * @access protected
-         */
-        function months_dropdown( $post_type ) {
-                global $wpdb, $wp_locale;
-
-                $months = $wpdb->get_results( $wpdb->prepare( "
-                        SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
-                        FROM $wpdb->posts
-                        WHERE post_type = %s
-                        ORDER BY post_date DESC
-                ", $post_type ) );
-
-                $month_count = count( $months );
-
-                if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) )
-                        return;
-
-                $m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0;
-?>
-                <select name='m'>
-                        <option<?php selected( $m, 0 ); ?> value='0'><?php _e( 'Show all dates' ); ?></option>
-<?php
-                foreach ( $months as $arc_row ) {
-                        if ( 0 == $arc_row->year )
-                                continue;
-
-                        $month = zeroise( $arc_row->month, 2 );
-                        $year = $arc_row->year;
-
-                        printf( "<option %s value='%s'>%s</option>\n",
-                                selected( $m, $year . $month, false ),
-                                esc_attr( $arc_row->year . $month ),
-                                $wp_locale->get_month( $month ) . " $year"
-                        );
-                }
-?>
-                </select>
-<?php
-        }
-
-        /**
-         * Display a view switcher
-         *
-         * @since 3.1.0
-         * @access protected
-         */
-        function view_switcher( $current_mode ) {
-                $modes = array(
-                        'list' => __( 'List View' ),
-                        'excerpt' => __( 'Excerpt View' )
-                );
-
-?>
-                <input type="hidden" name="mode" value="<?php echo esc_attr( $current_mode ); ?>" />
-                <div class="view-switch">
-<?php
-                        foreach ( $modes as $mode => $title ) {
-                                $class = ( $current_mode == $mode ) ? 'class="current"' : '';
-                                echo "<a href='" . esc_url( add_query_arg( 'mode', $mode, $_SERVER['REQUEST_URI'] ) ) . "' $class><img id='view-switch-$mode' src='" . esc_url( includes_url( 'images/blank.gif' ) ) . "' width='20' height='20' title='$title' alt='$title' /></a>\n";
-                        }
-                ?>
-                </div>
-<?php
-        }
-
-        /**
-         * Display a comment count bubble
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @param int $post_id
-         * @param int $pending_comments
-         */
-        function comments_bubble( $post_id, $pending_comments ) {
-                $pending_phrase = sprintf( __( '%s pending' ), number_format( $pending_comments ) );
-
-                if ( $pending_comments )
-                        echo '<strong>';
-
-                $link = "<a href='" . add_query_arg( 'p', $post_id, admin_url('edit-comments.php') ) . "' title='$pending_phrase' class='post-com-count'><span class='comment-count'>%s</span></a>";
-
-                comments_number(
-                        sprintf( $link, /* translators: comment count link */ _x( '0', 'comment count' ) ),
-                        sprintf( $link, /* translators: comment count link */ _x( '1', 'comment count' ) ),
-                        sprintf( $link, /* translators: comment count link: % will be substituted by comment count */ _x( '%', 'comment count' ) )
-                );
-
-                if ( $pending_comments )
-                        echo '</strong>';
-        }
-
-        /**
-         * Get the current page number
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @return int
-         */
-        function get_pagenum( $query_var = 'paged' ) {
-                $pagenum = isset( $_REQUEST[$query_var] ) ? absint( $_REQUEST[$query_var] ) : 0;
-
-                return max( 1, $pagenum );
-        }
-
-        /**
-         * Get number of items to display on a single page
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @return int
-         */
-        function get_items_per_page( $option, $default = 20 ) {
-                $per_page = (int) get_user_option( $option );
-                if ( empty( $per_page ) || $per_page < 1 )
-                        $per_page = $default;
-
-                return (int) apply_filters( $option, $per_page );
-        }
-
-        /**
-         * Display the pagination.
-         *
-         * @since 3.1.0
-         * @access protected
-         */
-        function pagination() {
-                if ( $this->_pagination ) {
-                        echo $this->_pagination;
-                        return;
-                }
-
-                if ( empty( $this->_pagination_args ) )
-                        return;
-
-                extract( $this->_pagination_args );
-
-                if ( $total_pages < 2 )
-                        return;
-
-                $output = '<span class="displaying-num">' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '</span>';
-
-                $current = $this->get_pagenum( $query_var );
-
-                $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
-
-                $page_links = array();
-
-                $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
-                        'first-page',
-                        esc_attr__( 'Go to the first page' ),
-                        esc_url( remove_query_arg( $query_var, $current_url ) ),
-                        '&laquo;&laquo;'
-                );
-
-                $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
-                        'prev-page',
-                        esc_attr__( 'Go to the previous page' ),
-                        esc_url( add_query_arg( $query_var, max( 1, $current-1 ), $current_url ) ),
-                        '&laquo;'
-                );
-
-                $html_current_page = sprintf( "<input class='current-page' title='%s' type='text' name='%s' value='%s' size='%d' />",
-                        esc_attr__( 'Current page' ),
-                        esc_attr( $query_var ),
-                        number_format_i18n( $current ),
-                        strlen( $total_pages )
-                );
-                $html_total_pages = sprintf( "<span class='total-pages'>%s</span>", number_format_i18n( $total_pages ) );
-                $page_links[] = sprintf( _x( '%s of %s', 'paging' ), $html_current_page, $html_total_pages );
-
-                $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
-                        'next-page',
-                        esc_attr__( 'Go to the next page' ),
-                        esc_url( add_query_arg( $query_var, min( $total_pages, $current+1 ), $current_url ) ),
-                        '&raquo;'
-                );
-
-                $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
-                        'last-page',
-                        esc_attr__( 'Go to the last page' ),
-                        esc_url( add_query_arg( $query_var, $total_pages, $current_url ) ),
-                        '&raquo;&raquo;'
-                );
-
-                $output .= join( "\n", $page_links );
-
-                $this->_pagination = "<div class='tablenav-pages'>$output</div>";
-
-                echo $this->_pagination;
-        }
-
-        /**
-         * Get a list of columns. The format is internal_name => title
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @return array
-         */
-        function get_columns() {
-                die( 'function WP_List_Table::get_columns() must be over-ridden in a sub-class.' );
-        }
-
-        /**
-         * Get a list of sortable columns. The format is internal_name => orderby
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @return array
-         */
-        function get_sortable_columns() {
-                return array();
-        }
-
-        /**
-         * Get a list of all, hidden and sortable columns, with filter applied
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @return array
-         */
-        function get_column_info() {
-                if ( !isset( $this->_column_headers ) ) {
-                        $columns = get_column_headers( $this->_screen );
-                        $hidden = get_hidden_columns( $this->_screen );
-                        $sortable = apply_filters( 'manage_' . $this->_screen->id . '_sortable_columns', $this->get_sortable_columns() );
-
-                        $this->_column_headers = array( $columns, $hidden, $sortable );
-                }
-
-                return $this->_column_headers;
-        }
-
-        /**
-         * Print column headers, accounting for hidden and sortable columns.
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @param bool $with_id Whether to set the id attribute or not
-         */
-        function print_column_headers( $with_id = true ) {
-                $screen = $this->_screen;
-
-                list( $columns, $hidden, $sortable ) = $this->get_column_info();
-
-                $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
-
-                if ( isset( $_GET['orderby'] ) )
-                        $current_orderby = $_GET['orderby'];
-                else
-                        $current_orderby = '';
-
-                if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] )
-                        $current_order = 'desc';
-                else
-                        $current_order = 'asc';
-
-                foreach ( $columns as $column_key => $column_display_name ) {
-                        $class = array( 'manage-column', "column-$column_key" );
-
-                        $style = '';
-                        if ( in_array( $column_key, $hidden ) )
-                                $style = 'display:none;';
-
-                        $style = ' style="' . $style . '"';
-
-                        if ( 'cb' == $column_key )
-                                $class[] = 'check-column';
-                        elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) )
-                                $class[] = 'num';
-
-                        if ( isset( $sortable[$column_key] ) ) {
-                                $orderby = $sortable[$column_key];
-                                if ( $current_orderby == $orderby ) {
-                                        $order = 'asc' == $current_order ? 'desc' : 'asc';
-                                        $class[] = "sorted-$current_order";
-                                } else {
-                                        $order = 'asc';
-                                        $class[] = 'sortable';
-                                }
-                                $column_display_name = '<a href="' . esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ) . '">' . $column_display_name . '</a>';
-                                $column_display_name .= '<div class="sorting-indicator"></div>';
-                        }
-
-                        $id = $with_id ? "id='$column_key'" : '';
-
-                        if ( !empty( $class ) )
-                                $class = "class='" . join( ' ', $class ) . "'";
-
-                        echo "<th scope='col' $id $class $style>$column_display_name</th>";
-                }
-        }
-
-        /**
-         * Display the table or a message if there are no items
-         *
-         * @since 3.1.0
-         * @access public
-         */
-        function display() {
-                if ( $this->has_items() ) {
-                        $this->display_table();
-                } else {
-                        echo '<br class="clear">';
-                        $this->extra_tablenav( 'top' );
-                        echo '<br class="clear">';
-                        echo '<p>';
-                        $this->no_items();
-                        echo '</p>';
-                }
-        }
-
-        /**
-         * Get a list of CSS classes for the <table> tag
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @return array
-         */
-        function get_table_classes() {
-                extract( $this->_args );
-
-                return array( 'widefat', 'fixed', $plural );
-        }
-
-        /**
-         * Display the full table
-         *
-         * @since 3.1.0
-         * @access public
-         */
-        function display_table() {
-                extract( $this->_args );
-
-                $this->display_tablenav( 'top' );
-
-?>
-<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
-        <thead>
-        <tr>
-                <?php $this->print_column_headers(); ?>
-        </tr>
-        </thead>
-
-        <tfoot>
-        <tr>
-                <?php $this->print_column_headers( false ); ?>
-        </tr>
-        </tfoot>
-
-        <tbody id="the-list"<?php if ( $singular ) echo " class='list:$singular'"; ?>>
-                <?php $this->display_rows(); ?>
-        </tbody>
-</table>
-<?php
-
-                $this->display_tablenav( 'bottom' );
-        }
-
-        /**
-         * Generate the table navigation above or below the table
-         *
-         * @since 3.1.0
-         * @access protected
-         */
-        function display_tablenav( $which ) {
-                if ( 'top' == $which )
-                        wp_nonce_field( 'bulk-' . $this->_args['plural'] );
-?>
-        <div class="tablenav">
-
-                <div class="alignleft actions">
-                        <?php $this->bulk_actions( $which ); ?>
-                </div>
-
-        <?php
-                $this->extra_tablenav( $which );
-                $this->pagination( $which );
-        ?>
-
-                <br class="clear">
-        </div>
-
-        <br class="clear">
-<?php
-        }
-
-        /**
-         * Extra controls to be displayed between bulk actions and pagination
-         *
-         * @since 3.1.0
-         * @access protected
-         */
-        function extra_tablenav( $which ) {}
-
-        /**
-         * Generate the <tbody> part of the table
-         *
-         * @since 3.1.0
-         * @access protected
-         */
-        function display_rows() {
-                foreach ( $this->items as $item )
-                        $this->single_row( $item );
-        }
-
-        /**
-         * Generates content for a single row of the table
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @param $object $item The current item
-         */
-        function single_row( $item ) {
-                static $row_class = '';
-                $row_class = ( $row_class == '' ? ' class="alternate"' : '' );
-
-                echo '<tr' . $row_class . '>';
-                echo $this->single_row_columns( $item );
-                echo '</tr>';
-        }
-
-        /**
-         * Generates the columns for a single row of the table
-         *
-         * @since 3.1.0
-         * @access protected
-         *
-         * @param $object $item The current item
-         */
-        function single_row_columns( $item ) {
-                list( $columns, $hidden ) = $this->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";
-
-                        if ( 'cb' == $column_name ) {
-                                echo '<th scope="row" class="check-column">';
-                                echo $this->column_cb( $item );
-                                echo '</th>';
-                        }
-                        elseif ( method_exists( $this, 'column_' . $column_name ) ) {
-                                echo "<td $attributes>";
-                                echo call_user_func( array( $this, 'column_' . $column_name ), $item );
-                                echo "</td>";
-                        }
-                        else {
-                                echo "<td $attributes>";
-                                echo $this->column_default( $item, $column_name );
-                                echo "</td>";
-                        }
-                }
-        }
-
-        /**
-         * Handle an incoming ajax request (called from admin-ajax.php)
-         *
-         * @since 3.1.0
-         * @access public
-         */
-        function ajax_response() {
-                $this->check_permissions();
-                $this->prepare_items();
-
-                extract( $this->_args );
-                extract( $this->_pagination_args );
-
-                ob_start();
-                $this->display_rows();
-                $rows = ob_get_clean();
-
-                $response = array( 'rows' => $rows );
-
-                if ( isset( $total_items ) )
-                        $response['total_items'] = sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) );
-
-                if ( isset( $total_pages ) )
-                        $response['total_pages'] = $total_pages;
-
-                die( json_encode( $response ) );
-        }
-
-        /**
-         * Send required variables to JavaScript land
-         *
-         * @access private
-         */
-        function _js_vars() {
-                extract( $this->_args );
-
-                $class = get_class( $this );
-
-                printf( "<script type='text/javascript'>list_args = %s;</script>\n",
-                        json_encode( compact( 'screen', 'class' ) )
-                );
-        }
-}
-
-/**
- * Fetch an instance of a WP_List_Table class
- *
- * @since 3.1.0
- *
- * @param string $type The type of the list table
- * @return object
- */
-function get_list_table( $type ) {
-        require_once( ABSPATH . '/wp-admin/includes/default-list-tables.php' );
-
-        $class = 'WP_' . strtr( ucwords( strtr( $type, '-', ' ') ), ' ', '_' ) . '_Table';
-        $class = apply_filters( "get_list_table_$type", $class );
-
-        return new $class;
-}
-
</del></span></pre>
</div>
</div>
</body>
</html>