Make WordPress Core

Ticket #32170: 32170.4.patch

File 32170.4.patch, 17.5 KB (added by afercia, 9 years ago)
  • src/wp-admin/includes/class-wp-comments-list-table.php

     
    369369         */
    370370        protected function get_sortable_columns() {
    371371                return array(
    372                         'author'   => 'comment_author',
    373                         'response' => 'comment_post_ID'
     372                        'author'   => array( 'comment_author', false, __( 'Author' ), __( 'Table ordered by Comment Author.' ) ),
     373                        'response' => array( 'comment_post_ID', false, _x( 'In Response To', 'column name' ), __( 'Table ordered by Post Replied To.' ) ),
    374374                );
    375375        }
    376376
     
    394394
    395395                $this->display_tablenav( 'top' );
    396396
     397                if ( ! isset( $_GET['orderby'] ) ) {
     398                        // In the initial view, Comments are ordered by comment's date but there's no column for that.
     399                        echo '<p id="table-description" class="screen-reader-text">' . __( 'Table ordered by Comment Date. Descending order.' ) . '</p>';
     400                } else {
     401                        $this->print_table_description();
     402                }
    397403?>
    398 <table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>">
     404<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" aria-describedby="table-description">
    399405        <thead>
    400406        <tr>
    401407                <?php $this->print_column_headers(); ?>
  • src/wp-admin/includes/class-wp-links-list-table.php

     
    132132         */
    133133        protected function get_sortable_columns() {
    134134                return array(
    135                         'name'    => 'name',
    136                         'url'     => 'url',
    137                         'visible' => 'visible',
    138                         'rating'  => 'rating'
     135                        'name'    => array( 'name', false, _x( 'Name', 'link name' ), __( 'Table ordered by Name.' ), 'asc' ),
     136                        'url'     => array( 'url', false, __( 'URL' ), __( 'Table ordered by URL.' ) ),
     137                        'visible' => array( 'visible', false, __( 'Visible' ), __( 'Table ordered by Visibility.' ) ),
     138                        'rating'  => array( 'rating', false, __( 'Rating' ), __( 'Table ordered by Rating.' ) ),
    139139                );
    140140        }
    141141
  • src/wp-admin/includes/class-wp-list-table.php

     
    786786         * Get a list of sortable columns. The format is:
    787787         * 'internal-name' => 'orderby'
    788788         * or
    789          * 'internal-name' => array( 'orderby', true )
     789         * 'internal-name' => array( 'orderby', bool, 'abbr', 'orderby-text', 'initially-sorted-column-order' )
    790790         *
    791          * The second format will make the initial sorting order be descending
     791         * In the second format, passing true as second parameter will make the initial
     792         * sorting order be descending. Following parameters add a short column name to
     793         * be used as 'abbr' attribute, a translatable string for the current sorting
     794         * and the initial order for the initial sorted column, 'asc' or 'desc'.
    792795         *
    793796         * @since 3.1.0
     797+        * @since 4.3.0 Added 'abbr', 'orderby-text' and 'initially-sorted-column-order'.
    794798         * @access protected
    795799         *
    796800         * @return array
     
    884888                                continue;
    885889
    886890                        $data = (array) $data;
    887                         if ( !isset( $data[1] ) )
    888                                 $data[1] = false;
     891                        // Descending initial sorting.
     892                        if ( ! isset( $data[1] ) ) {
     893                                $data[1] = false;
     894                        }
     895                        // Current sorting translatable string.
     896                        if ( ! isset( $data[2] ) ) {
     897                                $data[2] = '';
     898                        }
     899                        // Initial view sorted column and asc/desc order.
     900                        if ( ! isset( $data[3] ) ) {
     901                                $data[3] = false;
     902                        }
     903                        // Initial order for the initial sorted column, default 'asc'.
     904                        if ( ! isset( $data[4] ) ) {
     905                                $data[4] = 'asc';
     906                        }
    889907
    890908                        $sortable[$id] = $data;
    891909                }
     
    926944                $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
    927945                $current_url = remove_query_arg( 'paged', $current_url );
    928946
    929                 if ( isset( $_GET['orderby'] ) )
    930                         $current_orderby = $_GET['orderby'];
    931                 else
    932                         $current_orderby = '';
     947                // When users click on a column header to sort by other columns.
     948                if ( isset( $_GET['orderby'] ) ) {
     949                        $current_orderby = $_GET['orderby'];
     950                // In the initial view there's no orderby parameter.
     951                } else {
     952                        $current_orderby = '';
     953                }
    933954
    934                 if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] )
     955                // Not in the initial view and descending order.
     956                if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] ) {
    935957                        $current_order = 'desc';
    936                 else
     958                } else {
     959                        // The initial view is not always 'asc' we'll take care of this below.
    937960                        $current_order = 'asc';
     961                }
    938962
    939963                if ( ! empty( $columns['cb'] ) ) {
    940964                        static $cb_counter = 1;
     
    946970                foreach ( $columns as $column_key => $column_display_name ) {
    947971                        $class = array( 'manage-column', "column-$column_key" );
    948972
     973                        $aria_sort_attr = $abbr_attr = $order_text = '';
     974
    949975                        if ( in_array( $column_key, $hidden ) ) {
    950976                                $class[] = 'hidden';
    951977                        }
     
    956982                                $class[] = 'num';
    957983
    958984                        if ( isset( $sortable[$column_key] ) ) {
    959                                 list( $orderby, $desc_first ) = $sortable[$column_key];
     985                                list( $orderby, $desc_first, $abbr, $orderby_text, $initial_order ) = $sortable[$column_key];
    960986
     987                                /*
     988                                 * We're in the initial view and there's no $_GET['orderby'] then check if the
     989                                 * initial sorting information is set in the sortable columns and use that.
     990                                 */
     991                                if ( '' === $current_orderby && $initial_order ) {
     992                                        // Use the initially sorted column $orderby as current orderby.
     993                                        $current_orderby = $orderby;
     994                                        // Use the initially sorted column asc/desc order as initial order.
     995                                        $current_order = $initial_order;
     996                                }
     997
     998                                /*
     999                                 * True in the initial view when an initial orderby is set via get_sortable_columns()
     1000                                 * and true in the sorted views when the actual $_GET['orderby'] is equal to $orderby.
     1001                                 */
    9611002                                if ( $current_orderby == $orderby ) {
    962                                         $order = 'asc' == $current_order ? 'desc' : 'asc';
     1003                                        // The sorted column. The `aria-sort` attribute must be set only on the sorted column.
     1004                                        if ( 'asc' == $current_order ) {
     1005                                                $order = 'desc';
     1006                                                $aria_sort_attr = ' aria-sort="ascending"';
     1007                                                $order_text = __( 'Click to sort descending.' );
     1008                                        } else {
     1009                                                $order = 'asc';
     1010                                                $aria_sort_attr = ' aria-sort="descending"';
     1011                                                $order_text = __( 'Click to sort ascending.' );
     1012                                        }
    9631013                                        $class[] = 'sorted';
    9641014                                        $class[] = $current_order;
    9651015                                } else {
     1016                                        // The other sortable columns.
    9661017                                        $order = $desc_first ? 'desc' : 'asc';
    9671018                                        $class[] = 'sortable';
    9681019                                        $class[] = $desc_first ? 'asc' : 'desc';
     1020                                        $order_text = 'asc' === $order ? __( 'Sortable column. Click to sort ascending.' ) : __( 'Sortable column. Click to sort descending.' );
    9691021                                }
    9701022
    971                                 $column_display_name = '<a href="' . esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span></a>';
     1023                                // Print an 'abbr' attribute if a value is provided via get_sortable_columns().
     1024                                $abbr_attr = $abbr ? ' abbr="' . esc_attr( $abbr ) . '"' : '';
     1025
     1026                                $column_display_name = '<a href="' . esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span> <span class="screen-reader-text">' . $order_text . '</span></a>';
    9721027                        }
    9731028
    974                         $id = $with_id ? "id='$column_key'" : '';
     1029                        $id = $with_id ? " id='$column_key'" : '';
    9751030
    9761031                        if ( !empty( $class ) )
    977                                 $class = "class='" . join( ' ', $class ) . "'";
     1032                                $class = " class='" . join( ' ', $class ) . "'";
    9781033
    979                         echo "<th scope='col' $id $class>$column_display_name</th>";
     1034                        echo "<th scope='col'$id$class$aria_sort_attr$abbr_attr>$column_display_name</th>";
    9801035                }
    9811036        }
    9821037
     1038        /**
     1039         * Print a table description with information about current sorting and order.
     1040         *
     1041         * For the table initial view, information about initial orderby and order
     1042         * should be provided via get_sortable_columns().
     1043         *
     1044         * @since 4.3.0
     1045         * @access public
     1046         */
     1047        public function print_table_description() {
     1048                list( $columns, $hidden, $sortable ) = $this->get_column_info();
     1049
     1050                if ( empty( $sortable ) ) {
     1051                        return;
     1052                }
     1053
     1054                // When users click on a column header to sort by other columns.
     1055                if ( isset( $_GET['orderby'] ) ) {
     1056                        $current_orderby = $_GET['orderby'];
     1057                // In the initial view there's no orderby parameter.
     1058                } else {
     1059                        $current_orderby = '';
     1060                }
     1061
     1062                // Not in the initial view and descending order.
     1063                if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] ) {
     1064                        $current_order = 'desc';
     1065                } else {
     1066                        // The initial view is not always 'asc' we'll take care of this below.
     1067                        $current_order = 'asc';
     1068                }
     1069
     1070                foreach ( array_keys( $columns ) as $column_key ) {
     1071
     1072                        if ( isset( $sortable[$column_key] ) ) {
     1073
     1074                                list( $orderby, $desc_first, $abbr, $orderby_text, $initial_order ) = $sortable[$column_key];
     1075
     1076                                if ( ! is_string( $orderby_text ) || '' === $orderby_text ) {
     1077                                        return;
     1078                                }
     1079                                /*
     1080                                 * We're in the initial view and there's no $_GET['orderby'] then check if the
     1081                                 * initial sorting information is set in the sortable columns and use that.
     1082                                 */
     1083                                if ( '' === $current_orderby && $initial_order ) {
     1084                                        // Use the initially sorted column $orderby as current orderby.
     1085                                        $current_orderby = $orderby;
     1086                                        // Use the initially sorted column asc/desc order as initial order.
     1087                                        $current_order = $initial_order;
     1088                                }
     1089
     1090                                /*
     1091                                 * True in the initial view when an initial orderby is set via get_sortable_columns()
     1092                                 * and true in the sorted views when the actual $_GET['orderby'] is equal to $orderby.
     1093                                 */
     1094                                if ( $current_orderby == $orderby ) {
     1095                                        $order_text = 'asc' === $current_order ? __( 'Ascending order.' ) : __( 'Descending order.' );
     1096                                        echo '<p id="table-description" class="screen-reader-text">' . $orderby_text . ' ' . $order_text . '</p>';
     1097
     1098                                        return;
     1099                                }
     1100                        }
     1101                }
     1102        }
     1103
    9831104        /**
    9841105         * Display the table
    9851106         *
     
    9901111                $singular = $this->_args['singular'];
    9911112
    9921113                $this->display_tablenav( 'top' );
     1114
     1115                $this->print_table_description();
    9931116?>
    994 <table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
     1117<table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>" aria-describedby="table-description">
    9951118        <thead>
    9961119        <tr>
    9971120                <?php $this->print_column_headers(); ?>
  • src/wp-admin/includes/class-wp-media-list-table.php

     
    302302         */
    303303        protected function get_sortable_columns() {
    304304                return array(
    305                         'title'    => 'title',
    306                         'author'   => 'author',
    307                         'parent'   => 'parent',
    308                         'comments' => 'comment_count',
    309                         'date'     => array( 'date', true ),
     305                        'title'    => array( 'title', false, _x( 'File', 'column name' ), __( 'Table ordered by File Name.' ) ),
     306                        'author'   => array( 'author', false, __( 'Author' ), __( 'Table ordered by Author.' ) ),
     307                        'parent'   => array( 'parent', false, _x( 'Uploaded to', 'column name' ), __( 'Table ordered by Uploaded To.' ) ),
     308                        'comments' => array( 'comment_count', __( 'Comments' ), false, __( 'Table ordered by Comments.' ) ),
     309                        'date'     => array( 'date', true, __( 'Date' ), __( 'Table ordered by Date.' ), 'desc' ),
    310310                );
    311311        }
    312312
  • src/wp-admin/includes/class-wp-ms-sites-list-table.php

     
    223223         * @return array
    224224         */
    225225        protected function get_sortable_columns() {
     226
     227                if ( is_subdomain_install() ) {
     228                        $abbr = __( 'Domain' );
     229                        $blogname_orderby_text = __( 'Table ordered by Site Domain Name.' );
     230                } else {
     231                        $abbr = __( 'Path' );
     232                        $blogname_orderby_text = __( 'Table ordered by Site Path.' );
     233                }
     234
    226235                return array(
    227                         'blogname'    => 'blogname',
    228                         'lastupdated' => 'lastupdated',
    229                         'registered'  => 'blog_id',
     236                        'blogname'    => array( 'blogname', false, $abbr, $blogname_orderby_text ),
     237                        'lastupdated' => array( 'lastupdated', true, __( 'Last Updated' ), __( 'Table ordered by Last Updated.' ) ),
     238                        'registered'  => array( 'blog_id', true, _x( 'Registered', 'site' ), __( 'Table ordered by Site Registered Date.' ), 'desc' ),
    230239                );
    231240        }
    232241
  • src/wp-admin/includes/class-wp-ms-themes-list-table.php

     
    240240         */
    241241        protected function get_sortable_columns() {
    242242                return array(
    243                         'name'         => 'name',
     243                        'name' => array( 'name', false, __( 'Theme' ), __( 'Table ordered by Theme Name.' ), 'asc' ),
    244244                );
    245245        }
    246246
  • src/wp-admin/includes/class-wp-ms-users-list-table.php

     
    167167         */
    168168        protected function get_sortable_columns() {
    169169                return array(
    170                         'username'   => 'login',
    171                         'name'       => 'name',
    172                         'email'      => 'email',
    173                         'registered' => 'id',
     170                        'username'   => array( 'login', false, __( 'Username' ), __( 'Table ordered by Username.' ), 'asc' ),
     171                        'name'       => array( 'name', false, __( 'Name' ), __( 'Table ordered by Name.' ) ),
     172                        'email'      => array( 'email', false, __( 'E-mail' ), __( 'Table ordered by E-mail.' ) ),
     173                        'registered' => array( 'id', false, _x( 'Registered', 'user' ), __( 'Table ordered by User Registered Date.' ) ),
    174174                );
    175175        }
    176176
  • src/wp-admin/includes/class-wp-posts-list-table.php

     
    468468         * @return array
    469469         */
    470470        protected function get_sortable_columns() {
    471                 return array(
    472                         'title'    => 'title',
    473                         'parent'   => 'parent',
    474                         'comments' => 'comment_count',
    475                         'date'     => array( 'date', true )
    476                 );
     471
     472                $post_type = $this->screen->post_type;
     473
     474                if ( 'page' === $post_type ) {
     475                        $title_orderby_text = isset( $_GET['orderby'] ) ? __( 'Table ordered by Title.' ) : __( 'Table ordered by Hierarchical Menu Order and Title.' );
     476                        $sortables = array(
     477                                'title'    => array( 'title', false, __( 'Title' ), $title_orderby_text, 'asc' ),
     478                                'parent'   => array( 'parent', false ),
     479                                'comments' => array( 'comment_count', false, __( 'Comments' ), __( 'Table ordered by Comments.' ) ),
     480                                'date'     => array( 'date', true, __( 'Date' ), __( 'Table ordered by Date.' ) ),
     481                        );
     482                } else {
     483                        $sortables = array(
     484                                'title'    => array( 'title', false, __( 'Title' ), __( 'Table ordered by Title.' ) ),
     485                                'parent'   => array( 'parent', false ),
     486                                'comments' => array( 'comment_count', false, __( 'Comments' ), __( 'Table ordered by Comments.' ) ),
     487                                'date'     => array( 'date', true, __( 'Date' ), __( 'Table ordered by Date.' ), 'desc' ),
     488                        );
     489                }
     490                // Custom Post Types: there's a filter for that, see get_column_info().
     491
     492                return $sortables;
    477493        }
    478494
    479495        /**
  • src/wp-admin/includes/class-wp-terms-list-table.php

     
    185185         * @return array
    186186         */
    187187        protected function get_sortable_columns() {
     188
     189                $taxonomy = $this->screen->taxonomy;
     190
     191                if ( ! isset( $_GET['orderby'] ) && is_taxonomy_hierarchical( $taxonomy ) ) {
     192                        $name_orderby_text = __( 'Table ordered hierarchically.' );
     193                } else {
     194                        $name_orderby_text = __( 'Table ordered by Name.' );
     195                }
     196
    188197                return array(
    189                         'name'        => 'name',
    190                         'description' => 'description',
    191                         'slug'        => 'slug',
    192                         'posts'       => 'count',
    193                         'links'       => 'count'
     198                        'name'        => array( 'name', false, _x( 'Name', 'term name' ), $name_orderby_text, 'asc' ),
     199                        'description' => array( 'description', false, __( 'Description' ), __( 'Table ordered by Description.' ) ),
     200                        'slug'        => array( 'slug', false, __( 'Slug' ), __( 'Table ordered by Slug.' ) ),
     201                        'posts'       => array( 'count', false, _x( 'Count', 'Number/count of items' ), __( 'Table ordered by Posts Count.' ) ),
     202                        'links'       => array( 'count', false, __( 'Links' ), __( 'Table ordered by Links.' ) ),
    194203                );
    195204        }
    196205
  • src/wp-admin/includes/class-wp-users-list-table.php

     
    291291         */
    292292        protected function get_sortable_columns() {
    293293                $c = array(
    294                         'username' => 'login',
    295                         'name'     => 'name',
    296                         'email'    => 'email',
     294                        'username' => array( 'login', false, __( 'Username' ), __( 'Table ordered by Username.' ), 'asc' ),
     295                        'name'     => array( 'name', false, __( 'Name' ), __( 'Table ordered by Name.' ) ),
     296                        'email'    => array( 'email', false, __( 'E-mail' ), __( 'Table ordered by E-mail.' ) ),
    297297                );
    298298
    299299                if ( $this->is_site_users )