WordPress.org

Make WordPress Core

Ticket #28673: 28673-featured-grouping.diff

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

Grouping of Featured results

  • 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;
    1114
    1215        public function ajax_user_can() {
    1316                return current_user_can('install_plugins');
     
    8588                                break;
    8689
    8790                        case 'featured':
     91                                $args['fields']['group'] = true;
     92                                $this->orderby = 'group';
     93                                // No break!
    8894                        case 'popular':
    8995                        case 'new':
    9096                        case 'beta':
     
    129135                        wp_die( $api->get_error_message() . '</p> <p class="hide-if-no-js"><a href="#" onclick="document.location.reload(); return false;">' . __( 'Try again' ) . '</a>' );
    130136
    131137                $this->items = $api->plugins;
     138               
     139                if ( $this->orderby ) {
     140                        uasort( $this->items, array( $this, '_order_callback' ) );
     141                }
    132142
    133143                $this->set_pagination_args( array(
    134144                        'total_items' => $api->info['results'],
     
    242252                        'description' => __( 'Description' ),
    243253                );
    244254        }
     255       
     256        public function _order_callback( $plugin_a, $plugin_b ) {
    245257
     258                $orderby = $this->orderby;
     259                if ( !isset( $plugin_a->$orderby, $plugin_b->$orderby ) )
     260                        return 0;
     261
     262                $a = $plugin_a->$orderby;
     263                $b = $plugin_b->$orderby;
     264
     265                if ( $a == $b )
     266                        return 0;
     267
     268                if ( 'DESC' == $this->order )
     269                        return ( $a < $b ) ? 1 : -1;
     270                else
     271                        return ( $a < $b ) ? -1 : 1;
     272        }
     273
     274
    246275        public function display_rows() {
    247276                $plugins_allowedtags = array(
    248277                        'a' => array( 'href' => array(),'title' => array(), 'target' => array() ),
     
    258287                        $style[ $column_name ] = in_array( $column_name, $hidden ) ? 'style="display:none;"' : '';
    259288                }
    260289
     290                $group = null;
     291
    261292                foreach ( (array) $this->items as $plugin ) {
    262293                        if ( is_object( $plugin ) )
    263294                                $plugin = (array) $plugin;
    264295
     296                        // Display the group heading if there is one
     297                        if ( isset( $plugin['group'] ) && $plugin['group'] != $group ) {
     298                                // FIXME: replace ucwords with some i18n magic
     299                                echo '<h3 class="plugin-group clear">' . esc_html( ucwords( $plugin['group'] ) ) . '</h3>';
     300                                echo '<div class="clear"></div>';
     301                                $group = $plugin['group'];
     302                        }
     303                       
    265304                        $title = wp_kses( $plugin['name'], $plugins_allowedtags );
    266305
    267306                        //Remove any HTML from the description.