Ticket #2639: 2639.patch
| File 2639.patch, 11.5 KB (added by , 16 years ago) |
|---|
-
bp-themes/bp-default/groups/single/members.php
28 28 29 29 <?php do_action( 'bp_group_members_list_item' ) ?> 30 30 31 <?php if ( function_exists( 'friends_install' ) ) : ?>31 <?php if ( bp_is_active( 'friends' ) ) : ?> 32 32 33 33 <div class="action"> 34 34 <?php bp_add_friend_button( bp_get_group_member_id(), bp_get_group_member_is_friend() ) ?> -
bp-core/bp-core-classes.php
111 111 112 112 $sql = array(); 113 113 114 $sql['select_main'] = "SELECT u.ID as id, u.user_registered, u.user_nicename, u.user_login, u.display_name, u.user_email";114 $sql['select_main'] = "SELECT DISTINCT u.ID as id, u.user_registered, u.user_nicename, u.user_login, u.display_name, u.user_email"; 115 115 116 116 if ( 'active' == $type || 'online' == $type ) 117 117 $sql['select_active'] = ", um.meta_value as last_activity"; … … 123 123 $sql['select_alpha'] = ", pd.value as fullname"; 124 124 125 125 $sql['from'] = "FROM " . CUSTOM_USER_TABLE . " u LEFT JOIN " . CUSTOM_USER_META_TABLE . " um ON um.user_id = u.ID"; 126 127 $sql['where'] = 'WHERE ' . bp_core_get_status_sql( 'u.' ); 128 126 127 if ( $search_terms && bp_is_active( 'xprofile' ) || 'alphabetical' == $type ) 128 $sql['from'] .= " LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id"; 129 129 130 if ( 'active' == $type || 'online' == $type ) 130 131 $sql['where_active'] = "AND um.meta_key = 'last_activity'"; 131 132 … … 138 139 if ( 'alphabetical' == $type ) 139 140 $sql['where_alpha'] = "AND pd.field_id = 1"; 140 141 141 if ( $user_id && function_exists( 'friends_install' ) ) {142 if ( $user_id && bp_is_active( 'friends' ) ) { 142 143 $friend_ids = friends_get_friend_user_ids( $user_id ); 143 144 $friend_ids = $wpdb->escape( implode( ',', (array)$friend_ids ) ); 144 145 -
bp-groups.php
136 136 bp_core_new_subnav_item( array( 'name' => sprintf( __( 'Members (%s)', 'buddypress' ), number_format( $bp->groups->current_group->total_member_count ) ), 'slug' => 'members', 'parent_url' => $group_link, 'parent_slug' => $bp->groups->slug, 'screen_function' => 'groups_screen_group_members', 'position' => 60, 'user_has_access' => $bp->groups->current_group->user_has_access, 'item_css_id' => 'members' ) ); 137 137 138 138 if ( is_user_logged_in() && groups_is_user_member( $bp->loggedin_user->id, $bp->groups->current_group->id ) ) { 139 if ( function_exists('friends_install') )139 if ( bp_is_active('friends') ) 140 140 bp_core_new_subnav_item( array( 'name' => __( 'Send Invites', 'buddypress' ), 'slug' => 'send-invites', 'parent_url' => $group_link, 'parent_slug' => $bp->groups->slug, 'screen_function' => 'groups_screen_group_invite', 'item_css_id' => 'invite', 'position' => 70, 'user_has_access' => $bp->groups->current_group->user_has_access ) ); 141 141 } 142 142 } … … 1654 1654 'type' => 'active', // active, newest, alphabetical, random, popular, most-forum-topics or most-forum-posts 1655 1655 'user_id' => false, // Pass a user_id to limit to only groups that this user is a member of 1656 1656 'include' => false, // Only include these specific groups (group_ids) 1657 'exclude' => false, // Do not include these specific groups (group_ids) 1658 1657 1659 'search_terms' => false, // Limit to groups that match these search terms 1658 1660 1659 1661 'per_page' => 20, // The number of results to return per page … … 1664 1666 $params = wp_parse_args( $args, $defaults ); 1665 1667 extract( $params, EXTR_SKIP ); 1666 1668 1667 $groups = BP_Groups_Group::get( $type, $per_page, $page, $user_id, $search_terms, $include, $populate_extras );1669 $groups = BP_Groups_Group::get( $type, $per_page, $page, $user_id, $search_terms, $include, $populate_extras, $exclude ); 1668 1670 1669 1671 return apply_filters( 'groups_get_groups', $groups, &$params ); 1670 1672 } … … 1995 1997 1996 1998 /*** Group Invitations *********************************************************/ 1997 1999 1998 function groups_get_invites_for_user( $user_id = false, $limit = false, $page = false ) {2000 function groups_get_invites_for_user( $user_id = false, $limit = false, $page = false, $exclude = false ) { 1999 2001 global $bp; 2000 2002 2001 2003 if ( !$user_id ) 2002 2004 $user_id = $bp->loggedin_user->id; 2003 2005 2004 return BP_Groups_Member::get_invites( $user_id, $limit, $page );2006 return BP_Groups_Member::get_invites( $user_id, $limit, $page, $exclude ); 2005 2007 } 2006 2008 2007 2009 function groups_invite_user( $args = '' ) { -
bp-groups/bp-groups-classes.php
255 255 return array( 'requests' => $paged_requests, 'total' => $total_requests ); 256 256 } 257 257 258 function get( $type = 'newest', $per_page = null, $page = null, $user_id = false, $search_terms = false, $include = false, $populate_extras = true ) {258 function get( $type = 'newest', $per_page = null, $page = null, $user_id = false, $search_terms = false, $include = false, $populate_extras = true, $exclude = false ) { 259 259 global $wpdb, $bp; 260 260 261 261 $sql = array(); … … 288 288 $include = $wpdb->escape( $include ); 289 289 $sql['include'] = " AND g.id IN ({$include})"; 290 290 } 291 292 if ( !empty( $exclude ) ) { 293 $exclude = $wpdb->escape( $exclude ); 294 $sql['exclude'] = " AND g.id NOT IN ({$exclude})"; 295 } 291 296 292 297 switch ( $type ) { 293 298 case 'newest': default: … … 327 332 if ( !empty( $user_id ) ) 328 333 $total_sql['where'][] = "m.group_id = g.id AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0"; 329 334 335 if ( !empty( $exclude ) ) { 336 $exclude = $wpdb->escape( $exclude ); 337 $total_sql['where'][] = " g.id NOT IN ({$exclude})"; 338 } 339 330 340 $t_sql = $total_sql['select']; 331 341 332 342 if ( !empty( $total_sql['where'] ) ) … … 781 791 } 782 792 } 783 793 784 function get_invites( $user_id, $limit = false, $page = false ) {794 function get_invites( $user_id, $limit = false, $page = false, $exclude = false ) { 785 795 global $wpdb, $bp; 786 796 787 797 if ( $limit && $page ) 788 798 $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 799 800 if ( $exclude ) 801 $exclude_sql = $wpdb->prepare( " AND g.id NOT IN (%s)", $exclude ); 789 802 790 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND m.is_confirmed = 0 AND m.inviter_id != 0 AND m.invite_sent = 1 AND m.user_id = %d ORDER BY m.date_modified ASC {$pag_sql}", $user_id ) );791 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND m.is_confirmed = 0 AND m.inviter_id != 0 AND m.invite_sent = 1 AND m.user_id = %d ORDER BY date_modified ASC", $user_id ) );803 $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND m.is_confirmed = 0 AND m.inviter_id != 0 AND m.invite_sent = 1 AND m.user_id = %d {$exclude_sql} ORDER BY m.date_modified ASC {$pag_sql}", $user_id ) ); 804 $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND m.is_confirmed = 0 AND m.inviter_id != 0 AND m.invite_sent = 1 AND m.user_id = %d {$exclude_sql} ORDER BY date_modified ASC", $user_id ) ); 792 805 793 806 return array( 'groups' => $paged_groups, 'total' => $total_groups ); 794 807 } … … 947 960 foreach ( (array)$members as $user ) $user_ids[] = $user->user_id; 948 961 $user_ids = $wpdb->escape( join( ',', (array)$user_ids ) ); 949 962 950 if ( function_exists( 'friends_install' ) ) {963 if ( bp_is_active( 'friends' ) ) { 951 964 $friend_status = $wpdb->get_results( $wpdb->prepare( "SELECT initiator_user_id, friend_user_id, is_confirmed FROM {$bp->friends->table_name} WHERE (initiator_user_id = %d AND friend_user_id IN ( {$user_ids} ) ) OR (initiator_user_id IN ( {$user_ids} ) AND friend_user_id = %d )", $bp->loggedin_user->id, $bp->loggedin_user->id ) ); 952 965 for ( $i = 0; $i < count( $members ); $i++ ) { 953 966 foreach ( (array)$friend_status as $status ) { -
bp-groups/bp-groups-templatetags.php
19 19 20 20 var $single_group = false; 21 21 22 function bp_groups_template( $user_id, $type, $page, $per_page, $max, $slug, $search_terms, $include, $populate_extras ) {22 function bp_groups_template( $user_id, $type, $page, $per_page, $max, $slug, $search_terms, $include, $populate_extras, $exclude ) { 23 23 global $bp; 24 24 25 25 $this->pag_page = isset( $_REQUEST['grpage'] ) ? intval( $_REQUEST['grpage'] ) : $page; 26 26 $this->pag_num = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page; 27 27 28 28 if ( 'invites' == $type ) { 29 $this->groups = groups_get_invites_for_user( $user_id, $this->pag_num, $this->pag_page );29 $this->groups = groups_get_invites_for_user( $user_id, $this->pag_num, $this->pag_page, $exclude ); 30 30 } else if ( 'single-group' == $type ) { 31 31 $group = new stdClass; 32 32 $group->group_id = BP_Groups_Group::get_id_from_slug($slug); 33 33 $this->groups = array( $group ); 34 34 } else { 35 $this->groups = groups_get_groups( array( 'type' => $type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'search_terms' => $search_terms, 'include' => $include, ' populate_extras' => $populate_extras ) );35 $this->groups = groups_get_groups( array( 'type' => $type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'search_terms' => $search_terms, 'include' => $include, 'exclude' => $exclude, 'populate_extras' => $populate_extras ) ); 36 36 } 37 37 38 38 if ( 'invites' == $type ) { … … 172 172 'slug' => $slug, // Pass a group slug to only return that group 173 173 'search_terms' => $search_terms, // Pass search terms to return only matching groups 174 174 'include' => false, // Pass comma separated list of group ID's to return only these groups 175 'exclude' => false, // Pass comma separated list of group ID's to exclude these groups 175 176 176 177 'populate_extras' => true // Get extra meta - is_member, is_banned 177 178 ); … … 179 180 $r = wp_parse_args( $args, $defaults ); 180 181 extract( $r ); 181 182 182 $groups_template = new BP_Groups_Template( (int)$user_id, $type, (int)$page, (int)$per_page, (int)$max, $slug, $search_terms, $include, (bool)$populate_extras );183 $groups_template = new BP_Groups_Template( (int)$user_id, $type, (int)$page, (int)$per_page, (int)$max, $slug, $search_terms, $include, (bool)$populate_extras, $exclude ); 183 184 return apply_filters( 'bp_has_groups', $groups_template->has_groups(), &$groups_template ); 184 185 } 185 186