Skip to:
Content

BuddyPress.org

Ticket #5106: 5106.patch

File 5106.patch, 3.5 KB (added by boonebgorges, 8 years ago)
  • bp-groups/bp-groups-classes.php

    diff --git bp-groups/bp-groups-classes.php bp-groups/bp-groups-classes.php
    index 401c3a3..09f26d4 100644
    class BP_Groups_Group { 
    965965 * @since BuddyPress (1.8)
    966966 */
    967967class BP_Group_Member_Query extends BP_User_Query {
     968        protected $group_member_ids;
     969
    968970        /**
    969971         * Set up action hooks
    970972         *
    class BP_Group_Member_Query extends BP_User_Query { 
    978980                        $this->query_vars_raw['type'] = 'last_modified';
    979981                }
    980982
     983                // Set the sort order
     984                add_action( 'bp_pre_user_query', array( $this, 'set_orderby' ) );
     985
    981986                // Set up our populate_extras method
    982987                add_action( 'bp_user_query_populate_extras', array( $this, 'populate_group_member_extras' ), 10, 2 );
    983988        }
    class BP_Group_Member_Query extends BP_User_Query { 
    10281033        protected function get_group_member_ids() {
    10291034                global $wpdb;
    10301035
     1036                if ( is_array( $this->group_member_ids ) ) {
     1037                        return $this->group_member_ids;
     1038                }
     1039
    10311040                $bp  = buddypress();
    10321041                $sql = array(
    10331042                        'select'  => "SELECT user_id FROM {$bp->groups->table_name_members}",
    class BP_Group_Member_Query extends BP_User_Query { 
    11071116
    11081117                /** LIMIT clause ******************************************************/
    11091118
    1110                 $ids = $wpdb->get_col( "{$sql['select']} {$sql['where']} {$sql['orderby']} {$sql['order']} {$sql['limit']}" );
     1119                $this->group_member_ids = $wpdb->get_col( "{$sql['select']} {$sql['where']} {$sql['orderby']} {$sql['order']} {$sql['limit']}" );
    11111120
    1112                 return $ids;
     1121                return $this->group_member_ids;
     1122        }
     1123
     1124        /**
     1125         * Tell BP_User_Query to order by the order of our query results
     1126         *
     1127         * This implementation assumes the 'last_modified' sort order
     1128         * hardcoded in BP_Group_Member_Query::get_group_member_ids().
     1129         *
     1130         * @param object $query BP_User_Query object
     1131         */
     1132        public function set_orderby( $query ) {
     1133                $gm_ids = $this->get_group_member_ids();
     1134                if ( empty( $gm_ids ) ) {
     1135                        $gm_ids = array( 0 );
     1136                }
     1137
     1138                // The first param in the FIELD() clause is the sort column id
     1139                $gm_ids = array_merge( array( 'u.id' ), wp_parse_id_list( $gm_ids ) );
     1140                $gm_ids_sql = implode( ',', $gm_ids );
     1141
     1142                $query->uid_clauses['orderby'] = "ORDER BY FIELD(" . $gm_ids_sql . ")";
    11131143        }
    11141144
    11151145        /**
  • tests/testcases/groups/template.php

    diff --git tests/testcases/groups/template.php tests/testcases/groups/template.php
    index ff617a6..b484600 100644
    class BP_Tests_Groups_Template extends BP_UnitTestCase { 
    351351                $this->assertEquals( array( $u1, $u2, ), $ids );
    352352        }
    353353
     354        /**
     355         * Default sort order should be the joined date
     356         *
     357         * @tickett BP5106
     358         * @group bp_group_has_members
     359         */
     360        public function test_bp_group_has_members_default_order() {
     361                $u1 = $this->create_user( array(
     362                        'last_activity' => gmdate( 'Y-m-d H:i:s', time() - 60 ),
     363                ) );
     364                $u2 = $this->create_user( array(
     365                        'last_activity' => gmdate( 'Y-m-d H:i:s', time() - 600 ),
     366                ) );
     367
     368                $g = $this->factory->group->create();
     369
     370                $this->add_user_to_group( $u1, $g, array(
     371                        'date_modified' => gmdate( 'Y-m-d H:i:s', time() - 6000 ),
     372                ) );
     373
     374                $this->add_user_to_group( $u2, $g, array(
     375                        'date_modified' => gmdate( 'Y-m-d H:i:s', time() - 3000 ),
     376                ) );
     377
     378                global $members_template;
     379                bp_group_has_members( array(
     380                        'group_id' => $g,
     381                        'exclude_banned' => 0,
     382                        'exclude_admins_mods' => false,
     383                ) );
     384
     385                $ids = wp_parse_id_list( wp_list_pluck( $members_template->members, 'user_id' ) );
     386                $this->assertEquals( array( $u2, $u1, ), $ids );
     387        }
    354388}