Ticket #5106: 5106.patch
File 5106.patch, 3.5 KB (added by , 12 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 { 965 965 * @since BuddyPress (1.8) 966 966 */ 967 967 class BP_Group_Member_Query extends BP_User_Query { 968 protected $group_member_ids; 969 968 970 /** 969 971 * Set up action hooks 970 972 * … … class BP_Group_Member_Query extends BP_User_Query { 978 980 $this->query_vars_raw['type'] = 'last_modified'; 979 981 } 980 982 983 // Set the sort order 984 add_action( 'bp_pre_user_query', array( $this, 'set_orderby' ) ); 985 981 986 // Set up our populate_extras method 982 987 add_action( 'bp_user_query_populate_extras', array( $this, 'populate_group_member_extras' ), 10, 2 ); 983 988 } … … class BP_Group_Member_Query extends BP_User_Query { 1028 1033 protected function get_group_member_ids() { 1029 1034 global $wpdb; 1030 1035 1036 if ( is_array( $this->group_member_ids ) ) { 1037 return $this->group_member_ids; 1038 } 1039 1031 1040 $bp = buddypress(); 1032 1041 $sql = array( 1033 1042 'select' => "SELECT user_id FROM {$bp->groups->table_name_members}", … … class BP_Group_Member_Query extends BP_User_Query { 1107 1116 1108 1117 /** LIMIT clause ******************************************************/ 1109 1118 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']}" ); 1111 1120 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 . ")"; 1113 1143 } 1114 1144 1115 1145 /** -
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 { 351 351 $this->assertEquals( array( $u1, $u2, ), $ids ); 352 352 } 353 353 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 } 354 388 }