function get_random($limit = null, $page = null, $user_id = 0, $search_terms = false, $populate_extras = true, $exclude = false) { global $wpdb, $bp; $pag_sql = $hidden_sql = $search_sql = $exclude_sql = ''; if (!empty($limit) && !empty($page)) { $pag_sql = $wpdb->prepare(" LIMIT %d, %d", intval(($page - 1) * $limit), intval($limit)); } if (!is_user_logged_in() || !bp_current_user_can('bp_moderate') && $user_id != bp_loggedin_user_id()) { $hidden_sql = "AND g.status != 'hidden'"; } if (!empty($search_terms)) { $search_terms = like_escape($wpdb->escape($search_terms)); $search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )"; } if (!empty($exclude)) { $exclude = $wpdb->escape($exclude); $exclude_sql = " AND g.id NOT IN ({$exclude})"; } if (!empty($user_id)) { $user_id = $wpdb->escape($user_id); $paged_groups = $wpdb->get_results("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' {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql} ORDER BY rand() {$pag_sql}"); $total_groups = $wpdb->get_var("SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m LEFT JOIN {$bp->groups->table_name_groupmeta} gm ON m.group_id = gm.group_id INNER JOIN {$bp->groups->table_name} g ON m.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql}"); } else { $paged_groups = $wpdb->get_results("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} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' {$hidden_sql} {$search_sql} {$exclude_sql} ORDER BY rand() {$pag_sql}"); $total_groups = $wpdb->get_var("SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm INNER JOIN {$bp->groups->table_name} g ON gm.group_id = g.id WHERE gm.meta_key = 'last_activity'{$hidden_sql} {$search_sql} {$exclude_sql}"); } if (!empty($populate_extras)) { foreach ((array) $paged_groups as $group) { $group_ids[] = $group->id; } $group_ids = $wpdb->escape(join(',', (array) $group_ids)); $paged_groups = BP_Groups_Group::get_group_extras($paged_groups, $group_ids, 'newest'); } return array('groups' => $paged_groups, 'total' => $total_groups); }
function gtags_get_groups_by_tag($limit = null, $page = null, $user_id = false, $search_terms = false, $group_tag = null) { global $wpdb, $bp; $hidden_sql = $search_sql = $tag_sql = $pag_sql = ''; if ($limit && $page) { $pag_sql = $wpdb->prepare(" LIMIT %d, %d", intval(($page - 1) * $limit), intval($limit)); } if (!is_user_logged_in()) { $hidden_sql = "AND g.status != 'hidden'"; } if ($search_terms) { $search_terms = like_escape($wpdb->escape($search_terms)); $search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )"; } if ($group_tag) { $group_tag = like_escape($wpdb->escape($group_tag)); $group_tag = stripslashes($group_tag); $tag_sql = " AND ( gm3.meta_value LIKE '%%{$group_tag}%%' )"; } $paged_groups = $wpdb->get_results("SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity, gm3.meta_value as gtags_group_tags FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND gm3.meta_key = 'gtags_group_tags' {$hidden_sql} {$search_sql} {$tag_sql} ORDER BY CONVERT(gm1.meta_value, SIGNED) DESC {$pag_sql}"); // this is commented out because it doesn't really work due to the over-inclusive issue. //$total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND gm3.meta_key = 'gtags_group_tags' {$hidden_sql} {$search_sql} {$tag_sql}" ); // loop through results and return only exact matches in comma separated list. $paged_groups2 = array(); foreach ((array) $paged_groups as $group) { $items = explode(",", $group->gtags_group_tags); $match = false; foreach ($items as $item) { if (trim(strtolower($item)) == strtolower($group_tag)) { $match = true; } } if ($match == true) { $paged_groups2[] = $group; } } $total_groups = count($paged_groups2); // in place of the commented out code above foreach ((array) $paged_groups2 as $group) { $group_ids[] = $group->id; } $group_ids = $wpdb->escape(join(',', (array) $group_ids)); $paged_groups2 = BP_Groups_Group::get_group_extras(&$paged_groups2, $group_ids, 'popular'); return array('groups' => $paged_groups2, 'total' => $total_groups); }
/** * @group get_group_extras */ public function test_get_group_extras_banned() { $u = $this->factory->user->create(); $g = $this->factory->group->create(); $member = new BP_Groups_Member(); $member->group_id = $g; $member->user_id = $u; $member->date_modified = bp_core_current_time(); $member->is_banned = true; $member->save(); $paged_groups = array(); $paged_groups[] = new stdClass(); $paged_groups[0]->id = $g; $group_ids = array($g); $expected = array(); foreach ($paged_groups as $key => $value) { $expected[$key] = new stdClass(); $expected[$key]->id = $value->id; $expected[$key]->is_member = '0'; $expected[$key]->is_invited = '0'; $expected[$key]->is_pending = '0'; $expected[$key]->is_banned = true; } $old_user = get_current_user_id(); $this->set_current_user($u); $this->assertEquals($expected, BP_Groups_Group::get_group_extras($paged_groups, $group_ids)); $this->set_current_user($old_user); }
/** * Not declared as static in parent, but called statically */ function get_group_extras($paged_groups, $group_ids, $type = false) { foreach ($paged_groups as $key => $group) { if (!isset($group->path)) { $paged_groups[$key]->path = self::get_path($group->id); $paged_groups[$key]->slug = $paged_groups[$key]->path; } } if (empty($group_ids)) { return $paged_groups; } return parent::get_group_extras($paged_groups, $group_ids, $type); }