WordPress.org

Make WordPress Core

Ticket #28673: 28673-featured-grouping-2.diff

File 28673-featured-grouping-2.diff, 3.1 KB (added by tellyworth, 8 years ago)

Featured grouping with translation support; also padding for headers

  • wp-admin/css/list-tables.css

     
    13361336        clear: right;
    13371337}
    13381338
     1339.plugin-group {
     1340        padding-top: 2em;
     1341}
     1342
    13391343/* ms */
    13401344/* Background Color for Site Status */
    13411345.wp-list-table .site-deleted {
  • wp-admin/includes/class-wp-plugin-install-list-table.php

     
    88 * @access private
    99 */
    1010class WP_Plugin_Install_List_Table extends WP_List_Table {
     11       
     12        var $order = 'ASC';
     13        var $orderby = null;
     14        var $groups = array();
    1115
    1216        public function ajax_user_can() {
    1317                return current_user_can('install_plugins');
     
    8589                                break;
    8690
    8791                        case 'featured':
     92                                $args['fields']['group'] = true;
     93                                $this->orderby = 'group';
     94                                // No break!
    8895                        case 'popular':
    8996                        case 'new':
    9097                        case 'beta':
     
    129136                        wp_die( $api->get_error_message() . '</p> <p class="hide-if-no-js"><a href="#" onclick="document.location.reload(); return false;">' . __( 'Try again' ) . '</a>' );
    130137
    131138                $this->items = $api->plugins;
     139               
     140                if ( $this->orderby ) {
     141                        uasort( $this->items, array( $this, '_order_callback' ) );
     142                }
    132143
    133144                $this->set_pagination_args( array(
    134145                        'total_items' => $api->info['results'],
    135146                        'per_page' => $args['per_page'],
    136147                ) );
     148               
     149                if ( isset( $api->info['groups'] ) )
     150                        $this->groups = $api->info['groups'];
    137151        }
    138152
    139153        public function no_items() {
     
    242256                        'description' => __( 'Description' ),
    243257                );
    244258        }
     259       
     260        public function _order_callback( $plugin_a, $plugin_b ) {
    245261
     262                $orderby = $this->orderby;
     263                if ( !isset( $plugin_a->$orderby, $plugin_b->$orderby ) )
     264                        return 0;
     265
     266                $a = $plugin_a->$orderby;
     267                $b = $plugin_b->$orderby;
     268
     269                if ( $a == $b )
     270                        return 0;
     271
     272                if ( 'DESC' == $this->order )
     273                        return ( $a < $b ) ? 1 : -1;
     274                else
     275                        return ( $a < $b ) ? -1 : 1;
     276        }
     277
     278
    246279        public function display_rows() {
    247280                $plugins_allowedtags = array(
    248281                        'a' => array( 'href' => array(),'title' => array(), 'target' => array() ),
     
    258291                        $style[ $column_name ] = in_array( $column_name, $hidden ) ? 'style="display:none;"' : '';
    259292                }
    260293
     294                $group = null;
     295
    261296                foreach ( (array) $this->items as $plugin ) {
    262297                        if ( is_object( $plugin ) )
    263298                                $plugin = (array) $plugin;
    264299
     300                        // Display the group heading if there is one
     301                        if ( isset( $plugin['group'] ) && $plugin['group'] != $group ) {
     302                                if ( isset( $this->groups[ $plugin['group'] ] ) )
     303                                        $group_name = translate( $this->groups[ $plugin['group'] ] ); // Does this need context?
     304                                else
     305                                        $group_name = $plugin['group'];
     306                                echo '<h3 class="plugin-group clear">' . esc_html( $group_name ) . '</h3>';
     307                                echo '<div class="clear"></div>';
     308                                $group = $plugin['group'];
     309                        }
     310                       
    265311                        $title = wp_kses( $plugin['name'], $plugins_allowedtags );
    266312
    267313                        //Remove any HTML from the description.